Skip to Content

Fermion MEMS Multi-Gas-Sensor MiCS-5524 mit Arduino

Fermion MEMS Multi-Gas-Sensor MiCS-5524 mit Arduino

Der Fermion MEMS Multi-Gas Sensor ist ein kompakter Gaskonzentrationssensor, der auf dem MiCS-5524 Gassensor basiert und für die Integration mit Mikrocontrollern wie Arduino und ESP32 entwickelt wurde.

Er verwendet MEMS (Micro-Electro-Mechanical Systems) Sensortechnologie, um mehrere häufige Gase zu erkennen, darunter Kohlenmonoxid (CO), Methan (CH₄), Ethanol (C₂H₅OH), Propan (C₃H₈), Butan (C₄H₁₀), Wasserstoff (H₂), Schwefelwasserstoff (H₂S) und Ammoniak (NH₃).

In diesem Tutorial lernst du, wie du den Fermion MEMS Multi-Gas Sensor an ein Arduino UNO anschließt, um diese Gase zu messen.

Benötigte Teile

Du benötigst einen Fermion Multi-Gas Sensor von DFRobot. Als Mikrocontroller habe ich für dieses Projekt ein Arduino Uno verwendet, aber auch andere Arduino-Modelle oder ESP32 funktionieren problemlos.

Fermion MEMS Multi-Gas Sensor

Arduino

Arduino Uno

USB Data Sync cable Arduino

USB-Kabel für Arduino UNO

Dupont wire set

Dupont-Kabelsatz

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

Das Breakout-Board des Fermion MEMS Multi-Gas Sensors für den MiCS-5524 misst etwa 12 mm x 16 mm und verfügt über eine vierpolige Anschlussfläche für Stromversorgung und Signalleitungen.

Pinout of Fermion MEMS Multi-Gas Sensor MiCS-5524
Pinbelegung des Fermion MEMS Multi-Gas Sensors MiCS-5524

Die Pads sind für eine 5 V Versorgungsspannung, Masse (GND) und die analoge Ausgangsspannung (A0) vorgesehen, die der Gaskonzentration entspricht. Der Enable-Pin (EN) kann verwendet werden, um die interne Stromversorgung des Sensors ein- oder auszuschalten. So lässt sich der Sensor in einen Energiesparmodus versetzen, wenn keine kontinuierliche Messung erforderlich ist.

Das folgende Bild zeigt das Schaltbild des Fermion MEMS Multi-Gas Sensor Breakout-Boards:

Schaltbild des Fermion Multi-Gas Sensors MiCS-5524 (source)

Elektrische und Leistungsmerkmale

Elektrisch ist der SEN0440 für den Betrieb mit einer geregelten 5 V DC Versorgung ausgelegt, mit einer typischen Leistungsaufnahme von etwa 0,45 W.

Obwohl die Logik-Schnittstelle des Sensors eine analoge Spannung im Bereich von 0–5 V ausgibt, ist er kompatibel mit Mikrocontrollern und Entwicklungsboards, deren Eingänge Spannungen von 3,3 V bis 5,5 V tolerieren, wie viele Arduino- und ESP32-Varianten.

Der Hauptausgang ist eine analoge Spannung, die proportional zur Zielgaskonzentration ist. Diese Spannung muss mit einem Analog-Digital-Wandler des Host-Controllers ausgelesen werden, um sie weiterzuverarbeiten oder in ppm-Einheiten umzuwandeln.

Gassensor-Mechanismus und Zielbereich

Im Kern verwendet der SEN0440 den MiCS-5524 MEMS resistiven Gassensor. Dieses Sensorelement enthält eine Metalloxid-Halbleiterschicht, deren Widerstand sich in Gegenwart bestimmter reduzierender Gase ändert.

Das Modul ist kalibriert und abgestimmt, sodass Änderungen dieses Widerstands in eine analoge Ausgangsspannung übersetzt werden, die der Beispielcode in ungefähre Konzentrationen gängiger Gase umwandeln kann.

Der Sensor unterstützt die Erkennung von Kohlenmonoxid (CO) im Bereich von etwa 1 ppm bis 1000 ppm, Wasserstoff (H₂) in einem ähnlichen Bereich, Ethanol (C₂H₅OH) von etwa 10 ppm bis 500 ppm und Ammoniak (NH₃) von etwa 1 ppm bis 500 ppm. Methan (CH₄) und andere leichte Kohlenwasserstoffe wie Propan und Butan werden in Konzentrationen von etwa 3000 ppm bis 15000 ppm erkannt. Die folgende Grafik zeigt die Gassensitivitätscharakteristik des MiCS‑5524 Sensors für die verschiedenen Gase:

