Tutorial PZEM-004T dengan LCD menggunakan Arduino Uno, Arduino Mega, dan ESP32

Pengertian PZEM-004T

PZEM-004T adalah modul sensor berbasis mikrokontroler yang dirancang untuk mengukur parameter kelistrikan pada beban AC, seperti:

  • Tegangan (Voltage)
  • Arus (Current)
  • Daya aktif (Active Power)
  • Energi (Energy)
  • Faktor daya (Power Factor)
  • Frekuensi (Frequency) (khusus versi V3)

Sensor ini populer untuk sistem monitoring listrik berbasis Arduino, ESP32, Raspberry Pi, dan sistem otomasi lainnya.

Prinsip Kerja PZEM-004T

PZEM-004T bekerja dengan cara:

  1. Tegangan diukur secara langsung dari jalur listrik AC yang terhubung ke modul.
  2. Arus diukur menggunakan sensor CT (Current Transformer) yang dipasang melingkar pada kabel fasa (fase).
  3. Menggunakan mikrokontroler internal, modul ini menghitung daya dan energi berdasarkan tegangan dan arus.
  4. Data dikirim secara digital ke mikrokontroler (Arduino/ESP) melalui komunikasi software serial ataupun hardware serial.

Spesifikasi Teknis PZEM-004T (Umum)

ParameterNilai
Tegangan Input80 – 260V AC
Arus Maksimum100A (dengan CT bawaan)
Tegangan Operasi5V DC
KomunikasiRS485 (Modbus RTU)
Akurasi Pengukuran±0.5–1%
Frekuensi45 – 65 Hz
Daya & EnergiReal Power (Watt), Energy (kWh)
Ukuran Modul± 50mm x 25mm
Port TeganganTerminal sekrup (AC in)
Sensor ArusCT Clamp

Kegunaan PZEM-004T

  1. Monitoring Listrik Rumah Tangga
  2. Sistem Energi Terbarukan (PLTS)
    • Memantau output daya dari inverter atau beban.
  3. Industri & Otomasi
    • Mengetahui performa dan efisiensi mesin.
  4. Proyek IoT
    • Digunakan dengan ESP32 + WiFi untuk kirim data ke Blynk, Telegram, Thingspeak, dll

Kelebihan PZEM-004T

  1. Mampu Ukur Banyak Parameter
    • Tegangan, arus, daya, energi, frekuensi, dan faktor daya.
  2. Kompatibel dengan Mikrokontroler
    • Bisa dipakai dengan Arduino, ESP32, Raspberry Pi.
  3. Mudah Digunakan
    • Ada library Arduino siap pakai.
  4. Akurasi Cukup Tinggi
    • Cukup akurat untuk penggunaan non-komersial.
  5. Isolasi Aman
    • CT clamp menjaga pemisahan antara beban dan mikrokontroler.
  6. Protokol RS485 (V3)
    • Bisa digunakan dalam jaringan sensor panjang (multi-node).

Kekurangan PZEM-004T

  1. Tidak Bisa Ukur Daya Reaktif
    • Hanya mengukur daya aktif (Watt), bukan VAR
  2. Tidak Cocok untuk DC
    • Hanya untuk sistem listrik AC, untuk sistem DC terdapat PZEM dengan seri lainnya.
  3. Tegangan Langsung ke Modul
    • Perlu kehati-hatian karena terhubung ke listrik 220V AC.

Contoh Penerapan PZEM-004T

1. Smart Energy Monitoring Rumah

  • Arduino/ESP32 membaca data dari PZEM-004T
  • Data ditampilkan di LCD I2C atau dikirim ke aplikasi Blynk
  • Notifikasi Telegram jika pemakaian listrik tinggi

2. Sistem Monitoring PLTS (Solar)

  • Memantau arus & daya AC dari inverter
  • Deteksi ketika sistem tidak menghasilkan daya maksimal

3. Monitoring Konsumsi Listrik Mesin

  • Mengetahui berapa daya dan energi yang digunakan oleh mesin industri
  • Analisis efisiensi mesin atau pompa air

Wiring Diagram PZEM-004T Arduino MEGA

FungsiPin PZEM-004T V3Pin Arduino Mega 2560Keterangan
Tegangan positif modulVCC5VMemberikan daya 5V ke modul
GroundGNDGNDGround (harus satu ground antara Arduino dan PZEM)
Komunikasi Data RX (input modul)RXPin TX Arduino
( TX2 = pin 16 )
Arduino kirim data ke PZEM
Komunikasi Data TX (output modul)TXPin RX Arduino
( RX2 = pin 17 )
Arduino terima data dari PZEM
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h> // Tidak digunakan di Mega, hanya untuk info

// Gunakan Serial2 (pin 16 = TX2, pin 17 = RX2)
PZEM004Tv30 pzem(&Serial2);

void setup() {
  Serial.begin(9600);    // Untuk monitor Serial di PC
  Serial2.begin(9600);   // Untuk komunikasi ke PZEM-004T V3
  delay(1000);

  Serial.println("Monitoring PZEM-004T V3 dengan Arduino Mega (Serial2)");

  IPAddress ip = pzem.getAddress();
  Serial.print("PZEM Alamat IP: "); Serial.println(ip);
}

