Arduino CO2 Sensor – MH-Z19 Beispiel und Sketch

Arduino CO2 Sensor - MH-Z19 - Kohlendioxid

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

Arduino CO2 Sensor - MH-Z19 Pinout
Arduino CO2 Sensor – MH-Z19B Pinout
PINBeschreibung
Pin 1 – VoVout – Output Voltage 3.3V, Output Current lower than 10mA
Pin 2 – RXUART RXD – digital input
Pin 3 – TXUART TXD – digital output
Pin 4 – SRfactory reserved
Pin 5 – HDfactory reserved – zero calibration
Pin 6 – VinInput Voltage
Pin 7 – GNDGND
Pin 8 – AOTfactory reserved
Pin 9 – PWMPulse Modulation
MH-Z19 Pinout

Aufbau und Schaltplan

Im Versuchsaufbau wurden folgende Bauteile verwendet:

Arduino CO2 Sensor Versuchsaufbau – MH-Z19B

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 ppmLuftqualität
bis 400frische Außenluft
bis 800hohe Raumluftqualität
bis 1000akzeptabel „Pettenkoferzahl“
1000–2000Hygienisch auffällig
über 2000Hygienisch inakzeptabel

Mehr zum Thema Arduino Sensoren und Co

Arduino Kompendium Buch

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.

9 Kommentare

    1. 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.

  1. 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.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert