Ir para o conteúdo
Eletrônica União

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).

Segurança: Este projeto liga aparelhos na rede elétrica (127/220 V), que pode causar choque grave e incêndio. Faça as ligações da rede com o disjuntor DESLIGADO, use bornes e caixa fechada isolada, fios de bitola adequada e nunca toque na placa energizada. Se não tiver experiência com instalação elétrica, peça ajuda a um eletricista. Os bornes de tensão do PZEM ficam energizados: monte o módulo em caixa fechada. O TC abraça o fio isolado e não precisa cortá-lo.

Esquema de ligações

123456789101112Arduino5VGNDD11D12A4A5LCD I2CVCCGNDSDASCLRedeFaseNeutroFusível 1AABTCterminaisPZEM5VGNDTXRXN (tensão)CTL (tensão)

Vermelho = alimentação (+), preto = terra (GND/−). As etiquetas indicam ligação com a fonte ou bateria; os números correspondem à tabela abaixo.

#DeParaObservação
1PZEM: 5VArduino: 5V
2PZEM: GNDArduino: GND
3PZEM: TXArduino: D11RX do SoftwareSerial
4PZEM: RXArduino: D12TX do SoftwareSerial
5LCD I2C: VCCArduino: 5V
6LCD I2C: GNDArduino: GND
7LCD I2C: SDAArduino: A4
8LCD I2C: SCLArduino: A5
9Rede: FaseFusível 1A: Adisjuntor desligado!
10Fusível 1A: BPZEM: L (tensão)
11Rede: NeutroPZEM: N (tensão)
12TC: terminaisPZEM: CTpasse 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

  1. Instale a biblioteca PZEM004Tv30 (mandulaj) e a LiquidCrystal I2C.
  2. 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.
  3. Com o disjuntor DESLIGADO: bornes de tensão do PZEM em fase e neutro (com fusível de 1 A na fase).
  4. Abra o TC, passe somente o fio fase da carga por dentro e feche.
  5. Religue e confira a tensão no display contra um multímetro.

Ferramentas

Computador com Arduino IDE
Multímetro
Chave de fenda isolada