Amigos lectores , probablemente recordareis el famoso modulo de medida electrica PZEM004. Ciertamente la versión PZEM-004T V3.0 o versión 3.0 era la versión actualizada para reemplazar la antigua PZEM004T V1.0 dado que la versión anterior se ha agotado desde hace bastante tiempo en la mayor parte de las tiendas en línea y ya no se producen ( de hecho se necesitan librerías especiales para poder usarlo). La versión actualizada de PZEM004T sigue siendo interesante para proyectos, donde necesitamos medir el voltaje, la corriente, la potencia, la energía, la frecuencia, el factor de potencia (la frecuencia y el PF se agregan adicionales en la nueva versión) utilizando Arduino / ESP8266 -ESP32/ / Raspberry Pi como plataforma de código abierto.
Ahora bien, si bien PZEM-004T V3.0 o versión 3.0 sigue siendo una versión funcional por el momento, desde hace un año aproximadamente, tenemos disponible una nueva versión: la versión PZEM-004T-100A-D-P (v1.0). Esta nueva versión ser caracteriza por su mayor precisión y respuesta rápida, con u na versión mejorada de pulso de PIN que facilita la integración en PCB y la medición de potencia con menor error de calibración.
Utiliza una interfaz de comunicación UART a TTL con una velocidad de baudios de 9600, y emplea el protocolo Modbus-RTU para la capa de aplicación, soportando funciones como lectura de registros, escritura de registros, calibración y limpieza de potencia cero. La comprobación CRC se realiza en un formato de 16 bits con un polinomio específico.
En cuanto a los parámetros del producto, el modelo Pzem-004t-100A-d-p v1.0 (como el antiguo PZEM-004T V3.0) permite medir corrientes de hasta 100A y voltajes entre 80 y 260V, con una potencia activa máxima de 2.3KW y un factor de potencia de hasta 1.00. La frecuencia operativa va de 45Hz a 65Hz, y cuenta con una función de alarma para exceso de potencia. La comunicación se realiza a través de una interfaz TTL, y el dispositivo opera en un rango de temperatura de -20℃ a +60℃.
Este es el aspecto del nuevo modelo donde como vemos se puede observar que el diseño se ha cambiado para poder soldar el modulo en una placa o incluso enchufar en una placa proto board prescindiendo de conectores.
Asimismo tenemos un nuevo pin: el pin CF de salida de pulsos, por lo que también han cambiado el diseño incluyendo un nuevo optoacoplador en la propia placa
El pin CF (Frequency Output) en el PZEM-004T-100A-D-P (v1.0) se utiliza para proporcionar una salida de frecuencia proporcional a la potencia activa medida. Esta señal de frecuencia puede ser utilizada para monitorear y registrar el consumo de energía en tiempo real, y mas adelante en el código arduino veremos cual es su utilidad.
Como en versiones anteriores, la interfaz TTL de este módulo es una interfaz pasiva y necesita una fuente de alimentación externa de 5V, es decir, los cuatro puertos (5V, RX, TX y GND) debe estar conectado durante la comunicación; de lo contrario, la comunicación falla.
Por ultimo la temperatura de funcionamiento del modulo va entre -20 ℃ ~ + 60 ℃.
Conexiones con un ESP32
Las conexiones no han cambiado respecto a la configuraciones antiguas a excepción de que tenemos un hilo mas( el pin CF) .Para conectar el PZEM-004T-100A-D-P (v1.0) al ESP32 WROOM 32 usando los GPIO 16, 17 y 4, sigue estos pasos:
Conexiones de alimentación:- Conecta el pin VCC del PZEM-004T al pin de 5V del ESP32.
- Conecta el pin GND del PZEM-004T al pin GND del ESP32.
- Conecta el pin RX del PZEM-004T al pin GPIO 16 (TX2) del ESP32.
- Conecta el pin TX del PZEM-004T al pin GPIO 17 (RX2) del ESP32.
- Conecta el pin CF del PZEM-004T al pin GPIO 4 del ESP32.
- Conecta los terminales de entrada de CA del PZEM-004T a la fuente de alimentación de CA que deseas medir. Asegúrate de seguir las precauciones de seguridad al trabajar con corriente alterna.
- Conexión de la bobina del sensor de corriente:Pasa el cable de la carga a través del agujero de la bobina del sensor de corriente (CT) del PZEM-004T. Esto permitirá medir la corriente que pasa a través del cable.
A continuación podemos ver el esquema del montaje final:
Ejemplo de código ARduino probado con la nueva versión del PZEM004
El siguinte nuevo código Arduino con el pzem004 le permite medir el voltaje de CA, la corriente de CA, la potencia, la energía, la frecuencia y el factor de potencia en la interfaz serie con el microcontrolador Arduino. Ademas tambien usaremos leos pulsos CF .
La biblioteca de PZEM-004t V30 funciona tanto en serie de hardware como en serie de software con este nuevo modulo. El resultado de todos los parámetros se imprime en el monitor serie de Arduino IDE. Este código de biblioteca se ha usado con un ESp32 pero debería funcionar también con arduino uno, arduino mega y nano board.
CODIGO ARDUINO:
#include <PZEM004Tv30.h> #include <HardwareSerial.h> // Definir los pines de conexión #define RX_PIN 17 #define TX_PIN 16 #define CF_PIN 5 // Crear una instancia del objeto HardwareSerial HardwareSerial PZEMSerial(2); // Crear una instancia del objeto PZEM PZEM004Tv30 pzem(PZEMSerial, RX_PIN, TX_PIN); // Variables para contar los pulsos del pin CF volatile unsigned long pulseCount = 0; unsigned long lastPulseTime = 0; void IRAM_ATTR onPulse() { pulseCount++; lastPulseTime = millis(); } void setup() { Serial.begin(115200); Serial.println("Iniciando PZEM004T con ESP32"); // Iniciar la comunicación serial con el PZEM PZEMSerial.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); // Configurar el pin CF como entrada y adjuntar la interrupción pinMode(CF_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(CF_PIN), onPulse, RISING); } void loop() { // Leer las variables eléctricas float voltage = pzem.voltage(); float current = pzem.current(); float power = pzem.power(); float energy = pzem.energy(); float frequency = pzem.frequency(); float pf = pzem.pf(); // Mostrar las variables en el monitor serie Serial.print("Voltaje: "); Serial.print(voltage); Serial.println(" V"); Serial.print("Corriente: "); Serial.print(current); Serial.println(" A"); Serial.print("Potencia: "); Serial.print(power); Serial.println(" W"); Serial.print("Energía: "); Serial.print(energy); Serial.println(" Wh"); Serial.print("Frecuencia: "); Serial.print(frequency); Serial.println(" Hz"); Serial.print("Factor de Potencia: "); Serial.println(pf); // Mostrar el conteo de pulsos del pin CF Serial.print("Pulsos CF: "); Serial.println(pulseCount); // Esperar un segundo antes de la siguiente lectura delay(1000); }
Este código Arduino configura un ESP32 para comunicarse con un módulo PZEM-004T-100A-D-P (v1.0) a través de los pines RX (17) y TX (16), y utiliza el pin CF (5) para contar pulsos de frecuencia. En el setup
, se inicializa la comunicación serial y se configura una interrupción en el pin CF.
El pin CF (Frequency Output) del PZEM-004T-100A-D-P (v1.0) se utiliza para proporcionar una señal de frecuencia que es proporcional a la potencia activa medida por el módulo. Esta señal de frecuencia puede ser utilizada para monitorear y registrar el consumo de energía en tiempo real.
En el código Arduino, el pin CF está conectado al GPIO 5 del ESP32 y se configura una interrupción para contar los pulsos generados por el pin CF. Cada pulso representa una cantidad específica de energía consumida, y al contar estos pulsos, se puede calcular el consumo total de energía.
Aquí un resumen de cómo se usa el pin CF en el código:
-
Configuración del pin CF: En el
setup
, se configura el pin CF como entrada y se adjunta una interrupción para contar los pulsos. -
Interrupción: La función
onPulse
se llama cada vez que se detecta un pulso en el pin CF, incrementando el contador de pulsos. -
Lectura de pulsos: En el
loop
, se muestra el conteo de pulsos en el monitor serie, lo que permite monitorear el consumo de energía en tiempo real.
Por ultimo en el loop
, se leen y muestran en el monitor serie las variables eléctricas (voltaje, corriente, potencia, energía, frecuencia y factor de potencia) y el conteo de pulsos del pin CF, con un retraso de un segundo entre lectura.
A continuación para terminal un ejemplo de salida del monitor serie usando el montaje explicado:
Espero amigo lector que si adquiera un modulo de estos, sepa darle utilidad.