Anda di halaman 1dari 9

Cara Termudah Monitoring Listrik 3 Phasa dengan Modul ESP32

dan Sensor PZEM-004T v3

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 Range: 0.00 – 1.00 Range: 45-65Hz


Resolusi: 0.1 Resolusi : 0.1 Resolusi: 0.1Hz
Akurasi : 0.5% Akurasi: 1% Akurasi: 0.5%

Current Active Power Active Energy

Range: 0-100A / 0- 10A Range 0 – 2.3kW(10A)


Start: 0.01A(10A) 0.02A(100A) Start: 0.4W Range: 0 – 9999.99kWh
Resolusi: 0.000A Resolusi: 0.1W Resolusi : 1Wh
Akurasi: 0.5% Akurasi: 0.5% Akurasi: 0.5%

Spesifikasi Sensor PZEM-004v30

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.

blok diagra modul pzem


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.

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

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.

Anda mungkin juga menyukai