Pengukuran Arus AC Akurat dengan Sensor ACS712 pada Arduino
Komponen dan Perlengkapan
Arduino UNO — 1 unit
Layar OLED i²c 128x32 — 1 unit
Sensor ACS712 30A — 1 unit
Layar LCD 16x2 i²c — 1 unit
Tentang Proyek
HATI-HATI JIKA ANDA MENGGUNAKAN JALUR LISTRIK
Halo, dan selamat datang di tutorial lain, kali ini tentang pengukuran Arus Bolak-balik (AC), menggunakan ACS712 Saya menggunakan versi 30Amps yang merupakan ACS712 30A, dan papan Arduino Uno yang indah, saya mencoba menambahkan layar OLED namun sayangnya akhirnya saya memecahkannya saat merekam tutorial jadi saya beralih ke LCD, tetapi di bawah Anda akan menemukan kabel dan kode untuk kedua versi.
Dan dengan "AC apa pun..." saya berarti kita akan melihat kode/perpustakaan yang bekerja untuk semua jenis sinyal bukan hanya gelombang sinus, dan Ammeter kami akan dapat menghitung TRUE ROOT MEAN SQUARE. Dan perhatikan bahwa sensor menggunakan Efek Hall (produksi selisih tegangan di seluruh konduktor listrik, melintasi arus listrik dalam konduktor dan terhadap medan magnet yang tegak lurus terhadap arus)
Anda dapat menggabungkan proyek ini dengan ini: Pengukuran Tegangan AC Mudah menggunakan Arduino dan ZMPT101B
Uji akan dilakukan pada bola lampu pijar, dikontrol oleh pemedam cahaya dalam seri dengan multimeter referensi dan modul sensor arus ACS712.
Ini rencanya:
Pertama kita perlu menghubungkan modul kami dengan papan Arduino dan memeriksa bentuk sinyal ketika pemedam NYALA – Siklus Penuh – Setengah Siklus.
Kemudian kita akan memeriksa kode sederhana yang tidak memerlukan perpustakaan apa pun, tetapi hanya bekerja dengan sinyal gelombang sinus (akan diuji).
Setelah itu kita akan melihat kode yang akan mengukur TRMS dari AC, dan menggunakan LCD.
Bagian
Perhatikan saat memilih ACS712, jangan mencoba bermain aman seperti yang saya lakukan (dengan membeli versi 30Amps), ini hanya akan memberikan fluktuasi besar saat Anda mencoba menggunakannya untuk penggunaan domestik atau aplikasi arus kecil, jadi di sini untuk saya versi 5A atau 10A sudah cukup. Juga perhatikan bahwa 30A atau 20A … akan mempengaruhi kalibrasi Anda juga, tetapi dijelaskan cara mengkalibrasi dalam video dan komentar kode.
Ini adalah bagian yang saya gunakan, Anda dapat mengganti UNO dengan papan kompatibel apa pun, atau LCD i²c dengan OLED atau layar apa pun yang Anda sukai.
Uji 1
Kabeldankode
Kabel untuk uji 1 dapat ditemukan di bawah (Kabel 1), bersama dengan kode (Kode 1).
Hasil
Unggah kode dan jalankan serial plotter, Anda seharusnya dapat melihat sinyal seperti gelombang sinus, garis merah menunjukkan ketika saya menurunkan pemedam dan arus mulai memiliki bentuk yang biasanya Anda temukan di triac.
Uji 2
Sekarang jika Anda ingin mengukur arus menggunakan kode di atas saja, Anda akan mendapatkan nilai sekitar 512 – 511, mereka tidak mencerminkan nilai RMS sama sekali. Jadi untuk mengukur nilai RMS sinyal kita akan menjaga kabel yang sama seperti di atas tetapi sekarang kita membutuhkan kode lain yang dapat menghitung RMS.
Kabeldankode
Kabel sama dengan (Kabel 1), tetapi dengan kode berbeda dapat ditemukan di bawah (Kode 2).
Hasil
Seperti yang Anda lihat nilai di kiri (RMS) sama dengan nilai yang diukur oleh multimeter, di kanan itu nilai Puncak ke Puncak, dan perhatikan bahwa pemedam pada siklus penuh karena saya menggunakan bola lampu 75W dan 230VAC/50Hz.
!!!!!!!!!!!!!!!! TETAPI !!!!!!!!!!!!!!!!!!!!!
Di sini saya menurunkan pemedam cahaya saya sepenuhnya, yang berarti saya sekitar 1/4 dari siklus, multimeter memberi saya 0.21A tetapi kode saya memberi saya 0.36A, kode masih mengukur dari Puncak ke Puncak, tetapi seperti yang Anda lihat di atas sinyal saya tidak linier saat saya menurunkan pemedam sepenuhnya.
Dan itulah perbedaan antara pengukuran TRMS dan pengukuran yang hanya bekerja dengan sinyal gelombang sinus.
Uji 3
Sekarang Anda melihat masalah kode di atas, tetapi untungnya ada perpustakaan untuk menyelamatkan, saya sangat menghargai perpustakaan itu untuk semua pekerjaannya karena seperti yang Anda tahu jika Anda ingin menghitung nilai RMS Anda perlu menggunakan Kalkulus Integral, dan itu sangat sulit untuk dicapai pada papan pengembangan elektronik, Anda dapat memeriksa file cpp perpustakaan untuk melihat metode apa yang digunakan seperti "Rata-rata" "Sigma"... Hal-hal terkait statistik/ probabilitas ....
Kabel,kodedanperpustakaan
Kabel sama dengan kabel yang digunakan di atas (Kabel 1), dan di bawah Anda dapat menemukan kode (Kode 3).
Dan Di sini Anda dapat mengunduh perpustakaan Filter: Unduh perpustakaan di sini
Hasil
Hasil yang benar ada di tengah, yang di kiri adalah tanpa kalibrasi, dan yang di kanan digunakan untuk menunjukkan cara mengkalibrasi (periksa video).
Seperti yang Anda lihat perbedaan besar antara respons dua kode terhadap sinyal non linier tetapi yang kedua bertindak seperti multimeter TRMS.
Uji dengan LCD/OLED
Di sini kita menjaga hal yang sama semua yang kita lakukan adalah alih-alih menggunakan serial monitor kita dapat menggunakan LCD atau OLED
Kabel,kodedanperpustakaan
Kabel dapat ditemukan di bawah (Kabel_LCD) dan (Kabel_OLED), kode juga di bawah (Kode_ACS712_LCD) dan (Kode_ACS712_OLED).
Ini adalah satu-satunya uji yang dapat saya lakukan karena saya memecah layar OLED saya saat mencoba merekam video tutorial. Secara keseluruhan ini bekerja sama seperti yang kita lihat sebelumnya, itu hanya menampilkannya pada layar LCD i²c. (Ya nilai TRMS bukan metode puncak-ke-puncak).
Itu saja teman-teman, saya harap Anda menyukai tutorial ini jangan lupa untuk menyukai video tutorial dan berlangganan channel SurtrTech jika Anda ingin menunjukkan dukungan, terima kasih banyak.
Ada pertanyaan tinggalkan di komentar.
Code
Code_1.ino
Code_2.ino
Code_3.ino
Code_ACS712_LCD.ino
Code_ACS712_OLED.ino
Code_1.inoArduino
Kode ini untuk menguji modul dan memvisualisasikan bentuk sinyal
/* Kode ini bekerja dengan sensor arus ACS712, ini memungkinkan untuk membaca data mentah Lebih baik untuk menggunakannya dengan Serial Plotter Lebih banyak detail di www.surtrtech.com */
#define Current_sensor A0
float i;
void setup() {
Serial.begin(9600);
pinMode(Current_sensor, INPUT);
}
void loop() {
i = analogRead(Current_sensor);
Serial.println(i);
delay(100);
}
Code_2.inoArduino
Kode ini menggunakan metode puncak-ke-puncak untuk menghitung RMS dari sinyal gelombang sinus
/* Kode ini bekerja dengan sensor arus ACS712, ini memungkinkan untuk menghitung RMS dari Arus Bolak-balik gelombang sinus * ini menggunakan metode Puncak ke Puncak untuk menghitung RMS * Untuk informasi lebih lanjut periksa www.surtrtech.com */
#define SAMPLES 300
#define ACS_Pin A0
float High_peak, Low_peak;
float Amps_Peak_Peak, Amps_RMS;
void setup() {
Serial.begin(9600);
pinMode(ACS_Pin, INPUT);
}
void loop() {
read_Amps();
Amps_RMS = Amps_Peak_Peak * 0.3536 * 0.06;
Serial.print(Amps_RMS);
Serial.print("\t");
Serial.println(Amps_Peak_Peak);
delay(200);
}
void read_Amps() {
int cnt;
High_peak = 0;
Low_peak = 1024;
for(cnt=0 ; cnt<SAMPLES ; cnt++) {
float ACS_Value = analogRead(ACS_Pin);
if(ACS_Value > High_peak) High_peak = ACS_Value;
if(ACS_Value < Low_peak) Low_peak = ACS_Value;
}
Amps_Peak_Peak = High_peak - Low_peak;
}
Code_3.inoArduino
Kode ini menggunakan rumus statistik untuk menghitung TRMS dari sinyal apa pun bentuknya dan menampilkannya di serial monitor
/* Kode ini bekerja dengan sensor arus ACS712, ini memungkinkan perhitungan TRMS dari sinyal * Kunjungi www.surtrtech.com untuk detail lebih lanjut */
#include <Filters.h>
#define ACS_Pin A0
float ACS_Value;
float testFrequency = 50;
float windowLength = 40.0/testFrequency;
float intercept = 0;
float slope = 0.0752;
float Amps_TRMS;
unsigned long printPeriod = 1000;
unsigned long previousMillis = 0;
void setup() {
Serial.begin(9600);
pinMode(ACS_Pin, INPUT);
}
void loop() {
RunningStatistics inputStats;
inputStats.setWindowSecs(windowLength);
while(true) {
ACS_Value = analogRead(ACS_Pin);
inputStats.input(ACS_Value);
if((unsigned long)(millis() - previousMillis) >= printPeriod) {
previousMillis = millis();
Amps_TRMS = intercept + slope * inputStats.sigma();
Serial.print("\t Amps: ");
Serial.print(Amps_TRMS);
}
}
}
Code_ACS712_LCD.inoArduino
Kode ini menggunakan metode perhitungan TRMS dan menampilkannya pada layar LCD i²c