Der DFRobot Fermion MEMS Geruchssensor ist ein Gaserkennungsmodul, das für die Verwendung mit Mikrocontroller-Plattformen wie Arduino oder ESP32 entwickelt wurde. Im Kern befindet sich ein GM-512B Sensor, der Mikroelektromechanische Systeme (MEMS) Technologie nutzt, um geruchsrelevante Gase wie Schwefelwasserstoff, Ethanol und Aceton zu erkennen.
In diesem Tutorial lernst du, wie du mit diesem Sensor Gerüche erkennen kannst. Wir bauen ein einfaches Alarmsystem, das eine LED blinken lässt oder einen Summer ertönen lässt, wenn der Geruch zu stark wird.
Benötigte Bauteile
Du benötigst einen Fermion Geruchssensor von DFRobot. Als Mikrocontroller habe ich für dieses Projekt einen Arduino Uno verwendet, aber auch andere Arduinos 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 den gemessenen Geruchswert auf einem Display anzuzeigen.

Fermion MEMS Geruchssensor

Passiver Summer

Widerstands- & LED-Kit

OLED Display

Arduino Uno

USB-Kabel für Arduino UNO

Dupont Kabelsatz

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 Geruchssensors
Der SEN0571 verwendet ein GM-512B MEMS-Geruchssensor-Element, das mit Mikroelektromechanischer Systemtechnik (MEMS) gefertigt ist. Diese MEMS-Architektur integriert Sensorstrukturen im Mikromaßstab, um Größe und Stromverbrauch zu reduzieren.
Das Sensorelement reagiert auf Veränderungen der chemischen Zusammensetzung der Umgebungsluft, indem es seine elektrischen Eigenschaften ändert, die dann in eine analoge Spannungsausgabe umgewandelt werden. Die MEMS-Fertigung ermöglicht eine geringe thermische Masse, sodass der Sensor weniger Strom benötigt und während der Messung nur minimale Wärme erzeugt.
Erkennungseigenschaften
Dieser Sensor kann eine Reihe von geruchsrelevanten Gasen erkennen, darunter Schwefelwasserstoff (H₂S), Ethanol (EtOH) und Aceton, mit einem typischen Erkennungsbereich von etwa 0,5 ppm bis 50 ppm.
Die Ausgabe ist nicht kalibriert für präzise Konzentrationswerte; stattdessen zeigt der Spannungspegel relative Änderungen in der Gaspräsenz an.
Elektrische Schnittstelle
Der SEN0571 arbeitet mit einer Versorgungsspannung von 3,3 V bis 5 V, was ihn kompatibel mit Arduino- und ESP32-Plattformen macht, ohne dass eine Pegelanpassung erforderlich ist.
Der Sensor zieht unter Normalbetrieb weniger als 20 mA Strom, was den durchschnittlichen Energieverbrauch niedrig hält.
Er liefert eine einzelne analoge Spannungsausgabe, die der gemessenen Gaskonzentration entspricht und direkt von den ADC-Pins des Mikrocontrollers gelesen werden kann.
Umweltgrenzen und Lebensdauer
Das Gerät ist für den Betrieb in einem Temperaturbereich von etwa −10 °C bis +50 °C und bei relativer Luftfeuchtigkeit von 15 % bis 90 % (nicht kondensierend) ausgelegt.
Die verwendeten Materialien und das MEMS-Design zielen auf eine lange Lebensdauer von etwa fünf Jahren oder mehr in Luft unter normalen Nutzungs- und Umgebungsbedingungen ab.
Pinbelegung
Physisch bietet das Breakout-Board des Sensors drei Pins zur Verbindung: analoge Ausgabe (A), Versorgungsspannung (VCC) und Masse (GND). Das folgende Bild zeigt die Pinbelegung des Boards:

Schaltpläne
Das folgende Bild zeigt den Schaltplan des Fermion Geruchssensor GM-512B Boards:

Man sieht den Spannungsregler und den GM-512B Sensorchip mit dem Lastwiderstand von 3K am Ausgang VOUT.
Vorbereitung
Der Sensor wird mit einer Schutzfolie geliefert, die entfernt werden muss. Wenn du von oben auf den Sensor schaust, findest du eine gelbe Folie, die die Luftzufuhrlö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):

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, empfiehlt es sich, ihn 24 bis 72 Stunden laufen zu lassen:

