Usando um Arduino Nano e um transformador de corrente (CT), estou tentando detectar a corrente fluindo através de uma linha de 120 V 60 Hz.
O circuito
Saídas CT de 0-1 V
acordo com suas especificações. Esta saída é enviesada AREF/2
= 2,5 V.
analogRead
Valores
O eixo x representa o número do índice da amostra ADC, enquanto o eixo y representa o valor ADC (0-1024). A taxa de amostragem é de cerca de 9 kHz. A diferença pico a pico é de cerca de 1026 amostras.
Essa forma de onda é o que você esperaria do CT? Por que existem regiões onde os valores são fixos, em vez de variar continuamente?
Além disso, se observarmos a parte da curva do gráfico, por que o Arduino está lendo os valores acima 512
e abaixo 512
alternadamente? Ele lê um valor acima 512
, depois um valor abaixo 512
, depois um valor acima 512
e assim por diante.
O tempo gasto para um analogRead
foi medido em 110 microssegundos para minha configuração e existem 1026 amostras entre os picos da forma de onda. Isso significa que haverá cerca de 9 picos em 1 segundo, embora eu esperasse 60 picos, pois estamos sentindo uma linha de 60 Hz. O que você faz disso? Existe um capacitor, C1
no circuito, isso tem alguma coisa a ver com isso?
Esses valores analogRead são adequados para o cálculo da tensão RMS e, portanto, a corrente RMS que passa pelo fio sendo detectada? O objetivo final disso é calcular o uso de energia após determinar a corrente RMS que flui através do fio.
Esboço usado para obter valores para plotagem
void setup() {
Serial.begin(9600);
}
void loop() {
double sensorValue = analogRead(1);
Serial.println(sensorValue)
}
analogRead
Pontos de dados reais nas regiões de relevo
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
Gráfico de valores de leitura analógica
Os valores analogRead agora são armazenados em um buffer antes de serem transmitidos pelo Serial. Atualmente, existem 55 pontos de dados da ADC que compõem um período. Considerando que o tempo de leitura analógico é de 110 µs, cada ciclo leva 6,05 ms, fornecendo uma frequência de 165 Hz! O que pode ter dado errado?
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()
e constatamos que são 110 microssegundos. Atualizado a pergunta.