Gassensitivitätscharakteristik des MiCS‑5524 Sensors (source)

Sensorleistung und Umgebungsgrenzen

Das Sensorelement im SEN0440 benötigt eine Aufwärmzeit, bevor aussagekräftige Messwerte erzielt werden können.

Das Modul ist für den Betrieb in einem weiten Umgebungstemperaturbereich von etwa −30 °C bis 85 °C spezifiziert und verträgt relative Luftfeuchtigkeitswerte von etwa 5 % bis 95 % ohne Kondensation.

Technische Spezifikation

Die folgende Tabelle fasst die technischen Spezifikationen des Fermion MEMS Multi-Gas Sensors MiCS-5524 zusammen:

Spezifikation Details
Sensormodell MiCS-5524 MEMS Gassensor
Messprinzip Metalloxid-Halbleiter resistive Gaserkennung
Erkannte Gase CO, H₂, C₂H₅OH, NH₃, CH₄, C₃H₈, C₄H₁₀ (Multi-Gas, begrenzte Selektivität)
Gaskonzentrationsbereich CO: ~1 ppm–1000 ppm; H₂: ~1 ppm–1000 ppm; Ethanol: ~10 ppm–500 ppm; NH₃: ~1 ppm–500 ppm; Kohlenwasserstoffe erkennbar bei höheren ppm-Werten
Ausgangstyp Analoge Spannung proportional zur Konzentration
Ausgangsspannungsbereich 0 V–5 V (proportional zum Gaslevel)
Versorgungsspannung 5 V DC nominal
Aufwärmzeit Zehn bis zwanzig Sekunden (typisch für stabile Messwerte)
Betriebstemperatur −30 °C bis +85 °C
Betriebsfeuchtigkeit 5 % bis 95 % relative Luftfeuchtigkeit (ohne Kondensation)
Typischer Stromverbrauch ~0,45 W (bei 5 V)
Schnittstellenkompatibilität 3,3 V–5,5 V Mikrocontroller-Analog-Eingang kompatibel
Lebensdauer >2 Jahre

Hier ist ein Link zum Datenblatt des MiCS-5524 Sensors mit weiteren technischen Daten:

Anschluss des Fermion MEMS Multi-Gas Sensors an Arduino UNO

Der Anschluss des Sensors an ein Arduino UNO ist einfach. Verbinde VCC mit 5V, GND mit Masse, A0 mit dem analogen Eingang A0 und EN mit GPIO 10, wie unten gezeigt:

Connecting Fermion MEMS Multi-Gas Sensor to Arduino
Anschluss des Fermion MEMS Multi-Gas Sensors an Arduino

Installation der DFRobot_MICS Bibliothek

Wir verwenden die DFRobot_MICS Bibliothek zum Auslesen der Daten vom MiCS-5524 Sensor. Lade dazu die DFRobot_MICS Bibliothek als ZIP-Datei (DFRobot_MICS-master.zip) auf deinen Computer herunter.

Öffne dann einen neuen Sketch, gehe zu Sketch -> Include Library -> Add .ZIP Library … und installiere die heruntergeladene ZIP-Bibliothek (DFRobot_MICS-master.zip):

Code zum Auslesen der Gaskonzentrationen

Der folgende Code zeigt, wie man den Fermion MEMS Multi-Gas Sensor MiCS-5524 mit einem Arduino-Board verwendet.

Der Sensor erkennt Gase wie Kohlenmonoxid, Methan, Ethanol, Wasserstoff, Ammoniak und Stickstoffdioxid und gibt deren Konzentrationen in Teilen pro Million (PPM) aus.

Das Programm initialisiert den Sensor, führt eine Aufwärmkalibrierung durch und liest dann kontinuierlich die Gaskonzentrationen aus, die über den seriellen Monitor angezeigt werden.

// 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();
}

Lass uns den Code in seine Hauptbestandteile zerlegen, um zu verstehen, wie er funktioniert.

Imports

Der Code beginnt mit dem Einbinden der DFRobot_MICS.h Bibliothek, die die notwendigen Funktionen und Definitionen für die Schnittstelle mit dem MiCS-5524 Sensor bereitstellt.

