Medidor de energía IoT con Cayenne Dashboard usando PZEM-004T v3 y ESP8266


Debido al aumento de los costos de energía, las personas están encontrando formas de monitorear su consumo de energía para tomar medidas de ahorro de energía para su hogar. El objetivo de este proyecto es hacer un medidor de energía de bricolaje usando el PZEM-004T v3 para monitorear su consumo de energía, y dado que IoT es la nueva norma para el monitoreo remoto, también podemos conectar el medidor de energía con un tablero de IoT a través de Wi-Fi.

Esta conexión la haremos usando el mini microcontrolador ESP8266 para visualizar las lecturas del medidor en línea donde puede acceder usando su ordenador o teléfono inteligente a traves de la app de Cayenne.

Componentes de hardware y software:

Hardware:

  • Medidor de energía PZEM-004T-100A v3
  • ESP8266 con cable ( también nos sirve cualquier controlador de la família ESP8266 como Wemos D1 Mini)
  • Cables de puente macho – hembra
  • Tablero de circuitos

Software:

  • IDE de Arduino

Plataforma en línea:

  • Cayenne IoT

El medidor de energía PZEM-004T-100A v3

  • Rango de medida de 100A utilizando un transformador externo
  • Se utiliza principalmente para medir voltaje CA, corriente, potencia, energía, frecuencia y factor de potencia
  • Sin función de visualización
  • La capa física utiliza la interfaz de comunicación UART a RS485
  • La capa de aplicación utiliza el protocolo Modbus-RTU para comunicarse
  • Los datos se leen a través de la interfaz TTL que se puede conectar directamente con microcontroladores basados ​​en Arduino o ESP sin necesidad de ningún convertidor adicional

CARASTERICTICAS FUNDAMENTALES:

Tipo de producto:Módulo de comunicación AC

Modelo de producto:PZEM-004T

Función del producto:

Este documento describe la especificación del módulo de comunicación de CA PZEM-004T, el módulo se utiliza principalmente para medir la tensión de CA, la corriente, la potencia activa, la frecuencia, el factor de potencia y la energía activa, el módulo es sin función de visualización, los datos se leen a través de la interfaz TTL.

PZEM-004T-10A: Rango de medición 10A (Shunt incorporado)

PZEM-004T-100A: Rango de medición 100A (transformador externo)

Rango de medición:

Tensión
Rango de medición:80~260V
Resolución: 0.1V
Precisión de medición: 0,5%.
Corriente
Rango de medición: 0~10A(PZEM-004T-10A); 0~100A(PZEM-004T-100A)
Corriente de medición inicial: 0,01A(PZEM-004T-10A); 0,02A(PZEM-004T-100A)
Resolución: 0.001A
Precisión de medición: 0,5%.
Potencia activa
Rango de medición: 0~2.3kW(PZEM-004T-10A); 0~23kW(PZEM-004T-100A)
Potencia de medición inicial: 0,4W
Resolución: 0.1W
Formato de visualización:
<1000W, muestra un decimal, como: 999.9W

≥1000W, muestra sólo números enteros, como: 1000W

Precisión de medición: 0,5%.
Factor de potencia
Rango de medición: 0.00~1.00
Resolución: 0.01
Precisión de medición: 1%.
Frecuencia
Rango de medición: 45Hz~65Hz
Resolución: 0,1Hz
Precisión de medición: 0,5%.
Energía activa
Rango de medición: 0~9999.99kWh
Resolución: 1Wh
Precisión de medición: 0,5%.
Formato de visualización:
<10kWh, la unidad de visualización es Wh(1kWh=1000Wh), como: 9999Wh

≥10kWh, la unidad de visualización es kWh, como por ejemplo 9999.99kWh

Restablecimiento de la energía: utilice el software para restablecer.
Alarma de sobre potencia
El umbral de potencia activa se puede establecer, cuando la potencia activa medida supera el umbral, puede alarmar

Interfaz de comunicación
Interfaz TTL。

Protocolo de la capa física
La capa física utiliza la interfaz de comunicación UART a TTL

La velocidad de transmisión es de 9600, 8 bits de datos, 1 bit de parada, sin paridad

¿Cómo mide?

El medidor utiliza un transformador de corriente para medir la corriente. Está diseñado para producir una corriente alterna en su devanado secundario que es proporcional a la corriente que se mide en su primario. Reduce las corrientes de alto voltaje a un valor mucho más bajo y proporciona una forma conveniente de monitorear de manera segura la corriente eléctrica real que fluye en una línea de transmisión de CA.

INSTALAR ESP8266 EN IDE ARDUINO

