DIY CO2-Ampel mit dem MH-Z19C

DIY CO2-Ampel mit dem MH-Z19C

Arduino, Dev. Boards, Luft / Wetter
16 Februar 2021

Aufgrund der Gefahr einer Corona-Infektion wird seit einiger Zeit empfohlen, regelmäßig Innenräume zu lüften, damit sich nicht zu viele potenziell ansteckende Aerosole in der Luft sammeln können. Aber auch sonst ist es ratsam, mehrmals pro Tag durchzulüften. Eine CO2-Ampel könnte dir dabei helfen dein Lüften zu optimieren.

Die Frage, die ich mir gestellt habe, ist: Wann macht es Sinn zu lüften und wann kann man es sich sparen? Gerade in der kalten Jahreszeit sind die Heizkosten ja ohnehin ein Faktor, der nicht zu verachten ist. In diesem Zusammenhang ist mir die Idee gekommen, den CO2-Gehalt der Luft zu messen und mit einer einfachen Zwei-Farben-LED anzeigen zu lassen, wann gelüftet werden muss und ob der CO2-Gehalt in der Luft noch akzeptabel ist.

Diese Hardware wird für die CO2-Ampel benötigt:

MH-Z19C Infrarot CO2 Sensor mit Pinleiste
D1 Mini, alternativ Pro oder Lite
KY-011 Two-color 3 mm oder Kingbright BI-Color Indicator LED + 2 x 100 Ohm Widerstände
Kunststoff Kleingehäuse 72x50x28mm
Dupont Kabel

Benötigtes Werkzeug und Materialien:

3-mm- und 5-mm-Holzbohrer
Bohrmaschine (am besten eine Standbohrmaschine)
Heißklebepistole
Lötkolben und Lötzinn
Kleine Metallsäge
Kleine Metallfeile oder Schleifpapier
Kleiner Kreuzschraubendreher

WARENKORB

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!

So Verkabelst du die Komponenten der CO2-Ampel

Bevor du anfängst, das Ganze in das Gehäuse zu bauen, solltest du zunächst einmal den D1 Mini mit den Sensoren und den LEDs verbinden. Hier solltest du dir die Frage stellen, ob du die Pinleisten vom D1 Mini einlöten möchtest oder ob du die Kabel direkt an den D1 Mini lötest. Ich würde die Kabel direkt anlöten. Das geht schneller und du musst dir nicht überlegen, wie du die zweimal GND auf den einen Pin bekommst.

MH-Z19C anschließen:
RX -> D2 (Orangenes Kabel)
TX -> D1 (Gelbes Kabel)
VIN -> 5V (Rotes Kabel)
GND -> G (Braun Kabel)

Variante 1 mit KY-011 anschließen:

GND -> G (Braunes Kabel)
RED -> D6 (Grünes Kabel)
GREEN -> D7 (Blaues Kabel)

Die Schaltung sieht dabei folgendermaßen aus:

Verkabelung CO2-Ampel Variante 1
So wird die KY-011 LED angeschlossen.

Du musst natürlich keine KY-011 LED für deine CO2-Ampel verwenden, sondern kannst auch eine Kingbright BI-Color Indicator LED verwenden. Diese wird folgendermaßen angeschlossen:

Variante 2 mit Kingbright BI-Color Indicator LED:

Äußere Anschlüsse -> D6 (Grünes Kabel)
Mittlerer Anschluss -> G (Braunes Kabel)
Äußere Anschlüsse -> D7 (Blaues Kabel)

Hinweis: Bei den äußeren Anschlüssen ist es egal, ob D6 oder D7 außen ist. Dies lässt sich per Sketch oder durch Umstecken lösen.

Verkabelung CO2-Ampel Variante 2
Variante der Schaltung mit Kingbright BI-Color Indicator LED.

Jetzt hast du alle Komponenten miteinander Verbunden und kannst den benötigten Sketch auf deinen Mikrocontroller spielen.

So installierst du den Sketch auf dem Mikrocontroller

Sobald wir alles angeschlossen haben, solltest du das Ganze auch testen. Für diesen Zweck kannst du eine der beiden folgenden Vorgehensweisen auswählen – je nachdem, ob du mit Arduino IDE oder ESP Easy arbeitest:

Variante 1 mit Arduino IDE:

Du benötigst die Library von WifWaf die du in die Arduino IDE importierst: Die Library kannst du hier herunterladen. Klicke auf der Seite auf den grünen Button “Code” und danach auf “Download ZIP“. In der Arduino IDE musst du unter „Sketch“ -> „Bibliothek einbinden“ -> „ZIP-Bibliothek hinzufügen…“ die heruntergeladene ZIP Datei (MH-Z19-master.zip) auswählen und auf „Öffnen“ klicken. Jetzt könnst du den nachfolgenden Sketch kopieren, in die Arduino IDE hinzufügen und dann auf den D1 Mini spielen:

#include <Arduino.h>
#include "MHZ19.h"                                        
#include <SoftwareSerial.h>
#define RX_PIN 5         //MH-Z19 RX-PIN                                         
#define TX_PIN 4         //MH-Z19 TX-PIN                                   
#define BAUDRATE 9600    //Terminal Baudrate
#define REDPIN 13     //Pin für Rote LED
#define GREENPIN 12   //Pin für Grüne LED
#define SCHWELLE 1500 //Schwellwert wenn die LED von Grün auf Rot wechseln soll.
//Klassen definierung
MHZ19 myMHZ19;                               
SoftwareSerial mySerial(RX_PIN, TX_PIN); 
unsigned long getDataTimer = 0;
void setup(){
  //LED PIN Mode festlegen
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
  //Serielle Intialisierung
Serial.begin(BAUDRATE);
mySerial.begin(BAUDRATE);                   
myMHZ19.begin(mySerial);
}
void loop(){
  //Prüfung ob 2 Sekunden um sind.
if (millis() - getDataTimer >= 2000){
      int CO2; //Variable darf nur Zahlen enthalten
CO2 = myMHZ19.getCO2(); //Variable schreiben
    //Ermittel ob der Schwellwert überschritten wurde und Schalten der LED
 if(CO2 > SCHWELLE){ 
      digitalWrite(GREENPIN, LOW);
      digitalWrite(REDPIN, HIGH);
      delay(100);
    }else {
      digitalWrite(REDPIN, LOW);
      digitalWrite(GREENPIN, HIGH);
      delay(100);
    }
    //Ausgabe auf den Seriellen Monitor
    Serial.print("CO2 (ppm): ");
                Serial.println(CO2);
    getDataTimer = millis();
    }
}

Wenn der Sketch aufgespielt ist, müsst du ca. eine Minute warten. Anschließend sollte die Lampe rot oder grün leuchten. Falls nicht, ist ein Kabel falsch angeschlossen. Sollte die LED rot oder grün leuchten, solltest du dir die CO2-PPM-Werte anschauen. Das geht über „Werkzeuge“ -> „Serieller Monitor“. Wenn dort die Werte unter 1500 ppm liegen, sollte die LED grün leuchten. Wenn der Wert über 1500 ppm liegt, leuchtet die LED rot. Sollte das bei dir andersrum sein, stecke die Kabel an der LED um oder setze oben in Sketch den REDPIN auf 12 und den GREENPIN auf 13. Den Schwellwert kannst du auch oben in Sketch ändern.

Variante 2 mit ESP Easy:

Diese Variante ist besonders praktisch, weil ich hierbei den aktuellen Wert ganz einfach über den Webbrowser am Computer oder Handy einsehen und auch ohne großen Aufwand den Schwellwert anpassen kann. Zudem benötige ich für den Code weniger Zeilen. Wie ESP Easy installiert und konfiguriert wird, kannst du hier nachlesen.

Wenn du mit der Installation und der Konfiguration von ESP Easy fertig bist, ändere unter „Hardware“ -> „I2C Interface“ den SDA auf GPIO-16 (D0) und den SCL auf GPIO-14 (D5), denn hier ist als Standard D1 und D2 festgelegt und diese brauchen wir ja für unseren Sensor.

