Sensor Bosch BME680 als Thermometer, Barometer, Hygrometer und VOC-Meter nutzen und über den I2C-Bus auslesen


Bosch Sensortec hat ja inzwischen eine ganze Reihe von Sensoren herausgebracht. Für den Maker dürften besonders interessant sein: Wobei der BME680 nicht so günstig ist, wie die beiden anderen Kandidaten, dafür aber auch einen VOC-Wert liefert. VOC steht für "Volatile Organic Compounds" bzw. auf deutsch "flüchtige organische Verbindungen". Was bei einer Größe von ca. 3 x 3 mm schon beachtlich ist.

Denn eigentlich kenne ich Gas-Sensoren eher in der Größe von 10 übereinander gestapelten 5 Euro Cent-Stücken. Ich habe einen Artikel zu diesen Gas-Sensoren geschrieben: Alkomat: LCD auf Prototype Shield und Ausgabe von Gassensor-Messdaten.

Der MQ-135 erkennt eher Stickoxide, Kohlendioxid, Ammoniak, Benzin, Alkohol und Rauch, sollte sich also gut für die Messung von Luft-Belastungen an Straßen durch PKW und LKW Verkehr eignen.

Der MQ-3 erkennt dafür besser Ethanol und die Gase des MQ-135 schlechter. Er ist prädestiniert für eine Atem-Alkohol-Messung.

Da diese Gas-Sensoren nur einen Wert liefern - genauso wie auch der BME680 - ist eine Abgrenzung wichtig. Den einen Sensor nimmt man für Lösungsmittel und Kohlendioxid und den anderen für Ethanol.

Technische Daten des BME680

Das Datenblatt nennt "Indoor air quality", also "Innenraum-Luftgüte" als Anwendung. Natürlich neben dem, was der BME280 schon kann: Messung von Luftdruck und Luftfeuchtigkeit. Und das ziemlich genau, denn es wird noch einmal die Temperatur im Sensorgehäuse zur Kalibrierung dieser Werte gemessen und herangezogen. Da der Sensor zur Messung aufgeheizt wird, liegen die mit einem BMP280, BME280 oder BME680 Temperaturen immer daneben, im Mittel ca. 2 °C über der Umgebungstemperatur.

Angesprochen werden kann der BME680 über SPI oder I2C, wobei I2C den einfacheren Zugriff bietet, SPI aber schneller ist. Ich werde I2C benutzen. Die I2C-Adresse des BMP280, des BME280 und des BME680 ist dabei immer die gleiche: 0x76 oder 0x77. So muss man ein bisschen mehr Aufwand investieren, um BMP280 und BME680 voneinander zu unterscheiden und richtig auszulesen. Auf der anderen Seite spart das natürlich I2C-Adressen, die nun einmal endlich sind.

Der "Stromverbrauch" des BME680 liegt bei 0.09 bis 12 mA, abhängig davon, was gemessen wird, wobei ich schätze, dass die VOC-Messung am meisten Strom braucht. Das ist eine kleine Revolution gegenüber den MQ-Gas-Sensoren, die sich gerne mal bis 800 mA, also das Fünfzigfache dessen "gönnen".

Auch brauchen die MQ-Sensoren eine Aufwärmzeit von ca. einer Minute. Diese scheint sich beim BME680 auch zu verkürzen. Im Ultra-low-power-mode (0.09 mA) auf 92 s, im Low-power-mode (0.9 mA) auf 12 s und im Continous-mode (12 mA) auf 1.4 s.

Bei der Spannung ist allerdings zu beachten: Der BME680 mag nur Versorgungsspannungen von 1.8 bis 3.6 Volt. Man sollte also keine 5 Volt-Mikrocontroller wie den Arduino Uno zur Ansteuerung benutzen, es sei denn, man benutzt einen BME680 auf einem Breakoutboard mit Spannungswandler.

Bei dem auf dem Foto abgebildeten Breakoutboard ist anzunehmen, dass es sich bei dem Bauteil 662K um einen Spannungsregler, genauer gesagt ein MIC5205-3.3 oder XC6206 (oder kompatibel) handelt, der die Versorgungsspannung ggf. von 5V auf 3.3V herunterregelt. Und das Bauteil "RK3" ist wohl ein Logik-Level-Shifter (vielleicht TXB0104 / PCA9306-ähnlich), der die I2C-Pegel zwischen 5 V und 3.3 V wandelt. Das Breakoutboard auf dem Foto sollte man also auch gefahrlos mit 5 Volt betreiben können - ohne Gewähr meinerseits.

Wenn man diese Bauteile abzieht wird klar, dass man so gut wie keine Bauteile neben dem BME680 braucht. Der funktioniert von sich aus, in seinem kleinen 3 x 3 x 1 mm-Gehäuse.

VOC-Sensor im BME680

Unter die "VOC"-Definition fällt eine ziemlich weitreichende Auswahl von Gasen. Wie schon erwähnt, ist eine Abgrenzung eines Sensors gegenüber anderen Gase nützlich, wenn man eine bestimmte Anwendung im Sinn hat, also einen Alkomat basteln will oder messen will, wie die Kohlendioxid-Konzentration im Schlafzimmer über Nacht durch ausgeatmete Luft ansteigt. Oder auch schauen will, ob die Luft im Büroabteil eines Lackierbetriebes durch die Lackierarbeiten belastet wird. Das eine will man man Alkohole / Ethanol, das andere mal Kohlendioxid oder das nächste mal die Lösungsstoffe im Lack wie Tuolol und Co. messen.

Ein VOC-Wert sagt einem eigentlich nur, dass ein flüchtiges, organisches Gas in einer gewissen Konzentration in der Luft ist. Aber nicht genau, welches. Und je nach Sensor hebt das eine Gas den Konzentrationswert als ein anderes.

Darum sollten wir einen tieferen Blick ins Datenblatt werfen, was das winzige "Wunderkästchen" denn messen will:
Unless mentioned otherwise, the specifications are deduced from new sensors that have been operated for at least five days mainly in ambient air and consequently have the same history (i.e. same power mode and exposed to the same environment). Besides ethanol (EtOH) as a target test gas, the sensors are also tested With breath-VOC (b-VOC). The b-VOC mixture, as listed in Table 5, represents the most important compounds in an exhaled breath of healthy humans. The values are derived from several publications on breath analysis studies. The composition does not contain species which would chemically react to ensure that the mixture is stable for at least 6 months. Furthermore, the composition is also limited to species which can be manufactured in one mixture.
Ins Deutsche übersetzt:
Sofern nicht anders angegeben, basieren die Spezifikationen auf neuen Sensoren, die mindestens fünf Tage lang überwiegend in Umgebungsluft betrieben wurden und somit die gleiche Vorgeschichte (d. h. im gleichen Betriebsmodus und in der gleichen Umgebung) aufweisen.

Neben Ethanol (EtOH) als Testgas werden die Sensoren auch mit flüchtigen organischen Verbindungen (b-VOC) getestet. Das b-VOC-Gemisch, wie in Tabelle 5 aufgeführt, repräsentiert die wichtigsten Verbindungen in der ausgeatmeten Luft gesunder Menschen. Die Werte stammen aus verschiedenen Veröffentlichungen zu Atemanalysestudien. Die Zusammensetzung enthält keine chemisch reagierenden Verbindungen, um eine Stabilität von mindestens sechs Monaten zu gewährleisten. Darüber hinaus ist die Zusammensetzung auf Verbindungen beschränkt, die in einer Mischung hergestellt werden können.
Das Testmittel b-VOC soll folgende Bestandteile enthalten:
Anteil Gas engl. Gas deutsch 5% Ethane Ethan 10% Isoprene /2-methyI-I ,3 Butadiene Isopren/2-Methyl-I,3-Butadien 10% Ethanol Ethanol 50% Acetone Aceton 15% Carbon Monoxide Kohlenmonoxid
Man sieht: im b-VOC Mix ist so allerlei enthalten.

Die Messung erfolgt physikalisch, indem das Heizelement auf ca. 380°C aufgeheizt wird. Wahrscheinlich generiert das die nötige Reaktionsenergie, um die gewünschten chemischen Reaktionen (Oxidation und Reduktion) möglich zu machen und das Ergebnis zu messen. Das Ergebnis schlägt sich durch einen veränderten elektrischen Widerstand nieder, der ausgelesen werden kann.

