Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Mengukur Setiap Arus AC dengan ACS712

Komponen dan persediaan

Arduino UNO
× 1
OLED i²c 128x32
× 1
ACS712 30A
× 1
LCD 16x2 i²c
× 1

Tentang proyek ini

HATI-HATI JIKA ANDA MENGGUNAKAN POWER LINE

Halo, dan selamat datang di tutorial lain, ini tentang mengukur Arus Bolak-balik (AC), menggunakan ACS712 Saya menggunakan versi 30Amps yaitu ACS712 30A, dan papan Arduino Uno kami yang indah, saya mencoba menambahkan layar OLED tetapi sayangnya berakhir memecahkannya saat memotret tutorial jadi saya beralih ke LCD, tetapi di bawah ini Anda akan menemukan kabel dan kode untuk kedua versi.

Dan dengan “Any AC…” Maksud saya, kita akan melihat kode/pustaka yang berfungsi untuk semua jenis sinyal tidak hanya satu gelombang sinus, dan Ammeter kami akan dapat menghitung TRUE ROOT MEAN SQUARE. Dan perhatikan bahwa sensor menggunakan Efek Hall (menghasilkan perbedaan tegangan di seluruh konduktor listrik, melintang ke arus listrik di konduktor dan ke medan magnet yang diterapkan tegak lurus terhadap arus)

Anda dapat menggabungkan proyek ini dengan yang ini:Pengukuran Tegangan AC yang mudah menggunakan Arduino dan ZMPT101B

Pengujian akan dilakukan pada bola lampu pijar, yang dikendalikan oleh peredup cahaya secara seri dengan multimeter referensi dan modul sensor arus ACS712.

Ini rencananya:

  • Pertama, kita perlu menghubungkan modul kita dengan papan Arduino dan memeriksa bentuk sinyal saat peredup AKTIF – Siklus Penuh – Setengah Siklus.
  • Kemudian kita akan memeriksa kode sederhana yang tidak memerlukan library apa pun, tetapi hanya berfungsi dengan sinyal Sinewaves (akan diuji).
  • Setelah itu kita akan melihat kode yang akan mengukur TRMS AC, dan menggunakan LCD.

Bagian

Harap berhati-hati dalam memilih ACS712, jangan mencoba bermain aman seperti yang saya lakukan (dengan membeli versi 30Amps), ini hanya akan memberikan fluktuasi besar ketika Anda mencoba menggunakannya untuk keperluan rumah tangga atau aplikasi amp kecil, jadi di sini bagi saya versi 5A atau 10A akan baik-baik saja. Perhatikan juga bahwa 30A atau 20A … akan memengaruhi kalibrasi Anda juga, tetapi dijelaskan cara mengkalibrasi dalam video dan dalam komentar kode.

Itu adalah suku cadang yang saya gunakan, Anda dapat mengganti UNO dengan papan yang kompatibel, atau LCD i²c dengan OLED atau tampilan apa pun yang Anda inginkan.

Uji 1

Pengkabelan dan kode

Pengkabelan untuk pengujian 1 dapat ditemukan di bawah (Pengkabelan 1), di samping kode (Kode 1).

Hasil

Unggah kode dan luncurkan plotter serial, Anda seharusnya dapat melihat sinyal seperti gelombang sinus, garis merah muncul ketika saya menolak peredup 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 tetap menggunakan kabel yang sama seperti di atas tapi sekarang kita membutuhkan kode lain yang bisa menghitung RMS.

Pengkabelan dan kode

Pengkabelan sama dengan (Pengkabelan 1), tetapi dengan kode yang berbeda dapat ditemukan di bawah (Kode 2).

Hasil

Seperti yang Anda lihat, nilai di sebelah kiri (RMS) sama dengan nilai yang diukur oleh multimeter, di sebelah kanan itu adalah nilai Puncak ke Puncak, dan perhatikan bahwa peredup berada pada siklus penuh karena saya menggunakan bohlam 75W dan 230VAC/50Hz.

!!!!!!!!!!!!!!!!!! TAPI !!!!!!!!!!!!!!!!!!!!!!!!

