Skip to Content

Sensore Multi-Gas MEMS Fermion MiCS-5524 con Arduino

Sensore Multi-Gas MEMS Fermion MiCS-5524 con Arduino

Il Fermion MEMS Multi-Gas Sensor è un modulo compatto per la rilevazione della concentrazione di gas, basato sul sensore di gas MiCS-5524, progettato per l’integrazione con microcontrollori come Arduino e ESP32.

Utilizza la tecnologia di rilevamento MEMS (Micro-Electro-Mechanical Systems) per individuare diversi gas comuni, tra cui monossido di carbonio (CO), metano (CH₄), etanolo (C₂H₅OH), propano (C₃H₈), butano (C₄H₁₀), idrogeno (H₂), solfuro di idrogeno (H₂S) e ammoniaca (NH₃).

In questo tutorial imparerai come collegare il Fermion MEMS Multi-Gas Sensor a un Arduino UNO per misurare questi gas.

Parti Necessarie

Ti servirà un Fermion Multi-Gas Sensor di DFRobot. Per quanto riguarda il microcontrollore, ho usato un Arduino Uno per questo progetto, ma qualsiasi altro Arduino o ESP32 funzionerà altrettanto bene.

Fermion MEMS Multi-Gas Sensor

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 Fermion MEMS Multi-Gas Sensor MiCS-5524

La scheda breakout del Fermion MEMS Multi-Gas Sensor per il MiCS-5524 misura circa 12 mm per 16 mm e include un connettore a quattro pad per alimentazione e linee di segnale.

Pinout of Fermion MEMS Multi-Gas Sensor MiCS-5524
Pinout del Fermion MEMS Multi-Gas Sensor MiCS-5524

I pad sono per l’ingresso di alimentazione a 5 V, il riferimento di massa (GND) e l’uscita analogica di tensione (A0) corrispondente alla concentrazione di gas. Il pin enable (EN) può essere usato per accendere o spegnere l’alimentazione interna del sensore. Questo permette di metterlo in uno stato a basso consumo quando il rilevamento continuo non è necessario.

L’immagine seguente mostra lo schema elettrico della scheda breakout del Fermion MEMS Multi-Gas Sensor:

Schema elettrico del Fermion Multi-Gas Sensor MiCS-5524 (source)

Caratteristiche Elettriche e di Alimentazione

Elettricamente, il SEN0440 è progettato per funzionare con un’alimentazione DC regolata a 5 V con una dissipazione di potenza nominale di circa 0,45 W.

Sebbene l’interfaccia logica del sensore fornisca un’uscita analogica in un intervallo da 0 a 5 V, è compatibile con microcontrollori e schede di sviluppo i cui pin di ingresso tollerano livelli da 3,3 V a 5,5 V, come molte varianti di Arduino e ESP32.

L’uscita principale è una tensione analogica proporzionale alla concentrazione del gas target, che deve essere letta tramite un convertitore analogico-digitale sul controller host per ulteriori elaborazioni o conversioni in unità parti per milione (PPM).

Meccanismo di Rilevamento dei Gas e Intervallo Target

Al suo interno, il SEN0440 utilizza il MiCS-5524 sensore di gas resistivo MEMS. Questo elemento sensibile contiene uno strato semiconduttore a ossido metallico la cui resistenza varia in presenza di certi gas riducenti.

Il modulo è calibrato e tarato in modo che le variazioni di questa resistenza vengano tradotte in un’uscita di tensione analogica, che il codice di esempio allegato può convertire in concentrazioni approssimative di gas comuni.

Il sensore supporta la rilevazione di monossido di carbonio (CO) da circa 1 ppm fino a 1000 ppm, idrogeno (H₂) in un intervallo simile, etanolo (C₂H₅OH) da circa 10 ppm a 500 ppm, e ammoniaca (NH₃) da circa 1 ppm a 500 ppm. Metano (CH₄) e altri idrocarburi leggeri come propano e butano a concentrazioni da circa 3000 ppm a 15000 ppm. Il grafico seguente mostra le caratteristiche di sensibilità ai gas del sensore MiCS‑5524 per i diversi gas:

Caratteristiche di sensibilità ai gas del sensore MiCS‑5524 (source)

Prestazioni del Sensore e Limiti Ambientali

L’elemento sensibile nel SEN0440 richiede un periodo di riscaldamento prima che si possano ottenere misurazioni significative.

Il modulo è specificato per funzionare in un ampio intervallo di temperatura ambiente da circa −30 °C fino a 85 °C, e può tollerare livelli di umidità relativa da circa il 5 % al 95 % senza condensa.

Specifiche Tecniche

La tabella seguente riassume le specifiche tecniche del Fermion MEMS Multi-Gas Sensor MiCS-5524:

Specifiche Dettagli
Modello Sensore Sensore di gas MEMS MiCS-5524
Principio di Rilevamento Rilevamento resistivo di gas a semiconduttore a ossido metallico
Gas Rilevabili CO, H₂, C₂H₅OH, NH₃, CH₄, C₃H₈, C₄H₁₀ (multi-gas, selettività limitata)
Intervallo di Concentrazione Gas CO: ~1 ppm–1000 ppm; H₂: ~1 ppm–1000 ppm; Etanolo: ~10 ppm–500 ppm; NH₃: ~1 ppm–500 ppm; Idrocarburi rilevabili a ppm più elevati
Tipo di Uscita Tensione analogica proporzionale alla concentrazione
Intervallo di Tensione in Uscita 0 V–5 V (proporzionale al livello di gas)
Tensione di Alimentazione 5 V DC nominali
Tempo di Riscaldamento Decine di secondi (tipico per letture stabili)
Temperatura di Funzionamento −30 °C a +85 °C
Umidità di Funzionamento 5 % a 95 % UR (senza condensa)
Consumo Tipico di Potenza ~0,45 W (a 5 V)
Compatibilità Interfaccia Ingresso analogico microcontrollore compatibile da 3,3 V a 5,5 V
Durata >2 anni

Ecco un link al Datasheet del sensore MiCS-5524 con ulteriori dati tecnici:

Collegare il Fermion MEMS Multi-Gas Sensor ad Arduino UNO

Collegare il sensore a un Arduino UNO è semplice. Collega VCC a 5V, GND a massa, A0 all’ingresso analogico A0, e EN al GPIO 10 come mostrato di seguito:

Connecting Fermion MEMS Multi-Gas Sensor to Arduino
Collegamento del Fermion MEMS Multi-Gas Sensor ad Arduino

Installazione della Libreria DFRobot_MICS

Useremo la libreria DFRobot_MICS per leggere i dati dal sensore MiCS-5524. Per installarla, scarica il DFRobot_MICS file ZIP della libreria (DFRobot_MICS-master.zip) sul tuo computer.

Poi apri un nuovo Sketch, vai su Sketch -> Include Library -> Add .ZIP Library … per installare la libreria ZIP scaricata (DFRobot_MICS-master.zip):

Codice per la lettura delle concentrazioni di gas

Il codice seguente dimostra come usare il Fermion MEMS Multi-Gas Sensor MiCS-5524 con una scheda Arduino.

Il sensore rileva gas come monossido di carbonio, metano, etanolo, idrogeno, ammoniaca e biossido di azoto, fornendo le loro concentrazioni in parti per milione (PPM).

Il programma inizializza il sensore, esegue una calibrazione di riscaldamento, quindi legge e mostra continuamente le concentrazioni di gas tramite il monitor seriale.

// https://github.com/dfrobot/DFRobot_MICS  V 1.0.0
// www.makerguides.com

#include "DFRobot_MICS.h"

#define CALIBRATION_TIME 3  // mins
#define ADC_PIN A0
#define POWER_PIN 10

DFRobot_MICS_ADC mics(ADC_PIN, POWER_PIN);

void display(const char* text, float value) {
  Serial.print(text);
  Serial.print(value, 1);
  Serial.println(" PPM");
}