Actualmente configurar el entorno de Arduino para funcionar con las placas de desarrollo de ESP8266 es muy sencillo,gracias al soporte que ha recibido de la comunidad, que hace que lo tengamos disponible como un paquete que podemos descargar y añadir al gestor de placas.

Para poder programar las placas de desarrollo basadas en el ESP8266 simplemente tendremos que configurar la URL del paquete para que podamos agregarlas al gestor de placas del IDE de Arduino.

Para ello accedemos al menú de configuración y en “Gestor de URLs adicionales de tarjeta” hacemos click en el pequeño botón de la derecha.

En la ventana que aparece, añadimos esta la siguiente URL.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Si teníamos otras direcciones, dejamos cada una de ellas en una línea.

Ahora entramos en el gestor de tarjetas del IDE de Arduino.

Buscamos el paquete de placas de desarrollo basadas en el ESP8266 y lo instalamos.

Ya tenemos disponibles las placas de desarrollo basadas en el ESP8266 para programarlas con el IDE de Arduino. ¡Así de fácil!

En la próxima entrada profundizaremos en cómo programar ESP8266 con el IDE de Arduino, y veremos las similitudes y diferencias entre programar un Arduino convencional y una placa basada en el ESP8266.

Plataforma en línea:

  •  Cayenne IoT
  • Cayenne es el primer generador de proyectos de IoT de arrastrar y soltar del mundo que permite a los desarrolladores, diseñadores e ingenieros crear rápidamente prototipos y compartir sus proyectos de dispositivos conectados.
  • Cayenne se diseñó para ayudar a los usuarios a crear prototipos de Internet de las cosas y luego llevarlos a producción
  • Cayenne es un producto de myDevices que le permite no solo mostrar datos, sino también configurar disparadores, monitorear dispositivos, controlar dispositivos, etc.
  • La API de Cayenne MQTT se utiliza para conectar cualquier dispositivo que tenga con Cayenne Cloud

¿Qué es MQTT?MQTT significa 

transporte de telemetría de Message Queue Server. Es un protocolo de mensajería extremadamente simple y liviano (suscripción y publicación) diseñado para dispositivos limitados y redes con alta latencia, bajo ancho de banda o redes poco confiables. Con MQTT, los dispositivos IoT con recursos limitados pueden enviar o publicar información sobre un tema específico a un servidor que actúa como 

intermediario de mensajes MQTT. Luego, el corredor transmite la información a aquellos clientes que se han suscrito previamente al tema del cliente. Para este proyecto, 

Cayenne Dashboard actúa como intermediario de mensajes MQTT.

Configuración de hardware:

 Diagrama esquemático:

Conexiones:

  • PZEM-004T-100A v3
    • Conexión de carga
      • Transformador de corriente (CT) Cable VCC conectado a PZEM-004T v3 Live (+) Terminal 
      • Transformador de corriente (CT) Cable GND conectado al terminal neutro (-) PZEM-004T v3 
      • Cable de carga viva (+) conectado al terminal de carga viva (+) PZEM-004T v3 
      • Cable de carga neutra (-) conectado a la terminal de carga  neutra  (-)  PZEM-004T v3 
    • Conexión ESP8266
      • Cable VCC conectado al pin 3.3v
      • Cable GND conectado al pin GND
      • El cable TX (transmisión) está conectado al pin D7
      • El cable RX (recepción) está conectado al pin D8
  • ESP8266
    • Pin VCC conectado al cable PZEM-004T v3 VCC
    • Pin GND conectado al cable PZEM-004T v3 GND
    • Pin D7 (RX) conectado al cable PZEM-004T v3 TX
    • Pin D8 (TX) conectado al cable PZEM-004T v3  RX

Configuración del programa:

Antes de configurar el código Arduino, debemos instalar la placa ESP8266 en el IDE de Arduino.

Instalación de soporte de placa ESP8266:

  • Haga clic en la  sección Preferencias en el IDE
  • Descarga el paquete esp8266 en el Board Manager
  • Después de agregar la placa ESP8266, debe conectarse con el panel Cayenne.

Cayenne Dashboard ESP8266 Configuración + Conexión: 

  • Después del registro de la cuenta (ES GRATUITO ), agregue un nuevo dispositivo para conectarse al tablero 
  • Elija Generic ESP8266  en la sección de Microcontroladores
  • Antes de conectar debemos descargar la  librería Cayenne MQTT ESP  en Github
  • Haga clic en el  boceto ESP8266  en el ejemplo Cayenne MQTT ESP 
  •  Antes de ejecutar el boceto, copie las credenciales de Cayenne MQTT proporcionadas
  • Edite las credenciales de Cayenne junto con las credenciales de Wi-Fi en el boceto
  • Ejecute el boceto y espere hasta que ESP8266 esté conectado a Cayenne
  • El ESP8266 por fin está conectado al salpicadero 
  • Después de configurar el tablero Cayenne, debemos probar el medidor PZEM-004T V3 antes de interactuar con el tablero.
  • Cargar el siguiente código en el IDE de Arduino  y desplegarlo sobre el ESP8266

//Libraries
#include <Arduino.h>
#include <PZEM004Tv30.h>

//PZEM object constructor
PZEM004Tv30 pzem(D7,D8);
//PZEM004Tv30 pzem(1,3);
void setup() {
  Serial.begin(115200);

  while(!Serial); 
  delay(100);
  
  Serial.println("PZEM-004T con NodeMcu 1.0 (Esp-12e Module)Test"); 
}

void loop() {
  Serial.println("Midiendo...");
  //Result Variables
  float volts = pzem.voltage();
  float amps = pzem.current();
  float watts = pzem.power();
  float kiloWatts = pzem.energy();
  float hertz = pzem.frequency();
  float factor = pzem.pf();

  delay(2000);

  Serial.println("");

  Serial.println("Resultados:");
  Serial.println("");

  Serial.print("Voltaje: "); Serial.print(volts,3); Serial.println("V");
  Serial.print("Corriente: "); Serial.print(amps,3); Serial.println("A");
  Serial.print("Potencia: "); Serial.print(watts,3); Serial.println("W");
  Serial.print("Energia: "); Serial.print(kiloWatts,3); Serial.println("kWh");
  Serial.print("Frequencia: "); Serial.print(hertz,2); Serial.println("Hz");
  Serial.print("Factor de potencia: "); Serial.println(factor,3);

  Serial.println("");
  
  delay(2000);
}


Desglose del código:

Bibliotecas :

  • Arduino.h
    • El soporte ESP8266 para Arduino 
    • Capaz de escribir bocetos, usar funciones y bibliotecas de Arduino
    • Ejecute bocetos sin necesidad de un microcontrolador externo
    • Biblioteca integrada en el IDE
    • Más información sobre la biblioteca, junto con la configuración de ESP8266 Arduino en Github 
  • PZEM004Tv30.h
    • Biblioteca de medidores de energía Peacefair (PZEM-004T v3)
    • Versión actualizada de la biblioteca PZEM-004T anterior para admitir versiones más nuevas
    • Proporciona funciones completas del monitor de energía PZEM-004T v3
    • Más información sobre la biblioteca y enlace de descarga en Github 
    • También se puede descargar en Arduino Library Manager

