niubit dev

Un espacio de contenidos "tech" dedicado a los desarrolladores más inquietos.

Vemos cómo construir un sistema de medición de CO₂ casero y barato, accesible por internet y con indicaciones acústicas y luminosas.

Introducción

A raíz de la pandemia de coronavirus, empezó a hacerse popular el tema de la medición del nivel de renovación del aire en los espacios interiores públicos como las aulas de nuestra academia, una vez que se supo que la vía de transmisión del virus era fundamentalmente aérea. Construir un medidor con un sensor adecuado y un microcontrolador cualquiera, es algo a lo que estamos habituados en niubit, así que nos pusimos manos a la obra.

La teoría dice que la proporción de CO₂ en la mezcla de gases que es el aire limpio o renovado es del 0,04% o de 400ppm (partes por millón). En un espacio cerrado y sin ventilar, con organismos vivos en su interior, ese porcentaje asciende progresivamente como consecuencia del metabolismo de los mismos que consume O₂ y produce CO₂. Aunque el criterio para determinar la calidad del aire es mucho más complejo, en lo que respecta a la acumulación de los productos resultantes de la respiración, que es de lo que se trata en la coyuntura de la pandemia, la medida del CO₂ resulta bastante adecuada.

Hace unos meses estuvimos probando con un sensor muy barato, (el CCS811), pero los resultados no fueron muy satisfactorios. Tanto por la imprecisión de sus medidas como por la inestabilidad de las comunicaciones con el mismo. Con el tiempo, conforme este tema de los sensores de CO₂ se popularizó, se vio que un sensor mucho más equilibrado en cuanto a prestaciones/precio era el MH-Z19B. Adquirimos uno y lo montamos sobre un NodeMCU que teníamos libre de un proyecto anterior. Vamos a ver en este artículo cómo hicimos el montaje y lo configuramos.

Montaje

Aunque últimamente solemos diseñar y fabricar placas de circuito impreso (PCBs) para nuestros montajes, dado lo accesibles que se han vuelto, alineados con la temática del curso que este años es el reciclaje y la reparación en el mundo digital, esta vez hicimos el montaje con breadboards y placas de cartón como base.

Siempre elaboramos un esquema del montaje. En casos como este en que el montaje es sobre breadboard y por tanto va a ser más inestable, es incluso más importante, dado que no será raro que algún cable se escape de su presilla y haya que consultar el esquema para volver a colocarlo. Este es pues el esquema de nuestro montaje:

Las dos tiras de pines del sensor de CO₂ tienen una separación tal que no permiten pincharlo directamente sobre una breadboard por lo que utilizamos dos de tipo mini. El microcontrolador NodeMCU lo pinchamos sobre otra mini breadboard, aunque en el esquema siguiente lo pinchamos también entre dos para que no se oculten las conexiones que en el montaje final (que puede verse en la cabecera del artículo) quedan ocultas por los módulos del sensor y microcontrolador.

Firmware

En cuanto al apartado software, inicialmente el plan era hacer un sencillo programa a medida en el Arduino IDE, pero estudiando montajes parecidos conocimos el firmware ESPEasy para NodeMCU que enseguida nos convenció como mejor opción. Así pues cambiamos la opción de programar por la de configurar un programa generalista ya existente. Realmente ESPEasy tiene muchas posibilidades y cubre sobradamente la funcionalidad que buscábamos. Nos permitirá además integrar el medidor de CO₂ en nuestro sistema domótico para provocar distintos comportamientos (como levantar las persianas si el nivel de CO₂ supera cierto valor) o configurar muchas formas de mostrar la información como pantallas, tiras de LED, altavoces, además de ser consultable mediante un interfaz web.

