tutoriales.com

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.

Intermedio18 min de lectura12 views23 de marzo de 2026Reportar error

🌬️ 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.

📌 **Nota:** Este proyecto es ideal para principiantes y entusiastas del IoT que desean aplicar sus conocimientos en un contexto práctico y beneficioso para la salud. No se requieren conocimientos avanzados de electrónica o programación, aunque tener una base siempre ayuda.

¿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:

  1. Seleccionar y conectar sensores de calidad del aire a un ESP8266.
  2. Programar el ESP8266 para leer datos de los sensores.
  3. Configurar el ESP8266 para conectarse a una red Wi-Fi y enviar datos a una plataforma IoT.
  4. Visualizar los datos de la calidad del aire en tiempo real.
  5. Implementar alertas básicas basadas en umbrales.
Proyecto Completo

🛠️ Materiales Necesarios

Para este proyecto, utilizaremos componentes económicos y fáciles de conseguir. Aquí tienes una lista detallada:

ComponenteDescripciónCantidadEnlace de compra (Ejemplo)
ESP8266 NodeMCUMicrocontrolador con Wi-Fi integrado1Tienda de electrónica local o Amazon
Sensor DHT11 o DHT22Temperatura y Humedad Relativa1Tienda de electrónica local o Amazon
Sensor MQ-135Calidad del aire (COVs, CO, Alcohol, Amoniaco, Tolueno, etc.)1Tienda de electrónica local o Amazon
Sensor de Polvo GP2Y1010AU0F (Opcional)Material Particulado (PM2.5, PM10)1Tienda de electrónica local o Amazon
Placa ProtoboardPara montaje temporal de circuitos1Tienda de electrónica local o Amazon
Cables Jumper M-M y M-FPara interconexiones~20Tienda de electrónica local o Amazon
Cable Micro USBPara alimentar el ESP8266 y programarlo1Tienda de electrónica local o Amazon
Resistencia de 10kΩPara el sensor DHT22 (si lo usas)1Tienda de electrónica local o Amazon
Resistencia de 150Ω y Condensador 220μF (Opcional)Para el sensor de polvo GP2Y1010AU0F1 de c/uTienda de electrónica local o Amazon
💡 Consejo: Si eres nuevo en la electrónica, considera comprar un kit de inicio de ESP8266 que a menudo incluye muchos de estos componentes básicos.

⚙️ 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:

  1. Ve a Archivo > Preferencias.
  2. En el campo URLs Adicionales para Gestores de Tarjetas, pega la siguiente URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json.
  3. Haz clic en OK.
  4. Ve a Herramientas > Placa > Gestor de Tarjetas....
  5. Busca esp8266 e instala el paquete esp8266 by ESP8266 Community.
📌 **Nota:** Asegúrate de tener la última versión del paquete para el ESP8266.

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 library por 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.

Diagrama de Conexiones ESP8266 NodeMCU NodeMCU ESP8266 D4 D0 A0 3.3V GND DHT11 / DHT22 Temperatura/Humedad 10kΩ MQ-135 Calidad de Aire GP2Y1010AU0F Sensor de Polvo Óptico R: 150Ω (LED a VCC) | C: 220μF (Vo a GND) DATOS A OUT V OUT Línea VCC 3.3V Línea GND
⚠️ Advertencia: El ESP8266 NodeMCU funciona a 3.3V. Asegúrate de conectar los sensores a los pines de alimentación de 3.3V y no a 5V (si tu placa tiene una salida de 5V), a menos que el sensor sea compatible con 5V y tenga un regulador de nivel lógico. Los sensores listados aquí suelen ser compatibles con 3.3V.

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.

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 A0 y alternaremos lecturas o elegiremos un solo sensor analógico si no se dispone de multiplexor.
  • 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 A0 o te centrarás en los otros sensores. Para la demostración, priorizaremos DHT y MQ-135.
🔥 Importante: Verifica siempre las hojas de datos de tus sensores para confirmar los requisitos de voltaje y las conexiones correctas.

💻 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:

  1. 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 de RL (resistencia de carga, generalmente 10kΩ en la placa del módulo MQ-135), puedes calcular Ro.
  2. Usar curvas de calibración: Los datasheets de los sensores MQ suelen incluir gráficas Rs/Ro vs. Concentración (en PPM) para diferentes gases. Puedes usar estas curvas para crear funciones matemáticas que conviertan Rs/Ro a PPM. Esto es un proceso avanzado y a menudo se simplifica utilizando el valor RAW como indicador o asumiendo un Ro predeterminado.

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

  1. Ve a ThingSpeak.com y crea una cuenta gratuita.
  2. Una vez iniciada la sesión, haz clic en New Channel.
  3. Asigna un nombre a tu canal (ej. Monitor de Calidad del Aire).
  4. Define los Fields (campos) para tus datos:
    • Field 1: Temperatura (°C)
    • Field 2: Humedad (%)
    • Field 3: MQ-135 Raw
    • Field 4: (Opcional, para PM2.5 si usas el sensor de polvo)
  5. Guarda el canal.
  6. Ve a la pestaña API Keys. Necesitarás la Write API Key para enviar datos desde tu ESP8266.
Configuración del Canal: Estación_IoT_01 Channel Settings API Keys Data Import/Export Configuración de Campos (Fields) Field 1 Temperatura (°C) Field 2 Humedad (%) Field 3 Presión (hPa) Field 4 Luminosidad (Lux) Write API Key (Clave de Escritura) 7XRT9Q2W8M5L0P4K Save Channel

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_WIFI y TU_CONTRASEÑA_WIFI con los datos de tu red.
  • TU_WRITE_API_KEY con la clave de escritura de tu canal ThingSpeak.
  • TU_CHANNEL_ID con 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ámetroRango ÓptimoRango ModeradoNivel CríticoAcción Recomendada
Temperatura20-24 °C18-26 °C<18 °C o >26 °CAjustar termostato, ventilar
Humedad Relativa40-60 %30-70 %<30 % o >70 %Humidificar/Deshumidificar, ventilar
MQ-135 (Raw)<400400-700>700Ventilar, identificar fuente
CO2 (PPM) (Si se añade sensor)<800800-1200>1200Ventilar urgentemente
PM2.5 (μg/m³) (Si se añade sensor)<1515-50>50Ventilar, purificador, usar mascarilla
⚠️ Advertencia: Los valores del MQ-135 son muy genéricos. Un valor `raw` alto solo indica la presencia de una mezcla de gases, no un gas específico. Para mediciones precisas de gases como CO2 o CO, se necesitan sensores dedicados (ej. MH-Z19B para CO2).

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) o ThingHTTP (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!

Paso 1: Comprender la importancia de la IAQ y el IoT.
Paso 2: Reunir los materiales necesarios.
Paso 3: Configurar el entorno de desarrollo Arduino.
Paso 4: Cablear los sensores al ESP8266.
Paso 5: Programar el ESP8266 para leer sensores y conectarse a Wi-Fi.
Paso 6: Configurar ThingSpeak y enviar datos.
Paso 7: Visualizar y analizar los datos, estableciendo alertas.
Paso 8: Explorar mejoras y extensiones del proyecto.

¡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!