Il Fermion Smoke Sensor di DFRobot è una scheda breakout compatta basata sul sensore GM-202B, progettata per l’integrazione con piattaforme microcontrollore come Arduino ed ESP32.
Utilizza la tecnologia dei sistemi microelettromeccanici (MEMS) per offrire un’alta sensibilità a fumo ed etanolo nella gamma 10-1000 ppm. Il sensore ha un basso consumo energetico (<20mA), una risposta rapida e genera poco calore rispetto ai sensori di gas tradizionali.
In questo tutorial imparerai come rilevare il fumo con il sensore. Costruiremo un semplice sistema di allarme che fa lampeggiare un LED o attiva un buzzer se la concentrazione di fumo supera un certo livello.
Componenti necessari
Ti servirà un Fermion Smoke sensor di DFRobot. Per il microcontrollore, ho usato un Arduino Uno per questo progetto, ma qualsiasi altro Arduino o ESP32 funzionerà altrettanto bene.
Per il nostro sistema di allarme avremo anche bisogno di un LED e di un buzzer, che puoi acquistare su Amazon. Inoltre, useremo un piccolo OLED SSD1306 per mostrare le concentrazioni di fumo misurate su un display.

Fermion MEMS Odor Sensor

Buzzer passivo

Kit resistore & LED

Display OLED

Arduino Uno

Cavo USB per Arduino UNO

Set di fili Dupont

Breadboard
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Hardware del Fermion Smoke Sensor
Il Fermion Smoke Sensor di DFRobot è una scheda compatta per il rilevamento di gas progettata per individuare fumo (o alcol).
Si basa sul GM-202B chip, che utilizza la tecnologia dei sistemi microelettromeccanici (MEMS) per ottenere un formato ridotto con basso consumo energetico e caratteristiche di risposta rapida.
La breakout misura circa 13 mm per 13 mm con uno spessore di circa 2,5 mm. L’immagine sottostante mostra la scheda breakout con il sensore GM-202B in alto e un regolatore di tensione sotto:

Il modulo è pensato per la rilevazione qualitativa delle concentrazioni di fumo piuttosto che per un’analisi quantitativa precisa. Nota che DFRobot offre anche sensori calibrati ma sono più grandi e costosi (link).
Caratteristiche elettriche e uscita
Il sensore funziona con una tensione di alimentazione da 3,3 V a 5 V, compatibile con i livelli logici della maggior parte delle schede di sviluppo Arduino ed ESP32. Quando alimentato, il dispositivo assorbe meno di 20 mA di corrente operativa e genera pochissimo riscaldamento grazie al design MEMS.
La concentrazione di gas è rappresentata da un’uscita analogica in tensione che varia proporzionalmente alla quantità di fumo rilevata nell’aria circostante. La tensione di uscita è nell’intervallo 0…VCC.
Gamma di rilevamento e sensibilità
Il sensore può rilevare composti organici volatili comuni (VOC) come l’etanolo o prodotti di combustione come il fumo in un intervallo da 10 ppm a 1000 ppm. La sensibilità è quantificata dal rapporto tra la resistenza in aria pulita (R0) e la resistenza in una concentrazione nota (Rs). Come detto, l’uscita del sensore non è un valore di concentrazione calibrato.
Specifiche ambientali e durata
L’elemento sensibile è progettato per operare in un intervallo di temperatura ambiente da circa -10 °C a +50 °C e umidità relativa dal 15 % al 90 % (senza condensa). Il produttore specifica una durata di almeno cinque anni se il sensore è usato in condizioni atmosferiche normali senza contaminazioni eccessive.
Poiché i sensori rispondono a una vasta classe di gas organici, fattori ambientali come umidità, temperatura e presenza di altri gas possono influenzare l’uscita.
Pinout
Fisicamente, la breakout espone tre pin per la connessione: uscita analogica (A), tensione di alimentazione (VCC) e massa (GND). L’immagine sottostante mostra il pinout della scheda:

Schema elettrico
L’immagine seguente mostra lo schema elettrico della scheda Fermion Smoke Sensor GM-202B:

Si possono vedere il regolatore di tensione e il chip sensore GM-202B con la resistenza di carico da 4,7K all’uscita VOUT.
Preparazione
Il sensore arriva con una pellicola protettiva che devi rimuovere. Se guardi la parte superiore del sensore, troverai una pellicola gialla che copre i fori di ingresso dell’aria. Usa una pinzetta per staccare la pellicola. Le foto sottostanti mostrano il sensore con la pellicola protettiva, a metà rimozione e completamente rimossa (da sinistra a destra):

Nota che il sensore richiede un periodo di riscaldamento per raggiungere la stabilità operativa. Questo può richiedere diversi minuti al primo utilizzo fino a quando le letture si stabilizzano. Se non hai usato il sensore per molto tempo, è consigliato lasciarlo acceso da 48 fino a 168 ore:

Specifiche tecniche
La tabella seguente riassume le specifiche tecniche del Fermion Smoke Sensor GM-202B:
| Specifiche | Valore |
|---|---|
| Tipo di sensore | Sensore di fumo MEMS |
| Gas rilevato | Fumo (risponde anche a EtOH) |
| Gamma di rilevamento | 10 – 1000 ppm |
| Tensione di alimentazione | 3,3 V – 5 V |
| Corrente operativa | <20 mA |
| Segnale di uscita | Tensione analogica |
| Resistenza di carico (RL) | 4,7 kΩ |
| Sensibilità | R₀ (in aria) / Rₛ (in 200 ppm EtOH) ≥ 3 |
| Temperatura operativa | −10 °C a +50 °C |
| Umidità operativa | 15 – 90 % UR (senza condensa) |
| Durata | ≥ 5 anni (in aria) |
| Dimensioni | 13 × 13 × 2,5 mm |
Ecco un link al Datasheet del sensore GM-202B con dati tecnici aggiuntivi:
Fermion GM-202B Sensor vs MQ-2 Sensor
Un’alternativa comune al Fermion GM-202B Smoke Sensor è il più vecchio sensore MQ-2 Gas Sensor. Di seguito un breve confronto tra i due sensori.
Tecnologia di rilevamento e meccanismo
Il sensore GM-202B utilizza la tecnologia MEMS a semiconduttore metal-ossido, dove un micro-piatto riscaldante e uno strato sensibile al gas in metallo-ossido cambiano resistenza in risposta a VOC e fumo con basso consumo e risposta termica rapida. La fabbricazione MEMS produce un elemento sensore compatto che raggiunge rapidamente la temperatura operativa e consuma poca potenza per il riscaldamento.
Al contrario, il MQ-2 usa un elemento sensore a semiconduttore in massa (SnO₂) racchiuso in un contenitore più grande in metallo o bachelite. Rileva gas infiammabili e fumo tramite variazione di resistività del materiale sensibile quando riscaldato, ma richiede più potenza per il riscaldatore e tempi di preriscaldamento più lunghi.
Gamma operativa e sensibilità
La gamma di rilevamento per GM-202B è tipicamente 10–1000 ppm per gas come propano o vapori di etanolo e fumo, offrendo una sensibilità gestibile per il rilevamento di fumo a basso livello in applicazioni di qualità dell’aria o allarme. La sensibilità è spesso espressa come rapporto di resistenza R₀/Rₛ ≥ 3 a 200 ppm di gas di prova.
In confronto, il MQ-2 ha una gamma di rilevamento molto più ampia per gas infiammabili (≈300–10000 ppm) e un benchmark di sensibilità più alto (R₀/Rₛ ≥ 5 a 2000 ppm di propano), indicandolo per un rilevamento più ampio di gas, inclusi perdite di gas combustibile, non solo piccole concentrazioni di fumo.
Requisiti elettrici e caratteristiche del riscaldatore
Una differenza pratica chiave è nel consumo energetico. Il riscaldatore del GM-202B funziona a circa 2,5 V con un consumo ≤50 mW, il che aiuta a mantenere basso il consumo complessivo e un riscaldamento rapido.
Il riscaldatore del MQ-2 funziona a circa 5 V con un consumo fino a ≈950 mW, quindi richiede molta più potenza e un lungo periodo di preriscaldamento (spesso decine di minuti o ore prima di ottenere letture stabili).
Integrazione del circuito e uscita
Entrambi i sensori producono un’uscita analogica proporzionale alla concentrazione di gas tramite un partitore di tensione con una resistenza di carico.
Il modulo GM-202B usa tipicamente una resistenza di carico più piccola (≈4,7 kΩ su schede breakout integrate) e può interfacciarsi direttamente con ADC a bassa tensione di microcontrollori come Arduino o ESP32 a livelli logici 3,3–5 V.
I moduli MQ-2 includono comunemente un potenziometro e un comparatore sulla scheda breakout per un’uscita digitale a soglia, ma quando usati con ingressi ADC la resistenza di carico può essere ≈10 kΩ o più. Il MQ-2 fa parte di un semplice partitore di tensione che richiede calibrazione e spesso amplificazione aggiuntiva per letture accurate.
Dimensioni fisiche e ciclo di vita
Fisicamente, l’elemento MEMS GM-202B è molto più piccolo (≈5 × 5 × 1,55 mm sul sensore nudo e ~13 × 13 × 2,5 mm sulla breakout) con potenza complessiva inferiore e generalmente una lunga durata in aria pulita (≥5 anni su moduli breakout).
Il sensore MQ-2 può essere più grande a causa del suo packaging convenzionale e dell’assemblaggio del riscaldatore, e sebbene abbia una lunga vita nominale, il suo alto consumo energetico e struttura ingombrante lo rendono meno ottimizzato per progetti embedded a basso consumo.
Adattamento all’applicazione
Per via del basso consumo e della gamma di rilevamento più piccola, il GM-202B è più adatto per il rilevamento di fumo e monitoraggio VOC dove sono rilevanti piccole concentrazioni e il consumo è limitato (es. progetti microcontrollore a batteria).
Il MQ-2 è più indicato per il rilevamento di gas infiammabili e ambienti dove è utile una gamma di rilevamento ampia e robustezza verso più tipi di gas (es. perdite di GPL, allarmi gas in officina), a costo di un consumo maggiore e lungo preriscaldamento.
In entrambi i casi, nessuno dei due sensori fornisce una concentrazione assoluta di gas senza calibrazione. Entrambi forniscono variazioni relative che devono essere interpretate rispetto a una baseline per ogni applicazione target.
Collegare il sensore di fumo ad Arduino UNO
Collegare il sensore a un Arduino UNO è semplice. Collega VCC a 5V (o 3,3V), GND a massa e A all’ingresso analogico A0 come mostrato sotto:

Esempi di codice
Lettura della concentrazione di fumo
In questo primo esempio leggiamo semplicemente i valori misurati dal sensore e li stampiamo sul Monitor Seriale ogni secondo:
void setup() {
Serial.begin(9600);
}
void loop() {
int val = analogRead(A0);
Serial.println(val);
delay(1000);
}
Vedrai valori tra 0 e 1023, a seconda della quantità di fumo nell’ambiente.
Se il sensore non si è completamente riscaldato, vedrai una sequenza di valori in diminuzione continua sul Monitor Seriale. Dopo alcuni minuti le misurazioni si stabilizzeranno. Nel mio caso intorno a 135.
Se poi esponi il sensore al fumo (o all’alcol), vedrai un improvviso aumento del valore misurato:

Poiché il sensore non è calibrato, non puoi usarlo per misurare effettivi ppm (parti per milione) o mg/m 3 di concentrazione. Tuttavia, puoi usarlo per costruire un allarme fumo, come faremo nella sezione successiva.
Allarme fumo con LED
Il codice seguente implementa un semplice allarme fumo. Accende un LED se il valore di fumo misurato supera una soglia predefinita di 140:
byte sensorPin = A0;
byte ledPin = 13;
int threshold = 140;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
int val = analogRead(sensorPin);
digitalWrite(ledPin, val > threshold ? HIGH: LOW);
delay(100);
}
Ho collegato il LED con una resistenza da 220 Ohm al GPIO 13 come LED di allarme come mostrato sotto:

Nota che per un sistema di allarme affidabile potresti voler aggiungere anche un sensore di temperatura e uno di umidità, poiché le letture del sensore sono influenzate da temperatura e umidità. La figura sotto mostra la dipendenza della resistenza del sensore, proporzionale alla tensione letta da Arduino, dall’umidità relativa:

Allarme fumo con buzzer passivo
Invece di un LED puoi anche attivare un buzzer come segnale di allarme. Nel codice seguente un buzzer passivo si attiva se la concentrazione di fumo misurata supera la soglia:
byte sensorPin = A0;
byte buzzerPin = 11;
int threshold = 140;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
int val = analogRead(sensorPin);
if (val > threshold) {
tone(buzzerPin, 500);
} else {
noTone(buzzerPin);
}
delay(100);
}
L’immagine seguente mostra come aggiungere il buzzer al circuito. Inizia collegando il terminale negativo del buzzer al GND di Arduino (filo nero). Poi collega il terminale positivo tramite una resistenza da 100Ω al GPIO 11 (filo rosso):

Assicurati che la polarità del buzzer sia corretta e che sia un buzzer passivo collegato a un pin GPIO con PWM. Per maggiori informazioni vedi il tutorial Active and Passive Piezo Buzzers with Arduino.
Se hai un buzzer attivo, devi usare il codice dell’allarme con LED, perché non funzionerà correttamente con il comando tone().
Visualizzare la concentrazione di fumo su OLED
In quest’ultimo esempio mostriamo i valori di concentrazione di fumo misurati su un piccolo OLED. Il codice stampa “Smoke” e il valore al centro del display e aggiorna il valore mostrato ogni 100 ms:
#include "Adafruit_SSD1306.h" // Version 2.5.16
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.setTextColor(WHITE, BLACK);
oled.clearDisplay();
}
void loop() {
static char text[30];
int val = analogRead(A0);
oled.setTextSize(2);
oled.setCursor(40, 10);
oled.print("Smoke");
sprintf(text, " %d ", val);
oled.setTextSize(2);
oled.setCursor(35, 40);
oled.print(text);
oled.display();
delay(100);
}
Nota che ti serve la libreria Adafruit_SSD1306 per controllare l’OLED. Puoi installarla tramite il Library Manager come al solito:

Collegare l’OLED ad Arduino è semplice. Collega SDA e SCL dell’OLED ai pin A4 e A5 di Arduino. Per l’alimentazione: dato che l’OLED può funzionare a 5V, possiamo condividere le linee di alimentazione. Collega VCC a 5V e GND a GND. L’immagine sotto mostra il cablaggio completo:

Se hai bisogno di aiuto con l’OLED, dai un’occhiata al tutorial Use SSD1306 I2C OLED Display With Arduino.
Conclusione
In questo tutorial hai imparato come usare il Fermion Smoke sensor con un Arduino UNO per rilevare il fumo. Il sensore può essere facilmente usato anche con altri microcontrollori come un ESP32.
I sensori di gas MEMS hanno il vantaggio di essere piccoli, consumare pochissima energia (< 20mA) e avere un breve tempo di riscaldamento. Tuttavia, sono comunque influenzati da temperatura e umidità ambientale.
Inoltre, il Fermion Smoke sensor non è calibrato e quindi non può essere usato direttamente per misurare concentrazioni reali in unità ppm. In teoria potresti calibrare il sensore da solo, ma in pratica sarebbe difficile. DFRobot offre anche sensori calibrati ma sono più grandi e costosi (link).
Nota che esiste un’intera serie di diversi sensori MEMS disponibili. Per una panoramica vedi l’articolo Review of the DFRobot Fermion MEMS Gas Sensor Series e per dettagli i nostri post dedicati:
- Fermion MEMS VOC Gas Sensor GM-502B with Arduino
- Fermion MEMS Odor Sensor GM-512B with Arduino
- Fermion MEMS Carbon Monoxide CO Gas Sensor GM-702B with Arduino
- Fermion MEMS Multi-Gas Sensor MiCS-5524 with Arduino
Se hai domande, sentiti libero di lasciarle nella sezione commenti.
Buon divertimento con il tinkering 😉