Instalamos la versión ESP_Easy_mega-20191208_normal_ESP8266_4M1M, que nos consta no es la última, pero se indica ya que en las instrucciones que siguen podría haber diferencias si se utiliza otra versión. A continuación detallamos el procedimiento de instalación del firmware:

  1. Bajamos el firmware de este enlace y descomprimimos el paquete que hemos bajado.
  2. Nos aseguramos de que no está conectado el sensor de CO₂ por ejemplo retirándolo de la breadboard o desconectando los cables TX/RX si ya habíamos hecho el montaje.
  3. Conectamos por USB el NodeMCU a un ordenador con Windows.
  4. Abrimos la aplicación ESP.Easy.Flasher.exe que hay dentro del paquete bajado en el punto 1.
  5. Además de la aplicación se abren un par de exploradores de archivos, uno con la carpeta Fonts del sistema y otro con una carpeta donde hay un par de fuentes llamadas AGENCYB y AGENCYR. Interesa instalar estas fuentes (arrastrándolas a la carpeta Fonts del sistema) para que la aplicación de flasheo se vea correctamente.
  6. Seleccionamos el puerto COM al que se ha conectado NodeMCU en el desplegable COM Port.
  7. Seleccionamos la versión normal_ESP8266_4M1M del desplegable Firmware.
  8. Nos aseguramos de que en el desplegable Baud rate está seleccionada la velocidad 115200.
  9. Finalmente pulsamos el botón Flash ESP Easy FW que hay abajo a la derecha. El flasheo llevará unos dos minutos.
  10. Desconectamos el cable USB del ordenador y ya podemos volver a conectar el sensor de CO₂ que habíamos desconectado en el paso 2.

Ya tenemos el firmware instalado. Es una especie de sistema operativo al que se accede mediante una aplicación web que se sirve desde el propio NodeMCU.

Lo primero será conectar NodeMCU/ESPEasy a nuestro punto de acceso Wifi. Para acceder a la página de ajustes Wifi, ESPEasy arranca en un modo especial en el que él mismo actúa como punto de acceso con el nombre ESP-Easy. Seguiremos estos pasos:

  1. Nos conectaremos al punto de acceso ESP-Easy por ejemplo desde un teléfono utilizando la contraseña "configesp".
  2. Tras hacerlo, normalmente en los teléfonos aparece una notificación invitándonos a iniciar sesión en la red a la que nos acabamos de conectar. Abriendo esa notificación se abrirá un navegador que nos mostrará el asistente de conexión de ESPEasy a un punto de acceso Wifi.
  3. El primer paso del asistente es seleccionar nuestro punto de acceso (es decir el de nuestro router o punto de acceso Wifi) de la lista que nos mostrará.
  4. Debajo de la lista de puntos de acceso veremos un campo donde introduciremos el password del punto de acceso seleccionado en el paso anterior.
  5. Finalmente pulsaremos el botón Connect que hay debajo. Al hacerlo nos aparecerá una cuenta atrás durante la cual ESPEasy desactivará el punto de acceso temporal que hemos usado para ejecutar el asistente y se conectará a nuestra red Wifi. Al finalizar la cuenta atrás se nos redirigirá a la dirección definitiva que tendrá a partir de ahora nuestro NodeMCU con ESPEasy instalado.

Con esto ya tendríamos un sistema ESPEasy funcional. A partir de ahora toca personalizarlo para lograr la funcionalidad que buscamos, construir un sensor/medidor de CO₂.

Configuración

Partimos del acceso al sistema ESPEasy tal y como habíamos logrado en el apartado anterior. Será importante apuntarnos la IP que nuestro router Wifi ha entregado a NodeMCU porque la necesitaremos cuando queramos conectar con el medidor para reconfigurarlo o leer el valor de CO₂ que mide. Lo más recomendable es poner una IP fija en el apartado WiFi IP Settings de la solapa Config. Esta es por ejemplo la configuración que hicimos en el nuestro:

