Skip to Content

HCHO Sensor SFA40 mit Arduino

HCHO Sensor SFA40 mit Arduino

Der SFA40 Formaldehyd (HCHO) Sensor von DFRobot ist ein kompaktes Gassensormodul, das zur Messung der Formaldehydkonzentration in der Luft entwickelt wurde.

Der Sensor basiert auf dem Sensirion SFA40 Chip und liefert präzise Messwerte im Bereich von 0 bis 1000 ppb. Die SFA40 Sensortechnologie ist auf geringe Kreuzempfindlichkeit ausgelegt. Dadurch lösen übliche Haushaltsstoffe wie Alkohol, Parfüm oder Zitrusdämpfe seltener Fehlmessungen aus.

Das Modul integriert zudem eine Umweltkompensation über einen integrierten Temperatur- und Feuchtigkeitssensor, was stabile und genaue Messungen unter wechselnden Umweltbedingungen gewährleistet.

Das Sensorboard kommuniziert über eine I²C-Schnittstelle mit Mikrocontrollern, was eine einfache Integration mit Plattformen wie Arduino, ESP32 oder Raspberry Pi ermöglicht.

In diesem Tutorial lernst du, wie du den SFA40 Sensor an ein Arduino UNO anschließt und wie du Daten vom Sensor ausliest.

Benötigte Teile

Du benötigst einen Gravity: SFA40 Formaldehyd (HCHO) Sensor von DFRobot. Als Mikrocontroller habe ich für dieses Projekt ein Arduino UNO verwendet, aber auch andere Arduino-Boards oder ESP32 funktionieren ebenso.

Gravity: SFA40 Formaldehyd (HCHO) 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 SFA40 HCHO Sensors

Das Sensormodul basiert auf dem Sensirion SFA40 Formaldehyd-Sensorelement. Dieses Element nutzt elektrochemische Sensortechnologie, um Formaldehydmoleküle in der Umgebungsluft zu erkennen.

Bei einem elektrochemischen Gassensor findet an einer Elektrode eine chemische Reaktion statt, wenn das Zielgas vorhanden ist. Diese Reaktion erzeugt ein kleines elektrisches Signal, das proportional zur Gaskonzentration ist. Die Sensorelektronik wandelt dieses Signal in einen digitalen Messwert um.

Das Sensorsystem ist speziell für Formaldehyd (HCHO) optimiert. Die interne Chemie und Filterstrukturen sind so ausgelegt, dass Reaktionen mit anderen flüchtigen organischen Verbindungen minimiert werden. Diese hohe Selektivität ermöglicht es dem Sensor, Formaldehyd von vielen häufigen Störgasen zu unterscheiden.

Der Sensor liefert einen vollständig kalibrierten Ausgang. Die Kalibrierung erfolgt während der Herstellung und ist im Gerät gespeichert. Der Anwender muss im Normalbetrieb keine zusätzliche Kalibrierung durchführen.

Messbereich und Genauigkeit

Der SFA40 Sensor misst Formaldehydkonzentrationen im Bereich von 0 bis 1000 parts per billion (ppb). Dieser Bereich deckt typische Innenraumkonzentrationen sowie erhöhte Werte ab, die in schlecht belüfteten Räumen oder in Räumen mit neuen Möbeln und Baumaterialien auftreten können.

Der Ausgangswert wird direkt in parts per billion angegeben. Das vereinfacht die Datenverarbeitung auf Mikrocontrollern, da keine zusätzliche Umrechnung oder Skalierung erforderlich ist.

Elektrische Eigenschaften

Das Sensorelement selbst arbeitet mit einer Versorgungsspannung zwischen 1,62 V und 3,6 V. Das Gravity Sensormodul enthält zusätzliche Schaltungen, die den Betrieb mit 3,3 V oder 5 V Versorgungsspannung bei Anschluss an Mikrocontroller-Plattformen ermöglichen.

Der Stromverbrauch ist für den Dauerbetrieb optimiert. Der durchschnittliche Stromverbrauch liegt bei etwa 80 µA im Messmodus mit einer Abtastrate von ca. 2 Hz. Der Spitzenstrom kann während der Messzyklen bis zu 2 mA erreichen.

Physikalisches Design und Modul-Integration

Das SFA40 Sensorelement selbst hat ein sehr kompaktes Gehäuse mit ca. 13 mm × 10 mm × 2,4 mm. Das Gravity SEN0661 Modul integriert dieses Sensorelement auf einer größeren Breakout-Platine. Die Platine misst ca. 32 mm × 22 mm und enthält die erforderliche Spannungsregelung sowie Schnittstellenelektronik für Mikrocontroller-Plattformen.

Das Modul bietet außerdem einen standardisierten Gravity 4-Pin-Anschluss, der die Verkabelung vereinfacht und einen Plug-and-Play-Anschluss an Entwicklungsboards ermöglicht. Die Pinbelegung des Anschlusses findest du unten:

Pinout of Gravity SFA40 Sensor Board
Pinbelegung des Gravity SFA40 Sensorboards

Der Sensor verfügt über eine schützende Belüftungsmembran am Sensorkammer. Diese Membran erlaubt die Gasdiffusion und schützt gleichzeitig die internen Sensorelemente vor Staub und Verunreinigungen. Entferne diese Membran nicht und setze sie nicht organischen Lösungsmitteln aus!

Schutzmembran des SFA40 Sensors

Umgebungsbetriebsbedingungen

Das Modul ist für den Betrieb unter einem weiten Spektrum von Umweltbedingungen ausgelegt. Der unterstützte Betriebstemperaturbereich reicht von −40 °C bis +125 °C. Der Sensor kann bei relativer Luftfeuchtigkeit von 0 % bis 100 % betrieben werden, solange keine Kondensation auftritt. Das Sensorelement enthält interne Algorithmen zur Temperaturkompensation.

Technische Spezifikationen

Die folgende Tabelle fasst die technischen Spezifikationen des SFA40 Formaldehyd (HCHO) Sensors zusammen:

Parameter Spezifikation
Sensortyp Elektrochemischer Formaldehyd (HCHO) Sensor
Sensorelement Sensirion SFA40
Messbereich 0 bis 1000 ppb (parts per billion)
Nachweisgrenze < 20 ppb (typisch)
Genauigkeit ±20 ppb oder ±20 % des Messwerts (typisch)
Kreuzempfindlichkeit gegenüber Ethanol < 0,3 %
Schnittstelle I²C digitale Schnittstelle
I²C Adresse 0x5D
Betriebsspannung (Sensor) 1,62 V – 3,6 V
Betriebsspannung (Modul) 3,3 V – 5 V
Durchschnittlicher Stromverbrauch ~80 µA
Spitzenstrom Bis zu ~2 mA während der Messung
Messaktualisierungsrate Bis zu ~2 Messungen pro Sekunde
Betriebstemperatur −40 °C bis +125 °C
Betriebsfeuchtigkeit 0 % – 100 % relative Luftfeuchtigkeit (ohne Kondensation)
Modulabmessungen ~32 mm × 22 mm
Sensorgehäusegröße ~13 mm × 10 mm × 2,4 mm
Ausgabeeinheit Formaldehydkonzentration in ppb
Kalibrierung Werkskalibriert

Installation der DFRobot_SFA40 Bibliothek

Wir verwenden die DFRobot_SFA40 Bibliothek zum Auslesen der Daten vom SFA40 Sensor. Um sie zu installieren, gehe zum github repo der Bibliothek, klicke auf den grünen „<> Code“ Button und dann auf „Download ZIP“, wie unten gezeigt:

Dadurch wird die DFRobot_SFA40 Bibliothek als ZIP-Datei (DFRobot_SFA40-master.zip) auf deinen Computer heruntergeladen.

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

Anschluss des SFA40 Sensors an Arduino UNO

Der SFA40 Sensor verwendet die I2C-Schnittstelle zur Kommunikation und ist einfach anzuschließen. Verbinde zuerst VCC mit 5V und GND mit Masse. Dann verbinde einfach die I2C-Schnittstelle: SDA zu SDA und SCL zu SCL, wie unten gezeigt:

Connecting SFA40 Sensor to Arduino UNO
Anschluss des SFA40 Sensors an Arduino UNO

Code zum Auslesen der Daten vom SFA40 Sensor

Der folgende Code zeigt, wie man den SFA40 Sensor mit einem Arduino-Board verbindet. Der Sensor misst Temperatur, Luftfeuchtigkeit und Formaldehydkonzentration in parts per billion (ppb). Die Messwerte werden jede Sekunde im Serial Monitor ausgegeben.

