Arduino basierender CO2 Sensor mit Wifi und MQTT

Einleitung

Der Antrieb für einen CO2 Sensor kam durch den Einbau eines Wassersprudlers. CO2 Flaschen sind eigentlich harmlos. Auch wenn Sie undicht werden. Da wir aber eine 10kg Flasche genommen haben und auch noch Katzen im Haus haben, bewegen wir uns im kritischen Bereich und ich wollte auf Nummer sicher gehen.

Nach einer längeren Recherche nach einem CO2 Sensor welcher seine Daten an meinen Smarthome Server sendet, kam ich zu dem Ergebnis dass es sowas als kommerzielle Lösung nicht gibt bzw. nicht in der Preisklasse von maximal 150€ pro Gerät. Also fing ich an in diversen Bastelforen zu suchen. Wie auch bei meiner Wetterstation kam ich zu dem Ergebnis das eine Arduino basierende Lösung das Mittel der Wahl ist. Zum Glück gab es schon jemanden der eine entsprechende Lösung umgesetzt hat und deshalb die perfekte Basis für meine Bemühungen bot.

Da das Projekt schon etwas älter war, waren einige der verwendeten Bibliotheken veraltet bzw. konnten nicht mehr kompilieren werden. Ich fing also an das Projekt zu überarbeiten und an meine Bedürfnisse anzupassen.

Funktion

Als Hardwareplatform habe ich einen D1 Mini NodeMcu mit ESP8266-12F gewählt, da er einfach über die Arduino IDE programmiert werden kann und gleichzeitig Wifi Unterstützung mit an Board hat. Außerdem ist er vergleichsweise günstig.

Die Daten des Sensors werden in einem einstellbarem Interval ausgelesen und an einen konfigurierbaren MQTT Broker per Wifi gesendet.

Der Sensor selbst ist über sein Serielles Interface an den Arduino angebunden.

Schaltplan

D1 MiniMHZ19B
D1RX (PIN 2)
D2TX (PIN 3)
+5V+5V (PIN 6)
GNDGND (PIN 7)
Schema
JumperErklärung
D0 - RSTAktiviert DeepSleep Support
D5 - GNDSetup / Access Point Mode
D6 - GNDKalibrierungsmodus

Firmware upload

Als erstes lädt man sich die Arduino IDE herunter. Dort muss noch die Unterstützung für den D1 Mini konfiguriert werden. Als Board wählt man anschliessend den “Lolin (Wemos) D1 R2 & mini” aus.

Zusätzlich muss die Bibliothek pupsubclient von github runtergeladen und installiert werden.

Um die Firmware über die IDE hochzuladen muss noch die Brücke zwischen D0 und RST auf dem D1 Mini vorübergehend entfernt werden. Sie verhindert sonst das auslösen des Reset Signals der IDE. Nun sollte einem erfolgreichem Upload nichts mehr im Wege stehen.

Nach erfolgreichem Upload muss man die Brücke D0/RST wieder setzen. Sie ist notwendig für ein reibungsloses Aufwachen aus dem Deep Sleep Mode.

Initiales Setup

Um den Sensor initial einzurichten, einfach eine Brücke zwischen D5 und GND setzen und den D1 Mini neu starten. Hierdurch wird der Setup Modus aktiviert welches durch 2 mal kurzes blinken quittiert wird. Der D1 Mini bootet jetzt im AccessPoint Mode und man kann sich mit dem WLAN mit der SSID “CO2 Sensor Setup” und dem Password “connect1234” verbinden. Über die Adresse 192.168.4.1 erreicht man eine Weboberfläche über welche alle relevanten Einstellungen vorgenommen werden können. Nach dem Speichern und muss die Brücke D5/GND wieder entfernt werden.

Setup

Inbetriebnahme

Nach einem Neustart, verbindet sich der D1 Mini mit dem konfigurierten WLAN (LED Blink Code: 500ms An, 500ms Aus), wartet auf den Sensor (LED Blink Code: 1000ms An, 1000ms Aus) und fängt an Daten zu senden.

Kalibrierung

Zum kalibrieren des Sensors muss eine Brücke zwischen D6 und GND gesetzt werden. Nach einem Neustart aktiviert der D1 Mini den Kalibrierungsmodus (LED Blink Code: 2000ms An, 2000ms Aus) welcher ca. 20 Minuten dauert und im Freien stattfinden sollte. Ist der Kalibrierungsvorgang abgeschlossen, wechselt der D1 Mini in den normalen Modus bei dem er sich mit dem WLAN verbindet und Daten sendet. Die Brücke D6/GND muss jetzt wieder entfernt werden.

Um perfekte Ergebnisse zu erzielen sollte dies alle 6-8 Wochen wiederholt werden.

LED CodeErklärung
2x 500ms An, 500ms AusSetup Modus ist aktiviert
Nx 2000ms An, 2000ms AusKalibrierungsmodus wird ausgeführt (ca. 20 Minuten)
Nx 500ms An, 500ms AusWLAN wird verbunden
Nx 1000ms An, 1000ms AusWarten auf Sensor Warmup
Nx 250ms An, 250ms AusSensor Fehler

Auswertung

Setup

Software

Arduino source code zu diesem Projekt kann wie immer in meinem github repository gefunden werden

https://github.com/HolgerHees/arduino_cos2_sensor

Bauteilliste

https://intranet-der-dinge.de/
https://intranet-of-things.com/