Welche Gase genau vorkamen und sehr sich der Widerstandswert mit den einzelnen Gasen verändert, darüber schweigt sich das Datenblatt leider aus. Hier scheint es sich um eine Black Box zu handeln, in die uns Bosch nicht hinein schauen lassen möchte. Es heißt nur:
4.2 Indoor air quality

... This enables the BME680 to detect e.g. outgassing from paint, furniture and/or garbage, high VOC levels due to cooking, food consumption, exhaled breath and/or sweating.

As a raw Signal, the BME680 will output gas sensor resistance values and its changes due to varying gas concentrations (the higher the concentration of reducing VOCs, the Iower the resistance and vice versa). Since this raw signal is influenced as well by parameters Other than VOC concentration (e.g. humidity level), the raw values are transformed to an index for air quality (IAQ) by smart algorithms inside BSEC.

The IAQ scale ranges from O (clean air) to 500 (heavily polluted air). During operation, the algorithms automatically calibrate and adapt themselves to the typical environments where the sensor is operated (e.g., home, workplace, inside a car, etc.). This automatic background calibration ensures that users experience consistent IAQ performance. The calibration process considers the recent measurement history (typ. up to four days, adjustable by BSEC config String) to ensure that IAQ - 50 corresponds to "typical good" air and IAQ - 200 indicates "typical polluted" air.
Ins Deutsche übersetzt:
4.2 Raumluftqualität

... Dadurch kann der BME680 beispielsweise Ausgasungen von Farbe, Möbeln und/oder Müll sowie hohe VOC-Werte durch Kochen, Essen, Ausatmen und/oder Schwitzen erkennen.

Als Rohsignal gibt der BME680 die Widerstandswerte des Gassensors und deren Veränderungen aufgrund unterschiedlicher Gaskonzentrationen aus (je höher die Konzentration reduzierender VOCs, desto geringer der Widerstand und umgekehrt). Da dieses Rohsignal auch von anderen Parametern als der VOC-Konzentration (z. B. der Luftfeuchtigkeit) beeinflusst wird, werden die Rohwerte durch intelligente Algorithmen im BSEC* in einen Index für die Luftqualität (IAQ) umgewandelt.

Die IAQ-Skala reicht von 0 (saubere Luft) bis 500 (stark verschmutzte Luft). Während des Betriebs kalibrieren sich die Algorithmen automatisch und passen sich an die typischen Umgebungen an, in denen der Sensor eingesetzt wird (z. B. zu Hause, am Arbeitsplatz, im Auto usw.). Diese automatische Hintergrundkalibrierung gewährleistet eine gleichbleibende IAQ-Leistung. Der Kalibrierungsprozess berücksichtigt den aktuellen Messverlauf (typischerweise bis zu vier Tage, einstellbar über den BSEC-Konfigurationsstring), um sicherzustellen, dass IAQ-50 typisch guter Luftqualität und IAQ-200 typischer Luftverschmutzung entspricht.
*BSEC ist die Bosch Sensortec Environmental Cluster (BSEC) Software Library.

Die BSEC-Lib endet in einem File namens libalgobsec.a, was wohl ein Gnu-C-Compiler-Kompilat ist, das für Menschen nicht lesbar ist. Auch habe ich den Source-Code für diesen Teil nicht gefunden. Das Geheimnis, wie aus einem Widerstandswert ein Luftqualitätswert (IAQ, Index Air Quality) wird, ist also in einer Black Box versteckt.

Leider ließ sich die Library in meinem Setup (RP2040, PlatformIO) nicht ohne zahlreiche Fehler installieren, so dass ich wohl mit dem Widerstandswert leben muss und auf den ominös errechneten IAQ verzichten muss.

Ich empfehle die Library von Adafruit (lib_deps = adafruit/Adafruit BME680 Library @ ^2.0.5), die hingegen keine Probleme bei der Einbindung bereitet, aber auch nur einen Widerstandswert liefert.

