Einfache CO2 Ampel

Erstellt von Thore Sommer
Benötigtes Material
  • LED Grün
  • LED Gelb
  • LED Rot
  • MH-Z19B Sensor
  • 4x MW-Kabel Lang für den Sensor
  • 6x MM-Kabel für die LEDS
  • Arduino Uno
  • USB-Kakel für den Arduino
Benötigte Software
Als PDF
PDF-Download
Arbeitsblatt
PDF-Download Lehrer
Lehrerblatt

Beschreibung

Mit dem MH-Z19B lässt sich der CO2 Gehalt in der Luft bestimmen. Hier bauen wir eine einfache CO2-Ampel. Mit dieser lässt sich die Luftqualität im einen Raum schätzen.

Hinweis!

Der Sensor liefert zwar sinnvolle Werte, aber sollte nicht für sicherheitsrelevante Anwendungen verwendet werden.

Verkabelung

MH-Z19B u. LEDsArduino
GNDGND
VIN5V
TX9
RX10
LED Grün2
LED Gelb3
LED Rot4
Schaltplan

Schaltplan

Code-Beispiel

#include <MHZ19.h>
#include <SoftwareSerial.h>

int MHZ_RX_PIN = 9;  // TX Pin von MH-Z19B
int MHZ_TX_PIN = 10; // RX Pin von MH-Z19B

int LED_GRUEN = 2;  // Pin der grünen LED
int LED_GELB  = 3;  // Pin der gelben LED
int LED_ROT   = 4;  // Pin der roten LED

// Objekt für den Sensor
MHZ19 co2Sensor;
// Objekt für die Kommunikation mit dem Sensor
SoftwareSerial co2Serial(MHZ_RX_PIN, MHZ_TX_PIN);

void setup() {
  // Setze LED Pins als Ausagabe
  pinMode(LED_GRUEN, OUTPUT);
  pinMode(LED_GELB, OUTPUT);
  pinMode(LED_ROT, OUTPUT);

  // Starte serielle Schnittstelle zur Kommunikation mit dem Arduino
  Serial.begin(9600);
  // Starte Kommunikationsschnittstelle für den Co2 Sensor
  co2Serial.begin(9600);
  // Starte den Sensor mit der Kommunikationsschnittstelle
  co2Sensor.begin(co2Serial);
  // Schalte automatische Kalibration ab
  co2Sensor.autoCalibration(false);

  // Gebe dem Sensor Zeit zu starten (30 Sekunden).
  delay(30000);
}

void loop() {
  // Hole den CO_2 Gehalt in ppm vom Sensor
  int co2Gehalt = co2Sensor.getCO2();

  // Gebe diesen Wert zur Kontrolle über die Serielleschnittstelle aus
  Serial.println(co2Gehalt);

  if (co2Gehalt == 0) {
    // Das sollte im normalen Betrieb nicht passieren. 
    // Die Luft hat mindestens 400ppm. 
    // Lasse alle LEDs leuchten um Fehler anzuzeigen
    digitalWrite(LED_GRUEN, HIGH);
    digitalWrite(LED_GELB, HIGH);
    digitalWrite(LED_ROT, HIGH);
  } else if (co2Gehalt < 700) {
    // Bis 700ppm lasse die grüne LED leuchten.
    digitalWrite(LED_GRUEN, HIGH);
    digitalWrite(LED_GELB, LOW);
    digitalWrite(LED_ROT, LOW);
  } else if (co2Gehalt < 1500) {
    // Zwischen 700ppm und 1500ppm lasse die gelbe LED leuchten
    digitalWrite(LED_GRUEN, LOW);
    digitalWrite(LED_GELB, HIGH);
    digitalWrite(LED_ROT, LOW);
  } else {
    // Ab 1500ppm rot augeben.
    digitalWrite(LED_GRUEN, LOW);
    digitalWrite(LED_GELB, LOW);
    digitalWrite(LED_ROT, HIGH);
  }

  // Gebe dem Sensor Zeit neue Werte zu messen
  delay(1000);
}

Hier in diesem Beispiel haben wir die Bereiche unter 700ppm CO2, 700 bis 1500ppm und über 1500ppm gewählt. Diese können je nach Bedarf geändert werden.

Werte als Graph darstellen

Mit dem Seriellen Plotter den man in der Arduino IDE unter Werkzeuge findet, lassen sich die Werte auch einfach als Graph darstellen.

Aufgaben

Häufige Fragen und Probleme

Der Sensor gibt nach dem Anschalten falsche Werte.

Das ist normal, nachdem der Sensor startet braucht er ein bisschen Zeit, bis er richtige Ergebnisse liefert. Daher warten wir auch im Code am Anfang 30 Sekunden. Wenn (noch) keine Verbindung zum Sensor besteht, wird eine 0 als Wert zurück gegeben. Sonst startet er bei 5000 und geht dann zum richtigen runter. Nach 3-4 Minuten sollte er die richtigen Werte anzeigen.

!Error: Timed out waiting for response oder nur 0 als Ausgabe

Wenn der Sensor richtig verkabelt ist, sollte dir dieser in regelmäßigen Abständen leicht rot blinken. Wenn dies nicht der Fall ist, nochmal die Verkabelung prüfen und den Arduino vom Strom trennen und nochmal verbinden.

Das Material und dessen Inhalte sind - sofern nicht anders angegeben - lizenziert unter der Creative Commons Lizenz CC BY-NC-SA 4.0 (für den vollständigen Lizenztext siehe https://creativecommons.org/licenses/by-sa/4.0/legalcode )