Visualización gráfica en tiempo real del consumo eléctrico en ca


En efecto gracias a la biblioteca PZEM-004T v3.0 para el monitor de energía Peacefair PZEM-004T-10A y PZEM-004T-100A v3.0 utilizando la interfaz ModBUS y una simple placa Arduino UNO podemos monitorizar el consumo eléctrico junto a otras variables eléctricas como la tensión , la frecuencia , el factor de potencia, etc

Es interesante destacar que debemos usar la ultima version del modulo, pues la versión 3.0 PZEM es una versión mejorada del antiguo PZEM-004T para el que puede encontrar la biblioteca aquí

Respecto a las conexiones eléctricas debemos tener especialmente cuidado en el conexionado de las clemas de BT , las cuales viene claramente especificadas en la hoja de característica del modulo PZEM que usemos, pues una parte es para la medida del voltaje ( la medición se hace en paralelo ) y la parte contigua es la parte de la medida de la Intensidad (la medida se toma en serie en versiones de menos intensidad maxima admisible, pero para la version de 100A se suele tomar con una bobina toroidal o con un pinza amperimétrica)

Peor tanto ,debemos extremar el cuidado especialmente en estas conexiones (las que van con tornillo).Observe por ejemplo las conexiones del modulo de 100amp usado para escribir este post:

Este módulo es una versión mejorada del PZEM-004T con funciones de medición de frecuencia y factor de potencia, disponible en los lugares habituales. Se comunica mediante una interfaz TTL sobre un protocolo de comunicación tipo Modbus-RTU, pero es incompatible con la biblioteca @olehs anterior que se encuentra aquí: https://github.com/olehs/PZEM004T .

Respecto a las conexiones del PZEM004 con Arduino Uno , estas no pueden ser mas simples:

  • TX ->GPIO12
  • RX ->GPIO11
  • GND->GND DE ARDUINO
  • VCC->5V DE ARDUINO

Especificaciones del fabricante

FunciónRango de mediciónResoluciónExactitudTODO: especificaciones realistas
Voltaje80 ~ 260 V0,1 V0,5%
Actual0 ~ 10A o 0 ~ 100A *0.01A o 0.02A *0,5%
Poder activo0 ~ 2,3kW o 0 ~ 23kW *0,1 W0,5%
Energia activa0 ~ 9999,99kWh1 Wh0,5%
Frecuencia45 ~ 65 Hz0,1 Hz0,5%
Factor de potencia0,00 ~ 1,000,011%

* Usando el transformador de corriente externo en lugar de la derivación incorporada

Compatibilidad

MCUSerie de hardwareSerie de softwareNo probadoEjemplos deNotas
ATmega168XHardware Serie Software Serie
ATmega328 ( Arduino Uno)( ✅ )✔️Hardware Serie Software SerieHW Serial entra en conflicto con la salida de depuración. Sin embargo, se puede usar sin tener ninguna salida de consola serie
ATmega2560 ( Arduino Mega)✔️✔️Hardware Serie Software Serie
ESP8266( ✅ )✔️SoftwareSerialHW Serial entra en conflicto con la salida de Debug Serial
ESP32✔️HardwareSerialSW Serial no es realmente necesario ya que ESP32 tiene 3 seriales HW con pines configurables
STM32 BluePillX

Principales características
  • Mide voltaje, corriente, potencia, energía, factor de potencia y frecuencia (nuevo en la versión 3.0)
  • 247 direcciones esclavas programables únicas
  • Contador de energía interno hasta 9999,99kWh
Otras características
  • Alarma de sobrecarga
  • Reinicio del contador de energía
  • Suma de comprobación CRC16
  • Aislamiento de red mejor, pero no perfecto

!Peligro de electrocución!

¡Asegúrese de que el dispositivo esté conectado a la alimentación de CA! Los 5V solo alimentan los optoacopladores, no el chip real. Además, tenga cuidado, ¡la tensión de ca es peligrosa! Si no sabe lo que estás haciendo, ¡puedes morir ! Eres responsable de su propia estupidez. Así que no sea estúpido.