Der IAQ wird eh nur den Widerstandswert umrechnen und auf eine Skala abbildet von 0 ("reine Luft") bis 500, wobei > 351 "extrem verunreinigt" bedeutet. Wobei hier als Maßstab die Vorgaben des deutschen Umweltbundesamtes herangezogen werden, wonach eine Konzentration höher als 25 mg/m3 von VOCs für Kopfschmerzen sorgt.

Zum Thema Luftqualität empfehle ich auch meinen Artikel Luftqualität / Feinstaub-Messgerät mit Panasonic SN-GCJA5 Partikel-Sensor zu lesen.

Und wie ist denn nun die Luftqualität bezogen auf VOCs?

Da Bosch Sensortec nicht einmal genau angibt, auf welche Gase ihr Sensor nun chemisch reagiert, ist es schwer, das gelieferte Ergebnis einzuordnen und zu gewichten.

Da bleibt nur das praktische Experimentieren und die bisherigen Erfahrungen mit Gas-Sensoren dabei zu berücksichtigen:

Experimente und deren Ergebnisse

Experimentale Abläufe lassen sich schwierig beschreiben, Experimente muss man sehen, besonders, wenn es um deren Verlauf geht:

Bezüglich der Temperatur, Luftfeuchtigkeit und Luftdruck-Werte ergibt sich folgendes Bild:

MessungAHT20 (I2C 0x38)BMP280 (I2C 0x77)BME680 (I2C 0x77)
Temperatur*24.03 °C25.02 °C (+1 °C)25.76 °C (+1.75 °C)
Luftfeuchtigkeit55.7 % RH-55.27 % RH
Luftdruck-986.7 hPa985.89 hPa
*Referenzwert Temperatur: 23.7 °C

Die Luftfeuchtigkeitswerte von AHT20 und BME680 stimmen soweit überein. Aber die Temperaturwerte des BMP280 und des BME680 liegen Bosch-typisch ein bis zwei Grad zu hoch, was daran liegt, dass hier eine Platinen- und keine Umgebungstemperatur angegeben wird. Die Luftdruckwerte zwischen BMP280 und BME680 unterscheiden sich kaum und sind plausibel.

Für den Test des VOC-Sensors im BME680 habe ich verschiedene Gase und Lösungsmittel vor den Sensor gebracht und dabei den VOC-Widersstandswert gemessen:

Gas bzw. LösungsmittelAbsolutwert RVOC*Ausschlag**
unbelastete Luft80000
Marker Stabilo Layout 40, wasserbasiert80000
UV-Harz80000
Epoxid-Harz80000
weißer Ölmarker, chin., groß80000
weißer Ölmarker, chin., klein80000
Essig-Essenz80000
Wasserperoxid-Lösung 3%80000
Ausatmenluft40000
Marker NoName blau11000
Aceton (Klebstoff)9000
Marker Inoxcrom8500
neuer Edding 5005000
neuer Edding 30005000
Marker Topwrite5000
Ethanol (Alkohol 100%)4000
alter Edding 5004000
Feuerzeuggas (Butan / Propan)4000
Leitlackverdünnung3500
Epoxid-Härter1000
*niedrigerer Wert = höher belastete Luft, ** größerer Ausschlag = höher belastete Luft


Gemessen wurde jeweils 120 mal mit einem Abstand von 2 Sekunden, also gesamt 4 Minuten. Das entspricht der Bildschirmbreite von 120 Pixeln.

Als erstes fiel auf, dass der Absolutwert für saubere Luft von Messung zu Messung unterschiedlich ist und ein paar Messzyklen brauchte, um sich einzupendeln. Hier muss sozusagen erst der Sensor auf Temperatur kommen, also aufgeheizt werden. Bei "kaltem" BME680, also nach einer langen Arbeitspause kann dies 2 Minuten dauern. Doch auch dann ist der Absolutwert unterschiedlich. Mal 80000, mal nur 50000. Der Absolutwert darf darum nur im Zusammenhang des Kurvenverlaufs eines Messung interpretiert werden, nicht als einzeln herausgepicketer Wert.

Der RVOC-Wert schoss relativ schnell nach oben (eigentlich nach unten), sobald eine Probe vor den Sensor gehalten wurde. Nach ein paar Sekunden Frischluftzufuhr erholte sich der Sensor aber auch wieder auf ein stabiles Niveau, dass allerdings nur selten dem Anfangs-Absolutwert entsprach, aber dennoch im weiteren Verlauf stabil blieb.

