Skip to Content

Fermion MEMS Rauchmelder GM-202B mit Arduino

Fermion MEMS Rauchmelder GM-202B mit Arduino

Der Fermion Smoke Sensor von DFRobot ist ein kompaktes Breakout-Board rund um den GM-202B Sensor, das für die Integration mit Mikrocontroller-Plattformen wie Arduino und ESP32 entwickelt wurde.

Er verwendet Mikroelektromechanische Systeme (MEMS) Technologie, um eine hohe Empfindlichkeit gegenüber Rauch und Ethanol im Bereich von 10-1000 ppm zu bieten. Der Sensor hat einen niedrigen Stromverbrauch (<20mA), eine schnelle Reaktionszeit und erzeugt im Vergleich zu herkömmlichen Gassensoren nur minimale Wärme.

In diesem Tutorial lernst du, wie man Rauch mit dem Sensor erkennt. Wir bauen ein einfaches Alarmsystem, das eine LED blinken lässt oder einen Summer ertönen lässt, wenn die Rauchkonzentration zu hoch wird.

Benötigte Teile

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

Für unser Alarmsystem brauchen wir außerdem eine LED und einen Summer, die du bei Amazon bekommst. Außerdem verwenden wir ein kleines SSD1306 OLED, um die gemessenen Rauchkonzentrationen auf einem Display anzuzeigen.

Fermion MEMS Geruchssensor

Passiver Summer

Widerstands- & LED-Kit

OLED display

OLED Display

Arduino

Arduino Uno

USB Data Sync cable Arduino

USB-Kabel für Arduino UNO

Dupont wire set

Dupont-Kabelset

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 Smoke Sensors

Der Fermion Smoke Sensor von DFRobot ist ein kompaktes Gassensor-Board, das zur Raucherkennung (oder Alkoholerkennung) entwickelt wurde.

Er basiert auf dem GM-202B Chip, der Mikroelektromechanische Systeme (MEMS) Technologie nutzt, um eine kleine Bauform mit niedrigem Stromverbrauch und schneller Reaktionszeit zu erreichen.

Das Breakout misst etwa 13 mm mal 13 mm bei einer Dicke von ca. 2,5 mm. Das Bild unten zeigt das Breakout-Board mit dem GM-202B Sensor oben und einem Spannungsregler darunter:

Fermion Smoke Sensor Board with GM-202B
Fermion Smoke Sensor Board mit GM-202B

Das Modul ist für die qualitative Erkennung von Rauchkonzentrationen gedacht und nicht für präzise quantitative Analysen. Beachte, dass DFRobot auch kalibrierte Sensoren anbietet, die jedoch größer und teurer sind (link).

Elektrische Eigenschaften und Ausgang

Der Sensor arbeitet mit einer Versorgungsspannung von 3,3 V bis 5 V, was den Logikpegeln der meisten Arduino- und ESP32-Boards entspricht. Im Betrieb zieht das Gerät weniger als 20 mA Strom und erzeugt aufgrund seines MEMS-Designs nur sehr geringe Eigenwärme.

Die Gaskonzentration wird durch eine analoge Spannung am Ausgang dargestellt, die proportional zur Menge des in der Umgebungsluft erkannten Rauchs variiert. Die Ausgangsspannung liegt im Bereich von 0 bis VCC.

Erfassungsbereich und Empfindlichkeit

Der Sensor kann gängige flüchtige organische Verbindungen (VOCs) wie Ethanol oder Verbrennungsprodukte wie Rauch im Bereich von 10 ppm bis 1000 ppm erkennen. Die Empfindlichkeit wird durch das Verhältnis des Widerstands in sauberer Luft (R0) zum Widerstand bei bekannter Konzentration (Rs) quantifiziert. Wie bereits erwähnt, ist der Ausgang des Sensors jedoch kein kalibrierter Konzentrationswert.

Umwelt- und Lebensdauer-Spezifikationen

Das Sensorelement ist für den Betrieb in einem Umgebungstemperaturbereich von etwa -10 °C bis +50 °C und einer relativen Luftfeuchtigkeit von 15 % bis 90 % (nicht kondensierend) ausgelegt. Der Hersteller gibt eine Lebensdauer von mindestens fünf Jahren an, wenn der Sensor unter normalen atmosphärischen Bedingungen ohne übermäßige Verschmutzung verwendet wird.

Da Sensoren auf eine breite Klasse organischer Gase reagieren, können Umweltfaktoren wie Feuchtigkeit, Temperatur und das Vorhandensein anderer Gase den Ausgang ebenfalls beeinflussen.

Pinbelegung

Physisch bietet das Breakout drei Pins zur Verbindung: analoge Ausgabe (A), Versorgungsspannung (VCC) und Masse (GND). Das Bild unten zeigt die Pinbelegung des Boards:

Pinout of Fermion Smoke Sensor GM-202B Board
Pinbelegung des Fermion Smoke Sensor GM-202B Boards

Schaltplan

Das folgende Bild zeigt den Schaltplan des Fermion Smoke Sensor GM-202B Boards:

Schematics of Fermion Smoke Sensor GM-202B
Schaltplan des Fermion Smoke Sensor GM-202B (source)

Man sieht den Spannungsregler und den GM-202B Sensorchip mit dem Lastwiderstand von 4,7 kΩ am Ausgang VOUT.

Vorbereitung

Der Sensor wird mit einer Schutzfolie geliefert, die entfernt werden muss. Wenn du auf die Oberseite des Sensors schaust, findest du eine gelbe Folie, die die Lufteinlasslöcher abdeckt. Verwende eine Pinzette, um die Folie abzuziehen. Die Fotos unten zeigen den Sensor mit Schutzfolie, halb entfernt und vollständig entfernt (von links nach rechts):

Abziehen der Schutzfolie

Beachte, dass der Sensor eine Aufwärmzeit benötigt, um betriebsstabil zu werden. Dies kann bei der ersten Nutzung mehrere Minuten dauern, bis die Messwerte stabil sind. Wenn du den Sensor längere Zeit nicht benutzt hast, wird empfohlen, ihn 48 bis 168 Stunden laufen zu lassen:

Preheating times for GM-202B Smoke sensor
Einbrennzeiten für GM-202B Rauchsensor (source)

Technische Spezifikationen

Die folgende Tabelle fasst die technischen Spezifikationen des Fermion Smoke Sensor GM-202B zusammen:

Spezifikation Wert
Sensortyp MEMS Rauchdetektionssensor
Erkannte Gase Rauch (reagiert auch auf EtOH)
Erfassungsbereich 10 – 1000 ppm
Versorgungsspannung 3,3 V – 5 V
Betriebsstrom <20 mA
Ausgangssignal Analoge Spannung
Lastwiderstand (RL) 4,7 kΩ
Empfindlichkeit R₀ (in Luft) / Rₛ (bei 200 ppm EtOH) ≥ 3
Betriebstemperatur −10 °C bis +50 °C
Betriebsfeuchtigkeit 15 – 90 % RH (nicht kondensierend)
Lebensdauer ≥ 5 Jahre (in Luft)
Abmessungen 13 × 13 × 2,5 mm

Hier ist ein Link zum Datenblatt des GM-202B Sensors mit weiteren technischen Daten:

Fermion GM-202B Sensor versus MQ-2 Sensor

Eine gängige Alternative zum Fermion GM-202B Smoke Sensor ist der ältere MQ-2 Gas Sensor. Im Folgenden ein kurzer Vergleich der beiden Sensoren.

Sensortechnologie und Erkennungsmechanismus

Der GM-202B Sensor verwendet MEMS Metalloxid-Halbleiter-Technologie, bei der eine mikrostrukturierte Heizplatte und eine gasempfindliche Metalloxid-Schicht den Widerstand als Reaktion auf VOCs und Rauch mit niedrigem Stromverbrauch und schneller thermischer Reaktion ändern. Die MEMS-Fertigung führt zu einem kompakten Sensorelement, das schnell Betriebstemperatur erreicht und vergleichsweise wenig Heizleistung benötigt.

Im Gegensatz dazu verwendet der MQ-2 ein massives Halbleiter-Gassensorelement (SnO₂) in einem größeren Metall- oder Bakelitgehäuse. Er erkennt brennbare Gase und Rauch durch eine Widerstandsänderung seines Sensormaterials beim Erhitzen, benötigt aber eine höhere Heizleistung und längere Vorheizzeit.

Betriebsbereich und Empfindlichkeit

Der Erfassungsbereich des GM-202B liegt typischerweise bei 10–1000 ppm für Gase wie Propan oder Ethanoldampf und Rauch, was eine handhabbare Empfindlichkeit für die Erkennung niedriger Rauchkonzentrationen in Luftqualitäts- oder Alarmanwendungen bietet. Die Empfindlichkeit wird oft als Widerstandsverhältnis R₀/Rₛ ≥ 3 bei 200 ppm Testgas angegeben.

Im Vergleich dazu hat der MQ-2 einen viel größeren Erfassungsbereich für brennbare Gase (≈300–10000 ppm) und einen höheren Empfindlichkeitsmaßstab (R₀/Rₛ ≥ 5 bei 2000 ppm Propan), was zeigt, dass er für die breitere Gaserkennung einschließlich brennbarer Gaslecks ausgelegt ist, nicht nur für kleine Rauchkonzentrationen.

Elektrische Anforderungen und Heizeigenschaften

Ein wesentlicher praktischer Unterschied liegt im Stromverbrauch. Der Heizer des GM-202B läuft bei etwa 2,5 V mit ≤50 mW Verbrauch, was hilft, die Gesamtleistung des Moduls niedrig zu halten und ein schnelles Aufwärmen zu ermöglichen.

Der Heizer des MQ-2 läuft bei etwa 5 V mit bis zu ≈950 mW Verbrauch, was deutlich mehr Leistung erfordert und eine lange Aufwärmzeit (oft mehrere Minuten bis Stunden) vor stabilen Messwerten nötig macht.

Schaltungsintegration und Ausgang

Beide Sensoren liefern einen analogen Ausgang proportional zur Gaskonzentration über einen Spannungsteiler mit einem Lastwiderstand.

Das GM-202B Modul verwendet typischerweise einen kleineren Lastwiderstand (≈4,7 kΩ auf integrierten Breakout-Boards) und kann direkt mit Niederspannungs-ADC-Eingängen von Mikrocontrollern wie Arduino oder ESP32 bei 3,3–5 V Logikpegeln verbunden werden.

Die MQ-2 Module enthalten häufig einen Potentiometer und Komparator auf dem Breakout-Board für digitale Schwellenausgänge, aber bei Verwendung mit ADC-Eingängen kann der Lastwiderstand ≈10 kΩ oder mehr betragen. Der MQ-2 ist Teil eines einfachen Spannungsteilers, der kalibriert und oft zusätzlich verstärkt werden muss, um genaue Messwerte zu erhalten.

Physikalische Größe und Lebensdauer

Physisch ist das MEMS GM-202B Element viel kleiner (≈5 × 5 × 1,55 mm beim nackten Sensor und ~13 × 13 × 2,5 mm auf dem Breakout) mit niedrigerem Gesamtstromverbrauch und generell langer Lebensdauer in sauberer Luft (≥5 Jahre auf Breakout-Modulen).

Der MQ-2 Sensor kann aufgrund seiner konventionellen Verpackung und Heizungsbaugruppe größer sein, und obwohl er ebenfalls eine lange nominale Lebensdauer hat, machen sein hoher Heizenergiebedarf und die massivere Bauweise ihn weniger geeignet für stromsparende Embedded-Designs.

Anwendungsbereich

Aufgrund seines niedrigen Stromverbrauchs und kleineren Erfassungsbereichs ist der GM-202B besser geeignet für Rauchdetektion und VOC-Überwachung, wo kleine Konzentrationen relevant sind und die Leistung begrenzt ist (z.B. batteriebetriebene Mikrocontroller-Projekte).

Der MQ-2 eignet sich besser zur Erkennung brennbarer Gase und in Umgebungen, in denen ein breiter Erfassungsbereich und Robustheit gegenüber verschiedenen Gasarten wichtig sind (z.B. LPG-Lecks, Werkstatt-Gasalarm), allerdings auf Kosten von höherem Stromverbrauch und langer Vorheizzeit.

In beiden Fällen liefert keiner der Sensoren eine absolute Gaskonzentration ohne Kalibrierung. Beide geben relative Änderungen aus, die für jede Zielanwendung gegen eine Basislinie interpretiert werden müssen.

Anschluss des Rauchmelders an Arduino UNO

Der Anschluss des Sensors an ein Arduino UNO ist einfach. Verbinde VCC mit 5V (oder 3,3V), GND mit Masse und A mit dem analogen Eingang A0, wie unten gezeigt:

Connecting Smoke Sensor to Arduino UNO
Anschluss des Rauchmelders an Arduino UNO

Code-Beispiele

Rauchkonzentration auslesen

Im ersten Beispiel lesen wir einfach die vom Sensor gemessenen Werte aus und geben sie jede Sekunde im Serial Monitor aus:

void setup() {
  Serial.begin(9600);
}

void loop() {
  int val = analogRead(A0);
  Serial.println(val);
  delay(1000);
}

Du wirst Werte zwischen 0 und 1023 sehen, abhängig von der Menge des Rauchs in der Umgebung.

Wenn der Sensor noch nicht vollständig aufgewärmt ist, siehst du eine kontinuierlich abnehmende Wertefolge im Serial Monitor. Nach einigen Minuten stabilisieren sich die Messwerte. Bei mir lag der Wert bei etwa 135.

Wenn du den Sensor dann Rauch (oder Alkohol) aussetzt, wirst du einen plötzlichen Anstieg des Messwerts sehen:

Da der Sensor nicht kalibriert ist, kannst du ihn nicht verwenden, um tatsächliche ppm (Teile pro Million) oder mg/m 3 Konzentrationen zu messen. Du kannst ihn jedoch verwenden, um einen Rauchmelder zu bauen, was wir im nächsten Abschnitt tun werden.

Rauchmelder mit LED

Der folgende Code implementiert einen einfachen Rauchmelder. Er schaltet eine LED ein, wenn der gemessene Rauchwert einen vordefinierten Schwellenwert von 140 überschreitet:

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

Ich habe die LED mit einem 220-Ohm-Widerstand an GPIO 13 als Alarm-LED angeschlossen, wie unten gezeigt:

Anschluss der Alarm-LED an Arduino UNO

Beachte, dass du für ein zuverlässiges Alarmsystem eventuell auch einen Temperatur- und Feuchtigkeitssensor hinzufügen möchtest, da die Messwerte des Sensors von Temperatur und Feuchtigkeit beeinflusst werden. Die folgende Abbildung zeigt die Abhängigkeit des Sensorwiderstands, der proportional zur vom Arduino gelesenen Spannung ist, von der relativen Luftfeuchtigkeit:

Typische Temperatur-/Feuchtigkeitscharakteristik (source)

Rauchmelder mit passivem Summer

Statt einer LED kannst du auch einen Summer als Alarmsignal verwenden. Im folgenden Code wird ein passiver Summer aktiviert, wenn die gemessene Rauchkonzentration den Schwellenwert überschreitet:

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

Das folgende Bild zeigt, wie du den Summer an die Schaltung anschließt. Verbinde zuerst den Minuspol des Summers mit GND des Arduino (schwarzes Kabel). Dann verbinde den Pluspol über einen 100Ω Widerstand mit GPIO 11 (rotes Kabel):

Connecting alarm buzzer to Arduino UNO
Anschluss des Alarm-Summers an Arduino UNO

Achte darauf, dass die Polarität des Summers korrekt ist und dass es sich um einen passiven Summer handelt, der an einen PWM-fähigen GPIO-Port angeschlossen wird. Weitere Informationen findest du im Active and Passive Piezo Buzzers with Arduino Tutorial.

Wenn du einen aktiven Summer hast, musst du den vorherigen LED-Alarm-Code verwenden, da dieser mit dem tone()-Befehl nicht richtig funktioniert.

Anzeige der Rauchkonzentration auf OLED

Im letzten Beispiel zeigen wir die gemessenen Rauchkonzentrationswerte auf einem kleinen OLED an. Der Code gibt „Smoke“ und den Wert in der Mitte des Displays aus und aktualisiert den angezeigten Wert alle 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);
}

Beachte, dass du die Adafruit_SSD1306 Bibliothek benötigst, um das OLED zu steuern. Du kannst sie wie gewohnt über den Library Manager installieren:

Adafruit_SSD1306 library installed in Library Manager
Adafruit_SSD1306 Bibliothek im Library Manager installiert

Der Anschluss des OLED an den Arduino ist einfach. Verbinde SDA und SCL des OLED mit den Pins A4 und A5 des Arduino. Für die Stromversorgung: Da das OLED mit 5V betrieben werden kann, können wir die Stromversorgungsleitungen teilen. Verbinde VCC mit 5V und GND mit GND. Das Bild unten zeigt die komplette Verkabelung:

Connecting OLED and Sensor to Arduino UNO
Anschluss von OLED und Sensor an Arduino UNO

Wenn du Hilfe mit dem OLED brauchst, schau dir das Use SSD1306 I2C OLED Display With Arduino Tutorial an.

Fazit

In diesem Tutorial hast du gelernt, wie man den Fermion Smoke Sensor mit einem Arduino UNO zur Raucherkennung verwendet. Der Sensor lässt sich auch leicht mit anderen Mikrocontrollern wie dem ESP32 nutzen.

MEMS-Gassensoren haben den Vorteil, klein zu sein, sehr wenig Strom zu verbrauchen (< 20mA) und eine kurze Aufwärmzeit zu haben. Sie sind jedoch weiterhin von Umgebungstemperatur und Luftfeuchtigkeit beeinflusst.

Außerdem ist der Fermion Smoke Sensor nicht kalibriert und kann daher nicht direkt zur Messung tatsächlicher Konzentrationen in ppm-Einheiten verwendet werden. Theoretisch könntest du den Sensor selbst kalibrieren, aber praktisch ist das schwierig. DFRobot bietet auch kalibrierte Sensoren an, die jedoch größer und teurer sind (link).

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 😉