void setup() {
  Serial.begin(115200);

  while (!mics.begin()) {
    Serial.println("Can't find Sensor!");
    delay(1000);
  }

  uint8_t mode = mics.getPowerState();
  if (mode == SLEEP_MODE) {
    mics.wakeUpMode();
    Serial.println("Sensor is awake!");
  }

  Serial.print("Warming up, do not touch sensor");
  while (!mics.warmUpTime(CALIBRATION_TIME)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("ready!");
}

void loop() {
  Serial.println("\nGas concentrations ----------");
  display("CO (Carbon Monoxide)  : ", mics.getGasData(CO));
  display("CH4 (Methane)         : ", mics.getGasData(CH4));
  display("C2H5OH (Ethanol)      : ", mics.getGasData(C2H5OH));    
  display("H2 (Hydrogen)         : ", mics.getGasData(H2));
  display("NH3 (Ammonia)         : ", mics.getGasData(NH3));
  display("NO2 (Nitrogen Dioxide): ", mics.getGasData(NO2));      

  delay(1000);   
  mics.sleepMode();
}

Analizziamo il codice nelle sue componenti principali per capire come funziona.

Importazioni

Il codice inizia includendo la DFRobot_MICS.h libreria, che fornisce le funzioni e definizioni necessarie per interfacciarsi con il sensore MiCS-5524.

#include "DFRobot_MICS.h"

Costanti

Successivamente, vengono definite diverse costanti. CALIBRATION_TIME definisce la durata del riscaldamento del sensore in minuti, essenziale per letture accurate. ADC_PIN e POWER_PIN definiscono rispettivamente il pin analogico di Arduino collegato all’uscita del sensore e il pin digitale che controlla l’alimentazione del sensore.

#define CALIBRATION_TIME 3  // mins
#define ADC_PIN A0
#define POWER_PIN 10

Oggetto Sensore

Viene creato un’istanza della classe DFRobot_MICS_ADC chiamata mics passando al costruttore il pin ADC e il pin di alimentazione. Questo oggetto gestisce la comunicazione con il sensore e ne controlla il funzionamento.

DFRobot_MICS_ADC mics(ADC_PIN, POWER_PIN);

Funzione di Visualizzazione

La funzione display() è un aiuto che prende un testo descrittivo e un valore di concentrazione di gas in virgola mobile. Stampa il testo seguito dal valore formattato con una cifra decimale e aggiunge l’unità “PPM” sul monitor seriale. Questa funzione semplifica la formattazione dell’output nel loop principale.

void display(const char* text, float value) {
  Serial.print(text);
  Serial.print(value, 1);
  Serial.println(" PPM");
}

Funzione Setup

Nella funzione setup() la comunicazione seriale viene inizializzata a 115200 baud per abilitare l’output dati sul monitor seriale. Il programma tenta quindi di inizializzare il sensore chiamando mics.begin() in un ciclo finché non ha successo, stampando un messaggio di errore ogni secondo se il sensore non viene trovato.

Dopo l’inizializzazione riuscita, viene controllato lo stato di alimentazione del sensore. Se il sensore è in modalità sleep, viene risvegliato usando wakeUpMode() e viene stampato un messaggio di conferma.

Il sensore richiede un periodo di riscaldamento per la calibrazione al fine di garantire misurazioni accurate dei gas. Il codice stampa un messaggio e attende fino al completamento del tempo di riscaldamento specificato da CALIBRATION_TIME minuti, stampando un punto ogni secondo per indicare il progresso. Una volta pronto, stampa una conferma.

void setup() {
  Serial.begin(115200);

  while (!mics.begin()) {
    Serial.println("Can't find Sensor!");
    delay(1000);
  }

  uint8_t mode = mics.getPowerState();
  if (mode == SLEEP_MODE) {
    mics.wakeUpMode();
    Serial.println("Sensor is awake!");
  }

  Serial.print("Warming up, do not touch sensor");
  while (!mics.warmUpTime(CALIBRATION_TIME)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("ready!");
}

Funzione Loop

La funzione loop() viene eseguita ripetutamente dopo il setup. Inizia stampando un’intestazione sul monitor seriale per indicare l’inizio delle letture delle concentrazioni di gas. Poi chiama la funzione display() per ogni tipo di gas supportato dal sensore: monossido di carbonio (CO), metano (CH4), etanolo (C2H5OH), idrogeno (H2), ammoniaca (NH3) e biossido di azoto (NO2). Per ogni gas, recupera la concentrazione in PPM usando mics.getGasData() con l’identificatore del gas corrispondente.

Dopo aver stampato tutte le concentrazioni di gas, il programma attende un secondo. Puoi mettere il sensore in modalità sleep usando mics.sleepMode() per risparmiare energia fino al prossimo ciclo di lettura.

void loop() {
  Serial.println("\nGas concentrations ----------");
  display("CO (Carbon Monoxide)  : ", mics.getGasData(CO));
  display("CH4 (Methane)         : ", mics.getGasData(CH4));
  display("C2H5OH (Ethanol)      : ", mics.getGasData(C2H5OH));    
  display("H2 (Hydrogen)         : ", mics.getGasData(H2));
  display("NH3 (Ammonia)         : ", mics.getGasData(NH3));
  display("NO2 (Nitrogen Dioxide): ", mics.getGasData(NO2));      

  delay(1000);   
  // mics.sleepMode();
}

Esempio di Output

L’esempio seguente mostra l’output sul Monitor Serial. Dopo il riscaldamento, il codice stampa le concentrazioni di gas per un primo campione, tutte pari a 0.

Durante il secondo periodo di campionamento, ho spruzzato del detergente per vetri vicino al sensore e si possono vedere i valori aumentati per Metano e Ammoniaca nei dati del sensore.

Sensor is awake!
Warming up, do not touch sensor.....................ready!

Gas concentrations ----------
CO (Carbon Monoxide)  : 0.0 PPM
CH4 (Methane)         : 0.0 PPM
C2H5OH (Ethanol)      : 0.0 PPM
H2 (Hydrogen)         : 0.0 PPM
NH3 (Ammonia)         : 0.0 PPM
NO2 (Nitrogen Dioxide): 0.0 PPM

Gas concentrations ----------
CO (Carbon Monoxide)  : 0.0 PPM
CH4 (Methane)         : 5402.4 PPM
C2H5OH (Ethanol)      : 0.0 PPM
H2 (Hydrogen)         : 0.0 PPM
NH3 (Ammonia)         : 87.7 PPM
NO2 (Nitrogen Dioxide): 0.0 PPM

Conclusione

In questo tutorial hai imparato come usare il Fermion MEMS Multi-Gas Sensor con un Arduino UNO per rilevare vari gas. Il sensore può essere facilmente usato anche con altri microcontrollori come un ESP32.

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 specifici i nostri post dedicati:

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

Buon divertimento con il tinkering 😉