Para ciertamente este montaje no conlleve ningún peligro debemos aislar ambas placas (por ejemplo en una caja de conexiones) para asegurarnos de que no recibimos ninguna descarga eléctrica fortuita .

Código arduino:


#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>

/* Use software serial for the PZEM
 * Pin 11 Rx (Connects to the Tx pin on the PZEM)
 * Pin 12 Tx (Connects to the Rx pin on the PZEM)
*/

SoftwareSerial pzemSWSerial(11, 12);
PZEM004Tv30 pzem;

void setup() {
  //Serial.begin(115200);
   Serial.begin(2000000);
  pzem = PZEM004Tv30(pzemSWSerial);
   
      Serial.println("Volts Amp Watts kWh Hz PF%: ");   
    

}

void loop() {
         
  //  Serial.print("Custom Address:");
 //   Serial.println(pzem.readAddress(), HEX);

    // Read the data from the sensor
    float  escala=10;
    float voltage = pzem.voltage()-2.2;
    float current = pzem.current() *escala;/*10*/
    
    float power = pzem.power()* escala;
    float energy = pzem.energy() * escala;
    float frequency = pzem.frequency();
    float pf = pzem.pf();

    // Check if the data is valid
    if(isnan(voltage)){
        Serial.println("Error reading voltage");
    } else if (isnan(current)) {
        Serial.println("Error reading current");
    } else if (isnan(power)) {
        Serial.println("Error reading power");
    } else if (isnan(energy)) {
        Serial.println("Error reading energy");
    } else if (isnan(frequency)) {
        Serial.println("Error reading frequency");
    } else if (isnan(pf)) {
        Serial.println("Error reading power factor");
    } else
    {

        // Print the values to the Serial console
       // Serial.print("Voltage: ");   
        Serial.print(voltage);
          ///   Serial.println("V");
        Serial.print(" ");

        
        //Serial.print("Current: "); 
       Serial.print(current);
       // Serial.println("A");
       Serial.print(" ");
               
        //Serial.print("Power: ");  
        Serial.print(power);      
       // Serial.println("W");
       Serial.print(" ");

               
       //Serial.print("Energy: ");   
        Serial.print(energy,3);  
        // Serial.print("kWh");
         Serial.print(" ");

       // Serial.print("Frequency: ");  
      Serial.print(frequency, 1); 
     //  Serial.println("Hz");
       Serial.print(" ");
        
      //Serial.print("PF: ");     
       Serial.print(pf);
      // Serial.println("PF: ");   
        Serial.print(" ");
    
    
     //delay(20);
  Serial.println();
 
   // delay(2000);
    }

}

Salida monitor serie

Podemos ver las medidas eléctricas separadas por espacios, las cuales son las siguintes :

  • Tensión en Voltios
  • Intensidad en Amperios
  • Potencia en Watios
  • Potencia en Kw/H
  • Frecuencia en Hercios
  • Factor de Potencia(coseno de fi)

Estas lecturas se han adaptado para que el serial plotter no tenga problemas a la hora de presentarlas de forma grafica en la linea del tiempo, pero como se observa también las podemos ver claramente desde el monitor serie:

Salida serial plotter

La salida grafica la conseguimos usando Serial Plotter del Arduino IDE.

El código Arduino debe modificarse tal y como se anexa en este post para poderse representarse correctamente

En el ejemplo se muestra el momento en que se enciende una lampara halógena de 35W.

Recordad por ultimo ,que como ya se ha indicado, el módulo PZEM-004T V3.0 es una versión mejorada de PZEM-004T V2.0 y además el protocolo para comunicar la interfaz es diferente, el programa de biblioteca para PZEM-004T V2 no se puede utilizar para interfaz con PZEM-004T V3.0.

Una respuesta a “Visualización gráfica en tiempo real del consumo eléctrico en ca

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.