Skip to Content

Sensore di Odori MEMS Fermion GM-512B con Arduino

Sensore di Odori MEMS Fermion GM-512B con Arduino

Il sensore di odori MEMS Fermion di DFRobot è un modulo di rilevamento gas progettato per l’uso con piattaforme microcontrollore come Arduino o ESP32. Al suo interno c’è un sensore GM-512B, che utilizza la tecnologia microelettromeccanica (MEMS) per rilevare gas legati agli odori come idrogeno solforato, etanolo e acetone.

In questo tutorial imparerai come rilevare gli odori con questo sensore. Costruiremo un semplice sistema di allarme che fa lampeggiare un LED o emette un suono con un buzzer se l’odore diventa troppo intenso.

Componenti necessari

Ti servirà un sensore di odori Fermion 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 il valore dell’odore misurato su un display.

Sensore di odori MEMS Fermion

Buzzer passivo

Kit resistore & LED

OLED display

Display OLED

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Dupont wire set

Set di fili Dupont

Half_breadboard56a

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 sensore di odori Fermion

Il SEN0571 utilizza un elemento sensore di odori MEMS GM-512B costruito con tecnologia microelettromeccanica (MEMS). Questa architettura MEMS integra strutture sensoriali su scala microscopica per ridurre dimensioni e consumo energetico.

L’elemento sensore reagisce ai cambiamenti nella composizione chimica dell’aria circostante modificando le sue caratteristiche elettriche, che vengono poi convertite in un’uscita di tensione analogica. La fabbricazione MEMS consente una bassa massa termica, quindi il sensore richiede meno corrente per funzionare e genera calore minimo durante la misurazione.

Caratteristiche di rilevamento

Questo sensore è in grado di rilevare una gamma di gas legati agli odori, inclusi idrogeno solforato (H₂S), etanolo (EtOH) e acetone, con un intervallo tipico di rilevamento da circa 0,5 ppm a 50 ppm.

L’uscita non è calibrata per valori di concentrazione precisi; invece il livello di tensione indica variazioni relative nella presenza del gas.

Interfaccia elettrica

Il SEN0571 funziona con una tensione di alimentazione da 3,3 V a 5 V, il che lo rende compatibile sia con piattaforme Arduino che ESP32 senza necessità di adattatori di livello.

Il sensore assorbe meno di 20 mA di corrente durante il normale funzionamento, mantenendo basso il consumo medio di energia.

Produce un’unica uscita di tensione analogica corrispondente alla concentrazione di gas rilevata, che può essere letta direttamente dai pin ADC del microcontrollore.

Limiti ambientali e durata

Il dispositivo è progettato per funzionare in un intervallo di temperatura da circa −10 °C a +50 °C e in condizioni di umidità relativa dal 15 % al 90 % (senza condensa).

I materiali strutturali e il design MEMS mirano a una lunga durata di servizio dell’ordine di cinque anni o più in aria, assumendo un uso e un’esposizione ambientale normali.

Pinout

Fisicamente, il breakout del sensore espone tre pin per la connessione: uscita analogica (A), tensione di alimentazione (VCC) e massa (GND). L’immagine sottostante mostra il pinout della scheda:

Pinout of Fermion Smoke Sensor GM-202B Board
Pinout della scheda Fermion Odor Sensor GM-512B

Schema elettrico

L’immagine seguente mostra lo schema elettrico della scheda Fermion Odor Sensor GM-512B:

Schematics of Fermion Odor Sensor GM-512B
Schema elettrico del sensore di odori Fermion GM-512B (source)

Si possono vedere il regolatore di tensione e il chip sensore GM-512B con la resistenza di carico da 3K 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 sotto mostrano il sensore con la pellicola protettiva, a metà rimozione e completamente rimossa (da sinistra a destra):

Rimozione della pellicola protettiva

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 24 a 72 ore:

Preheating times for GM-502B VOC Sensor
Tempi di preriscaldamento per il sensore di odori GM-512B (source)

Specifiche tecniche

La tabella seguente riassume le specifiche tecniche del sensore di odori Fermion GM-512B:

Specifiche Valore
Elemento sensore Sensore di odori MEMS (GM-512B)
Obiettivo di rilevamento Gas legati agli odori (es. H₂S, etanolo, acetone)
Intervallo tipico di rilevamento ~0,5 ppm a ~50 ppm
Tipo di uscita Tensione analogica
Tensione di alimentazione 3,3 V a 5 V
Corrente di funzionamento < 20 mA
Temperatura di funzionamento −10 °C a +50 °C
Umidità di funzionamento 15 % a 90 % UR (senza condensa)
Caratteristica di risposta Variazione relativa di resistenza/tensione
Dimensioni fisiche (elemento sensore) ~13 mm × 13 mm × 2,5 mm
Durata tipica ~5 anni in aria con uso normale

Ecco un link al datasheet del sensore GM-512B con ulteriori dati tecnici:

Collegare il sensore di odori 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:

Connecting Smoke Sensor to Arduino UNO
Collegamento del sensore di fumo ad Arduino UNO

Esempi di codice

Lettura della concentrazione di odore

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 odore nell’ambiente.

Se il sensore non si è completamente riscaldato, vedrai una sequenza di valori in continuo calo sul Monitor Seriale. Vedi sotto:

Dopo alcuni minuti le misurazioni si stabilizzeranno. Nel mio caso intorno a un valore di circa 300. Se poi soffi sul sensore, vedrai un improvviso aumento del valore misurato:

Poiché il sensore non è calibrato, non puoi usarlo per misurare ppm (parti per milione) o mg/m 3 di concentrazione reali. Tuttavia, puoi usarlo per costruire un allarme odore, che faremo nella sezione successiva.

Allarme odore con LED

Il codice seguente implementa un semplice allarme odore. Accende un LED se il valore di odore misurato supera una soglia predefinita di 320:

byte sensorPin = A0;
byte ledPin = 13;
int threshold = 320;

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:

Collegamento del LED di allarme ad Arduino UNO

Nota che per un sistema di allarme affidabile potresti voler aggiungere anche un sensore di temperatura e umidità, poiché le letture del sensore sono influenzate da temperatura e umidità. In alternativa potresti usare una finestra mobile per compensare la lenta deriva del sensore dovuta a temperatura e umidità.

Allarme odore 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 odore misurata supera la soglia:

byte sensorPin = A0;
byte buzzerPin = 11;
int threshold = 320;

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):

Connecting alarm buzzer to Arduino UNO
Collegamento del buzzer di allarme ad Arduino UNO

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 Active and Passive Piezo Buzzers with Arduino tutorial.

Se hai un buzzer attivo, devi usare il codice dell’allarme LED precedente, poiché non funzionerà correttamente con il comando tone().

Visualizzare la concentrazione di odore su OLED

In quest’ultimo esempio mostriamo i valori di concentrazione di fumo misurati su un piccolo OLED. Il codice stampa “Odor” 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("Odor");

  sprintf(text, " %d ", val);
  oled.setTextSize(2);
  oled.setCursor(35, 40);
  oled.print(text);

  oled.display();

  delay(100);
}

Nota che ti serve la Adafruit_SSD1306 libreria per controllare l’OLED. Puoi installarla tramite il Library Manager come al solito:

Adafruit_SSD1306 library installed in Library Manager
Libreria Adafruit_SSD1306 installata nel Library Manager

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:

Connecting OLED and Sensor to Arduino UNO
Collegamento di OLED e sensore ad Arduino UNO

Se hai bisogno di aiuto con l’OLED, dai un’occhiata al Use SSD1306 I2C OLED Display With Arduino tutorial.

Conclusione

In questo tutorial hai imparato come usare il sensore di odori Fermion con un Arduino UNO per rilevare il fumo. Il sensore può essere facilmente usato anche con altri microcontrollori come ESP32.

I sensori 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à ambientali.

Inoltre, il sensore di odori Fermion non è calibrato e quindi non può essere usato direttamente per misurare concentrazioni reali in unità ppm.

Nota che esiste un’intera serie di diversi sensori MEMS disponibili. Per una panoramica vedi l’ Review of the DFRobot Fermion MEMS Gas Sensor Series articolo e per dettagli i nostri post dedicati:

Se hai domande, sentiti libero di lasciarle nella sezione commenti.

Buon divertimento con il fai-da-te 😉