Di sini saya mengecilkan peredup cahaya saya, yang berarti saya kira-kira sekitar 1/4 siklus, multimeter memberi saya 0,21A tetapi kode saya memberi saya 0,36A, kode masih mengukur dari Puncak ke Puncak, tapi seperti yang Anda lihat di atas, sinyal saya tidak linier saat saya mematikan peredup 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, tapi untungnya ada perpustakaan untuk menyelamatkan, saya sangat menghargai perpustakaan itu untuk semua pekerjaan yang dilakukannya karena seperti yang Anda tahu jika Anda ingin menghitung nilai RMS, Anda perlu menggunakan Kalkulus Integral, dan itu cara yang 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 yang berkaitan dengan statistik/probabilitas ....

Pengkabelan, kode dan perpustakaan

Pengkabelan sama dengan pengkabelan yang digunakan di atas (Pengkabelan 1), dan di bawah ini 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 kiri tanpa kalibrasi, dan yang kanan digunakan untuk mendemonstrasikan cara mengkalibrasi (cek video).

Seperti yang Anda lihat perbedaan besar antara dua kode yang merespon sinyal non linier tetapi yang kedua bertindak sebagai multimeter TRMS.

Uji dengan LCD/OLED

Di sini kami menjaga hal yang sama yang kami lakukan adalah alih-alih menggunakan monitor serial, kami dapat menggunakan LCD atau OLED

Pengkabelan, kode dan perpustakaan

Pengkabelan dapat ditemukan di bawah (Wiring_LCD) dan (Wiring_OLED), kode juga di bawah (Code_ACS712_LCD) dan (Code_ACS712_OLED).

Berikut adalah perpustakaan OLED

https://github.com/adafruit/Adafruit_SSD1306https://github.com/adafruit/Adafruit-GFX-Library

Dan inilah LCD_i2c_library

https://drive.google.com/file/d/1Oc56q2GPs5SOA-PdbVHHSxKCnI9KY5xd/view

Hasil

Ini adalah satu-satunya tes yang dapat saya lakukan karena layar OLED saya pecah saat mencoba merekam video tutorial. Secara keseluruhan ini bekerja dengan cara yang sama seperti yang kita lihat sebelumnya, hanya menampilkannya di layar LCD i²c. (Ya, nilai TRMS bukan metode puncak ke puncak).

Itu saja guys, semoga kalian menyukai tutorial ini jangan lupa like video tutorialnya dan subscribe channel SurtrTech jika kalian ingin memberikan dukungan, terima kasih banyak.

Ada pertanyaan tinggalkan di komentar.

Kode

  • Kode_1.ino
  • Kode_2.ino
  • Kode_3.ino
  • Kode_ACS712_LCD.ino
  • Kode_ACS712_OLED.ino