ESP Easy

Klicke unten auf „Submit“ und gehe dann auf den Reiter „Devices“, klicke dort auf „Add“ und wähle in der Liste den Sensor „Gases – CO2 MH-Z19“ aus. Trage einen Namen für den Sensor ein und setze das Häckchen bei „Enabled“. Bei „Serial Port“ wählst dz „SoftwareSerial“ und gibst bei GPIO < TX GPIO-4 (D2) und bei GPIO > RX GPIO-5 (D1) ein. Unten rechts musst du noch den Decimals bei allen Werten auf 0 stellen. Da nämlich keine Dezimalzahlen ausgegeben werden, sieht es so schöner aus. Die Temperatur lag bei mir um 4 Grad daneben, daher habe ich bei „Temperature“ im Formula-Teil noch %value%-4 eingegeben. Dadurch geht das System immer von 4 Grad weniger aus, als tatsächlich gemessen wurden. Das Ganze sollte dann so aussehen:

Hier können die Messwerte angepasst werden.

Wenn alles richtig eingestellt ist, klicke auf „Submit“. Danach solltest du unter „Devices“ schon die aktuellen Werte sehen. Jetzt musst du nur noch unter „Rules“ den folgenden Code einfügen:

On CO2Sensor#PPM>0 do
if [CO2Sensor#PPM]>1500
    gpio,13,1
    gpio,12,0
else
    gpio,12,1
    gpio,13,0
endif
endon

Beachte hier, dass CO2Sensor = Name ist und PPM der Wert des Values. Solltest du dies unter „Devices“ ändern, musst du auch unter „Rules“ eine Anpassung vornehmen. Wichtig: immer auf Groß- und Kleinschreibung achten.

Im Code kannst du den Schwellwert anpassen, indem du den Wert 1500 änderst. Sollte die LED-Farbe nicht stimmen, musst du die 12 durch die 13 und die 13 durch die 12 ersetzen.

Das fertige CO2-AMpel Projekt.
Das fertige CO2-Ampel Projekt.

Nun muss nur noch das System in ein Gehäuse eingebaut und der Sensor kalibriert werden.

So baust du die Komponenten der CO2-Ampel in ein Gehäuse ein

Jetzt geht es noch daran, die Konstruktion in das Gehäuse einzubauen. Dazu musst du zunächst für die LED ein 5 mm großes Loch in den oberen Deckel bohren. Anschließend schleifst du dieses leicht ab, damit die Bohrreste verschwinden. Mit dem 3-mm-Bohrer machst du auf der einen unteren Seite mehrere kleine Löcher für den Micro-USB-Anschluss des D1 Mini. Hier sollte man gut schätzen können, damit man die richtige Höhe findet. Danach schleifst du wieder ab. Im unteren Teil auf der anderen Seite sägst du jetzt noch den weißen Teil zurecht. Nutze den MH-Z19 Sensor, um ungefähr einschätzen zu können, wo du sägen musst. Nach dem Einsägen kannst du den Rest vorsichtig rausbrechen. Im Anschluss wieder etwas schleifen. Wenn das erledigt ist, kannst du jetzt alles mit der Heißklebepistole einkleben. Achte darauf, dass sich keine Bauteile an den jeweiligen Enden berühren. Jetzt musst du das Ganze nur noch zusammenschrauben.

CO2-Ampel Gehäuse
Alle Bauteile sind nun im Gehäuse untergebracht.

So kalibrierst du den MH-Z19

Zum Schluss muss noch der Sensor deiner CO2-Ampel kalibriert werden. Hierbei gibt es drei Varianten:

Variante 1 (Auto-Kalibrierung)

Hänge den Sensor für 20 Minuten an die frische Luft (nicht bei Hagel oder Regen und nicht bei weniger als -10 Grad). Der Sensor kalibriert sich alle 24 Stunden mit dem niedrigsten gemessenen Wert. Dabei greift er auf die Werte der letzten 6 Wochen zurück. Empfohlen wird, ihn alle 4 Wochen neu zu Kalibrieren.

Variante 2 (Software-Kalibrierung)

Weiter oben findest du unter dem Punkt „Variante 1 mit Arduino IDE“ die benötigte Library. Wenn diese in Arduino IDE eingebunden ist, findest du unter „Datei“ -> „Beispiele“ -> „MH-Z19“ -> „Calibration“ den Sketch dafür. Hier musst du nur die richtigen RX_PIN (5)/TX_PIN (4) eingeben und den Sketch auf den D1 Mini spielen. Anschließend hängst du die Konstruktion für mindestens 20 Minuten an die frische Luft. Das Prozedere sollte alle 6 Monate wiederholt werden.

Variante 3 (Hardware-Kalibrierung)

Hänge den Sensor für 20 Minuten an die frische Luft. Danach muss der HD-Pin des Sensors für 7 Sekunden auf LOW gestellt werden, z. B. mithilfe eines Schalters. Das Prozedere sollte alle 6 Monate wiederholt werden.

Bei Variante 2 und 3 muss die Auto-Kalibrierung deaktiviert werden.

In Sketch – also über die Arduino IDE – wird dies über den Befehl autoCalibration(false) veranlasst. Den entsprechenden Bereich findest du in ESP Easy in den Einstellungen unter dem Punkt „Auto Base Calibration“. Zum Deaktivieren musst du hier auf „ABC disabled“ und danach auf „Submit“ klicken.

Ich für meinen Teil verwende Variante 1, da ich bei Variante 2 ESP Easy entfernen müsste, um den Sketch nutzen zu können. Bei Variante 3 ist mir der Aufwand, das Gehäuse jedes Mal zu öffnen, zu groß.

Herzlichen Glückwunsch, deine CO2-Ampel ist nun fertig!

Das war auch schon alles zur CO2-Ampel – ich wünsche dir gutes Gelingen! Über Kommentare und gute Bewertungen würde ich mich freuen.

Alle benötigten Teile findest du auch noch einmal hier!

Maik vom BerryBase-Team

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 4.8 / 5. Anzahl Bewertungen: 18

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Über Maik Rygiel

IT-Administrator und Entwickler mit Leidenschaft und interesse zu Basteln.

Kommentare

  1. Die Anleitung hat dafür gesorgt, das meine KY-011 LED das Zeitliche gesegnet hat! Im fritzing-Bild des Autors befinden sich keine Vorwiderstände, in einem Datenblatt (leider nicht auf der Produktseite hier bei berrybase) ist aber sehr wohl davon die Rede. Das ist sehr ärgerlich…

  2. Hallo Berrybase-Team,

    Beschreibung und Anleitung sind sehr gut, externe Stromversorgung zum Testen unabhängig vom Rechner fehlt allerdings. Kann man das Gehäuse E-G02B verwenden? Das heißt, ist das Gehäuse so vorbereitet, dass nur noch die Anbindung des D1 Mini erfolgen muss, natürlich Akku eingesteckt werden müssen und genügend Platz für die angegebene Hardware ist?

    Vielen Dank im voraus

  3. Hallo Katsche,

    vielen Dank, für deine positive Rückmeldung und die damit verbundenen Anregungen.
    Gerne gebe ich dir hiermit ein paar Anhaltspunkte um Thingspeak und das RGB LED Shield in das Projekt zu integrieren. Der einfachheitshalber würde ich das aber nur mit dem ESP Easy Ansatz umsetzten.

    Thingspeak kannst du direkt im ESP Easy Web Interface unter dem Menüpunkt Controller hinzufügen:
    Locate Controller: Use Hostname
    Controller Hostname: api.thingspeak.com
    Controller Port: 80
    Minimum Send Interval: 15000
    Check Reply: Check Acknowledgement
    API Key: Findest du unter API Key den Write API Key
    Enabled: Häkchen rein machen

    Anschließend kannst du deine Werte auf Thingspeak überwachen und dein Channel müsste umgefähr so (https://thingspeak.com/channels/1323215) aussehen.

    Um die RG LED für das RGB Shield auszutauschen, empfehle ich folgende herangehensweise:
    Im Produktionsumfeld, macht es Sinn die benötigten Kontakte direkt mittels Kabel mit dem D1 Mini zu verbinden, anstatt erst die Pins anzulöten.
    Versorge also zuerst neben dem CO2 Sensor auch das Shield mit GND und VCC (bei USB Stromversorgung 5V oder 3.3V). Als nächstes verbindest du Pin D7 des D1 Minis mit D2 des Shields.

    In ESP Easy gehst du unter Devices -> Add und wählst dort: Output – NeoPixel (Basic):
    Name: led
    Enabled: Häkchen rein
    Led Count: 1
    GPIO: GPIO-13 (D7)
    Strip Type: GRB

    Schließlich änderst du noch im Reiter “Rules” das Script:

    On CO2Sensor#PPM=0 do
    NeoPixel,1,0,0,0
    endon

    On CO2Sensor#PPM>0 do
    if [CO2Sensor#PPM]<800
    NeoPixel,1,0,204,0
    endif

    if [CO2Sensor#PPM]>800 AND [CO2Sensor#PPM]<1200
    NeoPixel,1,255,153,0
    endif

    if [CO2Sensor#PPM]>1200
    NeoPixel,1,255,0,0
    endif
    endon

    Jetzt müsste die LED wie gewünscht leuchten und die Daten auf Thingspeak verfügbar sein.

    Gruß Maik

    1. Hallo Maik,

      ich habe mich für deine erste Variante entschieden und habe ein Problem das ich trotz mehrmaliges probieren nicht gelöst bekomme.
      Ich habe den Wemos D1 mini entsprechend deiner Anleitung mit allen Komponenten verbunden und erhalte auch Werte im Serial Monitor jedoch bei Werten unter 1500 ppm schaltet die LED des KY-011 nicht auf “grün”, sondern leuchtet gar nicht, bei Werten über 1500 ppm leuchtet die LED “rot”.

      Ich habe schon die Kabelverbindungen geprüft und umgesteckt bzw. im Sketch geändert jedoch immer das gleiche, die “grüne” LED leuchtet nicht.

      Was könnte ich noch probieren oder woran könnte es liegen (Kabelverbindung oder Sketch)?

      1. Hallo Marc,
        schön das grundsätzlich alles funktioniert wie es soll, zu deinem Problem mit der LED:

        Insofern du den Sketch komplett von meinem Beispiel übernommen hast, würde ich diesen als Fehlerquelle erstmal ausschließen.
        Ich würde dir empfehlen, die beiden Kabel am KY-011 für Rot und Grün zu tauschen und damit zu testen, ob die LED nun grün leuchtet. Wenn dies der Fall ist, liegt der Fehler höchstwahrscheinlich an der Verkabelung, das heißt nochmal nachlöten oder gegebenenfalls das Kabel austauschen.
        Ansonsten könntest du das Kabel noch an einem anderen Pin testen, wobei diesen natürlich im Sketch abändern müsstest.

        Hoffentlich bekommst du das Problem gelöst.
        Gruß Maik

  4. Marc Katscherowski

    Hallo BerryBase-TEAM,

    ich finde die Anleitung klasse und überlege das nachzubauen.

    Ich würde mich freuen, wenn man den Code noch erweitern würde und die Daten an Thinkspeak übergeben könnte.
    Eine weitere Idee wäre anstatt “roter” und “grüner” LED Euren WS2812B RGB LED Shield (Eure Artikel-Nr.: D1-1LES ) einsetzt und eine dritte Stufe “grün, gelb, rot” festlegt und wenn der festgelegte Höchstwert überschritten ist soll die “rote” LED blinken.

    Ich bin leider nicht in der Lage den Code entsprechend umzustellen und hoffe es findet anklang und erweitert diesen bzw. postet es in den Kommentaren.

    Vielen Dank
    Katsche

Hinterlasse ein Kommentar

XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>