Sensor PZEM-004T v.3.0
Sensor PZEM-004T v30 adalah sensor yang bisa mengukur beberapa variable listrik, sebuah sensor yang cocok di gunakan untuk mengukur listrik rumahan. Spesifikasi dari sensor ini sebagai berikut:
Voltage | Power Factor | Frequency |
Range nya: 80 – 260VAC Resolusi: 0.1 Akurasi : 0.5% | Range: 0.00 – 1.00 Resolusi : 0.1 Akurasi: 1% | Range: 45-65Hz Resolusi: 0.1Hz Akurasi: 0.5% |
Current | Active Power | Active Energy |
Range: 0-100A / 0- 10A Start: 0.01A(10A) 0.02A(100A) Resolusi: 0.000A Akurasi: 0.5% | Range 0 – 2.3kW(10A) Start: 0.4W Resolusi: 0.1W Akurasi: 0.5% | Range: 0 – 9999.99kWh Resolusi : 1Wh Akurasi: 0.5% |
Dengan spesifikasi di atas kita bisa mengukur listrik dengan Arus AC 100A, namun jika ingin mengukur lebih dari itu, maka harus menggunakan sensor CT yang lebih besar, kemudian sensor CT pzem-004v3 mengukur cable sensor CT misalnya sensor CT 300/5. Nilai pengukuran nya di sesuaikan dengan ratio dari sensor CT tersebut.
Modul PZEM-Mikro
Untuk mempermudah monitoring listrik 3 phase ini, kami mikroavr membuat sebuah modul yang khusus. Fungsi nya mengukur arus dengan sensor pzem-004v3 yang dibaca oleh atmega2560 ( arduino mega) kemudian di kirim ke esp32.
Untuk posting data nya bisa menggunakan sim8000v2 atau akses wifi yang di miliki oleh esp32 itu sendiri. Desain harware nya bisa di lihat pada gambar di bawah ini.
Modul di atas di desain dalam satu board. Arduino mega2560 dan esp32 di satukan, kemudian di program dengan usb to serial yang kita desain kita sendiri.
Ketiga sensor pzem-004Tv3 di baca oleh dua hardware serial atmega2560 ( Serial2 dan Serial3) kemudian yang satu nya lagi di baca oleh software serial di pin D3 dan D51. Semua data pengukuran di kirim ke ESP32 dengan Serial1.
Desain Hardware dan photo dari controller ini bisa di lihat pada gambar di bawah ini.
Upload Program
Upload program ke esp32 atau ke mega2560 menggunakan usb to serial custome, yang khusus di desain agar langsung di plug ke pcb board. ada dua dip swich merah, satu mode untuk esp32 dan satu mode untuk mega2560. Untuk pemilihan mode bisa di lihat gambar di atas, untuk diswitch sebelah kiri di gunakan untuk mode Arduino mega2560, dan untuk Dip Switch kanan untuk mode ESP32
DIP SWITCH KIRI UNTUK ARDUINO MEGA2560, DAN DIP SIWTCH KANAN UNTUK ESP32
pemilihan mode program
Untuk mega2560 nya, teman-teman tidak perlu program lagi, karena kami telah memprogram arduino mega2560 nya. Teman-teman hanya perlu program esp32 dengan library yang sudah di buat. Untuk pengujian programakan kita bahas di bawah.
Untuk cara upload progrram bisa di lihat pada gambar di bwah ini. Pemrogram nya sama dengan board esp32 yang ada pada umum nya.
Program Uji ESP32
Baca Sensor
Sebelum membaca data sensor dengan esp32, teman-teman perlu rangkai board controller dengan sensor seperti pada gambar di bawah ini.
Hubungkan sensor CT dan input voltage ke Sensor PZEM-004v3. kemudian geser dip Switch kirim ke on untuk mode program ESP32. Sebelum program ESP32 nya, download dulu library pzem-mikro dibawah ini, cukup clik tombol merah di bawah ini
check Example, buka file read_pzem.ino, atau bisa di lihat pada gambar program dib awah ini
#include "pzem_mikro.h"; pzem_mikro pzem(33, 9600); float curIR, curIS, curIT, Freq; float voltR, voltS, voltT; float pfr,pfs, pft; float PowerR, PowerS, PowerT; float KWHR,KWHS, KWHT; void setup(){ Serial.begin(115200); } void loop(){ if(pzem.get_sensor()){ curIR = pzem.IR();curIS = pzem.IS();curIT = pzem.IT(); voltR = pzem.VR();voltS = pzem.VS();voltT = pzem.VT(); Freq = pzem.frequency(); pfr = pzem.PFR();pfs = pzem.PFS();pft = pzem.PFT(); PowerR = pzem.powerR(); PowerS = pzem.powerS(); PowerT = pzem.powerT(); KWHR = pzem.kwhR();KWHS = pzem.kwhS();KWHT = pzem.kwhT(); }else{ Serial.println("connection fail"); } Serial.print("IR: ");Serial.print(curIR); Serial.print(" IS: ");Serial.print(curIS); Serial.print(" IT: ");Serial.println(curIT); Serial.print("VR: ");Serial.print(voltR); Serial.print(" VS: ");Serial.print(voltS); Serial.print(" VT: ");Serial.println(voltT); Serial.print("freq: ");Serial.println(Freq); Serial.print("PFR: ");Serial.print(pfr); Serial.print(" PFS: ");Serial.print(pfs); Serial.print(" PFT: ");Serial.println(pft); Serial.print("powerR: ");Serial.print(PowerR); Serial.print(" powerS: ");Serial.print(PowerS); Serial.print(" powerT: ");Serial.println(PowerT); Serial.print("kwhR: ");Serial.print(KWHR); Serial.print(" kwhS: ");Serial.print(KWHS); Serial.print(" kwhT: ");Serial.println(KWHT); Serial.println("---"); delay(1000); }
Buka Serial monitor Arduino Ide, disana akan terbaca data data sensor. Silahkan teman-teman olah program di atas untuk keperluan masing masing
IoT Blynk ESP32 ( wifi )
Karena menggunakan ESP32, bisa langsung di koneksikan ke wifi, Program nya mengguanakn dua file, satu modem.h satu iotblynk.ino, bisa langsung buka di example. atau program nya seperti di bawah ini.
file modem.h
#include "WiFi.h"; #include "WiFiClient.h"; #include "BlynkSimpleEsp32.h"; char auth[] = "your-token-blynk"; char ssid[] = "ssid-wifi"; char pass[] = "pass-wifi"; void init_modem(){ Blynk.begin(auth, ssid, pass); }
file iot_blynk.ino
#include <pzem_mikro.h> #include "modem.h" pzem_mikro pzem(33, 9600); float curIR, curIS, curIT, Freq; float voltR, voltS, voltT; float pfr,pfs, pft; float PowerR, PowerS, PowerT; float KWHR,KWHS, KWHT; unsigned long cur_time, old_time; void setup(){ Serial.begin(115200); init_modem(); } void loop(){ Blynk.run(); cur_time = millis(); if(cur_time - old_time >= 2000){ if(pzem.get_sensor()){ curIR = pzem.IR();curIS = pzem.IS();curIT = pzem.IT(); voltR = pzem.VR();voltS = pzem.VS();voltT = pzem.VT(); Freq = pzem.frequency(); pfr = pzem.PFR();pfs = pzem.PFS();pft = pzem.PFT(); PowerR = pzem.powerR(); PowerS = pzem.powerS(); PowerT = pzem.powerT(); KWHR = pzem.kwhR();KWHS = pzem.kwhS();KWHT = pzem.kwhT(); }else{ Serial.println(F("connection fail")); pzem.rstPZEM(); } print_data(); Blynk.virtualWrite(V0, voltR); Blynk.virtualWrite(V1, curIR); Blynk.virtualWrite(V2, pfr); Blynk.virtualWrite(V3, PowerR); Blynk.virtualWrite(V4, KWHR); old_time = cur_time; } delay(1000); } void print_data(){ Serial.print("IR: ");Serial.print(curIR); Serial.print(" IS: ");Serial.print(curIS); Serial.print(" IT: ");Serial.println(curIT); Serial.print("VR: ");Serial.print(voltR); Serial.print(" VS: ");Serial.print(voltS); Serial.print(" VT: ");Serial.println(voltT); Serial.print("freq: ");Serial.println(Freq); Serial.print("PFR: ");Serial.print(pfr); Serial.print(" PFS: ");Serial.print(pfs); Serial.print(" PFT: ");Serial.println(pft); Serial.print("powerR: ");Serial.print(PowerR); Serial.print(" powerS: ");Serial.print(PowerS); Serial.print(" powerT: ");Serial.println(PowerT); Serial.print("kwhR: ");Serial.print(KWHR); Serial.print(" kwhS: ");Serial.print(KWHS); Serial.print(" kwhT: ");Serial.println(KWHT); Serial.println("---"); }
IoT Blynk SIM800
Seperti Keterangan di atas, bahwa modol PZEM-MIKRO ini juga di lengkapi dengan sim800. Untuk memonitoring listrik menggunakan sim800 hampir mirip program nya dengan contoh Iot Blynk di wifi, tinggal dirubah sedikit di file modem.h nya. Sebelum upload program di bawah ini, download dulu library tinygsm, tekan tombol merah di bawah ini.
file modem.h
#define BLYNK_PRINT Serial #define SerialAT Serial2 #define RXD2 27 #define TXD2 26 #define TINY_GSM_MODEM_SIM800 #include "TinyGsmClient.h"; #include "BlynkSimpleTinyGSM.h"; TinyGsm modem(SerialAT); char auth[] = "your-token-blynk"; char apn[] = "YourAPN"; char user[] = ""; char pass[] = ""; void init_modem(){ SerialAT.begin(115200, SERIAL_8N1, RXD2, TXD2); delay(1000); //--------change baud to 4800 ------------ SerialAT.println("AT+IPR=4800"); while(SerialAT.available()>0){ Serial.print(SerialAT.readString()); } delay(2000); SerialAT.println("AT&W"); while(SerialAT.available()>0){ Serial.print(SerialAT.readString()); } delay(2000); SerialAT.begin(4800, SERIAL_8N1, RXD2, TXD2); SerialAT.println("AT+IPR?"); while(Serial1.available()>0){ Serial.print(Serial1.readString()); } delay(2000); //-------------------- Serial.println("Initializing modem..."); modem.restart(); Blynk.begin(auth, modem, apn, user, pass); }
iot_blynk_sim800.ino
#include "pzem_mikro.h"; #include "modem.h" pzem_mikro pzem(33, 9600); // jangan rubah nilai ini float curIR, curIS, curIT, Freq; float voltR, voltS, voltT; float pfr,pfs, pft; float PowerR, PowerS, PowerT; float KWHR,KWHS, KWHT; unsigned long cur_time, old_time; void setup(){ Serial.begin(115200); init_modem(); } void loop(){ Blynk.run(); cur_time = millis(); if(cur_time - old_time >= 2000){ if(pzem.get_sensor()){ curIR = pzem.IR();curIS = pzem.IS();curIT = pzem.IT(); voltR = pzem.VR();voltS = pzem.VS();voltT = pzem.VT(); Freq = pzem.frequency(); pfr = pzem.PFR();pfs = pzem.PFS();pft = pzem.PFT(); PowerR = pzem.powerR(); PowerS = pzem.powerS(); PowerT = pzem.powerT(); KWHR = pzem.kwhR();KWHS = pzem.kwhS();KWHT = pzem.kwhT(); }else{ Serial.println(F("connection fail")); pzem.rstPZEM(); } print_data(); Blynk.virtualWrite(V0, voltR); Blynk.virtualWrite(V1, curIR); Blynk.virtualWrite(V2, pfr); Blynk.virtualWrite(V3, PowerR); Blynk.virtualWrite(V4, KWHR); old_time = cur_time; } delay(1000); } void print_data(){ Serial.print("IR: ");Serial.print(curIR); Serial.print(" IS: ");Serial.print(curIS); Serial.print(" IT: ");Serial.println(curIT); Serial.print("VR: ");Serial.print(voltR); Serial.print(" VS: ");Serial.print(voltS); Serial.print(" VT: ");Serial.println(voltT); Serial.print("freq: ");Serial.println(Freq); Serial.print("PFR: ");Serial.print(pfr); Serial.print(" PFS: ");Serial.print(pfs); Serial.print(" PFT: ");Serial.println(pft); Serial.print("powerR: ");Serial.print(PowerR); Serial.print(" powerS: ");Serial.print(PowerS); Serial.print(" powerT: ");Serial.println(PowerT); Serial.print("kwhR: ");Serial.print(KWHR); Serial.print(" kwhS: ");Serial.print(KWHS); Serial.print(" kwhT: ");Serial.println(KWHT); Serial.println("---"); }
Sekian dulu tulisan kita dari mikroavr. Jika tertarik ingin memiliki controller di atas, tinggal clik tombol merah di bawah ini.
Thanks (mikroavr.com)