Alarme detector de gás e fumaça com ESP32 e MQ-2
Neste projeto, um módulo sensor de gás MQ-2 detecta gases combustíveis (LPG, metano e propano) e fumaça, acionando um alarme tipo sirene em um buzzer passivo. A saída digital de limiar (DO) do sensor é conectada ao GPIO 4 do ESP32. Quando a concentração de gás ou fumaça ultrapassa o limiar, DO passa para LOW e o alarme é acionado. A sensibilidade é ajustada pelo potenciômetro do módulo. O buzzer passivo é acionado com tone() para criar um efeito de sirene que alterna entre duas frequências.

Vídeo
Esquema do circuito

Código-fonte
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Alarme detector de gás e fumaça com ESP32 e MQ-2
4// ─────────────────────────────────────────
5// Lê a saída digital de limiar (DO) do módulo MQ-2. Quando gás ou fumaça
6// passa do limiar, o LED de aviso acende e o buzzer passivo toca uma
7// sirene alternando entre 800 e 1200 Hz a cada 0.2 s. Ajuste o limiar no
8// trimpot do módulo (Arduino Core 3.0+).
9//
10// Pinos:
11// GPIO 4 -> MQ-2 DO (saída digital de limiar)
12// GPIO 18 -> Perna + do buzzer
13// GPIO 5 -> LED vermelho (com resistor de 220 ohm)
14// MQ-2 VCC -> MQ-2 VCC -> 5V (VIN), GND -> GND
15
16// Definição dos pinos
17const int MQ2_DO_PIN = 4; // MQ-2 D0 (saída digital de limiar)
18const int BUZZER_PIN = 18; // Buzzer passivo
19const int LED_PIN = 5; // LED de aviso + 220R
20
21// Tempo de aquecimento (ms): o aquecedor do MQ-2 precisa de minutos para esquentar. No Wokwi, 2000
22// basta.
23const unsigned long WARMUP_MS = 60000;
24bool warmedUp = false; // O aquecimento terminou
25
26void setup() {
27 pinMode(MQ2_DO_PIN, INPUT);
28 pinMode(BUZZER_PIN, OUTPUT);
29 pinMode(LED_PIN, OUTPUT);
30 digitalWrite(BUZZER_PIN, LOW);
31 digitalWrite(LED_PIN, LOW);
32}
33
34void loop() {
35 // Aquecimento: a leitura do DO é ignorada e o LED pisca devagar sem bloquear
36 if (!warmedUp) {
37 if (millis() < WARMUP_MS) {
38 digitalWrite(LED_PIN, (millis() / 500) % 2); // 0.5 s aceso, 0.5 s apagado
39 return;
40 }
41 warmedUp = true;
42 }
43
44 // O D0 do MQ-2 fica normalmente em HIGH e vai para LOW acima do limiar
45 int gasState = digitalRead(MQ2_DO_PIN);
46
47 if (gasState == LOW) {
48 // Alarme: o LED acende e o buzzer toca uma sirene de dois tons
49 digitalWrite(LED_PIN, HIGH);
50 tone(BUZZER_PIN, 800); // Tom grave
51 delay(200);
52 tone(BUZZER_PIN, 1200); // Tom agudo
53 delay(200);
54 } else {
55 // Em repouso: LED e buzzer desligados
56 digitalWrite(LED_PIN, LOW);
57 noTone(BUZZER_PIN);
58 delay(50);
59 }
60}
61
Perguntas frequentes
Quais gases o MQ-2 detecta?
O MQ-2 é sensível a LPG, propano, metano, hidrogênio, vapor de álcool e fumaça. Ele não distingue os gases; apenas detecta um aumento na concentração total.
A saída analógica do MQ-2 pode ser conectada diretamente ao ESP32?
O MQ-2 é alimentado com 5 V, e sua saída analógica pode chegar a 5 V. Como a entrada ADC do ESP32 aceita no máximo 3,3 V, é necessário usar um divisor de tensão (por exemplo, 10 kΩ + 20 kΩ).
Por que o sensor mostra uma leitura alta logo ao ligar?
O aquecedor dos sensores MQ leva alguns minutos para se estabilizar; nesse período, as leituras ficam altas. Desativar o alarme por alguns minutos após ligar evita alarmes falsos.
Como o efeito de sirene é criado?
O buzzer passivo é acionado com `tone()` para alternar rapidamente entre duas frequências diferentes (por exemplo, 800 Hz e 1.200 Hz). Essa alternância imita o som clássico de um alarme.
