bonjour, je veux mesurer le courant délivrer par un panneau solaire de Imax= 3A, j'ai utilisé un capteur ACS712-20A , mais sur le moniteur série le courant est 0A alors que le multimètre affiche des valeurs qui varient entre 0 et 2.8A. je vais envoyer le code Arduino pour que vous puissiez m'aider à trouver la cause du problème merci.
const int pinAC712 = A1;
const float sensibivity = 0.100;
float Current=0;
void setup() {
Serial.begin(9600);
pinMode(pinAC712, INPUT);
}
void loop() {
delay(1000);
// Mesurer le courant Serial.print(Current);
uint8_t sensorValue = analogRead(pinAC712);
float Value = sensorValue * 5 / 1023.0;
Current = (Value - 2.5) / sensibivity;
// Écrire les données sur le moniteur série
Serial.print(Current);
Serial.println(" ");
}
ce capteur se branche en série avec la charge sur le circuit alternatif ➜ est-ce branché comme cela ? (un petit schéma serait bien)
Le module propose en sortie une tension continue proportionnelle au courant à raison de 100mV par ampère ➜ Vous pouvez donc lire cette tension sur une entrée analogique de votre Arduino et obtenir une valeur de courant (A) . vous faites sensorValue * 5 / 1023 ➜ il faudrait tenir compte du 0.1V/A
Il est important de faire une lecture a vide (sans courant) pour obtenir la valeur de calibration Vref du module (qui devrait être Vcc/2 soit 2.5V).
un analogRead() n'a pas besoin de déclarer la pin en INPUT. On ne s'en sert que lorsque l'ont veut travailler en tout ou rien (digitalRead).
le uint16_t n'est pas une bonne idée dans l'absolu car bien que analogRead ne retourne que des valeurs positives, la fonction est définie comme retournant un int donc ceci serait mieux
int sensorValue = analogRead(pinAC712);
float Value = sensorValue * 5.0 / 1023.0;
et on peut faire juste d'ailleurs :
float Value = analogRead(pinAC712) * 5.0 / 1023.0;
Maintenant, il faut faire ça dans le setup en faisant la moyenne sur une vingtaine d'acquisition.
Conserver le "Vref" et l'utiliser dans cette expression à la place de 2.5
d'accord j'ai compilé le code et voilà ce que sa donne
-0.39 A
-0.44 A
-0.49 A
-0.29 A
-0.39 A
-0.54 A
-0.34 A
-0.49 A
-0.44 A
-0.49 A
-0.44 A
-0.49 A
-0.59 A
-0.44 A
-0.39 A
-0.44 A
-0.54 A
-0.39 A
-0.49 A
-0.39 A
-0.44 A
-0.49 A
-0.54 A
-0.39 A
-0.49 A
-0.54 A
-0.39 A
-0.54 A
-0.39 A
-0.49 A
-0.34 A
-0.44 A
-0.49 A
-0.59 A
-0.29 A
-0.54 A
oui c'est quasiment 0A donc - la variation provient du fait que votre lecture sans courant n'est pas stable (la valeur brute varie de 505 à 509 donc en prenant 507 forcément on est parfois au dessus, parfois en dessous)
Ce serait bien de réduire la longueur des fils entre le module ACS712 et l'Arduino pour réduire le bruit autant que possible.
Les cartes Arduino ne sont pas réputées pour la qualité de leur acquisition analogique. Je pense qu'une moyenne sur quelques échantillons donnerait de meilleurs résultats.
A noter, la datasheet indique aussi 11mV de bruit crête-crête sur la mesure. Ce qui rapporté à l'ADC de l'ATmega fait 2 LSB à quoi il faut ajouter le bruit propre à l'ADC tel qu'il est implanté sur la carte. Donc le bruit constaté n'est pas très choquant en soit.