Transmissions C0₂ Sensor MH-Z19E
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
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);
}