#include "DFRobot_MICS.h"

Konstanten

Anschließend werden mehrere Konstanten definiert. CALIBRATION_TIME definiert die Aufwärmzeit des Sensors in Minuten, die für genaue Messwerte wichtig ist. ADC_PIN und POWER_PIN geben den analogen Eingangspin des Arduino an, der mit dem Sensorsignal verbunden ist, sowie den digitalen Pin, der die Stromversorgung des Sensors steuert.

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

Sensorobjekt

Eine Instanz der DFRobot_MICS_ADC Klasse mit dem Namen mics wird erstellt, wobei der ADC-Pin und der Versorgungspin an den Konstruktor übergeben werden. Dieses Objekt verwaltet die Kommunikation mit dem Sensor und steuert dessen Betrieb.

DFRobot_MICS_ADC mics(ADC_PIN, POWER_PIN);

Anzeige-Funktion

Die display() Funktion ist eine Hilfsfunktion, die einen beschreibenden Text und einen Gaskonzentrationswert als Fließkommazahl entgegennimmt. Sie gibt den Text gefolgt vom Wert mit einer Nachkommastelle formatiert aus und hängt die Einheit „PPM“ an den seriellen Monitor an. Diese Funktion vereinfacht die Ausgabeformatierung in der Hauptschleife.

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

Setup-Funktion

In der setup() Funktion wird die serielle Kommunikation mit 115200 Baud initialisiert, um die Daten an den seriellen Monitor zu senden. Das Programm versucht dann, den Sensor durch Aufruf von mics.begin() in einer Schleife zu initialisieren, bis dies gelingt. Falls der Sensor nicht gefunden wird, wird jede Sekunde eine Fehlermeldung ausgegeben.

Nach erfolgreicher Initialisierung wird der Stromzustand des Sensors geprüft. Befindet sich der Sensor im Schlafmodus, wird er mit wakeUpMode() aufgeweckt und eine Bestätigung ausgegeben.

Der Sensor benötigt eine Aufwärmzeit zur Kalibrierung, um genaue Messwerte zu gewährleisten. Der Code gibt eine Meldung aus und wartet, bis die durch CALIBRATION_TIME angegebene Aufwärmzeit in Minuten abgelaufen ist, wobei jede Sekunde ein Punkt zur Fortschrittsanzeige ausgegeben wird. Anschließend wird eine Bestätigung ausgegeben.

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!");
}

Loop-Funktion

Die loop() Funktion läuft nach dem Setup wiederholt. Sie beginnt mit einer Überschrift im seriellen Monitor, die den Beginn der Gaskonzentrationsmessungen anzeigt. Dann wird für jeden vom Sensor unterstützten Gas-Typ die display() Funktion aufgerufen: Kohlenmonoxid (CO), Methan (CH4), Ethanol (C2H5OH), Wasserstoff (H2), Ammoniak (NH3) und Stickstoffdioxid (NO2). Für jedes Gas wird die Konzentration in PPM mit mics.getGasData() und dem entsprechenden Gas-Identifier ausgelesen.

Nach der Ausgabe aller Gaskonzentrationen wartet das Programm eine Sekunde. Du kannst den Sensor mit mics.sleepMode() in den Schlafmodus versetzen, um Energie zu sparen, bis der nächste Messzyklus beginnt.

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();
}

Beispielausgabe

Das folgende Beispiel zeigt die Ausgabe im Serial Monitor. Nach dem Aufwärmen gibt der Code die Gaskonzentrationen für eine erste Messung aus, die alle 0 sind.

Während der zweiten Messperiode habe ich etwas Glasreiniger in die Nähe des Sensors gesprüht, was sich in den erhöhten Werten für Methan und Ammoniak in den Sensordaten zeigt.

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

Fazit

In diesem Tutorial hast du gelernt, wie man den Fermion MEMS Multi-Gas Sensor mit einem Arduino UNO verwendet, um verschiedene Gase zu erkennen. Der Sensor lässt sich auch problemlos mit anderen Mikrocontrollern wie dem ESP32 einsetzen.

Beachte, dass es eine ganze Reihe verschiedener MEMS-Sensoren gibt. Für einen Überblick siehe den Review of the DFRobot Fermion MEMS Gas Sensor Series Artikel und für Details unsere speziellen Beiträge:

Wenn du Fragen hast, kannst du sie gerne im Kommentarbereich stellen.

Viel Spaß beim Tüfteln 😉