Arduino Mikrocontroller Tutorials - Module

Transmissions C0₂ Sensor MH-Z19E

Bild MH-Z19E
Funktion Transmission Sensor

Der MH-Z19E Sensor dient zum Messen von CO₂. Das Messprinzip des Sensors beruht auf der Eigenschaft, dass CO₂ Moleküle Wärmestrahlung (IR-Light) absorbieren (gleicher Effekt wie bei de Klimaerwärmung in dem reflektiertes Sonnelicht (Wärmestrahlung) von CO₂ Molekülen zurückgehalten wird).

Beim Transmissions-Prinzip wird in einem kurzen Impuls Wärmestrahlung von einer IR-Lampe ausgestrahlt (beim ZH19E alle 3 Sekunden. Sichtbar durch den seitlichen Lufteinlass). Diese Wärmestrahlung wird am anderen Ende eines Messkanals von einer Thermocouple gemessen. Abhängig der Menge an Wärmestrahlung welche auf dem Weg von CO₂ Molekülen absorbiert wird kommt am Thermocouple mehr oder weniger Energie an. Eine kleinere detektierte Wärmemenge bedeutet einen höherer CO₂ Anteil in der Kammer und eine höhere Wärmeenergie einen geringeren CO₂ Wert.

Pinbelegung
VCC +5V Spannungsversorgung
GND - Spannungsversorgung
NU Not Used
PWM PWM Messwertsignal
Gegenüberliegende Pins werden nicht benötigt.

Ansteuerung des Sensors

PWM Signal MH-Z19E

Die Messwerte vom MH-Z19E Sensor können per PWM Signal ausgelesen werden. Ein Periode ist 1000 ms lang (lt. Datenblatt 1004 ± 5%). Der anteilige 'High Pulse' repräsentiert dabei den Messwert von 400 - 5000ppm.

Im Beispiel rechts ergibt sich ein ppm Wert von (141ms ÷ 1000ms) × 5000ppm = 705ppm.

Lt. Datenblatt muss man noch das Grund-Pulspausenpaar von 2ms HIGH und 2ms LOW abziehen. Der richtig berechnete ppm-Wert ist daher (139ms ÷ 996ms) × 5000ppm = 698ppm.

void setup() { Serial.begin(115200); pinMode(8, INPUT); } void loop() { unsigned int hp = 0, lp = 0; while (digitalRead(8) == HIGH); // warten bis ein evt. anliegender HIGH Pegel beendet ist while (digitalRead(8) == LOW); // warten bis der anliegender LOW Pegel beendet ist while (digitalRead(8) == HIGH) { // Messung des HIGH Pegel delay(1); hp++; } while (digitalRead(8) == LOW) { // Anschließende Messung des LOW Pegel delay(1); lp++; } int ppm = (5000.0 * hp) / (hp + lp); Serial.print(ppm); Serial.println(" (hp: " + String(hp) + "ms | lp: " + String(lp) + "ms)"); delay(3000); }

Mehr Infos