Open Electronics publicó el paso a paso de un medidor que muestra la concentración de CO2 y TVOC en un espacio cerrado, como una sala de clases o una oficina, y que indica con LED si la calidad del aire es buena o mala.
¿Por qué medir la calidad del aire en interiores?
En interiores, la calidad del aire se degrada con el dióxido de carbono que exhalamos, con el polvo fino y con los posibles patógenos que emitimos al respirar o toser. El problema se agrava en invierno, cuando mucha gente pasa horas en una sala con poca ventilación. Los autores mencionan el COVID-19, que se transmite en buena medida por el aire de los espacios cerrados. Mientras más viciado está el aire, mayor es la concentración de gotitas de saliva y fluidos de las mucosas que pueden llevar patógenos. La forma de bajar ese riesgo es renovar el aire.
La duda es cuándo hacerlo, porque tanto en verano como en invierno se tiende a dejar las ventanas cerradas para ahorrar en aire acondicionado y calefacción.
El dispositivo del artículo lee un sensor de CO2 y de TVOC (compuestos orgánicos volátiles totales, que en Italia se conocen como COV), da una idea de la calidad del aire en la sala y avisa con LED cuándo conviene ventilar. Así se controla el aire sin perder más energía de la necesaria.
El hardware del proyecto
La unidad de control es un módulo Heltec WiFi Kit 32. El sensor que mide el dióxido de carbono y los TVOC es un Sensirion SGP30, y la señalización queda a cargo de dos LED comunes, uno rojo y uno verde.
El módulo Heltec WiFi Kit 32
El corazón del sistema es una placa pequeña que integra un microcontrolador ESP32 y una pantalla OLED de 0,96 pulgadas. Estas son sus características.
- Pantalla OLED azul de 0,96 pulgadas.
- Microcontrolador Tensilica LX6 de doble núcleo y 32 bits.
- Frecuencia de reloj de hasta 240 MHz.
- 520 kB de SRAM interna.
- 32 MB de memoria flash.
- Wi-Fi 802.11 b/g/n integrado.
- Bluetooth de modo dual integrado (clásico y BLE).
- Alimentación de 3,3 V a 7 V.
- 28 GPIO (algunos se usan para manejar la pantalla OLED).
- Cargador de batería de litio polímero integrado.
- Temperatura de operación de -40 °C a +90 °C.
El módulo calza con el proyecto porque ya trae la pantalla OLED donde se muestran las lecturas y los mensajes al usuario, además de varios GPIO para manejar la señalización. Esta primera versión usa solo 2 LED, pero con 28 GPIO disponibles sería fácil sumar otros elementos, como un zumbador para alertas sonoras.
Los 520 kB de RAM y los 32 MB de flash dejan holgura de memoria para el software de control. El transceptor Wi-Fi sirve para versiones futuras del equipo, por ejemplo para publicar las concentraciones de CO2 y TVOC en una página web o mandar alarmas por Telegram. La radio Bluetooth permitiría conectarse con teléfonos y computadores, que podrían usarse para configurar el propio dispositivo.
La placa también integra un cargador LiPo, así que se le puede conectar una batería de una celda para que siga funcionando cuando se corta la luz. La figura 3 muestra el pinout del módulo.
El sensor SGP30
Para medir el dióxido de carbono y los TVOC, el proyecto usa una placa de conexión (breakout) basada en el Sensirion SGP30. Este sensor diminuto entrega la concentración de CO2, que indica qué tan viciado está el aire de un espacio cerrado, y la de TVOC, es decir, la concentración en partes por mil millones de compuestos suspendidos.
Estas son las características de la placa.
- Sensor Sensirion SGP30 (TVOC y CO2).
- Detección de TVOC de 0 a 60.000 ppb (partes por mil millones).
- Detección de CO2 de 400 a 60.000 ppm (partes por millón).
- Frecuencia de muestreo de 1 Hz.
- Interfaz I2C (dirección 0x58).
- Alimentación de 3,3 V o 5 V.
¿Cómo se conecta el hardware?
La conexión entre la placa del sensor y los LED es sencilla. Se puede hacer con cables macho-hembra como los que se usan con Arduino, o sobre una protoboard.
El SGP30 se comunica por bus I²C, así que necesita cuatro conexiones. Además de las líneas de reloj (SCL) y de datos (SDA) del bus, hay que conectar las dos de alimentación, GND (el negativo) y el positivo de 3,3 V.
Los dos LED van a dos GPIO estándar del WiFi Kit 32. No se pueden manejar directo desde las líneas de la placa, porque sobrecargarían los GPIO, así que cada uno lleva en serie una resistencia limitadora de corriente, calculada en 220 ohmios.
La tabla 1 detalla las conexiones entre el módulo WiFi Kit 32 y la placa del SGP30. La tabla 2 indica qué pines del módulo se usan para los dos LED de señalización.
El software, en MicroPython
Para el software de control, los autores eligieron MicroPython, en concreto su versión para ESP32. MicroPython sirve para programar microcontroladores orientados a IoT como el ESP32, y la gran cantidad de bibliotecas disponibles para sensores, actuadores e interfaces simplifica bastante esta parte del desarrollo.
¿Cómo se instala MicroPython en el WiFi Kit 32?
El WiFi Kit 32 no trae el intérprete de MicroPython, así que lo primero es instalarlo. Hay que descargar el binario desde micropython.org/download/esp32/](https://micropython.org/download/esp32/). La versión usada en este proyecto es la v1.19 (18 de junio de 2022). Se descarga y se guarda en una carpeta del computador.
También hace falta esptool, la herramienta gratuita de Espressif (el fabricante del ESP32 y del ESP8266) para grabar la memoria flash del ESP32. Se descarga desde github.com/espressif/esptool](https://github.com/espressif/esptool). Con eso hay que borrar la memoria del dispositivo y después grabar el binario de MicroPython.
Borrar la memoria
Primero se conecta el WiFi Kit 32 al computador con un cable micro USB. El sistema le asigna un puerto COM virtual (por ejemplo COM3, aunque el número depende de cuántos puertos haya en el equipo).
Después se pone la placa en modo de programación manteniendo apretado el botón PRG y apretando y soltando el botón RST. Luego se usa el script esptool.py para borrar la memoria. Se puede agregar la ruta del script al path del sistema o trabajar desde esa carpeta, con este comando (válido en Windows).
python esptool.py --port <port_numb> erase_flashHay que reemplazar <port_numb> por el puerto COM virtual asignado a la placa (por ejemplo COM3).
Grabar el intérprete de MicroPython
En el ESP32 el intérprete se graba en la dirección 0x1000. El comando de consola, otra vez en Windows, es este.
python esptool.py --chip esp32 --port <port_numb> --baud 460800 write_flash -z 0x1000 esp32.binIgual que antes, <port_numb> se cambia por el puerto COM virtual, y esp32.bin por el nombre del binario descargado (con su ruta, si no está en la carpeta desde donde se trabaja). La figura 5 muestra el resultado.
El software de control
El programa tiene que leer los valores de CO2 y TVOC que entrega el SGP30 y mostrarlos en la pantalla OLED. También lee desde el sistema de archivos los umbrales de CO2 que fija el usuario, con su histéresis, y maneja los dos LED, rojo y verde, para indicar si el CO2 supera el máximo permitido.
Para eso se necesitan controladores para la pantalla OLED y para el sensor SGP30. Los dos existen y se pueden descargar. El de la pantalla está en github.com/adafruit/micropython-adafruit-ssd1306/blob/mas....py](https://github.com/adafruit/micropython-adafruit-ssd1306/blob/master/ssd1306.py) y el del sensor en github.com/alexmrqt/micropython-sgp30](https://github.com/alexmrqt/micropython-sgp30).
El proyecto completo queda formado por tres archivos.
- Air_quality.py, el archivo principal de la aplicación.
- Ssd1306.py, el controlador de la pantalla OLED.
- Adafruit_sgp30.py, el controlador del sensor SGP30.