Das Anhauchen des Sensors mit ausgeatmeter Luft brachte den Sensor auf einen moderaten Wert: RVOC halbierte sich. Bei dem reaktivsten Kandidaten, dem Epoxy-Härter ging RVOC auf unter 1000 Ohm, was nur 1% des Normalwertes (hier angenommene 80000) entspricht - und damit die höchstverschmutzte Luft markierte.

Der Sensor misst, wie schon von mir vorher angenommen, vornehmlich brennbare Lösungsmittel und Gase - diese haben ein hohes Reaktionspotential. Das führt dazu, dass es zum Beispiel keinen Ausschlag bei Essigsäure gibt, wobei das längerfristige Einatmen dieser sicher auch nicht gesund ist und zu Kopfschmerzen führt.

Auch gibt es keine großen Unterschiede zwischen den einzelnen Gasen, also keine "Spezialisierung" wie es z. B. beim MQ-3 für Ethanol oder deren Familien-Verwandten für andere Gase der Fall ist. Der BME680 macht eher einen Rundumschlag und schlägt bei vielen Substanzen gut aus.

Es schlägt auch nur bei reaktiven Gasen aus, Feinstaub kann es nicht erkennen. Man kann sich also nicht darauf verlassen, dass der BME680 alles anzeigt. Von daher kann er theoretisch mit einem Luftqualitätsindex (IAQ) auch daneben liegen, weil er einen Gefahrstoff nicht erkennt.

Man sollte sich also nicht hundertprozentig auf den BME680 als Gas-Detektor verlassen und es eher als "grobes Schätzeisen" einstufen. Aber ich glaube, diesen Anspruch will Bosch mit dem BME680 auch gar nicht geltend machen. Wahrscheinlich nicht ohne Grund schweigt man sich im Datenblatt aus zu den Gasen, die detektiert oder eben nicht detektiert werden.

Spezielle Gas-Sensoren, die eine abgegrenzte Gas-Art messen, sind teuer und man bräuchte gleich mehrere davon und natürlich auch einen Feinstaubsensor, um genauer feststellen zu können, welches Gas bzw. welche Luftverschmutzung denn vorliegt. Das ist ein komplexes Thema, das schnell viel Geld kosten kann.

Fazit

Von BME680 sind also keine Wunder zu erwarten, aber gerade für die winzige Größe und den kleinen Stromverbrauch muss man hier schon die Leistung von Bosch anerkennen. Und der Preis geht auch in Ordnung. Man muss die Werte halt zu interpretieren wissen. Und dazu muss man sich ein bisschen Fachwissen aneignen.

Sonst lässt man sich evtl. zu solchen Bewertungen hinreißen:



Der Schreiber war ja schon kurz davor zu begreifen, dass die Temperatur des BME680 (und auch BMP280 und BME280) nicht die Umgebungstemperatur ist, sondern lediglich der Kalibrierung der anderen Sensoren im Gehäuse dient. Und da der Sensor geheizt wird, ist diese Temperatur natürlich zu hoch.

Trotzdem: der VOC-Wert kann nur einigermaßen richtig interpretiert werden, wenn man seine Verlaufskurve betrachtet. Mit den Absolutwerten RVOC ist nichts genaues anzufangen.

Das Bosch Sensortec sich im Datenblatt über die Gase, auf die der BME680 anschlägt, ausschweigt, ist nicht schön. Hier bin ich mehr Transparenz gewohnt. In einem Datenblatt sollten alle relevanten Daten stehen. Geheimniskrämerei ist hier fehl am Platz. Genauso auch wie bei der Closed-Source-Berechnung des Air Quality Index, bei dem man auf die Bosch-Library (die bei mir nicht funktionierte) angewiesen ist.

Den Aufpreis für den VOC-Sensor im BME680 verglichen mit einem BME280 muss jeder für sich selbst abschätzen. Und dann gibt es ja noch AHT20 und BMP280-Kombi-Boards, die dann auch eine korrekte Umgebungstemperatur liefern.



Quellen, Literaturverweise und weiterführende Links