Medidor do Consumo Elétrico com Arduino e Módulo PZEM004T

Neste experimento vamos usar o módulo PZEM004T para fazer um medidor do consumo da energia elétrica com Arduino


Para avaliar o real consumo dos aparelhos elétricos, devemos analisar pelo menos quatro medidas:

  • Tensão elétrica: Também conhecida como DDP, é a diferença de potencial elétrico entre dois pontos. Sua unidade de medida é o volt (V) em homenagem ao físico italiano Alessandro Volta;
  • Corrente elétrica: É o deslocamento de cargas dentro de um condutor, quando existe uma diferença de potencial elétrico entre as extremidades. Sua unidade é o ampere (A) em homenagem ao físico francês André-Marie Ampère;
  • Potência elétrica: É o trabalho realizado pela corrente elétrica em um determinado intervalo de tempo. Sua unidade é o watt (W) em homenagem ao matemático escocês James Watt ;
  • Consumo energético: É a energia elétrica consumida por um aparelho durante um determinado período de funcionamento. Sua unidade é o watt-hora (Wh).

Para realizar essa medições normalmente precisamos usar vários componentes, sendo que a montagem final do protótipo pode ficar um pouco complexa.

Para resolver esse problema surgiu o módulo PZEM004T que reúne todas essas funções em uma única placa…

O módulo PZEM004T

Módulo PZEM004T
Módulo PZEM004T

Com esse módulo é possível realizar todas medições citadas anteriormente. Além disso, estão disponíveis algumas funções para estabelecermos alarmes de consumo e totalizadores.
A PZEM004T funciona independentemente do Arduino e se comunica com este através da interface serial: O Arduino envia comandos e o módulo devolve os dados.

Vejamos algumas medidas realizadas e suas especificações:

  • Potência:  0 ~ 22 kW
  • Energia: 0 ~ 9999 kWh
  • Tensão:  80 ~ 260 VAC
  • Corrente: 0 ~ 100 A

Hardware necessário

  • Arduino ou compatível. Pode-se usar as placas derivadas do ESP8266, como o NodeMCU mas, nesse caso, será necessário um conversor lógico 3.3V → 5V;
  • Módulo PZEM004T;
  • Aparelho elétrico. Neste experimento, usei uma lâmpada de 15 Watts.

Onde Comprar:

Essa placa de fabricação chinesa é muito difícil encontrar no Brasil.
Existem algumas peças no Mercado Livre ou pode importar. Sua documentação também é escassa. Os demais componentes, você encontra aqui:

Curto Circuito – Componentes Eletrônicos e Acessórios

 Software necessário

PZEM004T Library

Essa library faz todo o trabalho de comunicação com o módulo, disponibilizando alguns métodos de fácil  utilização.
Inicialmente devemos informar quais pinos (TX,RX) iremos usar para estabelecer a comunicação serial e qual o endereço IP. Esses comandos serão descritos no próprio sketch demonstrado abaixo.

Esquema de montagem

Essa placa possui 2 conjuntos de conectores nas suas extremidades.
De um lado ligaremos à rede elétrica (AC) que desejamos medir, bem como com o sensor de corrente não invasivo.
O outro conector é ligado à interface serial do Arduino (TX/RX). Aqui usamos os pinos 10 e 11 (através da library SoftSerial)

PZEM004T - Esquema de ligação
PZEM004T – Esquema de ligação

Vídeo Demonstração

O sketch

#include <SoftwareSerial.h> 
#include <PZEM004T.h>

PZEM004T pzem(10,11);  // RX,TX
IPAddress ip(192,168,1,1);

void setup() {
  Serial.begin(9600);
  pzem.setAddress(ip);
}

void loop() {

  delay(5000);
  
  float v = pzem.voltage(ip);
  if (v < 0.0) v = 0.0;
  Serial.print(v);Serial.print("V; ");

  float i = pzem.current(ip);
  if(i >= 0.0){ Serial.print(i);Serial.print("A; "); }
  
  float p = pzem.power(ip);
  if(p >= 0.0){ Serial.print(p);Serial.print("W; "); }
  
  float e = pzem.energy(ip);
  if(e >= 0.0){ Serial.print(e);Serial.print("Wh; "); }

  Serial.println();


}

Referências

Conclusão

Vantagens de usar o módulo PZEM004T em seus projetos:

  • Espaço reduzido;
  • Facilidade na montagem e na programação.

