Componenti · 6 min di lettura

Sensore di gas MQ-2: allarme gas e fumo con Arduino

Come funziona il sensore di gas MQ-2? Rilevare GPL, metano e fumo, pin del modulo, preriscaldamento, lettura analogica e digitale, calibrazione di R0, la famiglia MQ e allarmi gas con ESP32 e Pico.

L'MQ-2 è un sensore di gas economico e molto diffuso che rileva gas combustibili e fumo nell'aria. Reagisce a GPL (gas in bombola), propano, butano, metano (gas naturale), idrogeno, vapori di alcol e fumo. Nei progetti con Arduino si usa per costruire allarmi gas per la cucina, rilevatori di fumo e indicatori della qualità dell'aria. In questo articolo vedrai passo passo cosa c'è dentro il sensore, come collegarlo correttamente, perché il preriscaldamento è indispensabile e come interpretare i valori letti.

Modulo sensore di gas MQ-2
Modulo sensore di gas MQ-2: sotto la rete metallica si trova l'elemento sensibile riscaldato; il modulo ha 4 pin: VCC, GND, DO e AO.

Come funziona l'MQ-2?

Sotto la rete metallica ci sono un piccolo elemento ceramico rivestito di biossido di stagno (SnO₂) e un filo riscaldatore che lo porta ad alcune centinaia di gradi. In aria pulita la resistenza dell'elemento è alta. Quando arriva un gas combustibile o del fumo, una reazione chimica sulla superficie abbassa la resistenza; più il gas è denso, più la resistenza scende. Il modulo trasforma questa variazione di resistenza in tensione con un partitore: più gas c'è, più sale la tensione sul pin AO.

CaratteristicaValore
Tensione di alimentazione5 V
Corrente del riscaldatore~150 mA (al massimo 800 mW)
Gas rilevatiGPL, propano, butano, metano, idrogeno, alcol, fumo
Campo di misura300–10.000 ppm
PreriscaldamentoAlcuni minuti a ogni accensione, 24–48 ore al primo utilizzo
UsciteAO (analogica), DO (digitale, comparatore LM393)

Pin del modulo e collegamento

Il sensore MQ-2 nudo ha 6 piedini, ma nei progetti di solito si usa un modulo già pronto. Sul modulo ci sono la resistenza di carico, un comparatore LM393, un piccolo potenziometro per regolare la soglia, un LED di alimentazione e un LED di allarme. Il pin AO fornisce una tensione proporzionale alla concentrazione di gas, mentre il pin DO cambia stato quando il livello di gas supera la soglia impostata con il potenziometro.

Pin del moduloFunzioneArduino Uno
VCCAlimentazione (riscaldatore compreso)5V
GNDMassaGND
AOUscita analogica, sale con il gasA0
DOUscita digitale, LOW quando si supera la sogliaD2
Fronte e retro di un modulo sensore MQ
Retro di un modulo della serie MQ (a sinistra): comparatore LM393, potenziometro blu della soglia, LED POWER e DOUT. L'MQ-135 a destra usa lo stesso schema di modulo.
Per regolare la soglia di DO, fai scaldare il sensore per qualche minuto in aria pulita, poi gira il potenziometro fino al punto in cui il LED DOUT si spegne appena, e giralo ancora un po'. Così le piccole fluttuazioni non faranno scattare l'allarme, mentre un vero aumento di gas accenderà subito il LED.

Perché il preriscaldamento è importante?

L'elemento sensibile risponde correttamente solo quando raggiunge la sua temperatura di lavoro. Nei primi minuti dopo l'accensione il valore di AO parte alto, poi scende lentamente fino a stabilizzarsi; le misure prese in questo periodo sono ingannevoli. Per questo è buona abitudine saltare il controllo dell'allarme nel codice per i primi 1–3 minuti. Se usi un sensore nuovo per la prima volta, si consiglia di farlo funzionare ininterrottamente per 24–48 ore (rodaggio, o burn-in) per ottenere valori stabili. Mentre il riscaldatore è acceso, la rete metallica diventa piuttosto calda; è normale, ma non mettere materiali infiammabili vicino al sensore.

Allarme gas e fumo con Arduino

Il codice qui sotto legge il valore analogico, lo scrive nel Monitor seriale e controlla anche il pin DO. Se il valore analogico supera la soglia o il pin DO va a LOW, suona un buzzer:

Arduino (C++)
1const int AO_PIN = A0;
2const int DO_PIN = 2;
3const int BUZZER = 8;
4const int LIMIT = 400;          // analog eşik (0–1023) / analog threshold
5
6void setup() {
7  Serial.begin(9600);
8  pinMode(DO_PIN, INPUT);
9  pinMode(BUZZER, OUTPUT);
10  delay(60000);                 // 1 dk ön ısıtma / 1 min warm-up
11}
12
13void loop() {
14  int value = analogRead(AO_PIN);
15  bool gas = digitalRead(DO_PIN) == LOW;   // çoğu modülde LOW = gaz / LOW = gas on most modules
16
17  Serial.println(value);
18
19  if (value > LIMIT || gas) {
20    tone(BUZZER, 2000, 300);    // alarm sesi / alarm tone
21  }
22  delay(500);
23}

