CO2 messen mit dem Sensor MH-Z19B und dem Raspberry Pi
Im Corona-Winter kommt es in Innenräumen auf regelmäßiges Lüften an. Ein selbstgebastelter Alarmmelder zeigt an, wann du wieder für Durchzug sorgen solltest.
Ein zuverlässiger Indikator für die Luftqualität in Büros, Klassenzimmern oder Wohnbereichen ist der CO2-Gehalt. Draußen in der frischen Luft liegt die Konzentration von Kohlendioxid bei rund 400 ppm. Das steht für parts per million, in diesem Fall also 400 CO2-Moleküle pro einer Million Luftmoleküle. In Innenräumen steigt dieser Wert durch Atmung schnell an. Nach einem Kinobesuch etwa sind oftmals mehrere Tausend ppm zu messen. Das kann Unkonzentriertheit, Müdigkeit und Kopfschmerzen zur Folge haben. In Zeiten von Corona kommt noch ein weiterer Effekt dazu: Ohne regelmäßiges Lüften steigt die Ansteckungsgefahr über Aerosole.
Aber wann ist der richtige Zeitpunkt, die Fenster aufzureißen? Eine selbstgebastelte CO2-Messstation gibt darüber Auskunft. Es geht darum, den CO2-Gehalt in Innenräumen zu messen und über eine rote LED ans Lüften zu erinnern, sobald sich zu viel CO2 in der Raumluft angesammelt hat. Spätestens ab einem Wert von 1.500 ppm ist frische Luft angesagt. Wie für fast alles gibt es übrigens auch dafür eine DIN: Die DIN EN 13779 bescheinigt bei CO2-Konzentrationen über 1.400 ppm eine „niedrige Raumluftqualität“. Bei diesem Projekt geht es ausnahmnweise nicht um R, der Lüftungswarner basiert auf Python.
Vorbereitungen treffen
Bevor du loslegst, solltest du überprüfen, ob du alle notwendigen Bestandteile vorliegen habst. Zunächst benötigst du natürlich einen Raspberry Pi. Welches Modell Sie verwenden, ist egal. Darauf sollte ein halbwegs aktuelles Raspberry Pi OS laufen, vormals Raspbian genannt. Entsprechende Images sind auf der Seite www.raspberrypi.org/downloads/raspberry-pi-os zu finden. Der Workshop verwendet einen Raspberry Pi 4 mit Raspbian 10 »Buster«. Mit welchem Betriebssystem Ihr Mini-Rechner läuft, lässt sich im Terminal mit dem Befehl cat /etc/os-release
auslesen.
Zudem brauchst du einen CO2-Sensor. Ein preiswertes Modell ist der MH-Z19B, der auch in diesem Workshop zum Einsatz kommt. Eine Besonderheit des Raspberry Pi ist die GPIO-Leiste. Diese 40 Anschlüsse ermöglichen es, auf Sensoren, LEDs und vieles mehr zuzugreifen. Um eine Verbindung mit dem Sensor herzustellen, verwendest du Jumper Wires in der Variante Female/Female. Das bedeutet, die Anschlüsse haben auf beiden Seiten ein Loch.
Damit du es überhaupt mitbekommst, wenn der CO2-Gehlt der Luft in bedenkliche Höhen steigt, bauen wir eine rote LED ein. Sie leuchtet auf, sobald der eingestellte Grenzwert überschritten wird und geht wieder aus, wenn wieder normale Werte herrschen. Du kannst die LED jedoch nicht direkt mit dem Raspi verbinden. Deshalb benötigst du ein kleines Breadboard. Und zu guter Letzt erfordert der Schaltkreis einen Widerstand.
So funktioniert der Sensor
Es gibt mehrere Methoden, den CO2-Gehalt der Luft zu messen. Der MH-Z19B gehört zu den nichtdispersiven Infrarotsensoren (NDIR-Sensoren). Diese basieren auf der konzentrationsabhängigen Absorption elektromagnetischer Strahlung im infraroten Wellenlängenbereich. Kohlendioxid absorbiert Infrarotstrahlung auf charakteristische und einzigartige Art und Weise. IR-Strahlung wird von der Lichtquelle durch die zu messende Luft zum Sensor geleitet. An der Vorderseite ist ein Filter angebraucht, der die Absorptionswellenlänge des Zielgases durchlässt. Wenn die Konzentration des Gases zunimmt, dann erhöht sich die Absorption gemäß dem Lambert-Beerschen Gesetz, das du vielleicht noch aus dem Chemie-Unterricht kennst, und das Signal verringert sich entsprechend. Der Sensor ermittelt die Lichtintensität und rechnet sie in ppm um.
Serielle Schnittstelle aktivieren
Um den Sensor auszulesen, kommunizieren der Raspberry Pi über die serielle Schnittstelle. Diese ist aber standardmäßig deaktiviert. Um sie zu aktivieren, öffnest du ein Terminal und gibst dort den Befehl „sudo raspi-config“ ein. Es erscheint das Tool zur Konfiguration. Dort wählst du den Punkt »5 Interfacing options«, und dann »P6 Serial«. Auf die erste Frage antwortest du mit einem Klick auf »No«, auf die zweite mit einem Klick auf »Yes«. Danach führst du einen Reboot durch. Die serielle Schnittstelle ist jetzt aktiv.
Schaltung aufbauen
Jetzt machst du dich daran, den Raspi mit dem Sensor zu verbinden. Dazu benötigst du vier Jumper Wires Female/Female, also mit Buchsen an beiden Enden. Auf der Unterseite des Sensors siehst du, welche Funktion die jeweiligen Anschlüsse haben. Verbinde Pin 6 des Sensors mit der Bezeichnung VCC mit Pin 4 auf dem Raspberry Pi. Das ist die Stromversorgung mit 5 Volt. Pin 4 ist auf der rechten Seite der GPIO-Leiste der zweite von oben. Nun verbindest du Pin 7 auf dem Sensor mit Pin 6 auf dem Raspi. Das ist der Masseleiter. Der Pin befindet sich direkt unter Pin 4.
Die Hälfte ist geschafft, nun geht es auf der anderen Seite des Sensors weiter: Pin 2 auf dem Sensor gilt es mit Pin 8 auf dem Mini-Rechner zu verbinden, direkt unter Pin 6. Schließlich verbindest du noch Pin 3 auf dem Sensor mit Pin 10 auf dem Raspi, der sich direkt unterhalb von Pin 8 befindet. Abschließend startest du den Raspberry Pi.
Messwerte auslesen
Um den CO2-Wert auszulesen, kommt ein Python-Programm zum Einsatz. Entwickelt hat es Takeyuki Ueda aus Japan. Dieses Programm installierst du zusammen mit weiteren Komponenten, indem du auf dem Raspberry Pi ein Terminal öffnst und folgenden Befehl eingibst: git clone https://github.com/UedaTakeyuki/mh-z19.git
. Dann wechselst du in den neuen Ordner /home/pi/mh-z19
und führst dort ./setup.sh
aus.
Um den aktuellen CO2-Wert zu ermitteln, gibst du sudo python -m mh_z19
ein. Du erhälst als Ergebnis etwas wie {"co2": 871}
. Die Einheit ist ppm. Statt die Messwerte im Terminal auszugeben, kannst du sie auch in eine CSV-Datei schreiben. Dazu verwendest du sudo python -m pondslider --config config.save.toml
. Jeder Aufruf fügt eine Zeile in der CSV-Datei hinzu. Sie befindet sich im Verzeichnis DATA
. Es zeigt sich, dass bereits nach zwei Minuten Stoßlüften der CO2-Gehalt der Raumluft deutlich sinkt – und damit vermutlich auch die Infektionsgefahr.
Messwerte online
Um stets etwa über das Smartphone Zugriff auf die Kurve der Messwerte zu haben, meldest du dich zunächst bei einem kleinen kostenlosen Online-Dienst an: Surfe zu der Seite https://monitor3.uedasoft.com und trage eine E-Mail-Adresse und ein Passwort ein. Du erhälst eine »view_id«, die du aber nicht benötigst. Klicke auf den Menüpunkt Elements
. Notieredie zweite Buchstabenkombination in der Liste, und setzen die Option auf Active
. Dann schließst du den Vorgang mit Save
ab.
Nun rufst du ein Terminal auf und wechselst wieder in den Ordner mh-z19
. Dort rufst du den Befehl ./setid.sh abcdefgh
auf, wobei du die Buchstabenfolge durch die achtstellige Buchstabenkombination ersetzst, die du gerade notiert hast. Um zu prüfen, ob alles geklappt hat, tippst du sudo python -m pondslider
ein. Wenn in der untersten Zeile der Ausgabe das Wort true
vorkommt, dann ist alles in Ordnung. Um nun regelmäßig Messwerte zu erhalten und in die Monitor-App einzutragen, gibst du abschließend ./autostart.sh --on
ein. Im Browser siehst du nun, wie das Diagramm auf der Monitor-Seite alle fünf Minuten um einen Messwert anwächst. Die Zahl der Messwerte lässt sich direkt darunter über den Button »Settings« festlegen. Um 24 Stunden abzudecken, benötigst du 288 Werte. Nach einem Reboot startet das Tool automatisch neu.
Lüftungswarnung per LED
Da du wahrscheinlich nicht ständig auf dem Raspberry Pi den aktuellen CO2-Wert auslesen oder auf der Monitor-Seite nachschauen willst, ob es an der Zeit ist für frische Luft, muss eine Art Alarm her. Einfach und kostengünstig umzusetzen ist eine rote LED, die aufleuchtet, sobald der CO2-Gehalt einen bestimmten Wert überschreitet.
Eine LED hat immer ein langes und ein kurzes Beinchen. Das lange ist die Anode oder Pluspol und die Kathode oder Minuspol hat das kurze Beinchen. Für den Anschluss der LED brauchst du noch einen Vorwiderstand. Den benötigten Wert könnte man genau ausrechnen, aber mit 330Ω bist du auf der sicheren Seite. Das Ω
steht für Ohm.
Stecke die LED und den Widerstand auf das Breadboard. Nun nimm zwei Jumper Wires Male/Female und verbinde den Kontakt unter der Anode mit Pin 3 auf dem Raspi, das ist in der linken Hälfte der GPIO-Leiste der zweite von oben. Dann verbindest du den Breadboard-Anschluss unterhalb des Widerstands mit Pin 14 auf dem Raspi, das ist der siebte in der rechten Hälfte.
Das Python-Programm, das die Messwerte ausliest, wurde so modifiziert, dass es bei einem Wert von über 1.500 ppm die LED einschaltet. Du findest das Programm mh_z19_led.py
hier zum Download. Kopiere es in das Verzeichnis mh-z19
auf dem Raspi. Für einen ersten Test geben Sie im Terminal sudo python mh_z19_led.py
. Du erhälst den CO2-Wert. Liegt dieser über 1.500 ppm, sollte zusätzlich die LED aufleuchten – Zeit zu lüften. Für einzelne Messungen, um den Ist-Zustand zu ermitteln, reicht dies völlig aus. Um diesen Vorgang zu automatisieren, ist etwas zusätzlicher Aufwand nötig.
Cronjob einrichten
Unter Linux sind Cronjobs die Methode der Wahl, um etwas automatisiert in regelmäßigen Abständen auszuführen. Um einen neuen Cronjob einzurichten, startest du das Terminal und gibst den Befehl crontab -e
ein. Damit änderst du die Crontab-Datei für den aktuellen Benutzer. Durch Hinzufügen von sudo
am Anfang würdest du die systemweite Crontab-Datei editieren.
Ein Text-Editor öffnet sich, in der Regel nano. Gib am Ende der Datei die Zeile */5 * * * * /usr/bin/sudo /usr/bin/python /home/pi/mh-z19/mh_z19_led.py
ein. Beachte die Leerzeichen. Im Fall des Editors nano speicherst du die Datei mit [Strg]+[O] und schließt sie mit [Strg]+[X]. Nach spätestens fünf Minuten erfolgt die erste Messung. Je nach Messwert leuchtet die rote LED auf oder eben nicht.
Schreiben macht durstig! Spendier mir doch ein Bier, indem du mir einen kleinen Betrag via Paypal schickst oder ein paar Bitcoin- oder Ethereum-Bruchteile an die entsprechende nachfolgende Adresse. Prost & auf dein Wohl!
Bitcoin-Adresse : 1PjYNNjHmkAUmf626hukL32Vs1wFt8v1wT
Ethereum-Adresse : 0x974e73994c7483eef1396a21b9937aecb7b6c286
Hi.
Du findest das Programm mh_z19_led.py hier zum Download.
Wo ist der Link ?
Wo kann ich denn das mh_z19_led.py runterladen ?
Gruß Stefan
Hallo Stefan,
sorry, hatte ich vergessen zu verlinken:
https://www.petitessen.net/wp-content/uploads/2020/12/mh_z19_led.7z
Viele Grüße,
Andreas
Hi Andreas,
danke.
Gruß Stefan