Po co budować własny miernik mocy?
Gotowe mierniki energii kosztują od kilkudziesięciu do kilkuset złotych i często są zamkniętymi urządzeniami bez możliwości integracji. Własny miernik na Arduino to rozwiązanie dla hobbystów, którzy chcą pełnej kontroli nad danymi: możesz go zintegrować z projektem na ESP32, wysłać dane przez MQTT do Home Assistant, wyświetlić na LCD lub zalogować do pliku CSV.
Wymagane komponenty
- Arduino Uno / Nano / Mega – do podstawowej wersji z LCD
- PZEM-004T v3.0 – moduł pomiaru napięcia AC, prądu, mocy, energii i częstotliwości (do 100 A z transformatorem CT). Koszt: ok. 30–50 zł na Aliexpress.
- Wyświetlacz LCD 16×2 + I2C adapter – wyświetlanie wartości na bieżąco (ok. 15 zł)
- Konwerter poziomów logicznych 3.3/5V – jeśli używasz ESP8266/ESP32 (logika 3.3 V) z PZEM (5 V UART)
- Zasilacz 5V 1A lub złącze USB do zasilania Arduino
- Przewody, płytka prototypowa
Schemat połączeń PZEM-004T z Arduino
PZEM-004T komunikuje się przez UART (TTL). Połączenia:
- PZEM TX → Arduino RX (pin 10 w SoftwareSerial)
- PZEM RX → Arduino TX (pin 11 w SoftwareSerial)
- PZEM VCC → Arduino 5V
- PZEM GND → Arduino GND
- Linia fazowa → przez transformator CT na wejście prądowe PZEM
- Napięcie fazowe → bezpośrednio do wejścia napięciowego PZEM (przez bezpiecznik!)
Bezpieczeństwo: Wejście napięciowe PZEM podłączone jest do sieci 230 V! Zawsze odcinaj zasilanie przed podłączaniem lub rozłączaniem przewodów. Nieodpowiednie podłączenie może być śmiertelnie niebezpieczne.
Kod Arduino – odczyt podstawowych parametrów
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
SoftwareSerial pzemSerial(10, 11); // RX, TX
PZEM004Tv30 pzem(pzemSerial);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
}
void loop() {
float napiecie = pzem.voltage();
float prad = pzem.current();
float moc = pzem.power();
float energia = pzem.energy();
float czestotliwosc = pzem.frequency();
float wspolczynnik = pzem.pf();
if (!isnan(napiecie)) {
Serial.print("U="); Serial.print(napiecie); Serial.print(" V | ");
Serial.print("I="); Serial.print(prad); Serial.print(" A | ");
Serial.print("P="); Serial.print(moc); Serial.println(" W");
lcd.setCursor(0, 0);
lcd.print("U="); lcd.print(napiecie,1); lcd.print("V P="); lcd.print((int)moc); lcd.print("W");
lcd.setCursor(0, 1);
lcd.print("I="); lcd.print(prad,2); lcd.print("A E="); lcd.print(energia,1); lcd.print("k");
} else {
lcd.setCursor(0,0); lcd.print("Brak danych! ");
}
delay(2000);
}
Wersja z ESP32 i MQTT
Zastąp Arduino Uno płytką ESP32 (np. ESP32 DevKit v1). ESP32 ma wbudowane Wi-Fi i Bluetooth – możesz wysyłać dane pomiarowe przez MQTT do Home Assistant lub InfluxDB.
#include <WiFi.h>
#include <PubSubClient.h>
#include <PZEM004Tv30.h>
const char* ssid = "TwojaWiFi";
const char* password = "Haslo123";
const char* mqttBroker = "192.168.1.100";
WiFiClient espClient;
PubSubClient mqtt(espClient);
PZEM004Tv30 pzem(Serial2, 16, 17); // Serial2 na ESP32
void setup() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
mqtt.setServer(mqttBroker, 1883);
}
void loop() {
if (!mqtt.connected()) { mqtt.connect("pzem-sensor"); }
mqtt.loop();
char buf[16];
dtostrf(pzem.power(), 6, 1, buf);
mqtt.publish("dom/miernik/moc", buf);
dtostrf(pzem.voltage(), 6, 1, buf);
mqtt.publish("dom/miernik/napiecie", buf);
delay(5000);
}
Logowanie danych do pliku CSV (Python)
Jeśli podłączysz Arduino do komputera przez USB, możesz logować dane portu szeregowego do pliku CSV:
import serial, csv, datetime
ser = serial.Serial("/dev/ttyUSB0", 115200)
with open("log_pv.csv", "a") as f:
writer = csv.writer(f)
while True:
line = ser.readline().decode().strip()
writer.writerow([datetime.datetime.now().isoformat(), line])
f.flush()
Rozbudowa projektu
- Dodaj drugi moduł PZEM do pomiaru osobno produkcji PV i zużycia domu
- Integracja z wyświetlaczem OLED 128×64 – estetyczniejszy wygląd
- Powiadomienia Telegram gdy moc przekroczy progi
- Zasilanie z baterii LiPo + ładowarka solar – miernik całkowicie autonomiczny
Jeśli chcesz nauczyć się programować Arduino od podstaw lub rozbudować swój projekt, polecam platformę Umiej.pl z kursami programowania w C/C++ i PHP, a szczegółowe poradniki konfiguracyjne dla projektów IoT na Linuksie znajdziesz na iPraktyk.pl.
Jeśli masz stary laptop lub komputer, który mógłby pełnić rolę stacji logowania danych, zanim go wyrzucisz – warto go naprawić lub zmodernizować. Wiele serwisów, np. serwis komputerowy, może sprawdzić sprzęt i doradzić, czy warto go zostawić jako serwer IoT.
Podsumowanie
Własny miernik mocy na Arduino z PZEM-004T to projekt dostępny dla każdego elektronika-amatora. Koszt poniżej 100 zł, a możliwości praktycznie nieograniczone. To doskonały punkt wejścia do świata monitoringu energetycznego – i świetny projekt weekendowy, który nauczy cię podstaw pomiarów elektrycznych, komunikacji UART i obsługi wyświetlaczy.