Ein zu hoher CO2 Gehalt in der Luft wirkt sich schlecht auf unsere Konzentration und Leistungsfähigkeit aus. Die CO2 / Kohlenstoffdioxid Konzentration lässt sich auch einfach mittels eines Raspberry Pi CO2 Sensors messen und damit z.B. in die eigene Hausautomatisierung mit einbauen. Dadurch können wir automatisch andere Aktionen triggern, wie z.B. die Belüftung eines Raumes.
Wie genau wir am Raspberry Pi einen CO2 Sensor wie den MH-Z19 auslesen und konfigurieren können, schauen wir uns in diesem Tutorial an.
Zubehör für den Raspberry Pi CO2 Sensor
Da der Sensor rein digital angesteuert wird, brauchen wir abgesehen von dem Pi nicht viele weitere Komponenten. Du kannst das Projekt natürlich so erweitern, wie du möchtest. Ich habe folgendes Zubehör genutzt:
- Raspberry Pi
- MH-Z19B – dieser kommt mit einem Flachbandkabel, aber du kannst ebenfalls Pinheader daran löten.
- Jumper Kabel
- ggf. Pinheader und Lötutensilien
Zwar gibt es auch noch andere Raspberry Pi CO2 Sensoren, allerdings sind diese bei weitem nicht so einfach auszulesen wie der MH-Z19.
Exkurs: Messung und Definition der CO2 Konzentration
Die Luft besteht hauptsächlich aus Stickstoff (ca. 78 %) und Sauerstoff (ca. 21 %) und dazu aus weiteren Gasen, wie eben Kohlendioxid (CO2). Dieser wird u.a. von Säugetieren beim Atmen erzeugt. Ist der
Der Kohlenstoffdioxid Gehalt der Luft wird in ppm (Parts per Million) angegeben. Haben wir also ein Volumen, in dem sich eine Million molekulare Verbindungen (N, O2, CO2, etc.) befinden, schauen wir wie viele davon zu welchem Stoff gehören. Anhand des Wertes für Kohlenstoffdioxid können wir die Luftqualität in Räumen besser einschätzen und ggf. (automatisch) Lüften. Eine Übersicht der Werte sehen wir hier (Quelle):
Luftqualität | CO2 Gehalt (%) | CO2 Konzentration in ppm |
---|---|---|
Hohe Raumluftqualität | < 0.08% | < 800 |
Mittlere Raumluftqualität | 0.08% – 0.1% | 800 – 1000 |
Mäßige Raumluftqualität | 0.1% – 0.14% | 1000 – 1400 |
Niedrige Raumluftqualität | > 0.14% | > 1400 |
MH-Z19B CO2 Sensor am Raspberry Pi anschließen
Starten wir damit den Raspberry Pi CO2 Sensor anzuschließen. Im Gegensatz zu den MQ-X Gas Sensoren, gibt der MH-Z19 Sensor die CO2 Konzentration der Luft nicht analog zurück, sondern per serieller Kommunikation. Daher ist auch kein Analog-Digital Wandler nötig und erst recht keine Interpolation. Der ausgelesene Wert ist somit präziser.
Die serielle Kommunikation am Raspberry Pi findet über die beiden GPIOs 14 (TX0) und GPIO 15 (RX0) statt (Pin 8 und 10).
Der MH-Z19 Co2 Sensor hat nicht in allen Versionen bereits Pins angelötet. Die MH-Z19B Version hat allerdings freie Slots, auf die man Pinheader löten kann, um dann Jumper Kabel anzuschließen. Die Beschriftung der Pins befindet sich auf der Rückseite, wie im Datenblatt angegeben:
Der MH-Z19 Sensor wird außerdem mit 5V Spannung versorgt, weshalb wir Pin 2 und Pin 6 (GND) ebenfalls anschließen:
MH-Z19 Sensor | Raspberry Pi |
---|---|
V+ (Pin 6) | 5V (Pin 2) |
V- (Pin 7) | GND (Pin 6) |
Rxd (Pin 2) | GPIO 14 (Pin 8) |
Txd (Pin 3) | GPIO 15 (Pin 10) |
Schematisch sieht die Verkabelung schließlich wie folgt aus:
Damit sind wir entsprechend vorbereitet und können zum nächsten Punkt gehen.
Installation der notwendigen Python-Pakete
Zunächst einmal installieren wir nun eine Bibliothek, mit der wir den Sensor auslesen können. Zwar ist es auch möglich, über die serielle Schnittstelle den CO2 Gehalt direkt abfragen, jedoch ist es mit einer Bibliothek sehr viel einfacher.
Öffne dafür auf dem Raspberry Pi eine neue Konsole (oder verbinde dich per SSH). Zunächst einmal klonen wir das Projekt von Github:
git clone https://github.com/UedaTakeyuki/mh-z19 cd mh-z19
Darin führen wir nun das Setup-Skript aus, das die notwendigen Pakete installiert und freischaltet
./setup.sh
Übrigens: Die Bibliothek gibt es auch als pip-Package.
Erster Test des MH-Z19 Raspberry Pi CO2 Sensors MH-Z19
Nun möchten wir den CO2 Gehalt in ppm endlich messen. Hierfür reicht der folgende Befehl (im entsprechenden Verzeichnis):
sudo python -m mh_z19
Die Ausgabe sieht dann z.B. wie folgt aus:
pi@raspberrypi:~/mh-z19 $ sudo python -m mh_z19 {"co2": 619}
In meinem Fall ist der CO2 Gehalt des Raumes also noch nicht zu hoch.
Da die Ausgabe einen JSON String enthält, kannst du den Wert auch einfach in anderen Hausautomatisierungen (OpenHAB, HomeAssistant, Node-RED, etc.) einbinden. Alternativ kannst du auch eigene Python Skripte schreiben und die Funktion dort entsprechend einbauen. Der relevante Code dafür sieht wie folgt aus:
1 2 |
import mh_z19 print(mh_z19.read_all()) |
Das erzeugt folgende Ausgabe:
{'SS': 0, 'UhUl': 0, 'TT': 90, 'co2': 619, 'temperature': 21}
In welchem Projekt kommt der CO2 Sensor bei euch als nächstes zum Einsatz?
6 Kommentare
Der Verweis hier auf den „MH-Z19B“
*MH-Z19B – dieser kommt mit einem Flachbandkabel, aber du kannst ebenfalls Pinheader daran löten.*
(http://www.amazon.de/mn/search/?_encoding=UTF8&linkCode=ur2&camp=1634&creative=19450&tag=754-21&field-keywords=MH-Z19B)
grenzt schon an meinungsbildende Schleichwerbung!
Was soll das?
Hallo Mirko,
es ist doch ganz normal, dass in einem Blog Verweise auf den Hardware-Bezug mit Affiliate Links angeboten werden. Was stört Dich daran? Wieso Schleichwerbung? Die Infos und Tutorials werden kostenlos angeboten – da finde ich es nur normal, dass ein Teil der Ausgaben (Hostingkosten, Arbeitszeit) über derartige Links kompensiert werden. Es steht Dir frei die Teile über andere Bezugsquellen zu bestellen.
Volle Zustimmung. Das ist die übliche Vorgangsweise. Danke für das hilfreiche Tutorial.
Mit dem T6703 existiert ein CO2 Sensor der über I2C angesprochen werden kann. Dieser läßt sich mMn besser integrieren als ein RS232 Sensor. Zudem bleibt die serielle Schnittstelle frei. In meiner Pi 4 Konfiguration lief er stabiler als der MH-Z19.
Hallo zusammen!
Ich bin interessierter Laie und habe mich kürzlich extrem gefreut, dass meine Lötaktion und danach die Konsolenaktion folgende Ausgabe brachte:
pi@RasPi-Zero1:~/mh-z19 $ sudo python -m mh_z19
{„co2“: 681}
Yay, funktioniert also! Oder doch nicht – heute ist die Ausgabe „null“ 🙁 Woran liegt’s, wie finde ich den Fehler…?
Zur Info: ein zweiter Sensor zur Temperatur/Luftfeuchtigkeit (DHT22 AM2302) liefert plausible Werte.
Vielen Dank im Voraus,
Michael
Hallo,
Danke für das schöne Tutorial!
Man sollte vielleicht noch erwähnen, dass vor dem erstmaligen Benutzen von Serial Port-Hardware am Raspberry diese Funktion erst in der Raspi-Konfiguration freigeschaltet werden muss! Das hat mir beim nachbauen nämlich Kopfzerbrechen bereitet…
Eine andere Frage: Gibt es eine Möglichkeit zwei MH-Z19 Sensoren gleichzeitig an den Raspberry anzuschließen, auch wenn es nur jeweils einen Rxd/Txd-Pin gibt? Wenn ich z.B. an zwei Orten gleichzeitig CO2 messen möchte…
Danke!