Red Inalámbrica de sensores para el control de climatización basado en datos
Abstract
En esta tesis se presenta un proyecto en el que se despliega una red de sensores para monitorizar ciertas magnitudes de un sistema de climatización en el edificio de los laboratorios de la escuela técnica superior de ingeniería de la Universidad de Sevilla. Para ello se desarrolla unas placas electrónicas, unas conectadas a la corriente y otras que operan a batería. Se presenta entonces una solución para sensorizar un sistema que en un principio no tiene ningun sistema de monitorización. Estas medidas se usan para montar un modelo basado en datos recogidos de dicho sistema de sensorización en la que ya se puede aplicar una ley de control.
Full text
Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Proyecto Fin de Máster Máster de Ingeniería Electrónica, Robótica y Automática Red Inalámbrica de sensores para el control de climatización basado en datos Autor: Richard Mark Haes Ellis Tutor: Ignacio Alvarado Dpto. Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2014
Proyecto Fin de Máster Máster de Ingeniería Electrónica, Robótica y Automática Red Inalámbrica de sensores para el control de climatización basado en datos Autor: Richard Mark Haes Ellis Tutor: Ignacio Alvarado Profesor Titular Dpto. Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2014
Proyecto Fin de Máster: Red Inalámbrica de sensores para el control de climatización basado en datos Autor: Richard Mark Haes Ellis Tutor: Ignacio Alvarado El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha:
Resumen En esta tesis se presenta un proyecto en el que se despliega una red de sensores para monitorizar ciertas magnitudes de un sistema de climatización en el edificio de los laboratorios de la escuela técnica superior de ingeniería de la Universidad de Sevilla. Para ello se desarrolla unas placas electrónicas, unas conectadas a la corriente y otras que operan a batería. Se presenta entonces una solución para sensorizar un sistema que en un principio no tiene ningun sistema de monitorización. Estas medidas se usan para montar un modelo basado en datos recogidos de dicho sistema de sensorización en la que ya se puede aplicar una ley de control. I
Abstract Th is document presents a project in which a wireless sensor network is developed and used to monitor certain magnitudes of a HVAC system in the building of the laboratories of the engineering school in the University of Seville. In order to deploy such system a pair of electronics boards were developed; one that is continuously connected to the grid for power and another that operates with battery power. We therefore present a solution to gather data on a system that in principle does not have any type of feedbacl control because there are no measuremntes. With this data a model can be idetified based on data and with this model a control law can be designd to control the system. III
4Capítulo 1. Introducción 1.3 Planteamiento de la solución Tomando como referencia la figura 1.1, tenemos una serie de medidas que tomar cerca del fancoil secundario de la sala junto con medidas ambientales de temperatura humedad y presión en otros lados lejos del fancoil, por tanto, se ha decidido realizar la red de sensores en dos partes. La primera esta compuesta por una centralita de sensores que se encargará de medir la temperatura de entrada y salida del agua del fancoil, la temperatura y humedad ambiental a la entrada y salida del fancoil, el nivel de CO2 y particulas orgánicas en el airle dentro de la sala y por último la corriente consumida por el fancoil. Además se encargara de registrar la fecha y hora de las medidas mediante un RTC. Estas medidas junto con su Timestamp se almacenarán en una tarjeta microSD. Por último, servirá como router en el que se conectarán nodos con diferentes capacidades de sensorización. La segunda parte compuesta por nodos se encargara de medir la temperatura, humedad y presión en las diferentes partes de la sala, y además podrá medir el porcentaje de apertura de una puerta o ventana. Esto lo realiza mediante un encoder de cuadratura y un mecanismo que se detallará mas adelante. Un esquema del planteamiento se puede visualizar en la figura 1.5. Centralita Instalado en cada sala, receptor de nodos. Conectado a sensores por cable Nodos Funcionan a batería, conectados a sensores de presión, humedad y temperatura. Algunos poseen sensores magneticos y puerto para encoder. Sensores para el Fancoil Figura 1.5 Esquema del planteamiento.
2 Hardware del sistema En este capítulo se hablará sobre el harware del sistema de sensorización. Tal y como se ha visto en el capítulo anterior, el sistema se compone de dos partes, la centralita de datos y los nodos. La centralita de datos estará conectada continuamente a la red de alimentación mientras que los nodos estarán conectados a baterías. Esto permite usar en la centralita los sensores de mayor consumo y que poseen un precalentamiento (Como el sensor de CO2) y en los nodos aquellos que no requieren ningún precalentamiento y que tienen modos de bajo consumo. 2.1 Microcontrolador Figura 2.1 Plataforma ESP. Para el microcontrolador se ha estudiado la posibilidad de usar un Arduino por su gran soporte comunitario y por su bajo coste. Pero no se ha optado por esta soución ya que al optar por una placa con cualquier tipo de comunicación inalámbrica se disparaba en precio y además no aportaban suficientes entradas y salidas para los sensores elegidos. Se ha optado entonces por usar microcontroladores de la marca Espressif ya que aportan varias ventajas frente a los Arduinos, entre ellas, las diferencias mas importantes son: •Menor coste •Mayor capacidad computacional (40Mhz mínimo, hasta 240Mhz!!) •Compatible con librerías Arduino •Modos de bajo consumo. •WIFI/Bluetooth integrado. •Doble núcleo. •Mayor memoria flash. •Soporte RTOS. 5
6Capítulo 2. Hardware del sistema 2.1.1 Centralita general Para la centralita general de datos se ha optado por usar una placa de desarrollo Sparkfun ESP-32 thing. En este caso no se necesita ninguna funcionalidad de bajo consumo ya que en este caso la placa irá conectado a la red de alimentación y estaŕa continuamente encendido. Figura 2.2 Placa de desarrollo Sparkfun ESP32 Thing. Las características más importantes de esta placa son las siguentes: •Procesador doble nucleo de Tensilica LX6 •Velocidad CPU hasta 240MHz •520kB SRAM •Wifi integrado 802.11 BGN •28 GPIO •4MB Memoria flash Esta placa irá conectada a una PCB diseñada para albergar los diferentes conectores y componentes tales como el RTC, tarjeta microSD, sensor CO2 y puertos de conexion. 2.1.2 Nodos Figura 2.3 Modulo ESP32-C3-Wroom-N2. Para los nodos se ha optado por usar la serie ESP32-C3 de Espressif, ya que cuenta con similares características que el micro anterior pero dispone de variantes en un formato compacto con pines suficientes para nuestra aplicación. Además veremos unos modulos en formato SMD (Surface Mounted Device) que incluyen ya la circuitería de la antenna de radio bien dimensionado junto con una pantalla RF que aisla la circuitería antes interferencias externas. En nuestra aplicación usaremos el ESP32-C3-WROMM-N2-H4 el cual se puede ver en la figura 2.3. El ESP32-C3-WROOM-N2-H4 es un SoC (System on Chip) de un único nucleo con WiFi y Bluetooth 5 (LE). Está basado en la architectura open-source de RISC-V.
2.2 Sensores 7 En la siguiente lista se muestra las principales características del SoC. •CPU 32 bits de un núcleo hasta 160Mhz. •Protocolos IEEE 802.11b/g/n •Bajo consumo (5uA hasta 130uA) •4MB memoria flash SPI. •15 GPIO Este SoC se usara conjuntamente en una placa PCB con circuitería adicional para la alimentación a batería, sensor de temperatura, presión y humedad, y los canales de entrada para los sensores de puertas y ventanas. 2.2 Sensores 2.2.1 Temperatura y humedad: DHT-22 Figura 2.4 Sensor DHT22. Este sensor dispone de un procesador interno que realiza el proceso de medición, la medida se puede leer mediante una señal digital, por lo que resulta muy sencillo obtener la información desde un microcontrolador. El protocolo que se utiliza para leer dicho sensor se llama 1-Wire. 2.2.2 Temperatura: DS18B20 Figura 2.5 Sensor DS18B20. El DS18B20 es un termómetro con una resolución de 9 a 12 bits que incluye una función de alarma de temperatura inferior y superior programable mediante su memoria no volátil. El DS18B20 se comunica mediante el bus 1-wire (1 cable) que por definición solo requiere de 1 cable y tierra para funcionar. El D18B20 puede derivar su alimentación mediante el cable de datos (Alimentación parasítica) eliminando la necesidad de un cable adicional de alimentación. El D18B20 dispone de un código de 64 bits único para cada sensor que permite conectar múltiples sensores al mismo bus 1-Wire. Las aplicaciónes que pueden benifciarse de estas funcionalidades son principlalemnte los sistemas HVAC para el control de climatización.
8Capítulo 2. Hardware del sistema 2.2.3 CO2 y Particulas Orgánicas(VOC): CCS811 Figura 2.6 Sensor CCS811. El CCS811 es un sensor de gas de bajo consumo que integra un sensor de óxido de metal (MOX) para detectar una variedad de partículas orgánicas (VOCs). Esto es útil para la monitorización de la claidad del aire en interiores. El sensor esta basado en la tecnologia de AMS que habilita alta fiabilidad para sensores de gas, altos ciclos de vida y reduccion de consumo de energía. El CCS811 lleva integrado un microcontrolador que maneja todas las funcionalidades del sensor y procesa las medidas. Despues de procesar estas medidas, las proporciona a través del puerto I2C para su lectura. Este método simplifica la integración de dicho sensor en las aplicaciones y disminiye el tiempo que se tarda para sacar el producto a mercado. El sensor soporta diversos algoritmos que procesan las medidas raw para dar como resultados las medidas de TVOC, esta medida es un equivalente de CO2 (eCO2), y los humanos son la principal cuasa de los TVOSs (del inglés, Total Volatile Organic Compounds) lo cual nos da una medida de la ocupación de las salas. 2.2.4 Presión, Temperatura y Humedad: BME280 Figura 2.7 Sensor BME280. El BME280 es un sensor combinado que incluye humedad, presión y temperatura. Esta basado en principios de medida probados en la industria luego proporciona una alta fiabilidad y alto ciclo de vida. El sensor esta encapsulado en un paquete LGA el cual es muy compacto y se puede integrar facilmente en cualquier sitio. Su pequeño formato permite un consumo muy pequeño. Esto lo hace adecuado para aplicaciones que funcionan bajo batería. El sensor de humedad proporciona una respuesta rápida ante cambios externos y posee gran exactitud sobre un rango amplio de temperaturas. El sensor de presión mide la presión barometrica absoluta con una alta exactitud y resolución con muy poca varianza de ruido. El sensor de temperatura ha sido optimizado para minimizar el efecto de ruido con una resulución alta. Dicha medida se usa internamente para compensar el sesgo en los dos sensores anteriores y además puede usarse como estimación de la temperatura ambiental.
2.2 Sensores 9 El dispositivo propociona dichas medidas mendiante las interfaces SPI e I2C. Se puede alimentar desde 1.71 a 3.6V. Cuando no se esta midiendo el sensor consume alrededor de 0.1uA lo cual es ideal para aplicaciones a batería. 2.2.5 Interruptor magnético Figura 2.8 Interruptor magnético. El interruptor magnetico actua como un interruptor normal solo que se acciona mediante la presencia de un imán. Esto lo usaremos en los nodos operados a bateria para detectar la apertura y cierre de las puertas. 2.2.6 Sensor de corriente Figura 2.9 Sensor de corriente. El sensor de corriente es el ZMCT103 y permite medir corrientes alternas hasta 5 amperios. La salidna nos la da en tension y es proporcional a la corriente detectada en el toroide. Con el potenciometro podemos ajustar la sensibiidad del sensor. Este sensor se usara para medir la potencia consumida por el fancoil y por tanto habra que hacer un procesamiento para calcular dicha potencia a partir de la señal sinusolidal. 2.2.7 RTC: Reloj tiempo real Figura 2.10 RTC. Un RTC es un dispositivo electrónico que permite obtener medidas del tiempo. Estan formados por un cristal resonador integrado en la electrónca que contabiliza de forma correcta el paso del tiempo. Además los
10 Capítulo 2. Hardware del sistema RTC tienen en cuenta las peculiaridades del sistema de tiempo que tenemos, como es el sistema sexsagecimal, los meses, años bisiestos, etc.. Nosotros usaremos el integrado DS3231 que incorpora medición y compensación de la temperatura. Esto nos garantiza una precision de 2ppm lo que equivale a un desfase de 172ms/día. Este integrado permite además la incorporación de una batería para mantener la contbilización del tiempo incluso durante un apagón. Las medidas se proporcionan a través del puerto I2C. Cabe destacar que no usaremos un módulo hecho sino implementaremos la circuiteria en la placa PCB directamente para ahorrar espacio en la placa. Nota: Es importante destacar que el microcontrolador ya posee un reloj RTC que tiene alrededor de la misma precisión que el DS3231, pero con la diferencia de que no permite conectar una batería externa por si se corta la corriente. Esto es algo que ocurre amenudo en la zona donde se instalará el sistema por lo que a primera vista resulta imprescindible usar un RTC externo. 2.3 Memoria Figura 2.11 Modulo tarjeta microSD. Para poder almacenar los datos de los sensores se ha optado por usar una tarjeta microSD en la centralita de datos. La centralita recogerá información de los nodos e irá leyendo los sensores en los puertos de conexion y registrando los datos en un fichero de texto. En la figura se muestra un módulo de tarjeta microSD pero en nuestro caso implementaremos directaemtne en la placa PCB la circuiteria para aceptar la tarjeta.
3 Diseño de PCB Figura 3.1 Editor PCB. Para incorporar todos los elementos electrónicos diseñaremos dos placas PCB. Una de ellas será para la centralita de datos y otra para los nodos sensores. Para el diseño de estas placas se ha hecho uso del programa EasyEDA. Este programa nos permite diseñar un esquemático e incorporar los componentes seleccionados desde la tienda LCSC Electronics. La ventaja de esta herramientas es que estan ligadas los símbolos, footprints y hoja de datos a cada elemento del esquemático, facilitando el diseño. 3.1 Diseño Centralita Figura 3.2 Esquema de componentes de la PCB de la centralita. El diseño de la PCB se ve en la figura 3.2 y muestra los diferentes puertos de conexión que posee la placa junto los los componentes internos. Como se puede ver, se ha introducido algunos puertos adicionales como 11
12 Capítulo 3. Diseño de PCB el de I2C auxiliar, conector para una cámara térmica y puertos para sensores BME280, estas conexiones son para futuras ampliaciones. •Placa de desarrollo ESP32-Thing de Sparkfun •Sensor CCS811 de Sparkfun •Reloj timepo real (RTC) •2 Leds indicadores •Ranura para tarjeta microSD •Resitencias pullup para I2C y One-Wire •Conectores de 3 y 4 pines para los sensores. El esquematico de la placa centralita se ve en la figura 3.3. A A B B C C D D 1 1 2 2 3 3 4 4 5 5 TITLE: Sheet_1 REV: 1.0 Date: 2021-04-12 Sheet: 1/1 Drawn By: richard9661h Company: Your Company SparkfunESP32Thing U_1 GND 40 21 39 TX 38 RX 37 22 36 19 35 18 33 532 15 31 230 029 428 17 27 16 26 3V3 25 GND 24 VBAT 23 VUSB 22 GND 21 GND 20 VUSB 19 VBAT 18 GND 17 3V3 16 RST 15 13 14 12 13 14 12 27 11 26 10 25 935 834 733 632 539 438 337 236 1 23 34 GND GND GND +3V3 SCK MISO MOSI CS +3V3 +3V3 +3V3 GND LED_1LED_2 TF-15×15 SD DAT2 1 CD/DAT3 2 CMD 3 VDD 4 CLK 5 VSS 6 DAT0 7 DAT1 8 CD 9 G3 10 G4 11 G1 12 G2 13 +3V3 SCL SDA SDA SCL AC_current_sensor +3V3 +3V3 +3V3 +3V3 GND GND GND GND SDA SCL SDA SCL SDA SCL SDA SCL SDA SCL DS18B20_DATA DS18B20_DATA DS18B20_DATA DS18B20_DATA DHT22_DATA_1 DHT22_DATA_2 CCS811 U5 RST 7WAKE 6SCL 5SDA 4GND 33.3 2VCC 1 INT 8 CCS811 GND +3V3 SDA SCL DS18B20_DATA DS18B20_DATA DHT22_DATA_1 DHT22_DATA_2 +3V3 GND AC_current_sensor +3V3 GND CS MOSI SCK MISO GND +3V3 AC_ON/OFF_1 AC_ON/OFF_2 AC_ON/OFF_1 AC_ON/OFF_2 HDR-M-2.54_1x4 J1 1 2 3 4 LED_1 LED_2 DS3231MZ+ U1 32kHz 1 VCC 2 INT#/SQW 3 RST# 4 GND 5 VBAT 6 SDA 7SCL 8 SCL SDA GND +3V3 CR2032-BS-6-1 B1 12 GND 10kΩ R1 10kΩ R2 10kΩ R5 10kΩ R6 10kΩ R7 10kΩ R8 10kΩ R9 4.7k R3 4.7k R10 220Ω R11 220Ω R12 4.7k R13 LED1 LED2 XH-4AW_C2908613 AC_CS 1 12 23 34 4 XH-3AW_C2908612 T1 1 1 2 2 3 3 XH-3AW_C2908612 T2 1 1 2 2 3 3 XH-3AW_C2908612 T3 1 1 2 2 3 3 XH-3AW_C2908612 T4 1 1 2 2 3 3 XH-3AW_C2908612 DHT22_1 1 1 2 2 3 3 XH-3AW_C2908612 DHT22_2 1 1 2 2 3 3 XH-3AW_C2908612 AC_ON/OFF_1 1 1 2 2 3 3 XH-3AW_C2908612 AC_ON/OFF_2 1 1 2 2 3 3 XH-4AW_C2908613 BME280_1 11 22 33 44 XH-4AW_C2908613 BME280_2 11 22 33 44 XH-4AW_C2908613 I2C_AUX 11 22 33 44 XH-4AW_C2908613 THERM_CAM 11 22 33 44 Figura 3.3 Esquematico centralita. En la figura 3.4 podemos ver el conexionado del sensor de CO2. En este caso el sensor se comunica con el micro ESP32-Thing mediante I2C. Este bus I2C requiere de dos resitencias pullup ya que el módulo no las incluye. Lo mismo ocurre con el integrado del reloj a timepo real. El conexionado del RTC lo podemos ver detallado en la figura 3.5. Figura 3.4 Esquematico sensor CO2. Para medir el tiempo en el que se realizan se usar un DS3231, el circuito para este integrado se muestra en la figura 3.5.
3.1 Diseño Centralita 13 Figura 3.5 Esquematico RTC. Como se comentó anteriormente, se ha usado una tarjeta microSD para almacenar los datos recogidos de los sensores. Las tarjetas microSD soportan dos protocolos de comuinicación: SD y modo SPI bus. El host, en este caso el ESP32 puede elegir cualesqueira de esto dos modos. En nuestro caso se ha optado por usar SPI ya que el micro ESP32 dispone de un puerto SPI nativo. El esquema de conexionado se ve detallado en la figura 3.6. Una conexión típica requiere de resistencias pullup en las líneas de transmisión y de seleción (Chip select CS). Cabe notar que no estamos haciendo uso del pin de detección de tarjeta CD (Card Detect). Figura 3.6 Esquematico tarjeta microSD. Por último queda conectar el resto de los componentes al micro, en la siguiente figura se ve un detalle de dichas conexiones. Figura 3.7 Esquematico ESP32-Thing.
20 Capítulo 4. Programación ds18x20 task Task init Read sensor Get RTC time xQueueSend(sdmmc) app_main() Init RTC QueueCreate NVS Init, WIFI Init Run tasks ESPNOW Task Init, xQueueCreate xQueueRecieve if broadcast or unicast Get RTC time xQueueSend(sdmmc) dht task Task init Read sensor Get RTC time xQueueSend(sdmmc) ccs811 task Task init Read sensor Get RTC time xQueueSend(sdmmc) sdmmc task Init, mount filesystem xQueueRead(sdmmc) LOG to microSD LOG to MQTT MQTT Handler Task Init MQTT Event LOG WIFI task Task Init ESPNOW Callbacks MQTT Callbacks Figura 4.6 Esquema de software. Tal y como podemos ver en la figura 4.6 tenemos un hilo principal llamado app main. En este hilo inicializamos algunas funciones que son requeridas de forma global como el reloj RTC, el flash NVS y una cola de datos. Posteriormente se van lanzando los demás hilos y acaba terminando el hilo principal. De este modo solo queda operativo los hilos hijos del hilo principal. Los hilos asociados a los sensores siguen una estrucutra prácticamente similiar, primeramente se inicializa el periférico y protocolo para comunicar con el sensor, se realizan comprobaciones para verificar que se haya inicializado bien y luego entran en bucles infinitos en los que se lee los datos del sensor o sensores, se lee luego el tiempo actual con el RTC y por último se escribe dicha información a una cola de datos dirigida al hilo de sdmmc. En el hilo sdmmc se centra en recibir datos de una cola y escribirlos a la tarjeta microSD. Primeramente se inicializa el puerto SPI y se verifica que haya una tarjeta microSD conectada. Después se monta el sistema de archivos y finalmente entra en un bucle infinito en el que se espera a que le lleguen datos por la cola de datos. Una vez leido un dato, abre un fichero en el sistema de archivos y escirbe una nueva entrada en formato JSON para su posterior procesamiento en MATLAB. Además de guardar los datos en la tarjeta microSD, se manda también por el protocolo MQTT para su visualizacion a tiempo real en un PC remoto.
4.4 Esquema de software 21 Los datos que llegan al hilo de sdmmc se almacenan en un fichero de la tarjeta microSD codificados como un elemento JSON. Éste elemento JSON tiene la siguente forma: Código 4.1 Formato JSON. 1{"id ":8," Topic ":"/ DHT−1/Humidity","value":57.900002,"ts":"2022−10−16T16:14:17+02:00"} 2{"id ":9," Topic ":"/ DHT−2/Temperature","value":25.700001,"ts":"2022−10−16T16:14:17+02:00"} 3{"id ":10," Topic ":"/ DHT−2/Humidity","value":52.700001,"ts":"2022−10−16T16:14:17+02:00"} 4{"id ":3," Topic ":"/ DS18B20−0/Temperature","value":25.500000,"ts":"2022−10−16T16:14:17+02:00"} 5{"id ":4," Topic ":"/ DS18B20−1/Temperature","value":25.500000,"ts":"2022−10−16T16:14:17+02:00"} 6{"id ":5," Topic ":"/ DS18B20−2/Temperature","value":25.500000,"ts":"2022−10−16T16:14:17+02:00"} 7{"id ":1," Topic ":"/ CCS811/CO2","value":400.000000,"ts":"2022−10−16T16:14:22+02:00"} 8. . 9. Este formato JSON tiene 4 campos, el primero es el ID, esto nos permite clasificar las medidas según su origen. El siguente es el tópico, esto no es mas que una descripción de la medida y coincide con el nombre del tópico al cual se publica dicha medida en MQTT, luego tenemos el valor de la muestra y finalmente el tiempo en el que se realizó dicha medida recogida del RTC.
5 MQTT Figura 5.1 MQTT. MQTT viene de las siglas del inglés Message Queue Telemetry Transport. Es un protocolo de comunicación machine-to-machine que hace uso de colas de mensajes. Es un protocolo que se basa en el stack TCP/IP. Las conexiones se mantienen abiertas entre máquinas Está basado en la pila TCP/IP como base para la comunicación. En el caso de MQTT cada conexión se mantiene abierta y se "reutiliza" en cada comunicación. Es una diferencia, por ejemplo, a una petición HTTP 1.0 donde cada transmisión se realiza a través de conexión. MQTT fue creado por el Dr. Andy Stanford-Clark de IBM y Arlen Nipper de Arcom (ahora Eurotech) en 1999 como un mecanismo para conectar dispositivos empleados en la industria petrolera. Aunque inicialmente era un formato propietario, en 2010 fue liberado y pasó a ser un estándar en 2014 según la OASIS (Organization for the Advancement of Structured Information Standards). 5.0.1 Funcionamiento MQTT es un servicio de mensajes de tipo push con estructura publicador y suscriptor (pub-sub). En este tipo de comunicaciones el cliente se conecta con un servidor centralizado que se denomina broker. Para organizar los mensajes, cada clinete dispone sus mensajes en topicos que se organizan jerárquicamente. El cliente puede publicar mensajes en cualquier topico y otros clientes pueden suscribirse a cualquier topico. El broker se encargara de que los mensajes de los publicadores lleguen a sus respectivos suscriptores. Figura 5.2 Esquema de funcionamiento de MQTT. Son los clientes que inician una nueva conexion con el broker a través de una conexión TCP/IP, el broker mantiene una lista de clientes con comunicaciones inicializadas y se mantiene dicha conexión abierta hasta que el clinete decida finalizarla. Por defecto MQTT utiliza el puerto 8883 cuando se usa una conexión TLS. 23
24 Capítulo 5. MQTT Para una conexión TLS el cliente manda un mensaje tipo CONNEXT que tiene informacion del nombre de usuario, contraseñá de la cominicación y el id del cliente entre otros. El broker entonces contesta con otro mensaje de tipo CONNACK para hacerle llegar al cliente que su conexioón ha sido acceptada (O rechazada en su caso). Es habitual que el broker de MQTT esté alojado remotamente en la nube proporcionado por algún servicio web. En nuestro caso instalaremos nuestro propio broker en un ordenador. Para ello hemos usado mosquitto. Mosquitto es un broker de MQTT de licencia libre desarrollado por la fundacion Eclipse. Nos permite instalar un broker en nuestro sistema para probar las comunicaciones antes de desplegarlo en el mundo real. Además es muy liguero (de ahi el nombre mosquito), lo cual lo hace ideal para instalarlo en sistemas de bajo consumo como es una rapsberry pi. 5.1 MQTT Explorer Para poder visualizar los datos en un ordenador resulta conveniente disponer de un tipo de cliente que se suscriba a todo y que nos muestre por pantalla todos los topicos disponibles, de esta forma podemos verificar el correcto funcionamiento de la red MQTT que tenemos montada. En la actualidad existen muchos clientes genéricos que permiten hacer eso pero uno de los mejores programas se llama MQTT Explorer. Es un programa que emula un cliente generico y que fue desarrollado bajo licencias Open-Source por Thoamas Nordquist. MQTT Explorer esta caracterizado por su interfaz de usuario amigable que resulta sencillo e intuitivo de usar. Los mensajes y topicos se muestra de forma jerárquica en arbol y es posible deplegar y plotear los valores publicados por cada topic en gráficas. Además se puede registrar dicha información en un fichero para su posterior analisis. Figura 5.3 MQTT Explorer. Tambien cabe destacar que este programa esta altamente optimizado para la gestion de cientos de miles de mensajes por minuto. Lo cual lo hace suficiente para volcar un gran numero de datos de cientos de sensores a la vez.
5.1 MQTT Explorer 25 En las figuras 5.4 y 5.5 podemos ver resumido un esquema final de como esta montado el sistema y una foto del mismo. Se puede ver que tenemos una red wifi en la que se puede comunicar la centralita con el ordenador a través de mensajes MQTT y de los nodos a la centralita los mensajes usan el protocolo ESP-NOW. Asimismo a la centralita esta conectada diversos sensores conectados al fancoil para monitorizar y caracterizar el dispositivo. Broker (PC) Centralita Mensajes MQTT Router Mensajes ESP-NOW Nodos Remotos Red WiFi Red ESP-NOW MQTT- Explorer Fancoil Sensores Device 1 Device 2 Device 3 Figura 5.4 Diagrama del montaje. Centralita Device 1 Device 2 Device 3 Router Cable Alimetnacion Sondas de Temperatura Sensores Ambientales Figura 5.5 foto del montaje.
6 Resultados Para valorar el funcionamiento del sistema se ha puesto a medir en el despacho F2 de los laboratiorios L1. Se ha dejado los sensores midiendo al aire libre durante 1 semana. Para recoger los datos, se ha extraido la información de la tarjeta microSD de la placa centralita. De ahí se ha usado un código de matlab para procesar el archivo y converirlo en formato CSV, de ahi se ordena los datos según el tipo de sensor y a su vez se ordena según el tiempo de medida. Por último se grafica los datos, los cuales se pueden visualizar desde la figura 6.1 hasta la figura 6.16. Matlab Code Código 6.1 Data processor. 1clear all; 2close all; 3 4fid = fopen('LOG.TXT'); 5fdCSV = fopen('LOGcsv.csv','w'); 6 7fprintf(fdCSV,"id,topic,value,time\n"); 8 9tline = fgetl(fid); 10 while true 11 12 tline = fgetl(fid); 13 if ~ischar(tline); break;end %end of file 14 % disp(tline) 15 str = char(tline); 16 if isempty(str) 17 return 18 end 19 data = jsondecode(str); 20 21 fprintf(fdCSV,"%d,""%s"",%8.2f,""%s""\n",data.id,data.Topic,data.value, data.ts); 22 23 24 end 25 26 fclose(fid); 27 fclose(fdCSV); 27
28 Capítulo 6. Resultados Código 6.2 Data plotter. 1clear all; 2close all; 3 4LOGcsv = importfile("LOGcsv.csv",[2 inf]); 5 6LOGcsv = sortrows(LOGcsv,'id','ascend'); 7 8[ci,ia1,ic1] = unique(LOGcsv.id); 9LOGcsv.time = datetime(string(LOGcsv.time),'TimeZone','UTC','Format','yyyy-MM- dd''T''HH:mm:ssXXX') 10 11 for i=1:ic1(end)-1 12 figure; 13 14 plot(LOGcsv.time(ia1(i):ia1(i+1)-1),LOGcsv.value(ia1(i):ia1(i+1)-1)); 15 title(LOGcsv.topic(ia1(i))) 16 end 17 18 LOGcsv = sortrows(LOGcsv(ia1(end):end,:),'topic') 19 20 [ci2,ia2,ic2] = unique(LOGcsv.topic); 21 22 23 for i=1:ic2(end)-1 24 figure; 25 26 plot(LOGcsv.time(ia2(i):ia2(i+1)-1),LOGcsv.value(ia2(i):ia2(i+1)-1)); 27 title(LOGcsv.topic(ia2(i))); 28 end 29 i = ic2(end); 30 figure; 31 plot(LOGcsv.time(ia2(i):end),LOGcsv.value(ia2(i):end)); 32 title(LOGcsv.topic(ia2(i))); El código que procesa los datos y ordena el archivo CSV resultante se encuentra en los códigos 6.1 y 6.2
6.1 Datos obtenidos 29 6.1 Datos obtenidos 6.1.1 Datos de la centralita Oct 16 Oct 17 Oct 18 Oct 19 Oct 20 Oct 21 Oct 22 Oct 23 Oct 24 2022 0 500 1000 1500 2000 2500 /CCS811/CO2 Oct 16 Oct 17 Oct 18 Oct 19 Oct 20 Oct 21 Oct 22 Oct 23 Oct 24 2022 0 200 400 600 800 1000 1200 1400 1600 1800 /CCS811/VOC Figura 6.2 Sensor CO2 CCS811 - ppm. Oct 16 Oct 17 Oct 18 Oct 19 Oct 20 Oct 21 Oct 22 Oct 23 Oct 24 2022 52 54 56 58 60 62 64 66 68 /DHT-1/Humidity Oct 16 Oct 17 Oct 18 Oct 19 Oct 20 Oct 21 Oct 22 Oct 23 Oct 24 2022 48 50 52 54 56 58 60 62 64 /DHT-2/Humidity Figura 6.4 Sensor DHT22 1 y 2 - Humedad relativa. Como se puede ver, las medidas comparadas entre si mismo dan lugar a los mismos resultados, esto nos indica que están funcionando correctamente. Faltaría comprobar con sensores calibrado para ver lo preciso y fiable que son los resultados y si requieren de calibración. Cabe destacar que en los sensores DS18B20 se ven muy escalonados las medidas por la resolución del sensor, actualmente esta puesto a una resolución de 9 bits pero se puede cambiar hasta 12 bits. Además resulta que en esa semana, dentro de los despachos la variación de temperatura es tan pequeña que no hace variar mucho la medida.
36 Índice de Figuras 5.4 Diagrama del montaje 25 5.5 foto del montaje 25 6.1 Sensor CO2 CCS811 - ppm 29 6.2 Sensor CO2 CCS811 - ppm 29 6.3 Sensor DHT22 1 - Humedad relativa 29 6.4 Sensor DHT22 1 y 2 - Humedad relativa 29 6.5 Sensor DHT22 1 - Temperatura ambiental 30 6.6 Sensor DHT22 2 - Temperatura ambiental 30 6.7 Sensor DS18B20 1 - Temperatura superficial 30 6.8 Sensor DS18B20 1 y 2 - Temperatura superficial 30 6.9 Sensor DS18B20 3 - Temperatura superficial 30 6.10 Sensor DS18B20 3 y 4 - Temperatura superficial 30 6.11 Sensor Remoto 1 - Humedad relativa 31 6.12 Sensor Remoto 1 y 2 - Humedad relativa 31 6.13 Sensor Remoto 1 - Presión 31 6.14 Sensor Remoto 1 y 2 - Presión 31 6.15 Sensor Remoto 1 - Temperatura 31 6.16 Sensor Remoto 1 y 2 - Temperatura 31
Índice de Códigos 4.1 Formato JSON 21 6.1 Data processor 27 6.2 Data plotter 28 37
Bibliografía 39
Índice alfabético 41
Glosario 43