#122Intermedio

Allarme rilevatore di gas/fumo ESP32 MQ-2

In questo progetto, il rilevamento di gas combustibili (GPL, metano, propano) e fumo viene effettuato tramite un modulo sensore di gas MQ-2; al rilevamento viene emesso un segnale acustico simile a una sirena tramite un cicalino passivo. L'uscita digitale di soglia (DO) del sensore viene collegata al GPIO 4 dell'ESP32; quando gas o fumo superano la soglia, DO passa a LOW e l'allarme si attiva. La sensibilità si regola tramite il potenziometro del modulo. Il cicalino è pilotato con `tone()`.

4.7(27)
41 completato
Allarme rilevatore di gas/fumo ESP32 MQ-2
Una fuga di gas in cucina o del fumo in un angolo possono crescere senza che nessuno se ne accorga, così questo piccolo allarme annusa l'aria al posto tuo. Quando il sensore di gas MQ-2 rileva gas infiammabile o fumo, si accende il LED rosso e il buzzer suona una sirena che alterna un tono basso e uno alto. Appena l'aria torna pulita, luce e suono si spengono da soli. All'accensione il LED lampeggia piano per un minuto mentre il sensore si scalda, e fino ad allora l'allarme aspetta.

Video

Schema circuito

Allarme rilevatore di gas/fumo ESP32 MQ-2 - Circuit

Codice sorgente

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Allarme rilevatore di gas/fumo ESP32 MQ-2
4// ─────────────────────────────────────────
5// Legge l'uscita digitale a soglia (DO) del modulo MQ-2. Quando gas o fumo
6// superano la soglia, il LED di avviso si accende e il buzzer passivo
7// suona una sirena che alterna 800 e 1200 Hz ogni 0.2 s. Imposta la soglia
8// con il trimmer sul modulo (Arduino Core 3.0+).
9//
10// Pin:
11//   GPIO 4  -> DO dell'MQ-2 (uscita a soglia digitale)
12//   GPIO 18 -> Piedino + del buzzer
13//   GPIO 5  -> LED rosso (con una resistenza da 220 ohm)
14//   MQ-2 VCC -> VCC dell'MQ-2 -> 5V (VIN), GND -> GND
15
16// Definizione dei pin
17const int MQ2_DO_PIN  = 4;    // D0 dell'MQ-2 (uscita a soglia digitale)
18const int BUZZER_PIN  = 18;   // Buzzer passivo
19const int LED_PIN     = 5;    // LED di avviso + 220R
20
21// Tempo di riscaldamento (ms): il riscaldatore dell'MQ-2 richiede minuti. In Wokwi bastano 2000.
22const unsigned long WARMUP_MS = 60000;
23bool warmedUp = false;        // Il riscaldamento è finito?
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  // Riscaldamento: la lettura di DO viene ignorata, il LED lampeggia piano senza bloccare
35  if (!warmedUp) {
36    if (millis() < WARMUP_MS) {
37      digitalWrite(LED_PIN, (millis() / 500) % 2);   // 0.5 s acceso, 0.5 s spento
38      return;
39    }
40    warmedUp = true;
41  }
42
43  // D0 dell'MQ-2 è normalmente HIGH e va LOW sopra la soglia
44  int gasState = digitalRead(MQ2_DO_PIN);
45
46  if (gasState == LOW) {
47    // Allarme: il LED si accende, il buzzer suona una sirena a due toni
48    digitalWrite(LED_PIN, HIGH);
49    tone(BUZZER_PIN, 800);    // Tono grave
50    delay(200);
51    tone(BUZZER_PIN, 1200);   // Tono acuto
52    delay(200);
53  } else {
54    // A riposo: LED e buzzer spenti
55    digitalWrite(LED_PIN, LOW);
56    noTone(BUZZER_PIN);
57    delay(50);
58  }
59}
60

FAQ

Quali gas rileva l'MQ-2?▾

L'MQ-2 è sensibile al GPL, al propano, al metano, all'idrogeno, ai vapori di alcol e al fumo. Non è in grado di distinguere il tipo di gas; rileva solo l'aumento della densità complessiva.

L'uscita analogica dell'MQ-2 può essere collegata direttamente all'ESP32?▾

L'MQ-2 è alimentato a 5 V e la sua uscita analogica può raggiungere i 5 V. Poiché l'ingresso ADC dell'ESP32 accetta al massimo 3,3 V, è necessario utilizzare un partitore di tensione (ad es. 10 kΩ + 20 kΩ).

Il sensore mostra un valore elevato al primo avvio, perché?▾

Il riscaldatore dei sensori MQ impiega alcuni minuti per stabilizzarsi; durante questo periodo i valori rilevati risultano elevati. Disattivare l'allarme per alcuni minuti dopo l'accensione consente di evitare falsi allarmi.

Come si crea l'effetto sirena?▾

Il buzzer passivo viene pilotato tramite la funzione tone() in modo da oscillare rapidamente tra due diverse frequenze (ad es. 800 Hz e 1200 Hz). Questa oscillazione riproduce il classico suono di un allarme.

Allarme rilevatore di gas/fumo ESP32 MQ-2 | BlueGrays