Technische Spezifikation
Die folgende Tabelle fasst die technischen Spezifikationen des Fermion Geruchssensors GM-512B zusammen:
| Spezifikation | Wert |
|---|---|
| Sensorelement | MEMS Geruchssensor (GM-512B) |
| Erkennungsziel | Geruchsrelevante Gase (z.B. H₂S, Ethanol, Aceton) |
| Typischer Erkennungsbereich | ~0,5 ppm bis ~50 ppm |
| Ausgabetyp | Analoge Spannung |
| Versorgungsspannung | 3,3 V bis 5 V |
| Betriebsstrom | < 20 mA |
| Betriebstemperatur | −10 °C bis +50 °C |
| Betriebsfeuchtigkeit | 15 % bis 90 % relative Luftfeuchtigkeit (nicht kondensierend) |
| Ansprechverhalten | Relative Änderung von Widerstand/Spannung |
| Physikalische Größe (Sensorelement) | ~13 mm × 13 mm × 2,5 mm |
| Typische Lebensdauer | ~5 Jahre in Luft bei normaler Nutzung |
Hier ist ein Link zum Datenblatt des GM-512B Sensors mit weiteren technischen Daten:
Anschluss des Geruchssensors an Arduino UNO
Der Anschluss des Sensors an einen Arduino UNO ist einfach. Verbinde VCC mit 5V (oder 3,3V), GND mit Masse und A mit dem analogen Eingang A0, wie unten gezeigt:

Code-Beispiele
Geruchskonzentration 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 Geruchsmenge in der Umgebung.
Wenn der Sensor noch nicht vollständig aufgewärmt ist, siehst du im Serial Monitor eine kontinuierlich abnehmende Wertefolge. Siehe unten:

Nach einigen Minuten stabilisieren sich die Messwerte. In meinem Fall bei etwa 300. Wenn du dann auf den Sensor atmest, siehst du einen plötzlichen Anstieg des Messwerts:

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 nutzen, um einen Geruchsalarm zu bauen, was wir im nächsten Abschnitt tun werden.
Geruchsalarm mit LED
Der folgende Code implementiert einen einfachen Geruchsalarm. Er schaltet eine LED ein, wenn der gemessene Geruchswert einen vordefinierten Schwellenwert von 320 überschreitet:
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);
}
Ich habe die LED mit einem 220-Ohm-Widerstand an GPIO 13 als Alarm-LED angeschlossen, wie unten gezeigt:

Für ein zuverlässiges Alarmsystem solltest du eventuell auch einen Temperatur- und Feuchtigkeitssensor hinzufügen, da die Messwerte des Sensors von Temperatur und Feuchtigkeit beeinflusst werden. Alternativ kannst du auch ein gleitendes Fenster verwenden, um die langsame Sensorabweichung durch Temperatur und Feuchtigkeit zu kompensieren.
Geruchsalarm 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 Geruchskonzentration den Schwellenwert überschreitet:
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);
}
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):

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 Geruchskonzentration auf OLED
Im letzten Beispiel zeigen wir die gemessenen Rauchkonzentrationswerte auf einem kleinen OLED an. Der Code gibt „Odor“ 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("Odor");
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:

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 Masse. Das folgende Bild zeigt die komplette Verkabelung:

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 Geruchssensor mit einem Arduino UNO verwendet, um Rauch zu erkennen. Der Sensor kann auch problemlos mit anderen Mikrocontrollern wie dem ESP32 verwendet werden.
MEMS-Gassensoren haben den Vorteil, klein zu sein, sehr wenig Strom zu verbrauchen (< 20 mA) und eine kurze Aufwärmzeit zu haben. Allerdings werden sie weiterhin von Umgebungstemperatur und Luftfeuchtigkeit beeinflusst.
Außerdem ist der Fermion Geruchssensor nicht kalibriert und kann daher nicht direkt zur Messung tatsächlicher Konzentrationen in ppm-Einheiten verwendet werden.
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:
- Fermion MEMS VOC Gas Sensor GM-502B with Arduino
- Fermion MEMS Smoke Sensor GM-202B with Arduino
- Fermion MEMS Carbon Monoxide CO Gas Sensor GM-702B with Arduino
- Fermion MEMS Multi-Gas Sensor MiCS-5524 with Arduino
Wenn du Fragen hast, kannst du sie gerne im Kommentarbereich stellen.
Viel Spaß beim Tüfteln 😉

