CO2-Sensor für Smarthome selber bauen

Nicht erst seit Corona ist die Messung des CO2-Gehaltes in der Raumluft eine Möglichkeit festzustellen, ob genügend Frischluft (oder Sauerstoff) in einem Raum vorhanden ist. Ich war teilweise überrascht, wie teuer manche Sensorlösungen verkauft werden und habe mich daher entschlossen, einen eigenen Sensor zu bauen, der sich auch einfach in mein Smarthome integrieren lässt. Mit einer kleinen LED möchte ich anzeigen, ob ein vorgegebener Grenzwert überschritten wird. Die Daten des Sensors sollen zyklisch an mein Smarthome-System gesendet werden.

Benötigte Hardware

Als Sensor habe ich mich für einen CO2-Infrarotsensor MH-Z 19C entschieden. Der Sensor sendet seine Informationen über eine UART-Schnittstelle (Tx,Rx-Kanal), besitzt zusätzlich einen Temperatursensor und benötigt eine Versorgungsspannung von 5V. Mit diesen Anschlussmöglichkeiten eignet er sich hervorragend für den Anschluss an einen Wemos D1-Mini (8266 Chip), den ich schon in vielen meiner Projekte verwendet habe. Über diese kann ich dann auch alle Daten an einen MQTT-Broker senden und so die Daten einfach in meinem Smarthome-System weiterverarbeiten. Den Sensor gibt es in verschiedenen Ausführungen, wobei ich mich für die Version mit den Stiftleisten entschieden habe, um den Anschluss zu vereinfachen

Auf dem D1 Mini verwende ich die Tasmota Version 14.3.0. Um den CO2-Infrarotsensor MH-Z 19C an den D1 Mini anschließen und auslesen zu können, benötige ich die Tasmota Sensor Version (alternativ kann man den MH-Z19C auch einfach in der Standardversion aktivieren und spart dadurch viel Speicherplatz auf dem D1 Mini).

Ich erstelle meine Programme gerne mit der Skriptsprache von Tasmota. Da es diese Funktion in den vorkompilierten Versionen von Tasmota nicht gibt, kompiliere ich mir selbst eine Version und flashe den D1-Mini damit. Dies geht sehr einfach und ist im folgenden Artikel von mir beschrieben:Tasmota Scripting aktivieren

Ich empfehle, in der Konfiguration des D1-Mini neben dem WLAN auch direkt einen MQTT-Server anzugeben.

CO2-Sensor anschließen

Der Anschluss des CO2-Sensors ist recht einfach. Als Ergänzung habe ich noch eine rote LED hinzugefügt, die bei Überschreitung eines definierten Grenzwertes aufleuchten soll. Die gesamte Schaltung ist in der folgenden Abbildung dargestellt:

Nun muss der Sensor in Tasmota konfiguriert werden. Dies geschieht über die serielle Schnittstelle mit TX (Sendekanal) und RX (Empfangskanal).

Unter Configure / Configuration Module wähle ich als Module Type "Generic(18)" (steht meistens ganz unten in der Liste) und speichere das. Erst dann kann ich alle meine GPIOs sehen und konfigurieren.

  • GPIO1 (TX) wird auf "MHZ Tx (60)" (Sendekanal) gesetzt.
  • GPIO3 (RX) wird auf "MHZ Rx (61)" (Empfangskanal) gesetzt.

(Tipp: In der langen Liste stehen die beiden Werte im unteren Dritttel).

Um die LED einschalten zu können, wird noch ein Relay benötigt, dass wie folgt definiert werden muss:

  • GPIO5 (D1) wird auf "Relay 1" gesetzt.

Nach dem Speichern und dem automatischen Neustart sollten Temperatur und CO2 Gehalt wie folgt auf der Tasmota Oberfläche erscheinen:

Hinweis: Aufgrund der Vorheizzeit kann es bis zu einer Minute dauern, bevor der Sensor Werte liefert!

Script für LED-Warnung erstellen

Natürlich möchte ich, dass eine rote Lampe aufleuchtet, wenn ein Grenzwert überschritten wird. Bezüglich möglicher Grenzwerte verweise ich auf den folgenden Artikel. Dazu muss ich den Sensorwert auslesen und in einem kleinen Programm das Relais immer dann einschalten, wenn der Grenzwert überschritten wird. Bei dieser Abfrage prüfe ich, ob die LED schon an ist, damit ich nicht ständig den Einschaltbefehl sende. Natürlich schalte ich die LED wieder aus, wenn der Grenzwert unterschritten wird.

Copy to Clipboard

Die Daten können nun vom MQTT-Broker "abgeholt"  und beispielsweise in InfluxDB gespeichert und ausgewertet werden. Wie das geht habe ich in folgenden Artikeln beschrieben

Möglicher Anpassungen

Ich versorge den Sensor über ein USB-Kabel mit Strom. Theoretisch könnte man dies auch mit einer Akkulösung realisieren. Dazu wird dann der Deepsleep-Modus verwendet (siehe hierzu Füllstandssensor (Zisterne) für HMIP selber bauen). Wichtig ist, dass der Sensor eine Vorlaufzeit zur Temperaturanpassung benötigt. Daher sollte der Sensor frühestens nach 1 Minute wieder in den DeepSleep-Modus gehen.

Anstelle einer LED könnte man auch eine mehrfarbige LED verwenden, die den jeweiligen Zustand anzeigt.

Inzwischen habe ich den Sensor auf eine Platine gelötet und mir mit dem Drucker ein passendes Gehäuse gedruckt.