Menggunakan Arduino Nano dan transformator arus (CT), saya mencoba merasakan arus yang mengalir melalui garis 120 V 60 Hz.
Sirkuit
CT output 0-1 V
sesuai dengan spesifikasinya. Output ini bias AREF/2
= 2,5 V.
analogRead
Nilai-nilai
Sumbu x mewakili nomor indeks sampel ADC, sedangkan sumbu y mewakili nilai ADC (0-1024). Kecepatan pengambilan sampel sekitar 9 kHz. Perbedaan puncak-ke-puncak adalah sekitar 1026 sampel.
Apakah bentuk gelombang ini seperti yang Anda harapkan dari CT? Mengapa ada daerah di mana nilainya datar, dan bukannya terus berubah?
Lebih jauh, jika kita melihat bagian kurva dari plot, mengapa Arduino membaca nilai di atas 512
dan di bawah secara 512
bergantian? Bunyinya nilai di atas 512
, kemudian nilai di bawah 512
, lalu nilai di atas 512
dan seterusnya.
Waktu yang dibutuhkan untuk analogRead
diukur menjadi 110 mikrodetik untuk pengaturan saya dan ada 1026 sampel di antara puncak-puncak gelombang. Itu berarti akan ada sekitar 9 puncak dalam 1 detik, meskipun saya akan mengharapkan 60 puncak karena kami merasakan garis 60 Hz. Apa yang Anda dapatkan dari ini? Ada kapasitor, C1
di sirkuit, apakah ada hubungannya dengan ini?
Apakah nilai analogRead ini cocok untuk digunakan untuk menghitung tegangan RMS, dan karenanya arus RMS yang melewati kawat dirasakan? Tujuan akhir dari ini adalah untuk menghitung penggunaan daya setelah menentukan arus RMS yang mengalir melalui kawat.
Sketsa digunakan untuk mendapatkan nilai untuk plot
void setup() {
Serial.begin(9600);
}
void loop() {
double sensorValue = analogRead(1);
Serial.println(sensorValue)
}
analogRead
Poin data aktual di wilayah benjolan
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
Plot nilai analogRead
Nilai analogRead sekarang disimpan dalam buffer sebelum dikirim melalui Serial. Sekarang ada 55 titik data ADC yang membentuk 1 periode. Mempertimbangkan waktu analogRead adalah 110 µs, setiap siklus membutuhkan 6.05 ms, memberikan kita frekuensi 165 Hz! Apa yang salah?
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()
dan menemukan itu menjadi 110 mikrodetik. Memperbarui pertanyaan.Jawaban:
Mengenai pengukuran Anda, saya benar-benar akan mengabaikan set pertama dengan Serial.println () di loop. Saya akan berharap waktu ini tidak dapat diandalkan.
Set data kedua yang Anda tangkap dalam buffer terlihat benar, tetapi Estimasi Frekuensi Anda mungkin salah. Saya akan membalikkan Output Digital pada setiap iterasi loop. Anda dapat mengukur frekuensi dengan Multimeter dan laju sampel ADC Anda akan menjadi dua kali lipat nilainya.
Untuk catu daya PC atau laptop, itu adalah bentuk gelombang yang cukup umum saat ini.
Tanpa Koreksi Faktor Daya yang efektif, sinyal saat ini yang ditunjukkan di bawah ini akan sangat tipikal (sumber: http://www.nlvocables.com/blog/?p=300 )
Anda perlu menghitung nilai RMS dan akan lebih baik jika menyaring sinyal.
Berikut adalah instruksional yang saya tulis tentang cara membuat dan mengkodekan Monitor Listrik berbasis Arduino Yun dengan Cloud Support / Temboo dan Google Drive. Seharusnya bisa membantu Anda.
sumber
jika Anda mengukur beban resistif saya akan mengatakan bahwa resistor beban yang Anda pilih salah, ada beberapa CT murah di ebay (SCT-013-xxx) yang memiliki versi dengan dan tanpa resistor beban, ini bekerja dengan baik untuk harganya tetapi Anda harus membaca lembar data. SCT-013-000 membutuhkan resistor 20R untuk mendapatkan 1V dengan beban 100A, jika resistor ini salah Anda bisa mendapatkan bentuk gelombang yang sangat terdistorsi saat mengukur arus yang lebih tinggi (mirip dengan yang Anda berikan), Anda akan mengharapkan sinyal untuk mendistorsi lebih banyak nilai tahanan beban tetapi ini tidak terjadi pada CT.
sumber