📡 Construye Un Monitor De Calidad Del Aire Con ESP32 Y ThingSpeak

by duirobotics in Circuits > Arduino

28 Views, 1 Favorites, 0 Comments

📡 Construye Un Monitor De Calidad Del Aire Con ESP32 Y ThingSpeak

introduccion.png

Este proyecto permite medir la calidad del aire utilizando un ESP32, sensores MQ-135, MQ-9 y DHT11, una pantalla OLED para visualizar los datos y ThingSpeak para el monitoreo remoto.

Mide CO₂, CO, temperatura y humedad

Envía datos a la nube con ThingSpeak

Visualización en pantalla OLED

Fácil implementación con Arduino IDE

📺 Mira el video tutorial aquí: https://youtu.be/iAMZQ1Qq0s4

Supplies

️ Materiales Necesarios

Hardware:

✔ ESP32 con WiFi

✔ Sensor MQ-135 (CO₂)

✔ Sensor MQ-9 (CO)

✔ Sensor DHT11 (temperatura y humedad)

✔ Pantalla OLED 128x64

✔ Protoboard y cables

️ Software:

Arduino IDE

Librerías: DHT, Adafruit GFX, Adafruit SSD1306, ThingSpeak

Plataforma ThingSpeak para visualización en la nube

🔌 Paso 1: Configuración De ThingSpeak

1.configuracion .png

1️⃣ Crea una cuenta en https://thingspeak.com/

2️⃣ Crea un canal nuevo con estos campos:

  1. Campo 1: CO₂ (ppm)
  2. Campo 2: Humedad (%)
  3. Campo 3: Temperatura (°C)
  4. Campo 4: CO (ppm)
  5. 3️⃣ Guarda la API Key para integrarla en el código.


🔌 Paso 2: Conectar Los Componentes



📍 Conexiones:

ComponenteESP32

MQ-135 (CO₂)

A0 (GPIO 34)

MQ-9 (CO)

A1 (GPIO 35)

DHT11

D19

Pantalla OLED

I2C (SDA → GPIO 21, SCL → GPIO 22)

📌 IMPORTANTE: Usa una fuente de alimentación externa si los sensores consumen mucha energía.




👉 Puedes instalarlas desde Arduino IDE en Gestor de Librerías.

📜 Paso 3: Código En Arduino IDE

1️⃣ Instala las librerías necesarias en Arduino IDE:

🔹 DHT sensor library

🔹 Adafruit GFX Library

🔹 Adafruit SSD1306

🔹 ThingSpeak

2️⃣ Copia el código y sube al ESP32:

#include <DHT.h>

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <WiFi.h>

#include <ThingSpeak.h>


// Configuración WiFi y ThingSpeak

#define WIFI_SSID "TU_SSID"

#define WIFI_PASSWORD "TU_PASSWORD"

const char* server = "api.thingspeak.com";

String apiKey = "TU_API_KEY";


// Configuración pantalla OLED

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 64

#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


// Sensores

const int a = 34; // MQ-135 CO₂

const int b = 35; // MQ-9 CO

const int c = 19; // DHT11

DHT sensorDHT(c, DHT11);

int mq135, mq9;


WiFiClient client;


void setup() {

Serial.begin(115200);

if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {

Serial.println("Error OLED");

while (true);

}

display.clearDisplay();

display.setTextColor(WHITE);

display.setTextSize(2);

display.setCursor(0, 0);

display.print(" MONITOR AIRE");

display.display();


// Conectar a WiFi

Serial.println("Conectando a WiFi...");

WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }

Serial.println(" Conectado!");


ThingSpeak.begin(client);

}


void loop() {

// Leer sensores

mq135 = analogRead(a);

mq9 = analogRead(b);

int temp = sensorDHT.readTemperature();

int hum = sensorDHT.readHumidity();


if (isnan(temp) || isnan(hum)) {

Serial.println("Error DHT11");

temp = 0; hum = 0;

}


// Conversión MQ-135 (CO₂) a ppm

float ppm_co2 = calcularPPM(mq135, -0.3679, 0.815, 57);

// Conversión MQ-9 (CO) a ppm

float ppm_co = calcularPPM(mq9, -0.4101, 1.075, 19);


// Mostrar en Serial

Serial.print("CO2: "); Serial.println(ppm_co2);

Serial.print("CO: "); Serial.println(ppm_co);

Serial.print("Temp: "); Serial.println(temp);

Serial.print("Humedad: "); Serial.println(hum);


// Mostrar en pantalla OLED

display.clearDisplay();

display.setCursor(0, 0);

display.setTextSize(1);

display.print("CO2: "); display.print(ppm_co2, 2); display.print(" PPM");

display.setCursor(0, 12);

display.print("CO: "); display.print(ppm_co, 2); display.print(" PPM");

display.setCursor(0, 24);

display.print("Temp: "); display.print(temp); display.print(" C");

display.setCursor(0, 36);

display.print("Humedad: "); display.print(hum); display.print(" %");

display.display();


// Enviar datos a ThingSpeak

if (client.connect(server, 80)) {

ThingSpeak.setField(1, ppm_co2);

ThingSpeak.setField(2, hum);

ThingSpeak.setField(3, temp);

ThingSpeak.setField(4, ppm_co);

ThingSpeak.writeFields(2828420, apiKey);

client.stop();

}


delay(5000); // Esperar 5 segundos antes de la próxima lectura

}


// Función para calcular PPM

float calcularPPM(int lectura, float m, float b, float ro) {

float voltaje = (5.0 * lectura) / 4094;

float rs = 20 * ((5.0 - voltaje) / voltaje);

float ratio = rs / ro;

return pow(10, (log(ratio) - b) / m);

}


📲 Paso 4: Visualización En App Inventor

2.screen.png
1.block.png
2.screen'.png
2.blosck.png
3.screen.png
3.bloack.png

Para ver los datos en el celular:

1️⃣ Ir a MIT App Inventor

2️⃣ Crear una nueva app con etiquetas para CO₂, CO, temperatura y humedad

3️⃣ Conectar ThingSpeak a la app para mostrar datos en tiempo real

📌 Mira el video para detalles de la interfaz 🎥

🚀 Pruebas Y Mejoras

Revisar valores en OLED y ThingSpeak

Asegurar conexión WiFi estable

Optimizar lecturas para mayor precisión

📌 Mejoras posibles:

✅ Notificaciones cuando los niveles de CO₂ sean altos

✅ Agregar más sensores como PM2.5

✅ Conectar a una base de datos para análisis a largo plazo

🎥 Video Explicativo


📺 Mira el video completo:

👉 https://youtu.be/iAMZQ1Qq0s4

📢 Si te gustó este tutorial, compártelo y comenta! 🚀💨

#ESP32 #IoT #Arduino #CalidadDelAire #Electrónica #DIY #ThingSpeak #Makers