Medidor de consumo de energia da casa ou de um aparelho (PZEM-004T + display)
Sensores · Intermediário · Tempo: 3 horas
O módulo PZEM-004T v3 mede a rede com um transformador de corrente (TC) que abraça o fio, e entrega os valores prontos pela serial.
Como funciona
O PZEM-004T v3.0 calcula tensão (80–260 V), corrente (até 100 A com o TC fechado), potência ativa, energia (kWh), frequência e fator de potência. O Arduino só lê os valores pelo protocolo Modbus com a biblioteca PZEM004Tv30.
O display alterna duas telas a cada 3 s: tensão e corrente / potência, kWh e custo (kWh × TARIFA; use o valor com impostos da sua conta).
A energia acumulada fica guardada dentro do PZEM e não se perde quando falta luz. Para medir um aparelho, passe pelo TC só o fio fase que vai até ele; para a casa inteira, a fase que sai do disjuntor geral (em casas bifásicas use um medidor por fase).
Esquema de ligações
Vermelho = alimentação (+), preto = terra (GND/−). As etiquetas indicam ligação com a fonte ou bateria; os números correspondem à tabela abaixo.
| # | De | Para | Observação |
|---|---|---|---|
| 1 | PZEM: 5V | Arduino: 5V | |
| 2 | PZEM: GND | Arduino: GND | |
| 3 | PZEM: TX | Arduino: D11 | RX do SoftwareSerial |
| 4 | PZEM: RX | Arduino: D12 | TX do SoftwareSerial |
| 5 | LCD I2C: VCC | Arduino: 5V | |
| 6 | LCD I2C: GND | Arduino: GND | |
| 7 | LCD I2C: SDA | Arduino: A4 | |
| 8 | LCD I2C: SCL | Arduino: A5 | |
| 9 | Rede: Fase | Fusível 1A: A | disjuntor desligado! |
| 10 | Fusível 1A: B | PZEM: L (tensão) | |
| 11 | Rede: Neutro | PZEM: N (tensão) | |
| 12 | TC: terminais | PZEM: CT | passe só a FASE da carga pelo TC |
Código-fonte Arduino (C/C++)
// Medidor de consumo com PZEM-004T v3 + LCD 16x2 I2C
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const float TARIFA = 0.95; // R$ por kWh, com impostos (veja sua conta)
SoftwareSerial pzemSerial(11, 12); // RX (liga no TX do PZEM), TX (liga no RX do PZEM)
PZEM004Tv30 pzem(pzemSerial);
LiquidCrystal_I2C lcd(0x27, 16, 2); // ou 0x3F
bool tela = false;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.print("Medidor energia");
}
void loop() {
float v = pzem.voltage(), a = pzem.current(), w = pzem.power(), kwh = pzem.energy();
lcd.clear();
if (isnan(v)) {
lcd.print("PZEM sem leitura");
lcd.setCursor(0, 1); lcd.print("Confira TX/RX");
} else if (!tela) {
lcd.print(v, 1); lcd.print(" V "); lcd.print(pzem.frequency(), 0); lcd.print(" Hz");
lcd.setCursor(0, 1); lcd.print(a, 2); lcd.print(" A FP "); lcd.print(pzem.pf(), 2);
} else {
lcd.print(w, 0); lcd.print(" W");
lcd.setCursor(0, 1); lcd.print(kwh, 2); lcd.print("kWh R$"); lcd.print(kwh * TARIFA, 2);
}
Serial.print(v); Serial.print(" V, "); Serial.print(a); Serial.print(" A, ");
Serial.print(w); Serial.print(" W, "); Serial.print(kwh, 3); Serial.println(" kWh");
tela = !tela;
delay(3000);
}
Referências
Circuito baseado na documentação oficial dos fabricantes e bibliotecas:
Montagem
- Instale a biblioteca PZEM004Tv30 (mandulaj) e a LiquidCrystal I2C.
- Lado de baixa tensão: PZEM 5V e GND no Arduino; TX do PZEM no pino 11 e RX do PZEM no pino 12. Display I2C em A4/A5.
- Com o disjuntor DESLIGADO: bornes de tensão do PZEM em fase e neutro (com fusível de 1 A na fase).
- Abra o TC, passe somente o fio fase da carga por dentro e feche.
- Religue e confira a tensão no display contra um multímetro.
Ferramentas
Computador com Arduino IDE
Multímetro
Chave de fenda isolada
