Pendahuluan
Pada kesempatan kali ini kita akan membuat project sederhana untuk membaca penggunaan listrik rumah 220V menggunakan Arduino dan Sensor PZEM 004T, dengan menggunakan sensor ini kita dapat membaca data tegangan, arus, daya, energi, frekuensi dan power factor dengan mudah menggunakan komunikasi serial dengan Arduino dan ditampilkan pada LCD 20×4 I2C.
Komponen Yang Digunakan
Berikut adalah daftar komponen yang digunakan dalam proyek ini, Teman teman dapat mendapatkan nya di Golite Store:
- Arduino UNO – Beli Disini
- Sensor PZEM-004T – Beli Disini
- LCD 20×4 I2C – Beli Disini
- Kabel Jumper – Beli Disini
- Breadboard (Opsional) – Beli Disini
Skema Sistem
Konfigurasi Pinout
- Arduino UNO -> Sensor PZEM-004T
- 5V-> VCC
- GND -> GND
- D2 -> TX
- D3 -> RX
- Arduino UNO -> LCD 16×2 I2C
- 5V -> VCC
- GND -> GND
- A4 -> SDA
- A5 -> SCL
Dalam skema ini dapat kita lihat bahwa power dari PZEM 004tT dan LCD sama sama menggunakan 5v , jadi untuk VCC dan GND nya dapat kita pararelkan ke pin 5V dan GND, Sedangkan untuk TX dan RX sensor PZEM 004T kita hubungkan ke 2 dan 3 Arduino UNO, disisi lain untuk SDA dan SCL LCD I2C dapat kita hubungkan ke pin A4 dan A5. Sedangkan untuk tegangan AC yang akan diukur masuk pada pin no 1 dan 2 terminal blok sensor dan trafo CT masuk pada pin no 3 dan 4 terminal blok.
Program Arduino
#include <PZEM004Tv30.h> #include <SoftwareSerial.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #if defined(ESP32) #error "Software Serial is not supported on the ESP32" #endif #if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN) #define PZEM_RX_PIN 2 #define PZEM_TX_PIN 3 #endif SoftwareSerial pzemSWSerial(PZEM_RX_PIN, PZEM_TX_PIN); PZEM004Tv30 pzem(pzemSWSerial); // Initialize the LCD with the I2C address 0x27 and 20 columns, 4 rows LiquidCrystal_I2C lcd(0x27, 20, 4); float voltage, current, power, energy, frequency, pf; void setup() { /* Debugging serial */ Serial.begin(115200); // Initialize LCD lcd.init(); lcd.backlight(); // Display a welcome message on the LCD lcd.setCursor(0, 0); lcd.print("Power Monitor"); lcd.setCursor(0, 1); lcd.print("Initializing..."); delay(2000); lcd.clear(); pzem.resetEnergy(); } void loop() { Serial.print("\nCustom 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)) { lcd.setCursor(0, 2); lcd.print("Error reading voltage"); } else if (isnan(current)) { lcd.setCursor(0, 2); lcd.print("Error reading current"); } else if (isnan(power)) { lcd.setCursor(0, 2); lcd.print("Error reading power"); } else if (isnan(energy)) { lcd.setCursor(0, 2); lcd.print("Error reading energy"); } else if (isnan(frequency)) { lcd.setCursor(0, 2); lcd.print("Error reading frequency"); } else if (isnan(pf)) { lcd.setCursor(0, 2); lcd.print("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); // Print the values to the LCD lcd.setCursor(0, 0); lcd.print("Voltage:" + String(voltage) + "V "); lcd.setCursor(0, 1); lcd.print("Current:" + String(current) + "A "); lcd.setCursor(0, 2); lcd.print("Power :" + String(power) + "W "); lcd.setCursor(0, 3); lcd.print("Energy :" + String(energy, 3) + "kwh "); } // Delay for better readability delay(100); }
Penjelasan Program
- Include Library: Program ini menggunakan library sebagai berikut :
PZEM004Tv30.h
: Library ini digunakan untuk mengakses sensor PZEM004T dengan komunikasi serialSoftwareSerial.h
: Library ini digunakan untuk dapat menggunakan pin digital pada arduino untuk komunikasi serial, atau biasa disebut dengan software serialWire.h
: Library untuk mengaktifkan protokol I2C pada arduino untuk selanjutkan library LCD i2c dapat dipakaiLiquidCrystal_I2C.h
: Library ini fungsinya untuk komunikasi LCD yang sudah menggunakan I2C Serial module sehingga dapat menghemat penggunaan pin pada arduino.
- Deklarasi Variabel Global dan Objek:
pzem
: membuat objek dengan nama pzem dari libraryLiquidCrystal_I2C.h
lcd
: membuat objek dengan nama lcd dari libraryPZEM004Tv30.h
untuk berkomunikasi dengan LCDvoltage, current, power, energy, frequency, pf
: Variabel global untuk menampung nilai dari sensor
- Loop Function:
Serial.begin(115200)
: Mengaktifkan komunikasi serial pada serial monitor dengan baud rate 115200 untuk keperluan debugging.lcd.init()
: Mengaktifkan fungsi LCD I2C.lcd.backlight()
: Menyalakan backlight pada LCD.pzem.resetEnergy()
: Mereset nilai energi (kWh) pada sensor PZEM004T.
- Loop Function:
pzem.readAddress()
: Membaca alamat sensor PZEM004T dan menampilkan dalam bentuk hexadecimal pada serial monitor.pzem.voltage(), pzem.current(), ...
: Membaca data dari sensor PZEM004T untuk tegangan, arus, daya, energi, frekuensi, dan faktor daya.isnan()
: Memeriksa apakah data yang dibaca valid atau tidak.- Jika data valid, nilai-nilai tersebut ditampilkan pada serial monitor dan LCD.
- Jika ada kesalahan pembacaan, pesan kesalahan ditampilkan pada LCD.
delay(100)
: Memberikan jeda 100 milidetik untuk meningkatkan keterbacaan.
Pengujian
Setelah program sudah berhasil hal pertama yang bisa kita lukan untuk melakukan pengecekan apakah sitem sudah bekerja dengan sesuai kita bisa dengan cara melihat data di serial monitor dengan baudrate 115200, jika tampil seperti ini artinya alat siap dipakai dan dapat kita coba pada peralatan listrik
Berikut adalah tampilan pada hardware tanpa beban , jadi yang akan terukur hanya nilai tegangan saja,
Sedangkan berikut ini adalah tampilan dari hardware yang sudah ada beban, pada kesempatan kali ini saya coba menggunakan charger HP. Sekarang nilai tegangan, arus, daya dan energi sudah tampil pada layar LCD
Kesimpulan
Dengan mengikuti tutorial ini, Anda telah berhasil membuat sistem pengukuran penggunaan daya listrik rumah menggunakan Arduino, Sensor PZEM-004T, dan LCD 20×4 I2C. Dengan ini kita dapat memantau pengguanan listrik pada rumah kita. project ini juga dapat dikembangkan lagi seperti dapat di pantau secara realtime di internet dan di tambahkan sistem kontrol jika penggunaan listrik sudah melewati batas yang telah di tentukan.
[…] Monitoring Penggunaan Daya Listrik 220V Menggunakan PZEM-00T PZEM Dengan ESP32 Dan Blynk IoT Cara Mengukur Penggunaan Daya Listrik AC Rumah Menggunakan Arduino dan Sensor PZEM-004T dengan LCD… Membaca Tegangan DC Menggunakan Arduino dan Sensor Tegangan Tutorial Menyalakan Lampu 220V […]