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:

  1. Arduino UNO – Beli Disini
  2. Sensor PZEM-004T – Beli Disini
  3. LCD 20×4 I2C – Beli Disini
  4. Kabel Jumper – Beli Disini
  5. 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

  1. Include Library: Program ini menggunakan library sebagai  berikut :
    • PZEM004Tv30.h: Library ini digunakan untuk mengakses sensor PZEM004T dengan komunikasi serial
    • SoftwareSerial.h: Library ini digunakan untuk dapat menggunakan pin digital pada arduino untuk komunikasi serial, atau biasa disebut dengan software serial
    • Wire.h: Library untuk mengaktifkan protokol I2C pada arduino untuk selanjutkan library LCD i2c dapat dipakai
    • LiquidCrystal_I2C.h: Library ini fungsinya untuk komunikasi LCD yang sudah menggunakan I2C Serial module sehingga dapat menghemat penggunaan pin pada arduino.
  2. Deklarasi Variabel Global dan Objek:
    • pzem: membuat objek dengan nama pzem dari library LiquidCrystal_I2C.h
    • lcd: membuat objek dengan nama lcd dari library PZEM004Tv30.h untuk berkomunikasi dengan LCD
    • voltage, current, power, energy, frequency, pf: Variabel global untuk menampung nilai dari sensor
  3. 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.
  4. 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.

One thought on “Cara Mengukur Penggunaan Daya Listrik AC Rumah Menggunakan Arduino dan Sensor PZEM-004T dengan LCD 20×4 I2C”

Tinggalkan Balasan

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






Hubungi Kami

Hubungi Kami

Kami menyediakan jasa proyek Arduino, Electrical, dan IoT (Internet of Things):
- Penyediaan komponen.
- Perancangan hardware dan software.
- Pemrograman.
- Hingga deploy server.


Cocok untuk hobi, edukasi (skripsi atau tugas akhir), dan industri.
Serahkan kepada kami, Anda tinggal terima hasil jadi!



Hubungi via WhatsApp



Ikuti Kami di TikTok (Inspirasi Project IoT)



Kunjungi YouTube Kami (Tutorial Project IoT)



Temukan Kami di Facebook



Beli Komponen Di GoLite Store