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.
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.
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
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
file modem.h
#include "WiFi.h";
#include "WiFiClient.h";
#include "BlynkSimpleEsp32.h";
void init_modem(){
Blynk.begin(auth, ssid, pass);
}
file iot_blynk.ino
#include <pzem_mikro.h>
#include "modem.h"
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("---");
}
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);
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
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.