In diesem Guide lernst du ganz einfach eine CO2-Ampel mit Display und einem genauen Sensor umzusetzen.
Im heutigen Beitrag möchte ich das Thema DIY CO2-Ampel vom Autor Maik Rygiel aufgreifen. In diesem Beitrag wurde mit dem MH-Z19C Infrarot CO2 Sensor eine kostengünstige CO2-Ampel gebaut. Ampel trifft es in diesem Kontext sehr gut, da durch eine mehrfarbige LED die aktuelle CO2-Konzentrationgefahr visuell dargestellt wird.
In diesem Beitrag wird der Sensor ausgetauscht, um die echte CO2-Konzentration zu messen. Gleichzeitig soll ein TFT-Display noch mehr Informationen über die Umgebung liefern, Temperatur und Luftfeuchtigkeit.
Bevor es aber zum Aufbau und dem Code kommt, wird kurz erklärt, wie die CO2-Sensoren messen und wieso die CO2-Konzentration etwas über die Ausbreitung von Krankheitserregern aussagt.
Die Hardware für die CO2-Ampel mit Display
Für das Update der CO2-Ampel benötigen Sie die folgenden Bauteile:
- D1 Mini ESP8266
- Adafruit SCD-30
- Adafruit 1,69 Zoll 280×240 TFT-Display
- BME280
- Breadboard mit 400 Kontakten
- JumpWires
Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!
Die Software
Damit du den D1 Mini programmieren und die gewünschte Funktion der CO2-Ampel erhälst, benötigst du die folgende Software und Bibliotheken:
- Arduino IDE , hier am besten die aktuelle Version herunterladen
- Boardbibliothek für den D1 Mini http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Die folgenden Bibliotheken mit allen Abhängigkeiten
- Adafruit SCD30
- Adafruit ST7735 and ST7789 Library
- Adafruit Zero DMA
- Adafruit SPIFlash
- SdFat – Adafruit Fork
- Adafruit_BME280_Library
Zusammenhang CO2, VOC, und Aerosole und CO2-Messung
Wie bereits in der Einleitung erwähnt, wird kurz erläutert, was die CO2-Konzentration mit VOC, volatile organic compounds, zu Deutsch flüchtige organische Verbindungen, und Aerosole zu tun hat.
In unserer Umgebungsluft beträgt die CO2-Konzentration üblicherweise 400ppm, also 0,04vol%, mit einer VOC-Konzentration von ~0,5ppm. ppm ist die Einheit Parts per million, also Teilchen pro Millionen.
Bei der Luft die wir ausatmen verändert sich diese CO2-Konzentration auf 40.000ppm und auch die VOC-Konzentration steigt leicht an.
Mit der ausgeatmeten Luft werden gleichzeitig sogenannte Aerosole, kleine Tröpfchen die auch Krankheitserreger beinhalten können, ausgeatmet. Daher kann mit steigender CO2-Konzentration und somit steigender Aerosole Menge in einem Raum auch das Ansteckungsrisiko durch die Krankheitserreger in den Aerosolen hergeleitet werden.
Gerade kleinere Tröpfchen können durch eine FFP2- bzw. OP-Maske nicht 100% aufgefangen werden, weswegen die Gesundheitsämter regelmäßiges Lüften als Maßnahme gegen Corona vorschlägt.
Aber wie kann die DIY CO2-Ampel unterscheiden, wann ein Fenster geöffnet werden sollte? Hier kommt die gemessene CO2-Konzentration des Sensors und die Richtwerte vom Umweltbundesamt ins Spiel. Der CO2-Sensor liefert eine Momentaufnahme der CO2-Konzentration im Raum, die mit der Bedenklichkeitseinstufung vom Umweltbundesamt, siehe Tabelle 1, abgeglichen wird.
CO2-Konzentration [ppm] | Bedenklichkeit |
Kleiner 1000 | Hygienisch unbedenklich |
Zwischen 1000 und 2000 | Hygienisch bedenklich |
Über 2000 | Hygienisch inakzeptabel |
Nun könnte man annehmen, dass die diversen CO2-Sensoren alle gleich arbeiten, was aber nicht erklärt, warum einige teuer und andere günstiger sind. Die Antwort liegt hier in der Art der Messung der Sensorik. Gerade günstigere Sensoren messen nicht direkt die CO2-Konzentration, sondern ermitteln einen Schätzwert. Dazu werden andere Gase als CO2 ausgewertet , weswegen diese Art von Sensoren auch meistens als Gassensor verkauft werden. Erst im preisintensiveren Segment erhält man richtige CO2-Sensoren, wie der Adafruit SCD30. Diese messen den tatsächlichen CO2-Gehalt, weswegen diese Art von Sensoren CO2-Sensor genannt werden.
Der Zusammenbau
Nun soll die DIY CO2-Ampel mit Display v2.0 zusammengebaut werden. Dazu musst du die verschiedenen Bauteile gemäß Abbildung 1 bzw. Tabelle 2 verbinden.
D1 Mini Pin | TFT Pin | BME280 Pin | SCCD30 Pin |
3,3V | 3,3V | 3,3V | VIN |
G | G | GND | GND |
D0 | TC | ||
D1 | SCL | SCL | |
D2 | SDA | SDA | |
D3 | SI | ||
D4 | DC | ||
D5 | CK | ||
D7 | SI |
Achte bei allen Komponenten darauf, dass die 3.3V-Spannungsversorgung vom D1 Mini verwendet wird! Einige Komponenten können bei höherer Spannung beschädigt werden. Das TFT-Display hat einen Spannungsregler, weswegen hier ein geringeres Risiko eines Defekts besteht.
Bei der i2c-Verbindung des SCD30 und BME280 werden die Datenleitungen für SDA und SCL in Reihe geschaltet.
Der Programmcode für CO2-Ampel mit Display
Im letzten Schritt muss der D1 Mini noch mit dem Programmcode geflasht werden. Als Vorraussetzung sind die Bibliotheken unter Die Software erforderlich.
Zusätzlich zur I CO2-Warner.ino-Datei gibt es eine header-Datei mit dem Namen bitmap.h, welche sich im gleichen Verzeichnis befinden muss. Andernfalls wird es beim Kompilieren zu Fehlern kommen. Das komplette Paket musst du von https://github.com/BerryBase-de/CO2-Warner kopieren.
Wenn du die oben angegebene Adresse aufgerufen hast, gehe auf Code -> Download ZIP, siehe Abbildung 2.
Nach dem Download muss du die Zip-Datei entpacken. Anschließend öffnest du die Datei CO2-Warner.ino.
Der Programmcode hat viele Kommentare, damit du schnell und einfach debuggen oder Fehler finden kannst, sofern einer der Sensoren nicht reagiert. Damit die loop-Funktion nicht zu überladen wird, sind einige Programmaufgaben in Unterfunktionen ausgelagert worden. Das hilft dir, den Programmcode auf deine Sensoren oder Erweiterungen anzupassen.
Zuletzt noch die Erklärung, wie der Programmcode genau arbeitet. Nach dem Start des D1 Mini wird über die setup-Funktion zunächst die benötigte Hardware vorbereitet. Damit Sie sehen was passiert, gibt das TFT-Display alle Informationen aus, siehe Abbildung 3.
Da bei der Initialisierung vom Display kein Status zurückgegeben wird, siehst du alle Daten gleichzeitig im seriellen Monitor, siehe Abbildung 4.
In der loop-Funktion wird beim Start vom Code bzw. alle 60 Sekunden die Sensoren ausgelesen. Der ausgelesene Wert vom CO2-Sensor wird direkt in das Array iCO2Array geschrieben. Da die letzten 15 Minuten auf dem Display ausgegeben werden sollen, werden die vorherigen Daten geshiftet. Gleichzeitig werden die aktuellen Daten auf dem TFT-Display visualisiert. Je nach CO2-Konzentration gibt das TFT-Display den Status aus, ob gelüftet werden muss oder nicht.
Je nach CO2-Konzentration wird das Bitmap an der rechten Seite vom TFT-Display entsprechend ausgetauscht und eingefärbt. Die Anzeige sollte ähnlich wie in Abbildung 5 aussehen.
Wundern Sie sich am Anfang nicht über die wenigen Daten im Graphen. Da immer minutenweise gemessen wird, dauert es insgesamt 15 Minuten, bis der Graph voll befüllt ist.
Den Maker wecken
Zum Schluss kann nun der Aufbau noch in ein passendes Gehäuse verbaut werden. Hier ist ihrer Kreativität keine Grenzen gesetzt. Gleichzeitig können Sie sich auch überlegen die Icons oder den Text auf dem Display zu verändern.
Keine Ahnung, wo der Author sein Diplom gemacht hat, aber wenn ich mir die x-Achse auf seinem Diagramm anschaue, scheint bei ihm die Zeit rückwärts zu laufen. Obwohl die Achsen sind ja sowieso nicht beschriftet, Aussagekraft also sowieso gleich Null. Mathematik? Setzen, sechs!
Schönen guten Tag Herr Kingcraft,
Danke erst einmal für ihren Kommentar, auch wenn ich die Art und Weise, wie Sie hier argumentieren eher fraglich finde.
Die X-Achse ist so gewählt, das der jüngste Eintrag auf Höhe der Koordinate 0,0 liegt und die älteren auf der X-Achse immer weiter wandern. Es steht ihnen frei die Berechnung und Darstellung von Diagramm zu ändern, darum habe ich das Projekt genauso aufgebaut. Ebenfalls können Sie eine Skalierung hinzufügen, wobei ich durch die Farben und den Mittelwert eine Tendenz über die Vergangenheit aufzeigen wollte.
Sie können aber gerne das Projekt nach ihren Wünschen modifizieren und hier das Ergebnis allen zur Verfügung stellen.
Keiner zwingt dich die Achse zu beschriften, die Zeitachse zu invertieren oder die Farbe der Plots auf pink zu verändern.
Ja, hat mich auch kurz verwirrt, dass auf der x-Achse nicht t sondern delta t = (t_0- t) aufgetragen ist. Ich persönlich würde die Achsenpfeile weglassen und die neusten Werte an die rechte Kante packen. Aber das kann wie schon erwähnt jede Person selbst nach eigenem Belieben umprogrammieren.
hallo jörn,
erst einmal danke für das projekt.
ich bekomme es aber nicht zum laufen.
es wird mir immer nur in schleife ” init bme … fail ” angezeigt.
ich habe mich wirklich genauestens an die anleitung gehalten.
an wen kann ich mich wenden um hilfe zu erhalten?
beste grüße
sebastian
Hallo Sebastian,
es kann sein, dass dein BME280 eine andere i2c-Adresse hat, daher einfach mal mit einem i2c-Scanner mal nach der richtigen suchen und dann klappt es auch mit dem Projekt.
Such am besten bei google mal nach Arduino i2c-Scanner und du wirst schnell fündig.
Gruß
Jörn Weise
hallo jörn,
danke für die schnelle antwort. ich habe es gleich ausprobiert und es hat nicht ganz geklappt.
ich konnte die i2c-adresse des co2 sensors auslesen, jedoch nicht die des bme280 sensors. ich habe es auch noch bei einem bmp280 sensor probiert (der hat noch zusätzlich 2 pins – cse und sd0), aber auch bei dem sagt der serielle monitor immer i2c device not found.
fällt dir vielleicht noch etwas ein was ich falsch machen könnte?
beste grüße
sebastian
Hallo Jörn,
Ich habe fast das gleiche Projekt geplant, das ich mit Kindern machen möchte! Dabei habe ich nun zufällig Deine Webseite gefunden. Es gefällt mir was Du da machst! Prima!
Im Fritzing Schaltbild ist mir ein kleiner Zeichenfehler aufgefallen. Das Display hat anscheinend zwei mal Plus und keine Masse!
Toll ist ja, daß da gleich eine Warenkorb aufgeht – mit akzeptablen Preisen. Leider fehlt (bei mir?) der CO2-Sensor und der BME280. Der zur Zeit wohl sehr schlecht zu bekommen ist, obwohl es schon Nachfolger gibt (dann aber sehr teuer). (Es sind auch nur noch 2 Displays auf Lager!)
Viele Grüße!
Hallo Florian,
ja aktuell scheinen die Sensoren teilweise bis ganz ausverkauft zu sein. Aber es gibt ja hier im Shop genügend Alternativen und mit kleinen Anpassungen im Quellcode ist dann auch schon das Projekt wieder einsatzbereit.
Den Fehler im Schaltbild sehe ich nun nicht. Das Display hat einen 5V und einen 3,3V-Pin. Ersteres ist eine Spannungsversorgung und soweit ich mich erinnere kann der 3,3V-Anschluss dann als Ausgang genutzt werden (quais als 3,3V Spannungsversorgung), da es einen Regler im Display gibt. Bei dem Display selbst gibt es bei der Bezeichnung kein klassiches GND sondern hier ist die Beschriftung einfach G. Das kann in diesem Zudammenhang schon ein bisschen verwirren.
Mit freundlichen Grüßen
Jörn Weise
Hallo Jörn,
Es ist NUR ein kleiner Zeichenfehler in dem FRITZING – Verschaltungsplan.
Schau Dir mal mein Bildchen an:
*Link*
Da ist vermutlich nur der schwarze Draht (ganz links) verhopst! Du hast das schon richtig zusammengebaut, sonst würde es ja nicht laufen!
Hallo Florian,
ja ich habe den Fehler jetzt auch gesehen, danke dafür. Ich habe die Verdrahtung entsprechend angepasst und das Schaubild auch gleich im Beitrag einem Update unterzogen.
Danke für den aufmerksamen Hinweis.
Gruß
Jörn
Hi, kann ich einfach einen anderen scd 30 CO2 Sensor verbauen, oder geht dann da was mit den Linraries verschütt?