void loop() {
  float voltage = pzem.voltage();
  float current = pzem.current();
  float power   = pzem.power();
  float energy  = pzem.energy();
  float frequency = pzem.frequency();
  float pf = pzem.pf();

  if (isnan(voltage)) {
    Serial.println("Gagal membaca data dari PZEM-004T.");
  } else {
    Serial.print("Tegangan   : "); Serial.print(voltage); Serial.println(" V");
    Serial.print("Arus       : "); Serial.print(current); Serial.println(" A");
    Serial.print("Daya       : "); Serial.print(power); Serial.println(" W");
    Serial.print("Energi     : "); Serial.print(energy); Serial.println(" Wh");
    Serial.print("Frekuensi  : "); Serial.print(frequency); Serial.println(" Hz");
    Serial.print("Faktor Daya: "); Serial.println(pf);
    Serial.println("------------------------------------");
  }

  delay(2000);
}

Wiring Diagram PZEM-004T ESP32

FungsiPin PZEM-004T V3Pin ESP32Keterangan
Tegangan positif modulVCC5VMemberikan daya 5V ke modul
GroundGNDGNDGround
Komunikasi Data RX (input modul)RXPin TX2 ESP32ESP32 kirim data ke PZEM
Komunikasi Data TX (output modul)TXPin RX2 ESP32ESP32 terima data dari PZEM
#include <PZEM004Tv30.h>
#include <HardwareSerial.h>

// Gunakan Serial2 (UART2) pada ESP32, TX=17, RX=16
HardwareSerial pzemSerial(2);

// Inisialisasi objek PZEM pada pin TX=17, RX=16
PZEM004Tv30 pzem(pzemSerial, 16, 17); // RX, TX

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("PZEM-004T V3 Monitoring Dimulai");

  // Tidak wajib, tapi bisa dicek alamat modul:
  IPAddress ip = pzem.getAddress();
  Serial.print("PZEM Address: "); Serial.println(ip);
}

void loop() {
  float voltage = pzem.voltage();
  float current = pzem.current();
  float power   = pzem.power();
  float energy  = pzem.energy();
  float frequency = pzem.frequency();
  float pf = pzem.pf();

  if (isnan(voltage)) {
    Serial.println("Gagal membaca data dari PZEM-004T.");
  } else {
    Serial.print("Tegangan: "); Serial.print(voltage); Serial.println(" V");
    Serial.print("Arus    : "); Serial.print(current); Serial.println(" A");
    Serial.print("Daya    : "); Serial.print(power); Serial.println(" W");
    Serial.print("Energi  : "); Serial.print(energy); Serial.println(" Wh");
    Serial.print("Frekuensi: "); Serial.print(frequency); Serial.println(" Hz");
    Serial.print("Power Factor: "); Serial.println(pf);
    Serial.println("-----------------------------");
  }

  delay(2000); // Baca setiap 2 detik
}

Wiring Diagram PZEM-004T Arduino UNO

FungsiPin PZEM-004T V3Pin Arduino UnoKeterangan
Tegangan positif modulVCC5VMemberikan daya 5V ke modul
GroundGNDGNDGround
Komunikasi Data RX (input modul)RXPin 9Arduino Uno kirim data ke PZEM
Komunikasi Data TX (output modul)TXPin 8Arduino Uno terima data dari PZEM
#include <PZEM004Tv30.h>
#include <Wire.h>

PZEM004Tv30 pzem(8, 9); // Software Serial pin 8 (RX) & 9 (TX)

void setup() {
  Serial.begin(9600);
}

void loop() {
  float voltage = pzem.voltage();
  if (voltage != NAN) {
    Serial.print("Voltage: ");
    Serial.print(voltage);
    Serial.println("V");
  } else {
    Serial.println("Error reading voltage");
  }

  float current = pzem.current();
  if (current != NAN) {
    Serial.print("Current: ");
    Serial.print(current);
    Serial.println("A");
  } else {
    Serial.println("Error reading current");
  }

  float power = pzem.power();
  if (current != NAN) {
    Serial.print("Power: ");
    Serial.print(power);
    Serial.println("W");
  } else {
    Serial.println("Error reading power");
  }

  float energy = pzem.energy();
  if (current != NAN) {
    Serial.print("Energy: ");
    Serial.print(energy, 3);
    Serial.println("kWh");

  } else {
    Serial.println("Error reading energy");
  }

  float frequency = pzem.frequency();
  if (current != NAN) {
    Serial.print("Frequency: ");
    Serial.print(frequency, 1);
    Serial.println("Hz");
  } else {
    Serial.println("Error reading frequency");
  }

  float pf = pzem.pf();
  if (current != NAN) {
    Serial.print("PF: ");
    Serial.println(pf);
  } else {
    Serial.println("Error reading power factor");
  }

  Serial.println();
  delay(2000);
}

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *