Sensor Ampere Voltage PZEM-004T adalah sensor yang digunakan untuk mengukur berbagai parameter listrik seperti arus (ampere), tegangan (volt), daya aktif (watt), energi (watt-hour), serta faktor daya (power factor).Berikut ini adalah code untuk memprogramnya :
#include <Arduino.h>
#include <PZEM004Tv30.h>
//sensor ini menggunakan pin hardware serial (pin RX dan TX asli)
#if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN)
#define PZEM_RX_PIN 16
#define PZEM_TX_PIN 17
#endif
#if !defined(PZEM_SERIAL)
#define PZEM_SERIAL Serial2
#endif
#if defined(ESP32)
PZEM004Tv30 pzem(PZEM_SERIAL, PZEM_RX_PIN, PZEM_TX_PIN);
#elif defined(ESP8266)
#else
PZEM004Tv30 pzem(PZEM_SERIAL);
#endif
// Read the data from the sensor
float voltage = 0;
float current = 0;
float power = 0;
float energy = 0;
float frequency = 0;
float pf = 0;
void get_sensor_PZEM(){
// Print the custom address of the PZEM
Serial.print("Custom Address:");
Serial.println(pzem.readAddress(), HEX);
// Read the data from the sensor
voltage = pzem.voltage();
current = pzem.current();
power = pzem.power();
energy = pzem.energy();
frequency = pzem.frequency();
pf = pzem.pf();
// Check if the data is valid
if(isnan(voltage)){
Serial.println("Error reading voltage");
} else if (isnan(current)) {
Serial.println("Error reading current");
} else if (isnan(power)) {
Serial.println("Error reading power");
} else if (isnan(energy)) {
Serial.println("Error reading energy");
} else if (isnan(frequency)) {
Serial.println("Error reading frequency");
} else if (isnan(pf)) {
Serial.println("Error reading power factor");
} else {
// Print the values to the Serial console
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
Serial.print("Current: "); Serial.print(current); Serial.println("A");
Serial.print("Power: "); Serial.print(power); Serial.println("W");
Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
Serial.print("PF: "); Serial.println(pf);
}
}
void setup()
{
Serial.begin(9600);
}
void loop(){
get_sensor_PZEM();
delay(500);
}Berikut ini adalah penjelasan dari kode di atas :
1. Inklusi Library
#include <Arduino.h>
#include <PZEM004Tv30.h>
Arduino.hadalah library dasar untuk program Arduino.PZEM004Tv30.hadalah library untuk berkomunikasi dengan sensor PZEM-004T versi 3.0, yang memungkinkan pembacaan parameter listrik seperti tegangan, arus, daya, dan lainnya.
2. Pin RX dan TX untuk Komunikasi Serial
#if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN)
#define PZEM_RX_PIN 16
#define PZEM_TX_PIN 17
#endif
- Bagian ini memeriksa apakah
PZEM_RX_PINdanPZEM_TX_PINsudah didefinisikan sebelumnya. Jika belum, maka kode ini mendefinisikan pin RX (16) dan TX (17) yang akan digunakan untuk komunikasi serial antara PZEM-004T dan mikrokontroler.
3. Serial yang Digunakan
#if !defined(PZEM_SERIAL)
#define PZEM_SERIAL Serial2
#endif
- Kode ini mendefinisikan port serial yang digunakan untuk berkomunikasi dengan sensor PZEM. Di sini, digunakan
Serial2, yang merupakan port serial kedua pada ESP32.
4. Deklarasi Objek PZEM
#if defined(ESP32)
PZEM004Tv30 pzem(PZEM_SERIAL, PZEM_RX_PIN, PZEM_TX_PIN);
#elif defined(ESP8266)
#else
PZEM004Tv30 pzem(PZEM_SERIAL);
#endif
- Kode ini menginisialisasi objek
pzemyang akan digunakan untuk berinteraksi dengan sensor PZEM-004T. Pada ESP32, port serial, RX, dan TX didefinisikan. Untuk ESP8266, tidak ada kode khusus yang ditulis, karena dalam contoh ini diasumsikan tidak digunakan. Jika menggunakan platform lain, hanyaPZEM_SERIALyang cukup.
5. Variabel untuk Menyimpan Data Sensor
float voltage = 0;
float current = 0;
float power = 0;
float energy = 0;
float frequency = 0;
float pf = 0;
- Variabel ini menyimpan data yang dibaca dari sensor PZEM-004T: tegangan, arus, daya, energi, frekuensi, dan faktor daya.
6. Fungsi get_sensor_PZEM()
void get_sensor_PZEM() {
Serial.print("Custom Address:");
Serial.println(pzem.readAddress(), HEX);
voltage = pzem.voltage();
current = pzem.current();
power = pzem.power();
energy = pzem.energy();
frequency = pzem.frequency();
pf = pzem.pf();
if (isnan(voltage)) {
Serial.println("Error reading voltage");
} else if (isnan(current)) {
Serial.println("Error reading current");
} else if (isnan(power)) {
Serial.println("Error reading power");
} else if (isnan(energy)) {
Serial.println("Error reading energy");
} else if (isnan(frequency)) {
Serial.println("Error reading frequency");
} else if (isnan(pf)) {
Serial.println("Error reading power factor");
} else {
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
Serial.print("Current: "); Serial.print(current); Serial.println("A");
Serial.print("Power: "); Serial.print(power); Serial.println("W");
Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
Serial.print("PF: "); Serial.println(pf);
}
}
get_sensor_PZEM(): Fungsi ini membaca data dari sensor PZEM dan menampilkan hasilnya melalui serial monitor.pzem.readAddress(): Membaca alamat kustom sensor (biasanya digunakan jika alamat sensor diubah).pzem.voltage(): Membaca tegangan.pzem.current(): Membaca arus.pzem.power(): Membaca daya.pzem.energy(): Membaca energi yang digunakan.pzem.frequency(): Membaca frekuensi arus AC.pzem.pf(): Membaca faktor daya (power factor).
- Setiap nilai yang dibaca kemudian diperiksa apakah valid (menggunakan
isnan()untuk memeriksa apakah nilai tersebut bukan NaN). Jika ada kesalahan dalam pembacaan, program akan menampilkan pesan error.
7. Fungsi setup()
void setup() {
Serial.begin(9600);
}
setup()adalah fungsi inisialisasi yang dijalankan sekali saat program dimulai. Di sini, komunikasi serial dimulai dengan baud rate 9600 untuk menampilkan data ke monitor serial.
8. Fungsi loop()
void loop() {
get_sensor_PZEM();
delay(500);
}
loop()adalah fungsi utama yang dijalankan berulang kali oleh Arduino. Dalam hal ini, fungsiget_sensor_PZEM()dipanggil setiap 500ms untuk membaca data terbaru dari sensor PZEM-004T dan menampilkannya melalui serial monitor.
Kesimpulan:
Program ini digunakan untuk membaca dan menampilkan data dari sensor PZEM-004T yang mengukur parameter listrik. Setiap 500 ms, fungsi get_sensor_PZEM() dipanggil untuk mengambil data terbaru dari sensor dan mencetaknya ke serial monitor. Jika terjadi kesalahan dalam pembacaan, program akan menampilkan pesan error. Data yang ditampilkan meliputi:
- Tegangan (voltage)
- Arus (current)
- Daya (power)
- Energi (energy)
- Frekuensi (frequency)
- Faktor daya (pf)
untuk diskusi bisa kontak dibawah ini :

Sosial media :