Desvantagem:

  • Custo, o que é discutível visto que, caso você não use esse módulo, terá que comprar mais de um dispositivo para substituí-lo

Espero ter ajudado!
Como sempre, recomendo fazer essa montagem com muito cuidado, pois envolve alta tensão.

Até a próxima…

 

27 comentários em “Medidor do Consumo Elétrico com Arduino e Módulo PZEM004T”

  1. AVISO: a biblioteca PZEM004T-master alega rodar em arquitetura(s) [avr] e pode ser incompatível com sua placa atual, que roda em arquitetura(s) [esp8266].

    Usando o Wemos Mini tenho o seguinte erro, poderia dar uma ajuda?

    1. Ola Marcelo, Com a placa Wemos, temos 2 problemas a serem resolvidos:
      1) A tensão fornecida por ele é 3.3V
      2) A biblioteca talvez não seja compatível.

      No primeiro caso terá que usar um conversor lógico 3.3V para 5V na comunicação serial
      No segundo caso, se a lib não der certo terá que usar os comando AT diretamente.

      1. Marcelo, você já conseguiu conectar a pzem na WEMOS? Pois, pensando bem, a WEMOS possui uma saída de 5V que pode ser usada.

        1. Ele pode ter 5V “extra” nativo, mas as tensão da lógica dos pinos que muda, e é esse o problema, ao que parece. Digo isso porque o UNOR3 tem saídas 5V nas portas, e portanto é incompatível com o ESP (mesmo tendo um pino 3,3V no UNO). Ou seja, é a tensão das portas e não as que encontramos nas placas que parece ser o problema.

  2. Olá tudo bem? Sabe me dizer se é possível trabalhar num projeto com dois sensores deste e Arduíno, para fazer medição de consumo de uma residencia bifásica, F+F+N?

    1. Olá Júlio!
      Pesquisei sobre isso, mas ainda não encontrei a solução. Assim que souber de alguma forma de fazer isso, te comunico

  3. Caríssimos, comprei vários PZEM004T e tenho um WemosD1 Wifi e tenho um problema, grave. Não consigo colocar nenhum PZEM a dar sinal de vida. Já usei várias livrarias, nenhuma funciona. Tenho um problema inicial, penso que os pinos usados são o 1 e 3, conforme pinout: https://forum.wemos.cc/assets/uploads/files/1491123926188-wemos-d1r2-pinout.jpeg.
    Nada funciona, mesmo ligado ao PC directamente com um conversor USB e software Peacefair apesar dos leds do conversor ficarem ativos.
    Qualquer ajuda é bem vinda.

  4. Olá José …..
    Fiz tudo conforme o indicado no blog …
    Arduino UNO com IDE 1.8.5 e o módulo PZEM004T

    Aparentemente o funcionamento está OK porém a leitura da corrente mostrada no monitor serial é sempre igual a -1 …. alguma dica de onde pode estar o problema ?

    Obrigado

      1. Olá José
        Obrigado pela sua pronta resposta porém acabei achando o problema (era um dos fios que liga o Pzem ao Arduino que não foi bem montado e não estava passando o sinal).
        Agora tudo funcionando conforme as especificações do blog…
        Aproveitando a oportunidade gostaria de saber se você tem algum outro projeto (mais completo) do pzem com arduino ou esp 12f ?
        Abraços

        1. Olá Edmundo! Fico Feliz.
          Especificamente com o PZEM ainda não tenho um projeto, mas com o ESP (nodeMCU) em breve vou postar mais tutoriais.
          Abraço

          1. Prezado José
            Agradeço sua atenção para as minhas dificuldades mas é que estou no meio de um projetinho de medição de energia caseiro.
            Se me permite uma última pergunta e depois aguardarei as suas novas publicações sobre esse assunto.
            Sob o ponto de vista de ligação física …
            Sei que o nodemcu funciona em 3,3v e o pzen em 5v.
            Se eu ligar o nodemcu12f em uma entrada de 3,3v e o pzen numa outra entrada de 5v os pinos de comunicação (tx e rx) do pzem são conectados diretamente nos pinos (x e y) do nodemcu ou preciso de alguma coisa adicional para essa ligação)
            Mais uma vez obrigado pela sua atenção

  5. José Cintra, deixo registrado aqui a minha gratidão, funcionou perfeitamente!, que Deus lhe abençoe por compartilhar seus conhecimentos.

      1. Bom dia amigo, muito interessante e obrigado por Compartilhar seu conhecimento conosco. Vc tem algum email para que eu possa trocar uma ideia com vc amigo, sou iniciante no arduino mas tenho conhecimento em programação. Se puder discutir algumas informações segue meu email irmao erickalves1981@gmail.com e Zap 92981861662. Obrigado !

  6. Prezado José
    Estou tendo problemas com PZEM004T, voltagem e corrente estão corretas no lcd, mas os valores de potencia e kw estão errados, será defeito na placa?

    hardware:
    arduino nano v3
    Funduino Nano Expansion Board
    PZEM-004T
    display LCD 16×2 + I2C
    fonte chaveada 12V DC

    ligações:
    PZEM-004T pinos D11 RX, D10 TX, vcc e gnd na Expandion Board
    display LCD 16×2 + I2 pinos A4 sda, A3 SLC, vcc e gnd na Expandion Board
    fonte chaveada ligada pelo plug P4 a Expansion Board.

    1. Olá José, não creio que seja um problema na placa, pois os valores de potência e kw são calculados.
      Será que não é sobreposição dos valores no lcd? Tente mostrar apenas a potência e o kw para ver o que acontece…

  7. Olá José,
    sou iniciante em Arduíno e com seus tutoriais tenho conseguido ótimos resultados.
    mas sobre pzem fiz um sketch para exibir os valores via web tendo como resultado somente zero, e possível fazer?
    desde já meu muito obrigado!

    ex:
    #include
    #include
    #include

    byte mac[] = {
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    PZEM004T pzem(10,11); // RX,TX
    IPAddress ip(192, 168, 1, 1);

    EthernetServer server(80);

    void setup() {
    Serial.begin(9600);
    pzem.setAddress(ip);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }

    Ethernet.begin(mac, ip);
    server.begin();
    Serial.print(“server is at “);
    Serial.println(Ethernet.localIP());
    }
    void loop() {
    EthernetClient client = server.available();
    if (client)
    { boolean currentLineIsBlank = true;
    while (client.connected())
    {if (client.available())
    { char c = client.read();
    if (c == ‘\n’ && currentLineIsBlank)
    { delay(5000);
    float v = pzem.voltage(ip);
    if (v = 0.0){ Serial.print(i);Serial.print(“A; “); }
    float p = pzem.power(ip);
    if(p >= 0.0){ Serial.print(p);Serial.print(“W; “); }
    float e = pzem.energy(ip);
    if(e >= 0.0){ Serial.print(e);Serial.print(“Wh; “); }
    Serial.println();
    client.println(“HTTP/1.1 200 OK”);
    client.println(“Content-Type: text/html”);
    client.println(“Connnection: close”);
    client.println();
    client.println(“”);
    client.println(“”);
    client.println(“”);
    client.println(“Medidor Enel”);
    client.println(“”);
    client.println(“”);
    client.println(“Leitura Medidor Enel”);
    client.println(v);client.print(“V; “);
    client.println(i);client.print(“A; “);
    client.println(p);client.print(“W; “);
    client.println(e);client.print(“WH; “);
    client.println(“”);
    client.println(“”);
    break;
    }

    if (c == ‘\n’)
    {
    currentLineIsBlank = true;
    }
    else if (c != ‘\r’)
    {
    currentLineIsBlank = false;
    }
    }
    }

    delay(1);
    client.stop();

    }
    }

  8. olá, tudo bem?
    estou ligando o PZEM004T no arduino Mega 2560,
    copiei e colei seu codigo mas no monitor serial só aparece 0V.
    poderia me ajudar nesse projeto ?
    obrigado

  9. O esquema de ligação para medição dessas grandezas em um equipamento bifásico é a mesma do citado acima? Pois realizei a medição de uma lampada bivolt, tanto em 127V quanto em 220V, porém a corrente permaneceu a mesma em ambas as tensões, o que achei estranho. Alguém pode me ajudar?

  10. Olá. Já tem uns quinze dias que tento comunicar o PZEM004Tv3 com um ESP32 usando a Serial2. Já usei vários códigos, mas sem sucesso. Vejo que o PZEM até recebe pelo RX (GPIO 16) mas nunca responde nada pelo TX (GPIO17). Agradeço qualquer ajuda.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *