9.6 KiB
Diseño de una Arquitectura de Sistemas Embebidos Basada en Drivers para la Adquisición, Transformación y Análisis de Datos de Micro Estaciones de Calidad del Aire
Descripción del Proyecto
Este proyecto fue desarrollado en el marco de la Estancia en el Verano de la Investigación Científica y Tecnológica del Programa Delfín 2026 en el Instituto Tecnológico de Morelia, bajo la asesoría del Dr. Gerardo Marx Chávez Campos. Desarrollado por Fernando Martínez Valenzuela.
El proyecto consiste en la evaluación experimental del comportamiento de sensores de bajo costo para la creación de redes de monitoreo de calidad del aire en contextos urbanos. Su enfoque principal radica en el diseño de una plataforma de hardware embebido altamente eficiente que gestione la recolección, el procesamiento, el almacenamiento y la visualización de los datos ambientales en tiempo real, operando bajo un entorno de Linux.
Objetivo
Analizar el comportamiento de sensores de bajo costo mediante el diseño y desarrollo de una plataforma de hardware embebido basada en Raspberry Pi 4, con el fin de cuantificar la deriva instrumental y el error sistemático en la adquisición de datos de calidad del aire bajo condiciones controladas.
Arquitectura del Sistema
El sistema está construido sobre una arquitectura integral operando en Raspbian OS Lite, estructurada en las siguientes capas (basado en el flujo de datos del proyecto):
- Adquisición de Hardware: Lectura de sensores ambientales a través del protocolo I2C, utilizando buses separados para evitar latencia y conflictos de dirección.
- Procesamiento Embebido (C):
- Un programa principal (orquestador) actúa como driver en espacio de usuario (User space).
- Realiza validación de checksum sobre las lecturas de los sensores.
- Gestión a corto plazo: Escribe los datos crudos en un disco RAM (
/dev/shm/aql_actual.txt) cada 10 segundos para proteger la vida útil de la memoria SD frente al desgaste por ciclos continuos de escritura. - Gestión a largo plazo: Acumula la información por lotes (
lote_bd.csv) y la guarda en la memoria SD/SQLite cada 5 minutos.
- Procesamiento de Python y Datos: Un motor desarrollado en Python que lee los datos crudos desde la RAM, calcula el Índice de Calidad del Aire (ICA) basándose estrictamente en la normativa oficial NOM-172-SEMARNAT-2019, y genera archivos JSON.
- Capa de Despliegue (Front-end): Utiliza Nginx como servidor web local. La interfaz de usuario (IU Estilo Apple) ofrece:
- Panel de control en tiempo real con detección asíncrona de errores de I2C.
- Semáforo ambiental visual para la interpretación del ICA.
- Visualización dinámica de tendencias históricas utilizando la librería Chart.js.
- Exportación estándar de datos completos en formato CSV.
Metodología
Materiales
- Raspberry Pi 4B (Unidad central de procesamiento).
- Sensores de Gas Gravity DFRobot para medir gases nocivos (CO, NO2, SO2, O3).
- Sensores de Clima (HTU21D y BMP180) para medir temperatura, humedad y presión atmosférica.
- Componentes para la Placa de Circuito Impreso (PCB) a medida diseñada en Flux.
Conexiones de Hardware
El hardware cuenta con un diseño de 2 capas implementando planos de Tierra (GND) y Alimentación (VCC) para mitigar la Interferencia Electromagnética (EMI). Es de importancia crítica la integración de resistencias Pull-Up (4.7kΩ a 10kΩ) en las líneas SDA y SCL para mantener el estado lógico ALTO y evitar pérdida de paquetes.
| Sensor / Módulo | Pin RPi 4B (Físico) | Pin RPi 4B (GPIO) | Función / Bus |
|---|---|---|---|
| VCC (Todos) | Pin 2 o 4 | 5V | Alimentación |
| GND (Común) | Pin 6, 9, 14... | GND | Tierra común |
| SDA Clima | Pin 3 | GPIO 2 | I2C-1 (Datos) |
| SCL Clima | Pin 5 | GPIO 3 | I2C-1 (Reloj) |
| SDA Gases | Pin 7 | GPIO 4 | I2C-3 (Datos) |
| SCL Gases | Pin 29 | GPIO 5 | I2C-3 (Reloj) |
(Nota: Asegúrate de habilitar el bus i2c-3 modificando el archivo /boot/firmware/config.txt si es necesario).
Guía de Implementación
Sigue estas instrucciones paso a paso para poner en marcha el sistema desde cualquier instalación limpia de Raspbian OS Lite.
1. Activar los buses I2C
El primer bus (i2c-1) se activa desde la herramienta de configuración de la Raspberry Pi:
sudo raspi-config
Ve a Interface Options -> I2C -> Selecciona Yes -> Sal de la herramienta.
Para activar el segundo bus (i2c-3) que utilizarán los sensores de gases, debes editar el archivo de configuración de arranque:
sudo nano /boot/firmware/config.txt
Agrega al final del archivo la siguiente línea:
dtoverlay=i2c3,pins_4_5Guarda el archivo (
Ctrl+O,Enter,Ctrl+X) y reinicia la Raspberry Pi ejecutandosudo reboot.
2. Instalar dependencias del sistema
Instala los compiladores, herramientas I2C y el servidor web:
sudo apt update
sudo apt install -y build-essential gcc i2c-tools nginx python3 python3-pip python3-flask sqlite3 libi2c-dev
3. Clonar el repositorio
git clone https://gitea.itmorelia.com/Verano-Delfin-2026/AirQualityMicrostation.git
cd AirQualityMicrostation
4. Verificar los sensores conectados
Verifica la comunicación en los buses separados:
i2cdetect -y 1
i2cdetect -y 3
5. Compilar y Ejecutar el Controlador Principal en C
El controlador principal (orquestador) se encuentra en el archivo main.c. Para compilarlo vinculando la librería I2C, ejecuta:
gcc src/main.c -o orquestador_main -li2c
Una vez compilado, debes ejecutarlo en segundo plano (agregando &) para que inicie la recolección de datos continua:
./orquestador_main &
6. Ejecutar el Motor de Python y Configurar Nginx
Los archivos de Python se encargan de calcular el ICA (NOM-172) y generar los JSON. Ejecuta el script principal de la API de la siguiente manera:
python3 api/app.py &
Finalmente, copia los archivos del front-end a la ruta pública de Nginx y reinicia el servicio web:
sudo cp -r web/* /var/www/html/
sudo systemctl restart nginx
(Puedes acceder al panel interactivo ingresando la IP de la Raspberry Pi en tu navegador).
7. Configuración y Uso de la Herramienta CLI
Para consultar los datos de los sensores directamente desde la terminal, necesitas agregar el script comandos.bash a la Raspberry Pi.
Paso A: Agregar o crear el archivo Si el archivo no está incluido en el repositorio clonado, puedes crearlo directamente:
nano comandos.bash
(Pega allí el código del script proporcionado, guarda con Ctrl+O, presiona Enter, y sal con Ctrl+X). Alternativamente, si tienes el archivo en tu PC, puedes transferirlo a la Raspberry Pi mediante SCP o un cliente SFTP como FileZilla.
Paso B: Instalar globalmente el comando
Una vez que el archivo comandos.bash esté listo en tu Raspberry, instálalo en el sistema con permisos de ejecución:
sudo cp comandos.bash /usr/local/bin/aql
sudo chmod +x /usr/local/bin/aql
Funcionamiento:
El script es muy eficiente porque no consulta la base de datos, sino que lee la información en tiempo real directamente desde el disco RAM (/dev/shm/aql_actual.txt).
Modo de Uso:
aql clima(Muestra Temperatura, Humedad y Presión).aql values(Muestra un resumen de todos los gases en ppm).aql CO,aql O3,aql NO2,aql SO2(Consultas individuales por gas).
Nota de Solución de problemas: Si recibes el error "La microestación no está ejecutándose o aún no hay datos", significa que el archivo temporal en RAM no existe y debes verificar que el programa orquestador en C esté funcionando.
Conclusiones
La microestación de calidad del aire demuestra la viabilidad técnica de implementar redes densas de monitoreo urbano mediante componentes de bajo costo. La arquitectura desarrollada prioriza la adaptabilidad y la alta disponibilidad. Al decidir integrar los controladores en el espacio de usuario (y no en el núcleo) en conjunto con un modelo híbrido de escritura de memoria (RAM Disk y SQLite), se ha logrado un sistema resistente frente al estrés informático continuo, que previene colapsos operativos del núcleo (Kernel Panic) y que disminuye drásticamente el desgaste del almacenamiento físico.
Limitaciones
Para mantener el rigor académico, el alcance del estudio excluye los siguientes aspectos (limitaciones técnicas actuales de la plataforma):
- Calibración robusta y validación en campo: No se realizan campañas de medición en exteriores a largo plazo, ni contrastación contra equipos meteorológicos oficiales para corregir deriva de calibración (drift) o sensibilidades climáticas.
- Diseño mecánico y aislamiento: El proyecto no contempla el diseño o fabricación de una carcasa protectora con grado de protección IP contra la intemperie (lluvia/polvo).
- Análisis predictivo de datos: No se implementan algoritmos de Machine Learning ni almacenamiento masivo en la nube para análisis a gran escala.
- Drivers en el Espacio de Usuario (User space): Los drivers en C se ejecutan en el espacio de usuario en lugar del núcleo (Kernel space) para evitar bloqueos críticos (Kernel Panic) ante fallos de hardware intermitentes en los sensores.
Documentación basada en la Metodología del Protocolo Oficial. Programa Delfín 2026.
