Skip to Content

Fermion MEMS Geruchssensor GM-512B mit Arduino

Fermion MEMS Geruchssensor GM-512B mit Arduino

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

OLED Display

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

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

Schaltpläne

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

Schematics of Fermion Odor Sensor GM-512B
Schaltplan des Fermion Geruchssensors GM-512B (source)

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

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

Preheating times for GM-502B VOC Sensor
Aufwärmzeiten für GM-512B Geruchssensor (source)

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:

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

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:

Anschluss der Alarm-LED an Arduino UNO

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

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

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 Masse. Das folgende Bild 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 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:

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

Viel Spaß beim Tüfteln 😉