Alarme de détection de gaz/fumée ESP32 MQ-2
Dans ce projet, la détection de gaz combustibles (GPL, méthane, propane) et de fumée est assurée par un module capteur de gaz MQ-2 ; dès la détection, une alarme sonore semblable à une sirène retentit via un buzzer passif. La sortie numérique de seuil (DO) du capteur est connectée au GPIO 4 de l'ESP32 ; quand le gaz ou la fumée dépasse le seuil, DO passe à LOW et l'alarme se déclenche. La sensibilité se règle via le potentiomètre du module. Le buzzer est piloté par `tone()`.

Vidéo
Schéma du circuit

Code source
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Alarme de détection de gaz/fumée ESP32 MQ-2
4// ─────────────────────────────────────────
5// Lit la sortie numérique à seuil (DO) du module MQ-2. Quand le gaz ou la
6// fumée dépasse le seuil, la LED d'avertissement s'allume et le buzzer
7// passif joue une sirène alternant entre 800 et 1200 Hz toutes les 0.2 s.
8// Règle le seuil avec le potentiomètre ajustable du module (Arduino Core
9// 3.0+).
10//
11// Broches :
12// GPIO 4 -> DO du MQ-2 (sortie à seuil numérique)
13// GPIO 18 -> Patte + du buzzer
14// GPIO 5 -> LED rouge (avec une résistance de 220 ohm)
15// MQ-2 VCC -> VCC du MQ-2 -> 5V (VIN), GND -> GND
16
17// Définitions des broches
18const int MQ2_DO_PIN = 4; // D0 du MQ-2 (sortie à seuil numérique)
19const int BUZZER_PIN = 18; // Buzzer passif
20const int LED_PIN = 5; // LED d'avertissement + 220R
21
22// Temps de chauffe (ms) : la résistance du MQ-2 met des minutes à chauffer. Dans Wokwi, 2000
23// suffit.
24const unsigned long WARMUP_MS = 60000;
25bool warmedUp = false; // La chauffe est-elle terminée
26
27void setup() {
28 pinMode(MQ2_DO_PIN, INPUT);
29 pinMode(BUZZER_PIN, OUTPUT);
30 pinMode(LED_PIN, OUTPUT);
31 digitalWrite(BUZZER_PIN, LOW);
32 digitalWrite(LED_PIN, LOW);
33}
34
35void loop() {
36 // Chauffe : la lecture de DO est ignorée, la LED clignote lentement sans bloquer
37 if (!warmedUp) {
38 if (millis() < WARMUP_MS) {
39 digitalWrite(LED_PIN, (millis() / 500) % 2); // 0.5 s allumée, 0.5 s éteinte
40 return;
41 }
42 warmedUp = true;
43 }
44
45 // D0 du MQ-2 est normalement HIGH et passe à LOW au-dessus du seuil
46 int gasState = digitalRead(MQ2_DO_PIN);
47
48 if (gasState == LOW) {
49 // Alarme : la LED s'allume, le buzzer joue une sirène à deux tons
50 digitalWrite(LED_PIN, HIGH);
51 tone(BUZZER_PIN, 800); // Son grave
52 delay(200);
53 tone(BUZZER_PIN, 1200); // Son aigu
54 delay(200);
55 } else {
56 // Repos : LED et buzzer éteints
57 digitalWrite(LED_PIN, LOW);
58 noTone(BUZZER_PIN);
59 delay(50);
60 }
61}
62FAQ
Quels gaz le MQ-2 détecte-t-il ?▾
Le MQ-2 est sensible au GPL, au propane, au méthane, à l'hydrogène, aux vapeurs d'alcool et à la fumée. Il ne peut pas distinguer les différents gaz ; il détecte uniquement l'augmentation globale de la densité.
La sortie analogique du MQ-2 peut-elle être connectée directement à l'ESP32 ?▾
Le MQ-2 est alimenté en 5 V et sa sortie analogique peut atteindre 5 V. L'entrée ADC de l'ESP32 n'acceptant pas plus de 3,3 V, il est nécessaire d'utiliser un diviseur de tension (par exemple 10 kΩ + 20 kΩ).
Le capteur affiche une valeur élevée lors de la première mise en marche, pourquoi ?▾
Il faut quelques minutes pour que le chauffage des capteurs MQ atteigne son équilibre ; pendant ce temps, les valeurs affichées sont élevées. Désactiver l'alarme pendant quelques minutes après la mise en marche permet d'éviter les fausses alarmes.
Comment crée-t-on un effet de sirène ?▾
Le buzzer passif est piloté à l'aide de la fonction tone() de manière à alterner rapidement entre deux fréquences différentes (par exemple, 800 Hz et 1 200 Hz). Cette alternance imite le son d'une alarme classique.
