Podcast: Descargar (86.0MB)
En este último artículo/capítulo del blog/podcast, vamos a hablar de cómo medir el consumo eléctrico de un frigorífico con Arduino. Este artículo forma parte del proyecto IoT Fridge Saver que estamos desarrollando Germán Martín, José Manuel y yo para el concurso Intel Hacks 2017.
La idea que se esconde detrás de este artículo es el making off del proyecto, donde hablaremos de todo lo que hemos vivido durante los dos últimos meses para desarrollar un sistema capaz de medir el consumo eléctrico de un frigorífico para poder reducirlo.
Puedes seguir estos dos tutoriales sobre temperatura y consumo eléctrico:
- DS18B20 medir temperatura en ambientes hostiles para la electrónica con Arduino
- SCT-013 para medir el consumo eléctrico en tu casa con Arduino
Pero como una imagen vale más que mil palabras, a continuación te dejo el vídeo promocional para el concurso.
Indice de contenidos
La idea
Todo parte de José Manuel, cuando un día se dio cuenta que el consumo eléctrico de su casa era muy elevado. Como buen Maker decidió investigar por Internet para buscar algún sistema que le permitiera medir el consumo eléctrico con Arduino.
Buscando dio con la web Open Energy Monitor, un sistema muy parecido en esencia a lo que presentamos pero enfocado al consumo eléctrico en general. Compró un kit y empezó a comprobar el consumo de sus electrodomésticos. Pronto vio que la causa de ese gasto elevado era el frigorífico.
Esto le llevó a investigar sobre este electrodoméstico y descubrió varias cosas interesantes. Pero quizás la más importante fue que debido a un problema de temperatura ligado al compresor, el consumo eléctrico aumenta entre un 15% y un 25%.
El funcionamiento de un frigorífico consiste en transferir el calor del interior al exterior. Esto permite que en el interior la temperatura sea mucho más baja que la de temperatura ambiente de la habitación. El aire caliente que expulsa el propio electrodoméstico se condensa en la parte trasera, afectando al compresor. Esto provoca que tarde más en enfriar y como consecuencia aumente 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 conseguir de varias maneras, dando más espacio en la parte de atrás o moviendo el aire con ventiladores.
Pero claro, todo esto carece de sentido si no tenemos datos de consumo y temperaturas. Aquí es donde entra en juego Arduino, donde conectaremos los sensores de temperatura y consumo eléctrico para transmitirlos a una base de datos en la nube.
Planteado el problema y una posible solución, ya teníamos por donde empezar el proyecto.
Antecedentes
Antes de meterme de lleno en explicar en qué consiste el proyecto y cómo lo estamos desarrollando, voy a ponerte en antecedentes.
En el mundo hay más de 7.000 millones de personas. Una de cada cinco tiene un frigorífico en su casa. Eso equivale a más de 1.500 millones de frigoríficos.
Este electrodoméstico es de los pocos que está encendido 24 horas al día y 365 días al año. Esto supone que cada frigorífico consume una media de 450 KWh por año. Si multiplicamos el número de frigoríficos de todo el mundo (1.500 millones) y el consumo anual de cada uno de ellos, el total sale 649 millones de MWh de consumo anual.
Si lo vemos desde otra perspectiva, podemos decir que todos los frigoríficos del mundo consumen más que un país como Alemania.
Por lo tanto, en la suposición que pudiéramos reducir el consumo de todos los frigoríficos del mundo en un 10%, 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 42.185.000.000 de Kg de CO2 a la atmósfera.
El mero hecho de tener los datos de consumo de los electrodomésticos, hace que tu factura eléctrica se reduzca en un 10%. Como veremos a lo largo de este artículo, este dispositivo puede servir para utilizarlos con otros electrodomésticos. Esto implica que podemos tener un ahorro considerable en la factura eléctrica.
Arduino 101 como eje central del IoT Fridge Saver
Una de las imposiciones del concurso es que el proyecto tendría que estar basado en el Arduino 101. Esta placa lleva un microcontrolador Curie fabricado por Intel.
Se trata de un chip muy completo y muy pequeño, que entre sus características destacan una IMU o Unidad de Medición Inercial (del inglés Inertial Measurement Unit) que cuenta con un acelerómetro y giroscopio y conectividad Bluetooth a través de la tecnología BLE o Bluetooth de Bajo Consumo (del inglés Bluetooth Low Energy).
Salvo estas diferencias, prácticamente podemos decir que estamos trabajando con un Arduino UNO si nos fijamos en la huella y al factor forma de la placa. Realmente, esta placa está emulando el uso de un Arduino y de aquí vienen los problemas que nos podemos encontrar a la hora de utilizarlo en nuestros proyectos.
Por eso es recomendable la actualización del firmware del Arduino 101 siempre que sea posible.
Volviendo al planteamiento inicial del proyecto, debemos hacer varias cosas con el Arduino 101. Medir varias temperaturas, el consumo eléctrico y controlar los ventiladores para generar ese flujo de aire fresco en la parte trasera del frigorífico.
En concreto tomamos la decisión de medir la temperatura de la parte de atrás, la temperatura de la parte delantera, del congelador y del frigorífico. Esto nos da 4 sensores de temperatura y un sensor para medir el consumo eléctrico.
Para la toma de datos hemos utilizado el sensor de temperatura DS18B20 y el sensor SCT-013 que mide el consumo eléctrico. No es obligatorio utilizar estos sensores, cualquier otro similar puede ser utilizado para obtener la información de temperatura y consumo.
Sensor de temperatura DS18B20
El sensor de temperatura DS18B20 de Maxim Integrated nos ofrece un rango de temperaturas entre -55ºC y 155ºC, con una precisión de ±0.5ºC.
El modelo que utilizamos es el comercializado como sonda impermeable evitando así cualquier problema dentro del frigorífico o congelador. Este sensor utiliza protocolo de comunicación 1-Wire de Maxim Integrated permitiendo la conexión simultánea de más de 100 sensores a través de un solo pin.
Sensor de consumo eléctrico SCT-013
Para medir el consumo, utilizamos un sensor de corriente no invasivo. Así no nos preocupamos de tener que alterar mucho 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 masa.
A este tipo de sensores se les conoce como Current Transformers y uno de los más comunes es el SCT-013. Funcionan bajo el principio de la inducción electromagnética. La salida de estos sensores es una intensidad proporcional a la que atraviesa un cable o circuito eléctrico.
Existen dos tipos de sensores, los que proporcionan una corriente y los que proporcionan un voltaje. Da lo mismo el que utilices, pero el más sencillo es el que nos ofrece un voltaje.
Ventiladores
Por último conectamos los ventiladores. Teniendo en cuenta el consumo, las dimensiones y el ruido que puedan generar. Podemos utilizar cualquier modelo, pero debemos tener mucho ojo con 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 José Manuel y Germán son tipo Boxer Fan.
Cuándo encender los ventiladores
Una vez que tenemos montados los componentes anteriores, tenemos que decidir cuándo encender los ventiladores. En una primera fase hemos hecho una recopilación de datos para analizar la información.
Después, se han activado de forma manual para comprobar que sucede en ciertas situaciones. Esto nos llevó a pensar que la diferencia de temperatura entre interior y exterior era un buen indicador de consumo elevado.
Sin embargo, según íbamos recopilando datos nos dimos cuenta de una cosa. El mejor momento es cuando el compresor se activa y a la vez la temperatura trasera aumenta. Resulta mucho más sencillo en términos de programación controlar esta situación.
Sin duda alguna, la temperatura trasera está estrechamente ligada a la actividad del compresor.
La estética en los proyectos Maker
Aunque nos es parte del objetivo de este proyecto, la estética es un factor muy importante a tener en cuenta en los proyectos que realizamos como Makers. El gran problema que encontramos es la dificultad de esconder los cables de la sonda de temperatura.
El dispositivo que va encima del frigorífico apenas se ve y se puede esconder, sin embargo todo el cableado es complicado. Por eso, en un futuro estamos pensando investigar algún tipo de tecnología que nos permita medir la temperatura sin cables.
Por otro lado, José Manuel ha diseñado varias piezas en 3D. Una que no sirve de canalización para que circule el aire y otra pieza que se adapta a una pantalla LCD y al Arduino 101.
Comunicación Arduino 101 con Internet
Aunque, como ya he dicho, se trata de 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.
La primera opción que se nos ocurrió fue utilizar la nueva placa de desarrollo de Espressif, el ESP32. La mayor ventaja que nos aporta es que dispone de Bluetooth y WiFi en el mismo módulo. Esto nos permitiría utilizarlo de pasarela sin tener una conexión por cable entre las dos placas, lo haríamos a través del Bluetooth.
Pero no es todo tan bonito como parece. En la actualidad no hay suficiente documentación para desarrollar proyectos compatibles con la plataforma de Arduino. La SDK no está todavía terminada y poco a poco van introduciendo nuevas funcionalidades.
La única manera de poder trabajar con estas dos tecnologías inalámbricas es a través del Espressif IoT Development Framework (ESP-IDF). Sin embargo no es tan sencillo como parece ya que requiere de tiempo y unos altos conocimientos en este Framework.
Tardamos una semana en decidir que la solución es conectar una placa con conectividad WiFi al Arduino 101 a través de cable. Dentro del abanico de posibilidades que tenemos, elegimos el ESP8266. Más concreto la placa o kit de desarrollo NodeMCU.
Aunque solo se utilice a modo de hub, el precio y tamaño nos hicieron decantarnos por esta placa. La solución final fue comunicar a través del puerto serie con el Arduino 101 y enviar los datos en formato JSON.
La elección de este formato es debido a dos factores. Por un lado se trata de un estándar más que reconocido y por otro lado el servicio en la nube que íbamos a utilizar (Firebase) utiliza este tipo de formato.
Esto es una ventaja ya que no tenemos que hacer conversión entre los diferentes formaros utilizando un único formato en todo el proyecto. Vuelvo a recalcar que toda la lógica reside en el Arduino 101, NodeMCU solo se encarga de hacer de puente entre el Arduino 101 e Internet.
Una de las librerías que investigó Germán fue ArduinoJSON. Esta librería te permite un fácil manejo de este tipo de formatos además de que es totalmente compatible con el ESP8266.
Comunicación con la plataforma en la nube
La comunicación con la plataforma en la nube pasa por utilizar una API REST. Firebase, el servicio elegido como veremos más adelante, tiene una serie de herramientas muy completas para poder comunicar desde diferentes dispositivos.
La integración de Firebase con NodeMCU es instantánea, solo con hacer una llamada HTTP puedes enviar los datos en formato JSON. Sin embargo, ya hay una librería que nos facilita mucho esta tarea, Firebase Arduino, según nos cuenta Germán.
Configuración WiFi Manager
Uno de los problemas que podemos encontrarnos esconfigurar la red WiFi. Si has seguido el tutorial de NodeMCU para programar con el IDE de Arduino, te habrás dado cuenta que la red y la contraseña se meten de forma manual, como un literal dentro del código.
Esto se compila y no hay manera de alterarlo a no ser que vuelvas a cargar el programa. Así que si cambia la WiFi, lo tienes que modificar y subir de nuevo.
Si embargo, la librería WiFi Manager nos ofrece un sistema para cambiar la configuración de la red a través de una conexión WiFi. También podemos crear nuestros propios parámetros. Por ejemplo la base de datos de Firebase o lo que se nos ocurra.
WiFiManager es una librería que con unas pocas líneas abre un servidor web si no puede conectarse a una WiFi. Una vez configurada, se destruye.
Es relativamente complicado de programar al principio pero es muy potente para diseñar productos para usuarios finales que no saben programar.
Actualización OTA
Uno de los retos dentro de los dispositivos del IoT es la actualización de los dispositivos en remoto. ¿Te imaginas tener repartidos por todo el mundo cientos de dispositivos como este y que los tengas que actualizar uno a uno?
Se trata de la misma tecnología que utilizan los móviles, OTA (viene del inglés On The Air). Cuando tu actualizas una app de tu móvil no vas a la web de la aplicación, te descargas un archivo y lo instalas. Automáticamente, aparece una notificación en tu móvil que hay disponible una nueva versión.
Esto también sucede con televisores inteligentes, tablets o teléfonos.
Con el ESP8266 se puede utilizar la librería ArduinoOTA que básicamente nos permite programar un dispositivo con conexión WiFi sin estar conectados físicamente.
Germán ha conseguido implementarlo dentro del NodeMCU. Pero como él nos cuenta, no va tan fina como debiera. Se puede decir que de 5 veces que intentas actualizar NodeMCU, solo 1 funciona :(
Geolocalización WiFi
Por último, la geolocalización de cada dispositivo es muy importante. Esto lo hacemos geolocalizando NodeMCU a través de la WiFi. No voy a entrar en detalles de cómo hay que hacerlo ya que tienes un extenso tutorial donde se explica el proceso paso a paso.
Lo único que hay que decir es que se consigue gracias a la librería de Germán, WiFiLocation y al servicio que proporciona Google Maps Geolocation API.
Esta información es valiosa ya que podemos ubicar cualquier frigorífico en el mundo de forma automática.
Firebase y aplicación web para el IoT
Para finalizar nos queda hablar de la plataforma en la nube elegida Firebase y la aplicación web para mostrar los datos.
Las características que buscamos para integrar un servicio en la nube en este proyecto son la facilidad y el coste. En la actualidad hay muchos servicios que podemos llegar a utilizar cómo Thingspeak, ThingerIO o el propio Arduino Cloud. Todos pueden ser una buena opción.
Pero quizás debido a nuestra experiencia en el desarrollo web, elegimos Firebase. Lo primero que hay que destacar es que tienes APIs para muchos lenguajes de programación entre los que se encuentra JavaScript.
La base de datos tiene limitaciones al tratarse de 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 10 GB de descarga.
Con todo esto, nosotros tras un mes de recopilación de datos cada minuto de dos frigoríficos, tenemos un consumo de almacenamiento de 3,9 MB y 158,4 MB de descarga.
Si el número de frigoríficos aumenta muy rápido, no es viable seguir utilizando una cuenta gratuita.
La base de datos utiliza tecnología NoSQL. Para añadir o leer un registro utiliza el formato JSON. Podemos construir el modelo de datos al vuelo, no hace falta tenerlo establecido como en las bases de datos relacionales.
Para este proyecto vamos a utilizar dos bases de datos. Una para almacenar el histórico de temperaturas, consumos y ventiladores. Otra para almacenar la configuración de todo el sistema.
Base de datos histórico
Esta estructurada de la siguiente manera. Parimos de un nodo raíz que será la MAC de una NodeMCU. Al no poder repetirse en todo el mundo, ya tenemos un identificador único que identifique a un frigorífico.
De este nodo cuelgan todos los registros por fecha. Cada fecha tiene los valores de temperaturas, consumo y ventilador.
Lo bueno es que si hace falta algún otro parámetro no tenemos que modificar nada en la base de datos. Lo único que haríamos sería meterlo en el JSON que se envía a Firebase desde NodeMCU.
Base de datos configuración
Esta base de datos es más sencilla. Solo tenemos un registro por dispositivo NodeMCU. Como en el caso anterior el identificador único será la MAC. Recuerda que al ser dos bases de datos independientes no hay conflicto.
Los datos son los básicos, nombre del dispositivo para localizarlo fácilmente, latitud, longitud, modelo de frigorífico y clase energética.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "A020A61AF950" : { "name" : "G4lile0", "lat" : 43.634327, "lon" : -3.003291, "model" : "Bosch KGS3800", "class" :"A" } } { "600194236260" : { "name" : "German", "lat" : 40.570799, "lon" : -3.637473, "model" : "Zanussi", "class" :"AAA" } } |
De momento esta información se mete de forma manual.
Aplicación web con Bootstrap
Por otro lado, la aplicación web tiene que ser responsive es decir, que abarque todo tipo de resoluciones de pantalla y dispositivos. Gracias al Framework de desarrollo web Bootstrap, tenemos apps responsive al alcance de los Makers.
Además, hemos utilizado un tema para Bootstrap que sirve como panel de control totalmente abierto, SB Admin 2.
En la aplicación integramos una pantalla inicial donde se muestra un mapa con los diferentes dispositivos dados de alta en la plataforma y una pantalla para ver en detalle los datos de temperatura, consumo y ventilador.
Todo el código que hemos utilizado para la página web lo puedes descargar desde GitHub. También la puedes consultar desde aquí www.iotfridgesaver.com.
Si quieres profundizar en el funcionamiento de GitHub entra aquí.
Conclusiones del proyecto IoT Fridge Saver
No cabe duda que se trata de un proyecto muy interesante que puede ayudarnos a entender cómo consumimos electricidad en los hogares.
El electrodoméstico que más consume, el frigorífico, es un gran desconocido. Gracias a este proyecto estamos entendiendo mucho mejor como funciona internamente este electrodoméstico.
Esta solo es una parte del proyecto, el Making Off. En breve lo presentaremos al concurso con todo lujo de detalles. En cuanto esté pondremos un enlace desde este artículo para que cualquier persona que quiera montarlo en su casa lo tenga totalmente accesible.
Planes de futuro
Todavía nos queda mucho trabajo por hacer y hemos pensado en varias mejoras que podemos incluir.
- Utilizar una base de datos por usuario y no una común.
- Notificaciones en el móvil a través de IFTTT y Telegram.
- Formulario con parámetros de configuración.
- Gestionar la configuración en el NodeMCU.
- Poder activar o desactivar los ventiladores en remoto.
Cualquier sugerencia será bienvenida en los comentarios de este artículo.
Puedes escuchar este programa en, iVoox, iTunes y en Spreaker. Si lo haces, por favor valora y comenta, así podremos llegar a más gente.