Code_1.inoArduino
Kode ini untuk menguji modul dan memvisualisasikan bentuk sinyal
/*Kode ini bekerja dengan Sensor arus ACS712, memungkinkan untuk membaca data mentah Lebih baik menggunakannya dengan Serial Plotter Lebih detail di www.surtrtech.com*/ #define Current_sensor A0 //Sensor input analog pinfloat i;void setup() {Serial.begin(9600);pinMode(Current_sensor, INPUT);}void loop() { i =analogRead(Current_sensor); Serial.println(i); penundaan(100); //Memodifikasi atau menghapus delay akan mengubah cara sinyal ditampilkan //mengaturnya sampai Anda mendapatkan bentuk sinewave yang benar}
Code_2.inoArduino
Kode ini menggunakan metode pengukuran puncak-ke-puncak untuk menghitung RMS sinyal gelombang sinus
/* Kode ini bekerja dengan sensor arus ACS712, memungkinkan untuk menghitung RMS Arus Bolak-balik gelombang sinus * menggunakan Puncak ke Puncak metode untuk menghitung RMS * Untuk informasi lebih lanjut, periksa www.surtrtech.com */#define SAMPLES 300 //Jumlah sampel yang ingin Anda ambil setiap kali Anda mengulang#define ACS_Pin A0 //ACS712 pin data analog inputfloat High_peak,Low_peak; //Variabel untuk mengukur atau menghitungfloat Amps_Peak_Peak, Amps_RMS;void setup() { Serial.begin(9600); pinMode(ACS_Pin,INPUT); //Tentukan mode pin}void loop() { read_Amps(); //Luncurkan fungsi read_Amps Amps_RMS =Amps_Peak_Peak*0.3536*0.06; //Sekarang kita memiliki nilai puncak ke puncak biasanya rumus hanya membutuhkan perkalian kali 0,3536 //tetapi karena nilainya akan sangat besar, Anda harus mengalikannya dengan 0,06, pertama-tama Anda tidak dapat menggunakannya, //lakukan perhitungan Anda dan bandingkan dengan nilai nyata yang diukur oleh Amperemeter. misalnya:0,06=Nilai nyata/Nilai terukur Serial.print(Amps_RMS); //Di sini saya menunjukkan nilai RMS dan nilai puncak ke puncak, Anda dapat mencetak apa yang Anda inginkan dan menambahkan simbol "A"... Serial.print("\t"); Serial.println(Amps_Peak_Peak); delay(200);}void read_Amps() //read_Amps function menghitung selisih antara high peak dan low peak { //get peak to peak value int cnt; //Penghitung High_peak =0; //Kami pertama-tama berasumsi bahwa puncak tinggi kami sama dengan 0 dan puncak rendah adalah 1024, ya terbalik Low_peak =1024; for(cnt=0; cnt High_peak) //Jika nilai itu lebih tinggi dari high peak (awalnya adalah 0) { High_peak =ACS_Value; //Puncak tinggi akan berubah dari 0 ke nilai yang ditemukan } if(Nilai_ACS  
Code_3.inoArduino
Kode ini menggunakan rumus statistik untuk menghitung TRMS sinyal berapa pun jaraknya dan menampilkannya di monitor serial
/* Kode ini bekerja dengan sensor arus ACS712, memungkinkan penghitungan sinyal TRMS * Kunjungi www.surtrtech.com untuk lebih jelasnya */#include  //Perpustakaan ini melakukan pekerjaan besar-besaran memeriksa file .cpp#define ACS_Pin A0 //Sensor data pin pada A0 analog inputfloat ACS_Value; //Di sini kita menyimpan nilai data mentahsfloat testFrequency =50; // frekuensi sinyal uji (Hz)float windowLength =40.0/testFrequency; // berapa lama rata-rata sinyal, untuk intersep statististfloat =0; // akan disesuaikan berdasarkan pengujian kalibrasi kemiringan apung =0,0752; // untuk disesuaikan berdasarkan pengujian kalibrasi // Silakan periksa video Tutorial ACS712 oleh SurtrTech untuk melihat cara mendapatkannya karena tergantung pada sensor Anda, atau lihat di bawah float Amps_TRMS; // perkiraan arus aktual dalam ampsunsigned long printPeriod =1000; // dalam milidetik// Lacak waktu dalam milidetik sejak pembacaan terakhir unsigned long beforeMillis =0;void setup() { Serial.begin( 9600 ); // Jalankan port serial pinMode(ACS_Pin,INPUT); //Tentukan mode pin}void loop() { RunningStatistics inputStats; // buat statistik untuk melihat sinyal uji mentah inputStats.setWindowSecs( windowLength ); //Setel panjang jendela while( true ) { ACS_Value =analogRead(ACS_Pin); // membaca nilai analog:inputStats.input(ACS_Value); // masuk ke fungsi Stats if((unsigned long)(millis() - sebelumnyaMillis)>=printPeriod) { //setiap detik kita melakukan perhitungan sebelumnyaMillis =milis(); // memperbarui waktu Amps_TRMS =intersep + kemiringan * inputStats.sigma(); Serial.print( "\t Amplifier:"); Serial.print( Amps_TRMS ); } }}/* Tentang kemiringan dan intersep * Pertama, Anda perlu tahu bahwa semua perhitungan TRMS dilakukan oleh fungsi dari perpustakaan, ini adalah nilai "inputStats.sigma()" * Pada awalnya Anda dapat menampilkan "inputStats.sigma" itu ()" sebagai nilai TRMS Anda, lalu coba ukur menggunakannya saat inputnya 0,00A * Jika nilai yang diukur adalah 0 seperti yang saya dapatkan, Anda dapat menyimpan intersep sebagai 0, jika tidak, Anda harus menambah atau mengurangi untuk membuatnya nilainya sama dengan 0 * Dengan kata lain " lepaskan offset" * Kemudian nyalakan power ke nilai yang diketahui, misalnya gunakan bohlam atau led yang Anda tahu kekuatannya dan Anda sudah tahu voltase Anda, jadi sedikit matematika Anda' akan mendapatkan ampli teori * Anda membagi nilai teori itu dengan nilai terukur dan di sini Anda mendapatkan kemiringannya, sekarang tempatkan atau modifikasi mereka */
Code_ACS712_LCD.inoArduino
Kode ini menggunakan metode perhitungan TRMS dan menampilkannya di LCD i²c
/* Kode ini bekerja dengan ACS712 dan ic LCD * Ini mengukur TRMS Arus Bolak-balik dan menampilkan nilainya di layar * Kunjungi www.SurtrTech.com untuk detail lebih lanjut */#include  //Perpustakaan ini melakukan pekerjaan besar, periksa file .cpp-nya#include  //library ic LCD#define ACS_Pin A0 //pin data ACS712#define I2C_ADDR 0x27 //Alamat I2C, Anda harus menggunakan kode untuk memindai alamat terlebih dahulu (0x27) di sini#menentukan BACKLIGHT_PIN 3 // Mendeklarasikan Pin LCD#menentukan En_pin 2#menentukan Rw_pin 1#menentukan Rs_pin 0#menentukan D4_pin 4#menentukan D5_pin 5#menentukan D6_pin 6#define D7_pin 7LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); // Mendeklarasikan lcdfloat testFrequency =50; // frekuensi sinyal uji (Hz)float windowLength =40.0/testFrequency; // berapa lama rata-rata sinyal, untuk intersep statististfloat =0; // akan disesuaikan berdasarkan pengujian kalibrasi kemiringan apung =0,0752; // untuk disesuaikan berdasarkan pengujian kalibrasi // Silakan periksa video Tutorial ACS712 oleh SurtrTech untuk melihat cara mendapatkannya karena tergantung pada sensor Anda, atau lihat di bawah float Amps_TRMS; float ACS_Value; periode cetak panjang yang tidak ditandatangani =1000; unsigned long beforeMillis =0;void setup() { digitalWrite(2,HIGH); lcd.begin (16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIF); lcd.setBacklight(TINGGI); //Pencahayaan lampu latar lcd.home(); }void loop() { RunningStatistics inputStats; // buat statistik untuk melihat sinyal uji mentah inputStats.setWindowSecs( windowLength ); while( true ) { ACS_Value =analogRead(ACS_Pin); // membaca nilai analog:inputStats.input(ACS_Value); // masuk ke fungsi Stats if((unsigned long)(millis() - sebelumnyaMillis)>=printPeriod) { //setiap detik kita melakukan perhitungan sebelumnyaMillis =milis(); // memperbarui waktu Amps_TRMS =intersep + kemiringan * inputStats.sigma(); //Kalibrasi nilai lcd.clear(); //mengosongkan lcd dan mencetak pada posisi tertentu lcd.setCursor(2,0); lcd.print(Amps_TRMS); lcd.print("A"); } }}/* Tentang kemiringan dan intersep * Pertama, Anda perlu tahu bahwa semua perhitungan TRMS dilakukan oleh fungsi dari perpustakaan, ini adalah nilai "inputStats.sigma()" * Pada awalnya Anda dapat menampilkan "inputStats.sigma" itu ()" sebagai nilai TRMS Anda, lalu coba ukur menggunakannya saat inputnya 0,00A * Jika nilai yang diukur adalah 0 seperti yang saya dapatkan, Anda dapat menyimpan intersep sebagai 0, jika tidak, Anda harus menambah atau mengurangi untuk membuatnya nilainya sama dengan 0 * Dengan kata lain " lepaskan offset" * Kemudian nyalakan power ke nilai yang diketahui, misalnya gunakan bohlam atau led yang Anda tahu kekuatannya dan Anda sudah tahu voltase Anda, jadi sedikit matematika Anda' akan mendapatkan ampli teori * Anda membagi nilai teori itu dengan nilai terukur dan di sini Anda mendapatkan kemiringannya, sekarang tempatkan atau modifikasi mereka */
Code_ACS712_OLED.inoArduino
Kode ini menggunakan metode perhitungan TRMS dan menampilkan nilai pada OLED.
/* Kode ini bekerja dengan ic ACS712 dan OLED * Ini mengukur TRMS dari Arus Bolak-balik dan menampilkan nilai di layar * Kunjungi www.SurtrTech. com untuk detail lebih lanjut */#include  //Perpustakaan ini melakukan pekerjaan besar, periksa file .cpp-nya#include  //library OLED#include #define ACS_Pin A0#define SCREEN_WIDTH 128 // Lebar tampilan OLED, dalam piksel#tentukan SCREEN_HEIGHT 32 // Tinggi tampilan OLED, dalam piksel#tentukan OLED_RESET -1 // Setel ulang pin # (atau -1 jika berbagi pin reset Arduino)float testFrequency =50; // frekuensi sinyal uji (Hz)float windowLength =40.0/testFrequency; // berapa lama rata-rata sinyal, untuk intersep statististfloat =0; // akan disesuaikan berdasarkan pengujian kalibrasi kemiringan apung =0,0752; // untuk disesuaikan berdasarkan pengujian kalibrasi // Silakan periksa video Tutorial ACS712 oleh SurtrTech untuk melihat cara mendapatkannya karena tergantung pada sensor Anda, atau lihat di bawah float Amps_TRMS; float ACS_Value; periode cetak panjang yang tidak ditandatangani =1000; unsigned long beforeMillis =0;Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Mendeklarasikan nama tampilan (display)void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Mulai tampilan tampilan OLED.clearDisplay(); display.display();}void loop() { RunningStatistics inputStats; // buat statistik untuk melihat sinyal uji mentah inputStats.setWindowSecs( windowLength ); while( true ) { ACS_Value =analogRead(ACS_Pin); // membaca nilai analog:inputStats.input(ACS_Value); // masuk ke fungsi Stats if((unsigned long)(millis() - sebelumnyaMillis)>=printPeriod) { //Lakukan perhitungan setiap 1 detik sebelumnyaMillis =mili(); // memperbarui waktu Amps_TRMS =intersep + kemiringan * inputStats.sigma(); tampilan.clearDisplay(); tampilan.setTextSize(3); display.setTextColor(PUTIH); display.setCursor(15,10); display.print(Amps_TRMS); tampilan.println("A"); tampilan.display(); } }}/* Tentang kemiringan dan intersep * Pertama, Anda perlu tahu bahwa semua perhitungan TRMS dilakukan oleh fungsi dari perpustakaan, ini adalah nilai "inputStats.sigma()" * Pada awalnya Anda dapat menampilkan "inputStats.sigma" itu ()" sebagai nilai TRMS Anda, lalu coba ukur menggunakannya saat inputnya 0,00A * Jika nilai yang diukur adalah 0 seperti yang saya dapatkan, Anda dapat menyimpan intersep sebagai 0, jika tidak, Anda harus menambah atau mengurangi untuk membuatnya nilainya sama dengan 0 * Dengan kata lain " lepaskan offset" * Kemudian nyalakan power ke nilai yang diketahui, misalnya gunakan bohlam atau led yang Anda tahu kekuatannya dan Anda sudah tahu voltase Anda, jadi sedikit matematika Anda' akan mendapatkan ampli teori * Anda membagi nilai teori itu dengan nilai terukur dan di sini Anda mendapatkan kemiringannya, sekarang tempatkan atau modifikasi mereka */

Skema

Pengkabelan yang digunakan untuk pengujian 1,2 dan 3 Gunakan LCD i²c Gunakan OLED 128x32

Proses manufaktur

  1. Cara Mengukur Kualitas Udara di OpenSensors
  2. Pemantauan CO2 dengan Sensor K30
  3. Komunikasi Tunarungu dengan 1Sheeld/Arduino
  4. Kontrol Penerima Koin dengan Arduino
  5. Arduino dengan Bluetooth untuk Mengontrol LED!
  6. Sensor Sidik Jari Kapasitif dengan Arduino atau ESP8266
  7. Bermain Dengan Tampilan Berikutnya
  8. Lengan Robot Terkendali Nunchuk (dengan Arduino)
  9. Animasi Mulut Billy Bass Dengan Sumber Audio Apa Pun
  10. Mengukur Radiasi Matahari dengan Arduino