DIY i projekty

Arduino jako miernik mocy – projekt DIY do monitorowania instalacji PV

👁 8 wyświetleń

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.

Powiązane artykuły