Variables:

  • PZEM004Tv30 pzem(D7,D8)
    • El constructor de objetos para el medidor de energía junto con las conexiones de pin
  • Voltaje
    • Valor del sensor de tensión en voltios (V)
  • Actual
    • Valor del sensor de corriente en amperios (A)
  • Energía
    • Valor del sensor de potencia en vatios (W)
  • Energía
    • Valor del sensor de energía en kilovatios hora (kWh)
  • Frecuencia
    • Valor del sensor de frecuencia en hercios (Hz)
  • Factor de potencia
    • Resultado calculado basado en los valores del sensor

    Funciones:

    • pzem.voltaje()
      • obtener valor de voltaje
    • pzem.actual()
      • obtener el valor actual
    • pzem.power()
      • obtener valor de potencia
    • pzem.energy()
      • obtener valor de energía
    • pzem.frecuencia()
      • recuperar valor de frecuencia
    • pzem.pf()
      • obtener el valor del factor de potencia

    Después de probar el sensor SIN CONEXION , ahora podemos conectarlo con el tablero de Cayenne para cargar lecturas de energía en línea.

    Con el siguiente código que subiremos al ESP8266 si lo personalizamos con nuestras propias claves (estan marcadas tachadas) podemos probar

    Code (PZEM-004T V3 with Cayenne Dashboard): 
    //Libraries
    #include <Arduino.h>
    #include <CayenneMQTTESP8266.h>
    #include <PZEM004Tv30.h>
    
    //Debug Cayenne Connection
    #define CAYENNE_DEBUG
    
    //Enable Serial Print
    #define CAYYENE_PRINT Serial
    
    //Canales de Cayenne para mostrar los datos
    #define VOLTAGE_CHANNEL 1 //voltage
    #define CURRENT_CHANNEL 2 //current
    #define POWER_CHANNEL 3 //power
    #define ENERGY_CHANNEL 4 //energy
    #define FREQUENCY_CHANNEL 5 //frequency
    #define POWERFACTOR_CHANNEL 6 //power factor
    
    //RX pin = D7 connected to the TX pin of PZEM-004T v3
    //TX pin = D8 connected to the RX pin of PZEM-004T v3
    
    //Constructor del dispositivo  Peacefair 
    PZEM004Tv30 pzem(D7,D8); 
    
    //Credencial de la WiFi a la que se conectara para el envio. 
    char ssid[] = "HOTSPOTniKOYA";
    char wifiPassword[] = "09771665851";
    
    //ESP8266 Información para la autenticacion de Cayenne obtenida de Cayenne Dashboard.
    
    char username[] = "439049b0-0660-11ed-8df2-dd50487e509b";
    char password[] = "1f5cf9c47e9fc2b28eaa1ffb054b62003a71127a";
    char clientID[] = "349a2920-1bf1-11ed-baf6-35fab7fd0ac8";
    
    //Meter values
    float Voltage;
    float Current;
    float Power;
    float Energy;
    float Frequency;
    float PowerFactor;
    
    void setup() {
      Serial.begin(115200);
    
      //Esperar a que  Serial Monitor se abra antes de proceder
      while(!Serial);
      delay(100);
      
      //Start Cayenne connection 
      Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    
      Serial.println("PZEM-004T-100A Energy Meter Cayenne Interface using ESP8266 ( o un Wemos D1 Mini)");
      Serial.println("");
    }
    
    void loop() {
      //get meter values
      Voltage = pzem.voltage();
      Current = pzem.current();
      Power = pzem.power();
      Energy = pzem.energy();
      Frequency = pzem.frequency();
      PowerFactor = pzem.pf();
      
      Cayenne.loop();
    }
    
    //Display Voltage Value
    CAYENNE_OUT(VOLTAGE_CHANNEL)
    { 
      Serial.println("Resultados de las medidas: ");  
      Cayenne.virtualWrite(VOLTAGE_CHANNEL, Voltage);
      Serial.print("Voltaje: "); Serial.print(Voltage,3); Serial.println("V");
    }
    
    //Display Current Value
    CAYENNE_OUT(CURRENT_CHANNEL)
    {   
      Cayenne.virtualWrite(CURRENT_CHANNEL, Current);
      Serial.print("Corriente: "); Serial.print(Current,3); Serial.println("A");
    }
    
    //Display Power Value
    CAYENNE_OUT(POWER_CHANNEL)
    {   
      Cayenne.virtualWrite(POWER_CHANNEL, Power);
      Serial.print("Potencia: "); Serial.print(Power,3); Serial.println("W");
    }
    
    //Display Energy Value
    CAYENNE_OUT(ENERGY_CHANNEL)
    {   
      Cayenne.virtualWrite(ENERGY_CHANNEL, Energy);
      Serial.print("Energia: "); Serial.print(Energy,3); Serial.println("kWh");
    }
    
    //Display Frequency Value
    CAYENNE_OUT(FREQUENCY_CHANNEL)
    {   
      Cayenne.virtualWrite(FREQUENCY_CHANNEL, Frequency);
      Serial.print("Frequencia: "); Serial.print(Frequency,2); Serial.println("Hz");
    }
    
    //Display Power Factor Value
    CAYENNE_OUT(POWERFACTOR_CHANNEL)
    {   
      Cayenne.virtualWrite(POWERFACTOR_CHANNEL, PowerFactor);
      Serial.print("Factor de Potencia: "); Serial.println(PowerFactor,3);
      Serial.println("");
    }
    

    Desglose del código:

    Bibliotecas:

    • Arduino.h
      • El soporte ESP8266 para Arduino 
      • Capaz de escribir bocetos, usar funciones y bibliotecas de Arduino
      • Ejecute bocetos sin necesidad de un microcontrolador externo
      • Biblioteca integrada en el IDE
      • Más información sobre la biblioteca, junto con la configuración de ESP8266 Arduino en Github 
    • CayenneMQTTESP8266.h
      • Biblioteca Cayenne MQTT ESP para la conexión del generador de proyectos Cayenne IoT
      • Admite módulos Wi-Fi ESP8266 y ESP32
      • Leer y enviar datos a Cayenne Dashboard
      • Más información sobre la biblioteca y enlace de descarga en Github
    • PZEM004Tv30.h
      • Biblioteca de medidores de energía Peacefair (PZEM-004T v3)
      • Versión actualizada de la biblioteca PZEM-004T anterior para admitir versiones más nuevas
      • Proporciona funciones completas del monitor de energía PZEM-004T v3
      • Más información sobre la biblioteca y enlace de descarga en Github
      • También se puede descargar en Arduino Library Manager

    Variables:
    @PZEM-004T v3

    • PZEM004Tv30 pzem(D7,D8)
      • El constructor de objetos para el medidor de energía junto con las conexiones de pin
    • Voltaje
      • Valor del sensor de tensión en voltios (V)
    • Actual
      • Valor del sensor de corriente en amperios (A)
    • Energía
      • Valor del sensor de potencia en vatios (W)
    • Energía
      • Valor del sensor de energía en kilovatios hora (kWh)
    • Frecuencia
      • Valor del sensor de frecuencia en hercios (Hz)
    • Factor de potencia
      • Resultado calculado basado en los valores del sensor

    @Cayenne

    • CAYENNE_DEBUG
      • Habilita la impresión en serie de Cayenne
    • Serie CAYENNE_PRINT
      • Habilita el monitor serie para imprimir datos
    • VOLTAJE_CANAL 1
      • El canal Cayenne asignado para proyectar lecturas de voltaje del medidor
    • CANAL_ACTUAL 2
      • El canal Cayenne asignado para proyectar lecturas actuales del medidor
    • POTENCIA_CANAL 3
      • El canal Cayenne asignado para proyectar lecturas de energía del medidor
    • ENERGÍA_CANAL 4
      • El canal Cayenne asignado para proyectar lecturas de energía del medidor
    • FRECUENCIA_CANAL 5
      • El canal Cayenne asignado para proyectar lecturas de frecuencia del medidor
    • FACTOR DE POTENCIA_CANAL 6
      • El canal Cayenne asignado para proyectar lecturas de factor de potencia del medidor
    • sid[]
      • El nombre de la conexión Wi-Fi para conectar el Wemos D1 mini
    • Contraseña de wifi[]
      • La contraseña de conexión Wi-Fi para conectar el Wemos D1 mini
    • nombre de usuario char[]
      • Nombre de usuario de Cayenne del dispositivo (proporcionado en el código de enlace de Cayenne)
    • contraseña de char[]
      • Contraseña de Cayenne del dispositivo (proporcionada en el código de enlace de Cayenne)
    • ID de cliente char[]
      • ID de cliente de Cayenne del dispositivo (proporcionado en el código de enlace de Cayenne)

    Funciones:
    @PZEM-004T V3

    • pzem.voltaje()
      • obtener valor de voltaje
    • pzem.actual()
      • obtener el valor actual
    • pzem.power()
      • obtener valor de potencia
    • pzem.energy()
      • obtener valor de energía
    • pzem.frecuencia()
      • recuperar valor de frecuencia
    • pzem.pf()
      • obtener el valor del factor de potencia

    @Cayenne

    • Cayenne.begin(nombre de usuario, contraseña, ID de cliente)
      • Inicia la conexión de cayena
      • Muestra el estado de la conexión en el monitor serie
    • Cayenne.loop()
      • Llama a la clase CAYENNE_OUT(VIRTUAL_CHANNEL) 
    • Cayenne.virtualWrite(Canal, Salida)
      • Mostrar los valores del medidor en el monitor serial
      • Sube los valores de salida al canal virtual del tablero

    Y una vez que llevamos un rato con el montaje funcionando este es el resultado

    NOTAS IMPORTANTES:

    • Si conectamos el PZEM004 a un ESP8266, la tension de alimentación para la sincronizacion del canal de comunicaciones es 3,3V (en caso de un Wemos seria de 5v)
    • Para que las medidas sean correctas los leds TX y RX del PZEM004 deben parpadear rápido y con luz tenue. Si alguno de los leds TX o RX se queda fijo esto significa que o bien alguna conexión es incorrecta o no se ha actualizado el firmware del controlador , de modo que si consultamos la consola serie veremos que las medidas no son correctas ( el IDE de Arduino las pinta como nan). Ver la imagen de abajo donde se aprecia este error.
    • En caso de que no se pueda programar el controlador ESP8266 desde el IDE de Arduino un truco consiste en desconectar la línea de 3.3V hacia la salida RS425 antes de compilar el código.
    • A veces es necesario reiniciar tanto el PZEM004 como el ESP8266 si no hay resultados correctos .
    • Si no tenemos la consola serie para saber si está sacando datos correctos ( es decir que no saca los valores nan) una buena referencia son los dos leds (tX y RX) del PZEM004 qeu deben lucir a la vez a intervalos regulares ( según el delay definido en el bucle principal)
    • Debemos programar el controlador antes de conectar la salida RS425 del PZEM004 para evitar problemas
    • Se ha usado un ESP8266 ( aunque se puede usar cualquiera similar que pertenezca a esta familia) para que no de problemas el api de Cayenne . Para usar un ESP32 se debe seleccionar en el interfaz el Esp826 pues funciona también con la familia del ESP32 , si bien la llibreria es CayenneMQTTESP32.h

    Más información en

    Más información en https://cayenne.mydevices.com/

    Monitorización de una nevera con IoT


    En este post vamos a ver una interesante idea que busca optimizar uno de los electrodomésticos que porcentualmente más consume en una vivienda: la nevera. Es un espectacular proyecto desarrollado en conjunto por G4lile0, programarfacil y Germán Martín que se presentaron como candidatos al Intel Hacks 2017.

    La idea surgió de uno de los miembros del equipo, cuando un día descubrió que su factura eléctrica era demasiado alta lo cual lelo llevó a investigar para encontrar alguna forma de medir el consumo eléctrico de su casa. Encontro el sitio web de Open Energy Monitor , un sistema que permite medir el consumo eléctrico mediante Arduino . Esto cambió todo porque no dependía de terceros para hacer un análisis de sus electrodomésticos. De repente miró el refrigerador, ¿qué estaba pasando? Este electrodoméstico era el que más consumía por día en toda la casa con diferencia. Investigando más a fondo descubrió varias cuestiones interesantes sobre los frigoríficos. Pero quizás, lo más importante fue que debido al calor que se concentra detrás de estos dispositivos, su consumo eléctrico aumenta entre un 15% y un 25%.Esta fue la semilla de este proyecto.

    Funcionamiento de una nevera

    Hay más de 7 mil millones de personas en el mundo. Uno de cada cinco tiene un refrigerador en su casa. Eso es más de 1.500 millones de refrigeradores .

    Este electrodoméstico es uno de los pocos que está encendido las 24 horas del día y los 365 días del año. Esto significa que cada frigorífico consume una media de 450 KWh al año. Si multiplicamos el número de frigoríficos en todo el mundo (1.500 millones) y el consumo anual de cada uno, el total deja 649 millones de MWh de consumo anual.

    Si lo miramos desde otra perspectiva, podemos afirmar que todos los frigoríficos domésticos del mundo consumen más que un país como Alemania.

    Consumo de electricidad por país Fuente wikipedia

    Por tanto, suponiendo que pudiéramos reducir un 10% el consumo de todos los frigoríficos del mundo, estaríamos ahorrando un total de 64,9 millones de MWh al año. Si un KWh equivale a 0,62 kg de CO2 , evitaríamos verter a la atmósfera 42.185.000.000 kg de CO2.

    El mero hecho de disponer de los datos de consumo de los electrodomésticos, hace que tu factura eléctrica se reduzca un 10%. Como veremos a lo largo de este proyecto, este dispositivo se puede utilizar para otros electrodomésticos. Esto implica que podremos tener un ahorro considerable en la factura eléctrica.

    El funcionamiento de un frigorífico consiste en trasladar el calor del interior al exterior, lo cual permite que la temperatura dentro de la nevera sea mucho más baja que la temperatura ambiente de la habitación enfriando por tanto los alimentos y bebidas que hay en su interior.

    funcionamiento de un frigorífico

    Si no hay suficiente lugar para ser expulsado, el aire caliente que expulsa el propio aparato se condensa en la parte posterior, lo que afecta la eficiencia del compresor. Esto provoca que se necesite más tiempo para enfriar y como consecuencia, un aumento en el consumo eléctrico.

    Una posible solución es ventilar la parte trasera a través de un flujo de aire fresco. Esto se puede lograr de varias formas, dando más espacio en la parte trasera o moviendo el aire con ventiladores.

    funcionamiento de un frigorífico

    Pero claro, todo esto no tiene sentido si no tenemos datos de consumo y temperaturas. Aquí es donde entra en juego Arduino, donde conectaremos los sensores de temperatura y consumo de energía para transmitirlos a una base de datos en la nube.

    Planteado el problema y una posible solución, ya podemos intuir de lo que va el proyecto.

    Cómo lo construimos

    El eje central de este proyecto es el Arduino 101 . Esta placa lleva el microcontrolador Intel Curie . Es un chip pequeño pero completo. Entre sus características tiene incorporada una IMU o Unidad de Medida Inercial que cuenta con acelerómetro y giroscopio y conectividad Bluetooth a través de la tecnología BLE o Bluetooth Low Energy.

    Una cosa importante a tener en cuenta con esta placa prototipo es que debe tener el firmware más actualizado posible. Esto se debe a que lo que en realidad estás haciendo es emular un Arduino.

    Para actualizar el Firmware siga estas instrucciones .

    Volviendo al planteamiento inicial del proyecto, debemos hacer varias cosas con el Arduino 101. Medir varias temperaturas, consumo de energía y controlar los ventiladores para generar ese flujo de aire fresco en la parte trasera del refrigerador.

    En particular, tomamos la decisión de medir la temperatura de la parte trasera, la temperatura frontal, el congelador y el refrigerador. Esto nos da 4 sensores de temperatura y un sensor para medir el consumo eléctrico.

    esquema general

    Para la toma de datos se utilizó el sensor de temperatura DS18B20 y el sensor SCT-013 que mide el consumo eléctrico.

    No es obligatorio utilizar estos modelos, se puede utilizar cualquier otro sensor similar para obtener la información de temperatura y consumo.

    Sensor de temperatura DS18B20

    El sensor de temperatura Maxim Integrated DS18B20 ofrece un rango de temperatura entre -55 °C y 155 °C, con una precisión de ± 0,5 °C.

    El modelo que utilizamos es el comercializado como sonda estanca evitando cualquier problema en el interior del frigorífico o congelador. Este sensor utiliza el protocolo de comunicación de 1 cable de Maxim Integrated que permite la conexión simultánea de más de 100 sensores a través de un solo pin.

    DS18B20

    Sensor de consumo eléctrico SCT-013

    Para medir el consumo, utilizamos un sensor de corriente no invasivo. Así que no nos preocupamos por tener que alterar demasiado el cable de alimentación del frigorífico. Lo único que tenemos que hacer es pelar el cable y abrazar solo uno de los dos cables de alimentación, vivo o tierra.

    Este tipo de sensores se conocen como Transformadores de Corriente y uno de los más comunes es el SCT-013. Operan bajo el principio de inducción electromagnética. La salida de estos sensores es una intensidad proporcional a la que pasa por un cable o circuito eléctrico.

    Hay dos tipos de sensores, que proporcionan una corriente o un voltaje. Lo mismo que usas, pero el más sencillo es el que nos ofrece un voltaje.

    SCT-013

    Aficionados

    Finalmente conectaron ventiladores. Teniendo en cuenta el consumo, las dimensiones y el ruido que pueden generar. Podemos usar cualquier modelo, pero debemos estar muy atentos a estos componentes ya que hay diferentes modelos para diferentes usos y no todos valen. La idea es poder adaptar el proyecto para utilizar los típicos ventiladores de los ordenadores ya que consumen muy poco y son muy económicos. Los que están probando a José Manuel y Germán son tipo Boxer Fan.

    VENTILADOR DEL BOXEADOR

    Conexión de Arduino 101 a Internet

    Aunque, como decía, es una placa muy robusta y muy útil, el gran inconveniente es que no tiene conexión a Internet. Esto nos obligó a buscar soluciones para enviar toda la información adquirida a una plataforma en la nube .

    Hay diferentes opciones como usar Bluetooth para conectarse a otro dispositivo que tenga conexión a Internet. Pero quizás lo más sencillo y económico que encontramos fue utilizar un NodeMCU .

    Este kit de desarrollo está basado en el ESP8266 y es muy fácil de usar (es compatible con el IDE de Arduino) y tiene un precio muy económico y tiene una librería para configurar WiFi como WiFiManager

    Toda la lógica del proyecto reside en el Arduino 101 y NodeMCU solo hace de puente entre la placa e Internet.

    NodoMCU

    Envía información a la plataforma en la nube

    Los datos deben ser visibles en tiempo real en todo momento. Solo así comprobaremos si el proyecto es viable y podemos tomar las decisiones adecuadas.

    Como plataforma en la nube los creadores de este proyecto eligieron Firebase , pues una de sus ventajas es que es muy fácil de usar gracias a la API REST que incorpora. Con solo una llamada HTTP podemos almacenar los datos obtenidos de temperatura, consumo y uso de los ventiladores. Todo esto se envía en formato JSON. Por lo tanto, la integración entre Firebase y NodeMCU es instantánea.

    La base de datos de Firebase

    Las características que buscaban sus creadores para integrar un servicio en la nube en este proyecto son la facilidad y el costo. En la actualidad son muchos los servicios que podemos llegar a utilizar como Thingspeak, ThingerIO o el propio Arduino Cloud. Todo puede ser una buena elección.

    Firebase tiene a su favor de que dispone de APIs para muchos lenguajes de programación entre los que se encuentra JavaScript.

    La base de datos tiene limitaciones ya que es una cuenta gratuita.

    • No permite más de 100 conexiones simultáneas.
    • Tienes un límite de 1 GB de almacenamiento.
    • Tienes un límite de 10GB de descarga.

    Con todo esto, el proyecto tras un mes de recogida de datos cada minuto de dos frigoríficos, tenemos un consumo de almacenamiento de 3,9 MB y 158,4 MB de descarga.

    Usar base de datos

    Aplicación web para visualización de datos

    Con todo previamente montado, ya no queda nada para ver la información de manera amigable en cualquier dispositivo.

    Si queremos monitorizar los datos en tiempo real, desde cualquier parte del mundo y cualquier dispositivo, una de las opciones más rápidas es crear una aplicación web.

    Firebase tiene una API de Javascript que hace que sea muy fácil integrar una base de datos de esta plataforma en una página web.

    Además, se puede agregar el marco Bootstrap para que responda utilizado una plantilla abierta para este marco, SB Admin 2 .

    Todo esto ha dado como resultado un sitio web que se puede ver en www.iotfridgesaver.com . Consta de dos pantallas.

    La pantalla inicial muestra un mapa de Google donde iremos ubicando los diferentes frigoríficos que se utilizan.

    Inicio web IoT Fridge Saver

    Una vez que encuentres el que deseas consultar, solo dale al icono y hacemos clic en info. Desde aquí se puede acceder al histórico de temperatura, consumo y uso de ventilador.

    Histórico

    Desafíos

    Han sido muchos los retos a los que nos hemos enfrentado en este proyecto. Primero la integración de una placa sin conexión a Internet que resolvieron usando una placa basada en ESP8266 como NodeMCU. Quizás haya una solución mucho mejor, pero la más simple y rápida fue esta.

    A la hora de realizar la ventilación trasera, el problema es principalmente cómo hacer que fluya aire fresco para bajar la temperatura.Han seguido diferentes fases para decidir cuándo encender los ventiladores.En una primera fase han hecho una recogida de datos para analizar la información. Luego se activan manualmente para verificar qué sucede en ciertas situaciones. Esto les llevó a pensar que la diferencia de temperatura entre la parte trasera y la delantera era un buen indicador de un alto consumo.

    Diferencia de temperatura.

    Sin embargo, mientras recopilában datos, se dieron cuenta de que el mejor momento es cuando se activa el compresor y al mismo tiempo aumenta la temperatura trasera lo cual es mucho más fácil en términos de programación controlar esta situación pues sin duda, la temperatura trasera está íntimamente ligada a la actividad del compresor.

    Las primeras pruebas muestran que puede haber una mejora de la eficiencia energética de alrededor del 20 % al activar el flujo de aire lo cual verificaron que, cuando el soplador mueve el aire detrás del refrigerador, la actividad del compresor y la velocidad de reducción de la temperatura interna se reducen significativamente.

    Efecto de la eficiencia del soplador

    Logros de este proyecto

    En el equipo está muy orgullosos de haber logrado un sistema que es capaz de dos tareas. Por un lado controlar parámetros ocultos de los frigoríficos a los usuarios. Por otro lado se han podido minimizar el consumo eléctrico en determinadas condiciones.

    En una primera etapa, fue difícil asignar sensores de temperatura a cada punto de medición. Tuvieron que verificar sus direcciones de hardware para identificarlos y escribirlo en el código fuente. Ahora, usan diferencias de temperatura para identificar sensores automáticamente. Esto facilita la configuración del sistema. No cabe duda de que aún queda mucho camino por recorrer en este proyecto, pero con el solo hecho de tener toda esta información pueden ayudar a las personas a reducir el consumo de sus electrodomésticos.

    Con solo aplicar algunas modificaciones a la instalación, podemos reducir su consumo. Pero todo esto no es posible si no disponemos de datos analíticos que lo corroboren. Aquí es donde entran en juego las tecnologías abiertas. Nos dan la posibilidad de crear dispositivos que se adapten a nuestros requerimientos. Sin estas tecnologías nada de esto sería posible.

    También han encontrado que puede haber grandes diferencias en el consumo de diferentes refrigeradores de modo que este este proyecto puede ayudar a identificar los modelos más eficientes.

    El consumo puede ser muy diferente

    Solo si conocemos el mundo que nos rodea, podemos cambiarlo .

    Finalmente han creado un video explicando el funcionamiento de su proyecto

    Mas Informacion en https://devpost.com/software/freeze-optimizer