Monitorización de la Calidad del Aire Interior con Sensores IoT y ESP8266
Descubre cómo diseñar e implementar un sistema de monitorización de la calidad del aire interior (IAQ) utilizando un microcontrolador ESP8266 y varios sensores. Este tutorial te guiará paso a paso para proteger tu salud y optimizar tu ambiente.
🌬️ Introducción a la Calidad del Aire Interior (IAQ) y el IoT
La calidad del aire interior (IAQ, por sus siglas en inglés, Indoor Air Quality) es un factor crítico que impacta directamente en nuestra salud, bienestar y productividad. Pasamos la mayor parte de nuestro tiempo en interiores, ya sea en casa, en la oficina o en otros edificios. Una mala calidad del aire puede provocar desde irritaciones menores hasta problemas de salud crónicos, fatiga y disminución del rendimiento cognitivo.
El Internet de las Cosas (IoT) ofrece una solución poderosa para abordar este desafío. Al integrar sensores con microcontroladores conectados a la red, podemos monitorear en tiempo real los parámetros clave de la IAQ, recibir alertas y tomar medidas proactivas para mejorar nuestro entorno. Este tutorial te guiará a través de la construcción de un sistema de monitoreo de IAQ utilizando el popular y económico microcontrolador ESP8266.
¿Por qué es importante monitorear la calidad del aire interior?
La IAQ es un tema complejo, influenciado por múltiples factores. Contaminantes como el dióxido de carbono (CO2), compuestos orgánicos volátiles (COVs), material particulado (PM2.5, PM10), humedad y temperatura pueden acumularse en espacios cerrados sin ventilación adecuada. Estos contaminantes provienen de diversas fuentes, incluyendo materiales de construcción, muebles, productos de limpieza, cocina, calefacción e incluso nuestra propia respiración.
Un monitoreo constante nos permite:
- Identificar fuentes de contaminación: Saber qué actividades o productos están afectando el aire.
- Optimizar la ventilación: Abrir ventanas o usar sistemas de purificación cuando sea necesario.
- Prevenir problemas de salud: Reducir la exposición a alérgenos y contaminantes.
- Mejorar el confort: Mantener niveles óptimos de temperatura y humedad.
- Ahorrar energía: Ventilar solo cuando sea indispensable, en lugar de hacerlo de forma constante.
🎯 Objetivos del Proyecto
Al finalizar este tutorial, serás capaz de:
- Seleccionar y conectar sensores de calidad del aire a un ESP8266.
- Programar el ESP8266 para leer datos de los sensores.
- Configurar el ESP8266 para conectarse a una red Wi-Fi y enviar datos a una plataforma IoT.
- Visualizar los datos de la calidad del aire en tiempo real.
- Implementar alertas básicas basadas en umbrales.
🛠️ Materiales Necesarios
Para este proyecto, utilizaremos componentes económicos y fáciles de conseguir. Aquí tienes una lista detallada:
| Componente | Descripción | Cantidad | Enlace de compra (Ejemplo) |
|---|---|---|---|
| ESP8266 NodeMCU | Microcontrolador con Wi-Fi integrado | 1 | Tienda de electrónica local o Amazon |
| Sensor DHT11 o DHT22 | Temperatura y Humedad Relativa | 1 | Tienda de electrónica local o Amazon |
| Sensor MQ-135 | Calidad del aire (COVs, CO, Alcohol, Amoniaco, Tolueno, etc.) | 1 | Tienda de electrónica local o Amazon |
| Sensor de Polvo GP2Y1010AU0F (Opcional) | Material Particulado (PM2.5, PM10) | 1 | Tienda de electrónica local o Amazon |
| Placa Protoboard | Para montaje temporal de circuitos | 1 | Tienda de electrónica local o Amazon |
| Cables Jumper M-M y M-F | Para interconexiones | ~20 | Tienda de electrónica local o Amazon |
| Cable Micro USB | Para alimentar el ESP8266 y programarlo | 1 | Tienda de electrónica local o Amazon |
| Resistencia de 10kΩ | Para el sensor DHT22 (si lo usas) | 1 | Tienda de electrónica local o Amazon |
| Resistencia de 150Ω y Condensador 220μF (Opcional) | Para el sensor de polvo GP2Y1010AU0F | 1 de c/u | Tienda de electrónica local o Amazon |
⚙️ Preparación del Entorno de Desarrollo
Antes de empezar a cablear y programar, necesitamos configurar nuestro entorno de desarrollo. Utilizaremos el IDE de Arduino debido a su simplicidad y la gran cantidad de librerías disponibles para el ESP8266.
1. Instalación del IDE de Arduino
Si aún no lo tienes, descarga e instala el IDE de Arduino desde su sitio web oficial.
2. Configuración del ESP8266 en el IDE de Arduino
Para que el IDE de Arduino pueda programar el ESP8266, necesitamos añadir la Board Manager URL:
- Ve a
Archivo>Preferencias. - En el campo
URLs Adicionales para Gestores de Tarjetas, pega la siguiente URL:http://arduino.esp8266.com/stable/package_esp8266com_index.json. - Haz clic en
OK. - Ve a
Herramientas>Placa>Gestor de Tarjetas.... - Busca
esp8266e instala el paqueteesp8266 by ESP8266 Community.
3. Instalación de Librerías
Necesitaremos varias librerías para interactuar con los sensores y la red Wi-Fi. Puedes instalarlas a través del Gestor de Librerías (Sketch > Incluir Librería > Gestionar Librerías...).
DHT sensor librarypor Adafruit (para DHT11/DHT22)Adafruit Unified Sensor(dependencia de la librería DHT)ESP8266WiFi(viene preinstalada con el paquete ESP8266)
Para el sensor MQ-135, no hay una librería estándar. Lo manejaremos mediante lecturas analógicas y cálculos manuales, que explicaremos más adelante.
🔌 Diagrama de Conexiones
Aquí te mostramos cómo conectar los sensores al ESP8266. Presta especial atención a los pines para evitar daños.
Conexiones Detalladas
1. Sensor DHT11/DHT22 (Temperatura y Humedad)
- VCC del DHT → 3.3V del ESP8266
- GND del DHT → GND del ESP8266
- DATA del DHT → D4 (GPIO2) del ESP8266
- Si usas DHT22: Añade una resistencia de pull-up de 10kΩ entre el pin DATA y VCC.
2. Sensor MQ-135 (Calidad del Aire General)
- VCC del MQ-135 → 3.3V del ESP8266
- GND del MQ-135 → GND del ESP8266
- A0 (Salida Analógica) del MQ-135 → A0 del ESP8266
- Nota: El ESP8266 tiene un único pin analógico
A0.
- Nota: El ESP8266 tiene un único pin analógico
3. Sensor de Polvo GP2Y1010AU0F (Opcional)
Este sensor requiere un circuito de acondicionamiento de señal.
- VCC del GP2Y1010AU0F → 5V del ESP8266 (o fuente externa de 5V si tu ESP8266 no puede proporcionar suficiente corriente)
- GND del GP2Y1010AU0F → GND del ESP8266
- Vo (Salida de Detección) del GP2Y1010AU0F → A0 del ESP8266 (usa un multiplexor si necesitas A0 para el MQ-135, o el pin D0 si no usas D0 para nada, aunque D0 es digital)
- Para simplificar, usaremos
A0y alternaremos lecturas o elegiremos un solo sensor analógico si no se dispone de multiplexor.
- Para simplificar, usaremos
- Led Drive (Pin 3) del GP2Y1010AU0F → Resistencia 150Ω → GND
- Añade un condensador de 220μF entre Vo y GND para estabilizar la señal.
- Para este tutorial, asumiremos que si usas el sensor de polvo, harás lecturas secuenciales en
A0o te centrarás en los otros sensores. Para la demostración, priorizaremos DHT y MQ-135.
- Para este tutorial, asumiremos que si usas el sensor de polvo, harás lecturas secuenciales en
💻 Programación del ESP8266 (Código Arduino)
Ahora, es el momento de escribir el código que leerá los datos de los sensores y los enviará a través de Wi-Fi.
1. Código Base para Sensores y Wi-Fi
Este código inicial establecerá la conexión Wi-Fi, leerá el DHT11/DHT22 y el MQ-135, y mostrará los datos en el Monitor Serial.
#include <ESP8266WiFi.h>
#include <DHT.h>
#include <Adafruit_Sensor.h>
// Configuración Wi-Fi
const char* ssid = "TU_SSID_WIFI"; // Reemplaza con el nombre de tu red Wi-Fi
const char* password = "TU_CONTRASEÑA_WIFI"; // Reemplaza con tu contraseña de Wi-Fi
// Configuración del sensor DHT
#define DHTPIN D4 // Pin digital donde está conectado el sensor DHT
#define DHTTYPE DHT11 // O DHT22 si estás usando ese modelo
DHT dht(DHTPIN, DHTTYPE);
// Pin analógico para el sensor MQ-135
#define MQ135_PIN A0
void setup() {
Serial.begin(115200);
delay(10);
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("Dirección IP: ");
Serial.println(WiFi.localIP());
dht.begin();
Serial.println("Sensores inicializados.");
}
void loop() {
delay(2000); // Esperar 2 segundos entre lecturas
// Leer sensor DHT (temperatura y humedad)
float h = dht.readHumidity();
float t = dht.readTemperature(); // O dht.readTemperature(true) para Fahrenheit
// Comprobar si las lecturas fallaron y reintentar
if (isnan(h) || isnan(t)) {
Serial.println("Error al leer del sensor DHT!");
} else {
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
}
// Leer sensor MQ-135 (calidad del aire general)
int raw_mq135_value = analogRead(MQ135_PIN);
Serial.print("MQ-135 Valor Raw: ");
Serial.println(raw_mq135_value);
// Para el MQ-135, la conversión a PPM es más compleja y depende de calibración.
// Usaremos el valor RAW por ahora como un indicador relativo de la calidad del aire.
// Un valor RAW más alto suele indicar mayor concentración de gases detectados.
// Pequeña lógica para indicar calidad del aire basada en MQ-135 RAW
if (raw_mq135_value > 700) {
Serial.println("⚠️ ¡Advertencia: Alta concentración de gases detectada!");
} else if (raw_mq135_value > 400) {
Serial.println("📌 Calidad del aire moderada. Considera ventilar.");
} else {
Serial.println("✅ Calidad del aire buena.");
}
Serial.println("---------------------------------");
}
2. Calibración y Conversión del Sensor MQ-135 (Avanzado)
El sensor MQ-135 no proporciona directamente valores en PPM (partes por millón) para gases específicos. Su salida analógica es un indicador relativo. Para obtener valores más precisos, se requiere calibración.
La calibración implica:
- Encontrar
Ro(Resistencia del sensor en aire limpio): Deja el sensor en aire fresco (idealmente exterior, no contaminado) durante 24-48 horas y toma lecturas continuas. Calcula el promedio de las lecturas analógicas (Rs). Usando un valor deRL(resistencia de carga, generalmente 10kΩ en la placa del módulo MQ-135), puedes calcularRo. - Usar curvas de calibración: Los datasheets de los sensores MQ suelen incluir gráficas
Rs/Rovs. Concentración (en PPM) para diferentes gases. Puedes usar estas curvas para crear funciones matemáticas que conviertanRs/Roa PPM. Esto es un proceso avanzado y a menudo se simplifica utilizando el valor RAW como indicador o asumiendo unRopredeterminado.
Para este tutorial, nos centraremos en el valor RAW, pero si deseas profundizar, te recomiendo investigar sobre la librería MQUnifiedsensor para Arduino, que puede facilitar esta calibración.
☁️ Conexión a una Plataforma IoT (ThingSpeak)
Para visualizar los datos de manera efectiva y remota, enviaremos nuestras lecturas a una plataforma IoT. ThingSpeak es una excelente opción gratuita y fácil de usar para proyectos pequeños.
1. Configuración de ThingSpeak
- Ve a ThingSpeak.com y crea una cuenta gratuita.
- Una vez iniciada la sesión, haz clic en
New Channel. - Asigna un nombre a tu canal (ej.
Monitor de Calidad del Aire). - Define los
Fields(campos) para tus datos:Field 1:Temperatura (°C)Field 2:Humedad (%)Field 3:MQ-135 RawField 4: (Opcional, para PM2.5 si usas el sensor de polvo)
- Guarda el canal.
- Ve a la pestaña
API Keys. Necesitarás laWrite API Keypara enviar datos desde tu ESP8266.
2. Modificación del Código para ThingSpeak
Ahora, modificaremos el código Arduino para enviar los datos a ThingSpeak.
#include <ESP8266WiFi.h>
#include <DHT.h>
#include <Adafruit_Sensor.h>
// Configuración Wi-Fi
const char* ssid = "TU_SSID_WIFI";
const char* password = "TU_CONTRASEÑA_WIFI";
// Configuración de ThingSpeak
const char* thingspeakHost = "api.thingspeak.com";
const char* thingspeakApiKey = "TU_WRITE_API_KEY"; // Reemplaza con tu Write API Key de ThingSpeak
const unsigned long channelID = TU_CHANNEL_ID; // Reemplaza con el ID de tu canal ThingSpeak (número)
// Cliente Wi-Fi
WiFiClient client;
// Configuración del sensor DHT
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Pin analógico para el sensor MQ-135
#define MQ135_PIN A0
void setup() {
Serial.begin(115200);
delay(10);
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
dht.begin();
Serial.println("Sensores inicializados.");
}
void loop() {
delay(15000); // ThingSpeak permite una actualización cada 15 segundos como mínimo en la versión gratuita
float h = dht.readHumidity();
float t = dht.readTemperature();
int raw_mq135_value = analogRead(MQ135_PIN);
if (isnan(h) || isnan(t)) {
Serial.println("Error al leer del sensor DHT!");
} else {
Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t");
Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C");
}
Serial.print("MQ-135 Valor Raw: "); Serial.println(raw_mq135_value);
// Enviar datos a ThingSpeak
if (client.connect(thingspeakHost, 80)) {
String postStr = thingspeakApiKey;
postStr += "&field1=";
postStr += String(t);
postStr += "&field2=";
postStr += String(h);
postStr += "&field3=";
postStr += String(raw_mq135_value);
client.print("POST /update HTTP/1.1\n");
client.print("Host: ");
client.print(thingspeakHost);
client.print("\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: ");
client.print(thingspeakApiKey);
client.print("\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.println("Datos enviados a ThingSpeak.");
} else {
Serial.println("Fallo la conexión a ThingSpeak.");
}
client.stop();
}
Reemplaza:
TU_SSID_WIFIyTU_CONTRASEÑA_WIFIcon los datos de tu red.TU_WRITE_API_KEYcon la clave de escritura de tu canal ThingSpeak.TU_CHANNEL_IDcon el ID numérico de tu canal ThingSpeak.
3. Visualización de Datos
Una vez que el ESP8266 esté funcionando y enviando datos, podrás ver las gráficas en tiempo real en la pestaña Private View de tu canal ThingSpeak. Puedes personalizar las gráficas y añadir widgets para una mejor visualización. ThingSpeak también permite configurar acciones y alertas basadas en umbrales, por ejemplo, enviar un correo electrónico si el valor del MQ-135 supera un cierto límite.
✨ Consejos para una mejor visualización en ThingSpeak
- Ajusta los rangos de los ejes: En la configuración de cada gráfica, puedes fijar los valores mínimos y máximos para que las variaciones sean más claras.
- Añade múltiples gráficas: Si tienes más sensores, crea un campo para cada uno y visualízalos por separado o combinados.
- Utiliza los widgets: ThingSpeak ofrece widgets como medidores, indicadores numéricos y tablas para presentar los datos de forma más interactiva.
- Publica tu vista: Puedes hacer que tu canal sea público para compartir tus datos con otros, si lo deseas (desde la pestaña
Public View).
📈 Análisis de Datos y Umbrales de Alerta
La recolección de datos es solo el primer paso. El verdadero valor reside en el análisis y la toma de decisiones. Establecer umbrales de alerta es fundamental para saber cuándo la calidad del aire requiere atención.
Valores Típicos de Referencia
Aquí hay una tabla con algunos valores de referencia generales. Ten en cuenta que estos pueden variar según las normativas locales y la sensibilidad personal.
| Parámetro | Rango Óptimo | Rango Moderado | Nivel Crítico | Acción Recomendada |
|---|---|---|---|---|
| Temperatura | 20-24 °C | 18-26 °C | <18 °C o >26 °C | Ajustar termostato, ventilar |
| Humedad Relativa | 40-60 % | 30-70 % | <30 % o >70 % | Humidificar/Deshumidificar, ventilar |
| MQ-135 (Raw) | <400 | 400-700 | >700 | Ventilar, identificar fuente |
| CO2 (PPM) (Si se añade sensor) | <800 | 800-1200 | >1200 | Ventilar urgentemente |
| PM2.5 (μg/m³) (Si se añade sensor) | <15 | 15-50 | >50 | Ventilar, purificador, usar mascarilla |
Implementación de Alertas Básicas
Puedes implementar alertas directamente en el código del ESP8266 (por ejemplo, encender un LED o un zumbador) o, como mencionamos, configurarlas en la plataforma IoT como ThingSpeak para notificaciones por correo electrónico o servicios como IFTTT.
Ejemplo de alerta en ThingSpeak (Channel Settings > React > New React):
- Condition:
Field 3 (MQ-135 Raw)is >700 - Action:
ThingTweet(para tweets) oThingHTTP(para webhooks, enviar a IFTTT o un servicio de email)
🚀 Mejoras y Extensiones del Proyecto
Este proyecto es una excelente base para futuras expansiones. Aquí tienes algunas ideas:
1. Integración de Más Sensores
- Sensor de CO2 (MH-Z19B): Para una medición precisa del dióxido de carbono, un indicador clave de la ventilación.
- Sensor de Formaldehído (MQ-C7): Para detectar un contaminante común en muebles y materiales de construcción.
- Sensor de Ruido (Módulo MAX9814): Para monitorear la contaminación acústica.
- Sensor de Luz Ambiental (BH1750): Para optimizar la iluminación.
2. Almacenamiento Local y Datalogging
- Tarjeta SD: Añade un módulo de tarjeta SD al ESP8266 para almacenar datos localmente, útil si la conexión Wi-Fi es intermitente.
3. Interfaz de Usuario Local
- Pantalla OLED (SSD1306): Muestra los valores de los sensores directamente en un pequeño display en tu dispositivo.
- LEDs RGB: Usa LEDs de colores para indicar el estado de la calidad del aire (verde: bueno, amarillo: moderado, rojo: malo).
4. Automatización y Control
- Relé para Ventilación: Conecta un módulo de relé al ESP8266 para controlar un ventilador o un extractor de aire basado en los umbrales de los sensores (ej. si el MQ-135 es alto, activa el ventilador).
- Integración con asistentes de voz: Con servicios como IFTTT o Home Assistant, puedes integrar tu monitor de IAQ con Alexa o Google Assistant.
5. Alimentación por Batería
- Batería de LiPo y Módulo de Carga: Haz tu dispositivo portátil utilizando una batería de litio y un módulo TP4056 para cargarla. Ten en cuenta el consumo de energía para optimizar la duración de la batería (usando modos de bajo consumo como Deep Sleep).
✅ Conclusión
¡Felicidades! Has construido un sistema funcional para monitorear la calidad del aire interior utilizando el ESP8266 y sensores IoT. Este proyecto no solo te ha familiarizado con la electrónica y la programación, sino que también te proporciona una herramienta práctica para mejorar tu entorno y tu salud.
La monitorización de la calidad del aire es un campo en constante crecimiento, y con los conocimientos adquiridos en este tutorial, estás listo para explorar aplicaciones más avanzadas y personalizar tu sistema según tus necesidades específicas. Recuerda siempre priorizar tu salud y la de quienes te rodean, ¡y el IoT es un gran aliado en esta misión!
¡Esperamos que este tutorial te haya sido de gran utilidad y te inspire a seguir explorando el fascinante mundo del IoT!
Tutoriales relacionados
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!