En utilisant un Arduino Nano et un transformateur de courant (CT), j'essaie de détecter le courant qui traverse une ligne 120 V 60 Hz.
Circuit
Sorties CT 0-1 V
selon ses spécifications. Cette sortie est polarisée AREF/2
= 2,5 V.
analogRead
Valeurs
L'axe x représente le numéro d'index de l'échantillon ADC, tandis que l'axe y représente la valeur ADC (0-1024). La fréquence d'échantillonnage est d'environ 9 kHz. La différence de crête à crête est d'environ 1026 échantillons.
Cette forme d'onde correspond-elle à ce que vous attendez d'un CT? Pourquoi y a-t-il des régions où les valeurs sont plates, plutôt que de varier continuellement?
De plus, si nous regardons la partie courbe de l'intrigue, pourquoi Arduino lit- 512
il 512
alternativement les valeurs au - dessus et en dessous ? Il lit une valeur au 512
- dessus , puis une valeur en dessous 512
, puis une valeur au 512
- dessus et ainsi de suite.
Le temps pris pour un a analogRead
été mesuré à 110 microsecondes pour ma configuration et il y a 1026 échantillons entre les pics de forme d'onde. Cela signifie qu'il y aura environ 9 pics en 1 seconde, bien que je m'attende à 60 pics car nous détectons une ligne à 60 Hz. Que pensez-vous de cela? Il y a un condensateur, C1
dans le circuit, cela aurait-il quelque chose à voir avec ça?
Ces valeurs analogRead peuvent-elles être utilisées pour calculer la tension RMS, et donc le courant RMS traversant le fil à détecter? L'objectif final de ceci est de calculer la consommation d'énergie après avoir déterminé le courant RMS traversant le fil.
Esquisse utilisée pour obtenir les valeurs du tracé
void setup() {
Serial.begin(9600);
}
void loop() {
double sensorValue = analogRead(1);
Serial.println(sensorValue)
}
analogRead
Points de données réels dans les régions de relief
487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507
Tracé des valeurs analogRead
Les valeurs analogRead sont maintenant stockées dans un tampon avant d'être transmises sur Serial. Il y a maintenant 55 points de données ADC constituant 1 période. Étant donné que le temps de lecture analogique est de 110 µs, chaque cycle prend 6,05 ms, ce qui nous donne une fréquence de 165 Hz! Qu'est-ce qui a mal tourné?
void loop() {
double sensorValue = analogRead(1);
char buf[32];
dtostrf(sensorValue, 8, 2, buf);
value = buf;
if (stop == 0) {
if (i < 10000) {
message += ',';
message += value;
i++;
}
else {
stop = 1;
Serial.println(message);
}
}
}
analogRead()
et je l'ai trouvé à 110 microsecondes. Mis à jour la question.