Il valore 400 non è una regola fissa: il valore in aria pulita può variare tra 100 e 300 a seconda del sensore, della temperatura e dell'umidità. Prima fai funzionare il sensore per qualche minuto, guarda nel Monitor seriale il valore in aria pulita e metti la soglia nettamente più in alto. Per provarlo basta avvicinare per un attimo al sensore il gas di un accendino, senza accenderlo; il valore sale in pochi secondi.

Dal valore analogico ai ppm: calibrazione di R0

Sul modulo il sensore forma un partitore di tensione con una resistenza di carico (RL, 1 kΩ nella maggior parte dei moduli). Dalla tensione di AO puoi calcolare la resistenza del sensore (Rs). I grafici del datasheet non riportano la concentrazione di gas in funzione di Rs direttamente, ma del rapporto Rs/R0; R0 è la resistenza del sensore in 1000 ppm di idrogeno, e in aria pulita Rs/R0 vale circa 9,8. Quindi trovi R0 misurando il sensore in aria pulita e dividendo per 9,8:

Arduino (C++)
1const float RL = 1.0;           // yük direnci (kΩ) / load resistor (kΩ)
2const float CLEAN_AIR = 9.8;    // temiz havada Rs/R0 / Rs/R0 in clean air
3float R0;
4
5float readRs() {
6  float v = analogRead(A0) * 5.0 / 1023.0;
7  if (v < 0.01) v = 0.01;       // sıfıra bölmeyi önle / avoid dividing by zero
8  return RL * (5.0 - v) / v;    // bölücüden Rs / Rs from the divider
9}
10
11void setup() {
12  Serial.begin(9600);
13  delay(60000);                 // ön ısıtma / warm-up
14  float sum = 0;
15  for (int i = 0; i < 50; i++) {
16    sum += readRs();
17    delay(100);
18  }
19  R0 = (sum / 50) / CLEAN_AIR;  // temiz havada kalibrasyon / clean-air calibration
20}
21
22void loop() {
23  float ratio = readRs() / R0;  // gaz arttıkça küçülür / falls as gas rises
24  Serial.println(ratio);
25  delay(1000);
26}

Se il rapporto è intorno a 9,8 l'aria è pulita; se scende sotto 1 la concentrazione di gas è alta. Per convertire questo rapporto in ppm si usano le curve logaritmiche del datasheet; librerie come MQUnifiedsensor le includono già. Considera comunque il risultato come un'approssimazione: temperatura, umidità ed età del sensore influenzano la misura, e poiché l'MQ-2 reagisce a molti gas contemporaneamente, non può distinguere con certezza quale gas sta misurando. Aggiungere un DHT11 per controllare temperatura e umidità è una buona idea.

L'MQ-2 è un sensore per imparare e per progetti hobbistici, non un rilevatore di gas certificato. Non usarlo mai in casa come unica protezione contro fughe di gas o intossicazione da monossido di carbonio; per questo usa rilevatori commerciali conformi alle norme (per esempio EN 50194 o EN 50291). Considera il tuo allarme come un sistema aggiuntivo.

La famiglia di sensori MQ: quale scegliere?

SensorePiù sensibile aUso tipico
MQ-2GPL, propano, metano, idrogeno, fumoAllarme generico gas e fumo
MQ-3AlcolEtilometro
MQ-4Metano (gas naturale)Allarme fughe di gas naturale
MQ-5GPL, gas naturaleAllarme gas per la cucina
MQ-7Monossido di carbonio (CO)Monitoraggio del CO (serve il ciclo del riscaldatore)
MQ-9CO e gas combustibiliVicino a stufe e caldaie
MQ-135Ammoniaca, benzene, fumo, NOxQualità dell'aria interna

L'MQ-2 con ESP32 e Raspberry Pi Pico

Il riscaldatore dell'MQ-2 richiede 5 V, quindi collega il pin VCC del modulo al pin VIN (5V) dell'ESP32. Però, quando il modulo è alimentato a 5 V, l'uscita AO può arrivare a 5 V, mentre gli ingressi analogici di ESP32 e Pico accettano al massimo 3,3 V. Metti tra AO e il pin analogico un partitore con resistenze da 10 kΩ e 20 kΩ per portare il segnale a un livello sicuro. Con l'ESP32 è facilissimo inviare una notifica al telefono quando viene rilevato del gas, oppure azionare una ventola tramite un relè. Sul Raspberry Pi Pico lo stesso allarme in MicroPython è così:

