Sensor de Calidad de Aire MQ-135: Detección de CO2, NH3, Alcohol y Más con Arduino
El MQ-135 es un sensor de gas semiconductor (MOX) de bajo coste para detección de calidad de aire. Sensible a: CO₂, NH₃ (amoniaco), alcohol (etanol), benceno, humo, CO y otros vapores orgánicos. No distingue gases individualmente: da señal combinada "contaminación". Salida analógica (A0) proporcional a concentración; salida digital (D0) con umbral ajustable por potenciómetro onboard. Alimentación: 5 V DC. Corriente: ~150 mA (calentador interno). Precalentado: 24–48 h primera vez, luego 5–10 min cada encendido. Rango detección: 10–1000 ppm (aprox.). Sensibilidad ajustable vía potenciómetro (D0). Encapsulado: 4 pines (VCC, GND, A0, D0). Ideal para monitores calidad aire interior, detectores de fugas, ventilación controlada, proyectos educativos. No es sensor CO₂ preciso (NDIR); para CO₂ exacto usa MH-Z19, SCD30, SGP30.
Pinout del MQ-135
| Pin | Nombre | Función |
|---|---|---|
| 1 | VCC | 5 V DC |
| 2 | GND | Tierra |
| 3 | A0 | Salida analógica (0–1023 en Arduino 10-bit) |
| 4 | D0 | Salida digital (HIGH/LOW según umbral potenciómetro) |
Principio de Funcionamiento (MOX)
Material semiconductor óxido metálico (SnO₂ típico) calentado internamente. En aire limpio, oxígeno se adsorbe en superficie → alta resistencia. Al exponerse a gases reductores (CO, alcohol, NH₃, etc.), reaccionan con oxígeno adsorbido → liberan electrones → resistencia baja → voltaje salida A0 sube. El calentador consume ~150 mA constante.
Conexión con Arduino
MQ-135 Arduino Uno VCC ──────── 5V GND ──────── GND A0 ──────── A0 (pin analógico) D0 ──────── D2 (opcional, digital)
Estabiliza 5 V: usa fuente externa o USB con buen amperaje. El calentador calienta el módulo → normal.
Código Arduino: Lectura Analógica Básica
const int MQ135_A0 = A0;
const int MQ135_D0 = 2;
void setup() {
Serial.begin(9600);
pinMode(MQ135_D0, INPUT);
Serial.println("MQ-135 Precalentando... (5-10 min)");
}
void loop() {
int raw = analogRead(MQ135_A0); // 0-1023
float voltage = raw * (5.0 / 1023.0);
int digital = digitalRead(MQ135_D0);
Serial.print("Raw: ");
Serial.print(raw);
Serial.print(" | Voltaje: ");
Serial.print(voltage, 2);
Serial.print(" V | Digital (D0): ");
Serial.println(digital ? "HIGH (Contaminado)" : "LOW (Limpio)");
delay(1000);
}
Convertir a PPM (Aproximado) — Calibración R₀
La hoja de datos da curva Rs/Ro vs ppm. Rs = resistencia sensor en gas; Ro = resistencia en aire limpio (calibración). Fórmula genérica: ppm = a × (Rs/Ro)^b (a, b dependen del gas).
Pasos calibración Ro:
- Sensor en aire limpio (exterior, ventilado) tras precalentado 24–48 h.
- Mide voltaje A0 estable → calcula Rs = ((5.0 × R_load) / V_out) - R_load. R_load = resistencia de carga interna (~10–20 kΩ, ver datasheet). Simplificado: Rs ∝ (1023/raw - 1).
- Ese Rs en aire limpio = Ro. Guárdalo en código.
Ejemplo simplificado (solo tendencia, no ppm exactos):
float R0 = 76.5; // Valor calibrado en aire limpio (ajusta el tuyo)
float RL = 10.0; // Resistencia carga aprox (kΩ)
void loop() {
int raw = analogRead(A0);
if (raw == 0) return;
float Vout = raw * (5.0 / 1023.0);
float Rs = ((5.0 * RL) / Vout) - RL; // kΩ
float ratio = Rs / R0;
// Curva aproximada para CO2 (a=110.47, b=-2.86) - SOLO ORIENTATIVO
float ppm = 110.47 * pow(ratio, -2.86);
Serial.print("Ratio Rs/Ro: ");
Serial.print(ratio);
Serial.print(" | PPM estimado CO2: ");
Serial.println(ppm);
delay(2000);
}
Nota: Sin calibración de laboratorio y selectividad de gases, los ppm son estimaciones relativas. Útil para tendencias: "aire empeora/mejora".
Uso de Salida Digital (D0) — Alarma Umbral
Gira potenciómetro azul onboard: en aire limpio ajusta hasta que D0 cambie LOW→HIGH (o viceversa según módulo). Luego, en código:
if (digitalRead(MQ135_D0) == HIGH) {
Serial.println("¡ALARMA: Calidad aire mala!");
// Activar ventilador, buzzer, notificación...
}
Limitaciones Críticas
- No selectivo: Responde a mezcla de gases. No sabes cuál es.
- Deriva temporal: Ro cambia con edad, humedad, temperatura. Recalibra periódicamente.
- Sensibilidad cruzada: Alcohol, humo, CO, NH₃ afectan igual.
- No mide CO₂ específicamente: Para CO₂ real, usa sensor NDIR (MH-Z19B, SCD30, SGP30).
- Consumo alto: 150 mA continuo → no apto para batería.
- Precalentado largo: 24–48 h inicial.
Comparativa: MQ-135 vs Sensores CO₂ NDIR
| Característica | MQ-135 (MOX) | MH-Z19B (NDIR) | SCD30 (NDIR) |
|---|---|---|---|
| Principio | Óxido metálico (calentador) | Infrarrojo no dispersivo | Infrarrojo no dispersivo |
| Selectividad CO₂ | No (mixto) | Sí (específico CO₂) | Sí (específico CO₂) |
| Precisión | Baja (relativa) | ±50 ppm + 3% | ±30 ppm + 3% |
| Interfaz | Analógica / Digital | UART / PWM | I²C |
| Consumo | ~150 mA @ 5V | ~18 mA @ 5V | ~19 mA @ 3.3V |
| Precio | Muy bajo (~$2) | Medio (~$20) | Alto (~$35) |
Conclusión
El MQ-135 es excelente para detectar cambios en calidad de aire general (tendencias, alarmas umbral) en proyectos de bajo coste. No sirve para medición cuantitativa precisa de CO₂ u otro gas específico. Para eso, invierte en sensor NDIR. Calibra Ro en aire limpio, usa salida analógica para gráficas y digital para alarmas. Ventila bien tu espacio. ¡Respira tranquilo!
Tecnología Industrial
- Acero para Herramientas Explicado: Propiedades Clave y Aplicaciones en Construcción y Fabricación
- Máquinas Prensa Punzonadora: Funcionamiento y Por Qué las Eligen los Fabricantes
- Matrices de Estampado de Chapa: Visión Profesional Completa
- Fundamentos de circuitos DC: entendiendo la corriente continua y conceptos eléctricos básicos
- Entendiendo Circuitos AC: Guía para Principiantes
- Circuitos Rectificadores: Desde Media Onda hasta Diseños Polifásicos de Onda Completa
- Circuitos de Control: Fundamentos, Aplicaciones y Mejores Prácticas
- Máquinas CNC Mazak: Visión General Completa y Capacidades
- Visión Experta: Operaciones de Taladrado en Mecanizado CNC
- Entendiendo el Mecanizado de Plásticos: Técnicas, Herramientas y Consideraciones de Material
- Revolucionando la retroalimentación háptica: ventajas de los transductores piezoeléctricos