// https://github.com/DFRobot/DFRobot_SFA40  V 1.0.3
// www.makerguides.com

#include "DFRobot_SFA40.h"

DFRobot_SFA40 SFA40;

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

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

  while (SFA40.begin() != 0) {
    Serial.println("Could not find sensor!");
    delay(1000);
  }

  SFA40.startMeasurement();
}

void loop() {
  uint8_t status = SFA40.readMeasurementData();

  if (status == 0) {
    Serial.println("\n----------------------------");
    display("Temperature: ", SFA40.temperatureC, "C");
    display("Temperature: ", SFA40.temperatureF, "F");
    display("Humidity   : ", SFA40.humidity, "%RH");
    display("HOCO       : ", SFA40.HCHO, "ppb");
  } 

  delay(1000);
}

Importe

Zu Beginn bindet der Code die Bibliothek für den SFA40 Sensor ein. Diese Bibliothek enthält alle notwendigen Funktionen, um mit dem Sensor zu kommunizieren und Messdaten abzurufen.

#include "DFRobot_SFA40.h"

Objektinitialisierung

Als nächstes wird ein Objekt namens SFA40 der Klasse DFRobot_SFA40 erstellt. Dieses Objekt wird im Programm verwendet, um mit dem Sensor zu interagieren.

DFRobot_SFA40 SFA40;

Anzeige-Funktion

Die display() Funktion ist eine Hilfsfunktion, die Sensordaten formatiert im Serial Monitor ausgibt. Sie nimmt drei Parameter: ein Textlabel, einen Fließkommawert und eine Einheit als String. Der Wert wird mit einer Nachkommastelle ausgegeben.

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

Setup-Funktion

Die setup() Funktion initialisiert die serielle Kommunikation mit 115200 Baud, um Daten an den Serial Monitor zu senden. Anschließend versucht sie, den Sensor mit SFA40.begin() zu initialisieren. Wird der Sensor nicht gefunden, wird jede Sekunde eine Fehlermeldung ausgegeben, bis der Sensor erkannt wird. Nach erfolgreicher Initialisierung startet der Sensor den kontinuierlichen Messmodus mit SFA40.startMeasurement().

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

  while (SFA40.begin() != 0) {
    Serial.println("Could not find sensor!");
    delay(1000);
  }

  SFA40.startMeasurement();
}

Loop-Funktion

Innerhalb der loop() Funktion liest der Code die neuesten Messdaten vom Sensor mit SFA40.readMeasurementData() aus. Diese Funktion gibt einen Statuscode zurück, wobei 0 für einen erfolgreichen Lesevorgang steht. Ist das Auslesen erfolgreich, gibt das Programm eine Trennlinie aus und verwendet die display() Funktion, um Temperatur in Celsius und Fahrenheit, relative Luftfeuchtigkeit sowie Formaldehydkonzentration (HCHO) in parts per billion auszugeben. Anschließend wartet das Programm 1 Sekunde, bevor der Vorgang wiederholt wird.

void loop() {
  uint8_t status = SFA40.readMeasurementData();

  if (status == 0) {
    Serial.println("\n----------------------------");
    display("Temperature: ", SFA40.temperatureC, "C");
    display("Temperature: ", SFA40.temperatureF, "F");
    display("Humidity   : ", SFA40.humidity, "%RH");
    display("HOCO       : ", SFA40.HCHO, "ppb");
  } 

  delay(1000);
}

Beispielausgabe

Das folgende Beispiel zeigt die Ausgabe im Serial Monitor:

----------------------------
Temperature: 22.1 C
Temperature: 71.8 F
Humidity   : 43.2 %RH
HOCO       : 39.0 ppb

Fazit

In diesem Tutorial hast du gelernt, wie man den SFA40 Formaldehyd (HCHO) Sensor mit einem Arduino UNO verwendet. Der Sensor lässt sich auch problemlos mit anderen Mikrocontrollern wie dem ESP32 nutzen.

Wenn du nach anderen Gassensoren suchst, schau dir die folgenden Beiträge an:

Bei Fragen kannst du sie gerne im Kommentarbereich stellen.

Viel Spaß beim Tüfteln 😉