Vor allem im Winter und der während aktuellen COVID-19-Pandemie ist regelmäßiges Lüften in geschlossenen Räumen besonders wichtig. Nur dadurch ist es möglich die Luftqualität auf einem konstant guten Level zu halten. Um die Luftqualität, bzw. den Kohlendioxid-Gehalt der Raumluft zu messen eignet sich ein Arduino CO2 Sensor.
Arduino CO2 Sensor – MH-Z19
Zum Messen des Kohlendioxid-Gehalts in der Raumluft wird ein sogenannter MH-Z19B Sensor genutzt. Dieser misst mithilfe des NDIR-Prinzips (Non-Dispersive Infrarot) das Vorhandensein von CO2 in der Luft.
Technische Daten
- Versorgungsspannung: 4,5 – 5,5V DC
- median Stromaufnahme: < 20 mA
- maximale Stromaufnahme: 150 mA
- Interface: 3,3 V (kompatibel mit 5 V)
- Ausgabe: seriell (UART, TTL 3,3 V), PWM oder analoger Output (DAC)
- Aufwärmzeit: 3 min
- Reaktionszeit: T90 <120s
- Arbeitsumgebung: 0 bis +50 °C; rel. Luftfeuchtigkeit 0-90 %
- Messgenauigkeit: ± (50 ppm + 5 % des Messwerts)
- Lebensdauer: > 5 Jahre
Weitere technische Parameter sind im Datenblatt der Herstellers zu finden.
Pinout
PIN | Beschreibung |
---|---|
Pin 1 – Vo | Vout – Output Voltage 3.3V, Output Current lower than 10mA |
Pin 2 – RX | UART RXD – digital input |
Pin 3 – TX | UART TXD – digital output |
Pin 4 – SR | factory reserved |
Pin 5 – HD | factory reserved – zero calibration |
Pin 6 – Vin | Input Voltage |
Pin 7 – GND | GND |
Pin 8 – AOT | factory reserved |
Pin 9 – PWM | Pulse Modulation |
Aufbau und Schaltplan
Im Versuchsaufbau wurden folgende Bauteile verwendet:
Arduino CO2 Sensor – Sketch
// Arduino CO2 Sensor - MH-Z19 Beispiel und Sketch // https://iotspace.dev/arduino-co2-sensor-mh-z19-beispiel-und-sketch int DataPin = 6; int ppmrange = 5000; unsigned long pwmtime; int PPM = 0; float pulsepercent=0; void setup() { pinMode(DataPin, INPUT); Serial.begin(115200); } void loop() { pwmtime = pulseIn(DataPin, HIGH, 2000000) / 1000; float pulsepercent = pwmtime / 1004.0; PPM = ppmrange * pulsepercent; Serial.print("CO2 Konzentration in der Luft in PPM: "); Serial.println(PPM); delay(5000); }
Die ausgegebenen Werte allein sagen natürlich noch nicht viel aus. Um diese besser einschätzen zu können, kann die folgende Tabelle genutzt werden:
CO² Konzentration in ppm | Luftqualität |
---|---|
bis 400 | frische Außenluft |
bis 800 | hohe Raumluftqualität |
bis 1000 | akzeptabel „Pettenkoferzahl“ |
1000–2000 | Hygienisch auffällig |
über 2000 | Hygienisch inakzeptabel |
Mehr zum Thema Arduino Sensoren und Co
Möchtest du mehr interessante Arduino Projekte kennen lernen und weiter in die Welt der Mikrocontroller einsteigen? Dann empfehle ich das Buch Arduino Kompendium: Elektronik, Programmierung und Projekte – damit ist es möglich – auch ohne umfassende Elektronik- und Programmiervorkenntnisse – eigene spannende IoT Projekte umzusetzen.
Hier hat sich ein Fehler versteckt: Serial.begin(152000);
Hallo Bernd,
was genau meinst du?
Der Code funktioniert bei mir problemlos
er wird die Baudrate meinen. Normalerweise nimmt man da 115200
Vielen Dank!
Beitrag wurde angepasst.
Vielen Dank!
Beitrag wurde angepasst.
Hallo,
bei mir liegen die Sensor Werte bei 2300, scheinen viel zu hoch zu sein?
Der Wert wirkt tatsächlich etwas hoch. Komplett unrealistisch ist er aber nicht.
Wenn du den Sensor an ein offenes Fenster bewegst sollte der Wert deutlich niedriger werden und sich bei ca. 500 bis 700 einpegeln.
Am offenen Fenster zeigt er 550 ppm CO2 an.
by the Way, die Folie auf dem Sensor ist zum Transportschutz da und wird zur Messung entfernt?
In die Berechnung des ppm Wertes ist hat sich ein kleiner Fehler eingeschlichen:
Korrekt ist:
> float pulsepercent = pwmtime – 2 / 1000.0;
Laut Spezifikation hat pwmtime Werte von 2 bis 1002ms und encodiert damit Werte von 0 bis 5000ppm.