Alarma de detector de gas/humo ESP32 MQ-2
En este proyecto, la detección de gases combustibles (GLP, metano, propano) y humo se realiza mediante un módulo sensor de gas MQ-2; al detectarlos, se emite un sonido de alarma similar a una sirena a través de un zumbador pasivo. La salida digital de umbral (DO) del sensor se conecta al GPIO 4 del ESP32; cuando el gas o el humo superan el umbral, DO pasa a LOW y se activa la alarma. La sensibilidad se ajusta con el potenciómetro del módulo. El zumbador se controla con `tone()`.

Video
Diagrama del circuito

Código fuente
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Alarma de detector de gas/humo ESP32 MQ-2
4// ─────────────────────────────────────────
5// Lee la salida digital de umbral (DO) del módulo MQ-2. Cuando el gas o el
6// humo superan el umbral, el LED de aviso se enciende y el zumbador pasivo
7// toca una sirena que alterna entre 800 y 1200 Hz cada 0.2 s. Ajusta el
8// umbral con el trimmer del módulo (Arduino Core 3.0+).
9//
10// Pines:
11// GPIO 4 -> DO del MQ-2 (salida digital de umbral)
12// GPIO 18 -> Patilla + del zumbador
13// GPIO 5 -> LED rojo (con una resistencia de 220 ohmios)
14// MQ-2 VCC -> VCC del MQ-2 -> 5V (VIN), GND -> GND
15
16// Definición de pines
17const int MQ2_DO_PIN = 4; // D0 del MQ-2 (salida digital de umbral)
18const int BUZZER_PIN = 18; // Zumbador pasivo
19const int LED_PIN = 5; // LED de aviso + 220R
20
21// Tiempo de calentamiento (ms): el calentador del MQ-2 tarda minutos. En Wokwi basta con 2000.
22const unsigned long WARMUP_MS = 60000;
23bool warmedUp = false; // ¿Terminó el calentamiento?
24
25void setup() {
26 pinMode(MQ2_DO_PIN, INPUT);
27 pinMode(BUZZER_PIN, OUTPUT);
28 pinMode(LED_PIN, OUTPUT);
29 digitalWrite(BUZZER_PIN, LOW);
30 digitalWrite(LED_PIN, LOW);
31}
32
33void loop() {
34 // Calentamiento: se ignora la lectura de DO y el LED parpadea despacio sin bloquear
35 if (!warmedUp) {
36 if (millis() < WARMUP_MS) {
37 digitalWrite(LED_PIN, (millis() / 500) % 2); // 0.5 s encendido, 0.5 s apagado
38 return;
39 }
40 warmedUp = true;
41 }
42
43 // D0 del MQ-2 está normalmente en HIGH y pasa a LOW por encima del umbral
44 int gasState = digitalRead(MQ2_DO_PIN);
45
46 if (gasState == LOW) {
47 // Alarma: el LED se enciende, el zumbador toca una sirena de dos tonos
48 digitalWrite(LED_PIN, HIGH);
49 tone(BUZZER_PIN, 800); // Tono grave
50 delay(200);
51 tone(BUZZER_PIN, 1200); // Tono agudo
52 delay(200);
53 } else {
54 // Reposo: LED y zumbador apagados
55 digitalWrite(LED_PIN, LOW);
56 noTone(BUZZER_PIN);
57 delay(50);
58 }
59}
60Preguntas frecuentes
¿Qué gases detecta el MQ-2?▾
El MQ-2 es sensible al GLP, el propano, el metano, el hidrógeno, los vapores de alcohol y el humo. No puede distinguir de qué gas se trata; solo detecta el aumento de la densidad total.
¿Se puede conectar la salida analógica del MQ-2 directamente al ESP32?▾
El MQ-2 se alimenta a 5 V y su salida analógica puede alcanzar los 5 V. Dado que la entrada del ADC del ESP32 admite un máximo de 3,3 V, es necesario utilizar un divisor de tensión (por ejemplo, 10 kΩ + 20 kΩ).
El sensor muestra un valor alto al encenderse por primera vez, ¿por qué?▾
El calentador de los sensores MQ tarda unos minutos en estabilizarse; durante ese tiempo, los valores leídos son elevados. Desactivar la alarma durante unos minutos tras el arranque evita las falsas alarmas.
¿Cómo se crea el efecto de sirena?▾
El zumbador pasivo se controla mediante la función tone(), de modo que alterna rápidamente entre dos frecuencias diferentes (por ejemplo, 800 Hz y 1200 Hz). Esta alternancia imita el sonido clásico de una alarma.