A partir de aquí tenemos que hacer una serie de ajustes que vamos a indicar de forma detallada a continuación:

  1. Accedemos a la solapa Tools y pulsamos el botón System > Advanced.
  2. Marcamos los dos check Rules y Old Engine de la sección Rules Settings. Con esto activamos el motor de reglas que configuraremos más adelante.
  3. Desactivamos el ckeck Enable Serial port de la sección Serial Settings.
  4. Pulsamos el botón Submit que hay en la parte inferior de la página para guardar estos cambios.
  5. Seleccionamos la solapa Devices y pulsamos el botón Add de la primera fila.
  6. En el desplegable Device que aparece, seleccionamos la entrada Gases - CO2 MH-Z19. Nada más hacerlo la página se refresca y aparecen todos los parámetros que podemos ajustar del sensor. En ella le damos el nombre CO2, marcamos el check Enabled, cambiamos el campo Serial Port a HW Serial0: GPIO-3 (D9) ← TX / GPIO-1 (D10) → RX, subimos el valor de Interval a 15 segundos y finalmente borramos el Name U en la lista de tres que aparecen en la parte de abajo. Al terminar de hacer los ajustes pulsamos Submit.
  7. De vuelta a la solapa Devices, volvemos a pulsar sobre un botón Add de una fila sin configurar todavía, por ejemplo la segunda.
  8. En el desplegable Device que aparece, seleccionamos la entrada Output - NeoPixel (Basic). Al hacerlo aparecen los parámetros del dispositivo. En ella le damos el nombre NeoPixel, marcamos el check Enabled, cambiamos el campo Led Count por el número de NeoPixels que tenga nuestra tira (en nuestro caso eran 3; no se recomienda manejar más de 10 por limitaciones en la corriente que NodeMCU es capaz de suministrar a los dispositivos externos) y en el campo GPIO seleccionamos el valor GPIO-12 (D6) que es el pin al que hemos conectado el pin de datos de la tira.
  9. Por último seleccionamos la solapa Rules y dentro del Rules Set 1 insertamos el siguiente código (todo lo que hay detrás de una doble barra o // son comentarios que hemos colocado para explicar el código):

    On System#Boot do
    NeoPixelAll,0,0,0                  // LEDs APAGADOS
    rtttl,16:d=10,o=6,b=180,c,e,g      // Emitimos tres notas con el zumbador para señalizar arranque
    Let,1,300                          // Variable 1: Tiempo mínimo, en segundos, para repetir la alarma
    Let,2,1500                         // Variable 2: Concentración de CO2 para activar la alarma
    loopTimerSet,8,1                   // Temporizador 8: Establecemos un temporizador que se ejecute cada segundo
    EndOn

    On CO2#PPM do
    if [CO2#PPM]>1500
    NeoPixelAll,32,0,0                 // LEDs en ROJO si CO2 por encima de 1500ppm
    Elseif [CO2#PPM] > 1000
    NeoPixelAll,16,9,0                 // LEDs en NARANJA si CO2 por encima de 1000ppm
    Else
    NeoPixelAll,0,32,0                 // LEDs en VERDE en cualquier otro caso
    Endif
    endon

    On Rules#Timer=8 Do
    Let,1,[var#1]-1                    // Decrementamos variable 1
    EndOn

    on CO2#PPM do
    if [CO2#PPM] > [var#2] and [var#1] < 1     // ALARMA: CO2 encima de umbral (var 2) y contador (var 1) ha llegado a 0
    rtttl,16:d=10,o=6,b=180,g,c,g,c,g,c        // Sonido de alarma
    Let,1,300                                  // Reponemos contador (variable 1) para disparar alarma
    endif
    endon

  10. Ahora pulsamos el botón Save que hay debajo de la caja donde hemos tecleado o pegado el código.
  11. Para terminar reiniciamos el microcontrolador pulsando el botón RST que hay en NodeMCU o desconectando momentáneamente la alimentación.

Funcionamiento

El funcionamiento del medidor de CO₂ que hemos preparado puede deducirse de las reglas que acabamos de programar, pero vamos a describirlo a continuación:

  • Cuando el medidor se enciende emite una serie de 3 notas para indicar que ha arrancado.
  • La tira de LEDs se ilumina de color verde cuando el sensor mide menos de 1000ppm, naranja entre 1000ppm y 1500ppm y rojo cuando se superan las 1500ppm.
  • Si el sensor mide más de 1500ppm, el zumbador emite una serie de 6 notas para indicar alarma. La alarma se repite cada 5 minutos mientras el nivel de CO₂ no baje de 1500ppm.
  • En cualquier momento se pueden leer los valores del sensor accediendo al dashboard de ESPEasy. La dirección es la IP de nuestra instalación (ver apartado Configuración) a la que añadimos /dashboard.esp al final. Por ejemplo, en nuestro caso la dirección resultante sería: http://192.168.1.146/dashboard.esp

Como comentábamos más arriba, es muy sencillo gracias a ESPEasy incorporar más dispositivos (sensores, displays) a este sistema. Por ejemplo una pequeña pantalla OLED I2C en la que programando las reglas adecuadas podremos hacer que se visualice continuamente la medida de concentración de CO₂.

Esta página web utiliza cookies para que sea posible mejorar tu experiencia de navegación.