MicroPython
1from machine import ADC, Pin
2import time
3
4gas = ADC(26)                  # GP26 (ADC0), AO bölücü üzerinden / AO through a divider
5buzzer = Pin(15, Pin.OUT)
6LIMIT = 30000                  # 0–65535 arası eşik / threshold
7
8time.sleep(60)                 # ön ısıtma / warm-up
9while True:
10    value = gas.read_u16()
11    print(value)
12    buzzer.value(1 if value > LIMIT else 0)
13    time.sleep(0.5)

Idee di progetti con l'MQ-2

  • Allarme gas per la cucina: un allarme che fa suonare un buzzer e accende un LED rosso in caso di fuga dalla bombola o dalla rete del gas.
  • Rilevatore di fumo: un sistema che avvisa in laboratorio se rileva fumi di saldatura o odore di bruciato.
  • Ventilazione automatica: un circuito che accende un aspiratore tramite un relè quando il livello di gas sale.
  • Allarme fiamma e gas: abbina l'MQ-2 a un sensore di fiamma per controllare entrambi i pericoli insieme.
  • Rilevatore ESP32 con notifiche: invia un messaggio Telegram al telefono quando viene rilevato del gas.
  • Indicatore della qualità dell'aria: mostra il rapporto misurato come grafico su un display OLED.

Errori comuni e come risolverli

  • Va in allarme appena acceso: il sensore non si è ancora scaldato; salta il controllo dell'allarme per i primi 1–3 minuti.
  • Il valore non cambia mai: all'ingresso analogico è collegato il pin DO invece di AO, oppure il modulo non riceve 5 V.
  • Il LED DOUT è sempre acceso: la soglia del potenziometro è troppo bassa; giralo in aria pulita finché il LED non si spegne.
  • I valori si spostano durante la giornata: cambiano temperatura e umidità; reimposta la soglia in aria pulita di tanto in tanto.
  • Sull'ESP32 il valore analogico è sempre al massimo: il segnale AO a 5 V è collegato direttamente; usa un partitore di tensione.
  • La batteria si scarica in fretta: il riscaldatore assorbe circa 150 mA in continuo; l'MQ-2 non è adatto a funzionare a lungo a batteria.

Abbinare l'MQ-2 a un buzzer e a un LED è il modo più semplice per passare dai sensori a un vero sistema di allarme. Nell'app BlueGrays trovi progetti sull'uso del sensore di gas, un allarme con sensore di fiamma e di gas e un allarme rilevatore di gas e fumo con ESP32 e MQ-2, con schemi e codice.

Domande frequenti

Quali gas rileva l'MQ-2?

L'MQ-2 è sensibile a GPL, propano, butano, metano (gas naturale), idrogeno, vapori di alcol e fumo. Reagisce solo debolmente al monossido di carbonio. Poiché reagisce a molti gas contemporaneamente, da solo non può distinguere quale gas è presente.

Quanto deve scaldarsi l'MQ-2?

A ogni accensione aspetta alcuni minuti (in pratica 1–3 minuti) perché le letture si stabilizzino. Se usi un sensore nuovo per la prima volta, si consiglia di farlo funzionare ininterrottamente per 24–48 ore per ottenere i risultati più stabili.

MQ-2 o MQ-4 per le fughe di gas naturale?

L'MQ-2 rileva anche il metano, ma reagisce a molti gas. Per il gas naturale (metano) è più adatto l'MQ-4, che è più selettivo. In ogni caso, non sostituire un rilevatore di gas certificato con un sensore hobbistico.

Posso misurare il monossido di carbonio con l'MQ-2?

L'MQ-2 reagisce solo debolmente al monossido di carbonio. Per il CO si usa l'MQ-7, il cui riscaldatore alterna una tensione alta e una bassa; ma per la tua sicurezza usa sempre un rilevatore di CO conforme alla norma EN 50291.

È normale che il sensore si scaldi?

Sì. Il riscaldatore interno mantiene sempre l'elemento sensibile ad alta temperatura, per questo la rete metallica è decisamente calda al tatto. Tieni il sensore lontano da materiali infiammabili e non toccarlo mentre è in funzione.

Posso alimentare l'MQ-2 a batteria?

Sì, ma non durerà molto: il riscaldatore assorbe circa 150 mA in continuo. Un power bank da 2000 mAh dura circa 13 ore. Puoi calcolare l'autonomia del tuo progetto con lo strumento Durata batteria; dove serve un monitoraggio continuo, usa un alimentatore di rete.

Vedi tutti i progetti

Impara passo passo come funziona il sensore di gas MQ-2, perché deve scaldarsi, come collegarlo ad Arduino, regolare la soglia e costruire un allarme gas e fumo con buzzer.