Nicht immer sind hochgenaue und teure Messgeräte zur Bestimmung der Raumluftqualität notwendig. Eine Grobablesung und Grenzwertüberwachung kann auch sehr hilfreich sein, wenn man einfach nur wissen möchte, wann es angebracht ist, einen intensiv genutzten Raum zu lüften. Noch nützlicher wird ein solches Gerät, wenn seine einfache lokale Anzeige um eine Alarmausgabe an Telegram-Accounts auf Smartphones ergänzt wird.Eine hochintegrierte Sensorik, ein moderner Mikrocontroller und ein wenig BASIC-Programmierung machen es bei sehr geringem technischem Aufwand möglich, mit diesem eCO2-Monitor und seinen verschiedenen Anzeigemodi auf vier Arten auf schlechte Luftqualität hinzuweisen:

  • lokale NeoPixel-LED(s) als Luftqualitätsampel
  • Webinterface für lokale Geräte mit einem Webbrowser
  • manuelle Abfrage per Telegram Messenger
  • Telegram-Warnmeldung, die an einen dedizierten Telegram-Benutzer gesendet wird

Möchten Sie einen Artikel im Elektor Mag oder auf unserer Website veröffentlichen? Wir ermutigen sowohl erfahrene Autoren als auch Neulinge, sich auf unserer Einreichungsseite umzusehen!
The Hardware

Die einfache Schaltung in Bild 1 basiert auf einem eCO2-Sensor CCS811 und einem ESP32-SoC-Modul. Die Luftqualität wird durch eine oder mehrere NeoPixel-LEDs dargestellt. Ein einzelner Tastschalter ist mit einem Eingangspin verbunden. Der Sensor und der SoC kommunizieren über einen zweiadrigen I2C-Bus. Die NeoPixel-Anzeige verwendet nur eine Datenleitung am GPIO27, ob nun ein einzelner LED-Punkt oder eine Matrix angesprochen wird.

eCO2 Fig1.png
Bild 1. eCO2-Telegram-Bot mit M5Stack ATOM-Matrix und CCS811 samt Innenschaltung.
(Bildquelle: AMS-Datenblatt)

Obwohl fast jedes ESP32-Modul mit exponierten I2C-Pins für diese Arbeit geeignet ist, empfehle ich einen M5Stack „ATOM matrix“ oder „ATOM lite“. Der Grund dafür ist, dass diese praktischen Geräte einen ESP32-Pico-D4 mit Antenne, eine NeoPixel-Matrix oder einen einzelnen NeoPixel-Punkt, einen Taster und einiges mehr in einem kleinen und formschönen Schutzgehäuse vereinen. So sind der Sensor und das ESP32-Modul fast alles, was man an Hardware braucht, um das Gerät auf einer gewöhnlichen Lochrasterplatine aufzubauen. Dazu steckt man den CCS811 und den ATOM auf entsprechende Buchsen- beziehungsweise Stiftleisten und legt die wenigen notwendigen Verbindungen mit Schaltdraht, wie in Bild 2 gezeigt. Die Unterseite der durchkontaktierten Rasterplatine wird mit Klebeband isoliert.

eco2 210566-016-94-ORIGINAL-Bild 2 Fig2.png
Bild 2. Einfache Verdrahtung der beiden Module auf einer Lochrasterplatine.

Die Schaltung wird über das ESP32-Modul von einem USB-Netzteil (5 V bei maximal 500 mA) versorgt, wahlweise über den USB-C-, den HY2.0-Grove-Anschluss oder die unteren Buchsenleisten.

Der eCO2-Sensor CCS811

Der CCS811-Sensor kann den CO2-Gehalt nicht direkt messen! Es berechnet den äquivalenten CO2-Gehalt (eCO2) durch Messung der tVOC (Total Volatile Organic Compound), wobei die Hauptquelle dieser flüchtigen organischen Verbindungen die vom Menschen ausgeatmete Luft ist.

Dieser preiswerte Sensortyp namens Metal Oxide Semiconductor (MOS) sucht eine relative Basislinie für „gute Luft“, indem er die beste Luftbedingung über einen längeren Zeitraum bestimmt und dann annimmt, dass sich der Sensor zu diesem Zeitpunkt in frischer, unverschmutzter Luft mit 400 ppm CO2 befindet. Aber: Der Sensor speichert diesen Wert nicht von alleine.

Außerdem kann sich die Sensorempfindlichkeit im Laufe der Zeit und unter verschiedenen Umgebungsbedingungen wie Temperatur und Luftfeuchtigkeit ändern. Um also zuverlässige eCO2-Messwerte zu liefern, benötigt der Sensor:

  • eine einmalige Burn-In-Zeit von mehr als 48 Stunden
  • eine Mindest-Einlaufphase von circa 20 Minuten nach jedem Kaltstart.

Das Datenblatt enthält nähere Informationen zum Gassensor.

Die Software

Das Programm wurde mit ANNEX32 entwickelt, einem BASIC-Interpreter für ESP32 [2]. Nachdem man über ein Installationsprogramm und eine serielle USB-Schnittstelle den Interpreter in das Flash-RAM des ESP32-Moduls gebrannt hat, laufen Interpreter samt seiner Entwicklungsumgebung vollständig im ESP32. Es wird nur ein Chrome- oder Firefox-Browser benötigt, um das BASIC-Skript zu laden, zu bearbeiten, zu testen und (automatisch) auszuführen. Die mindestens erforderliche Annex32-Version ist V1.435, da diese CCS811- und Telegram-Messenger-Unterstützung enthält. Die Online-Hilfe für Annex32 ist eine sehr nützliche Einführung in diesen BASIC-Interpreter. Die Hauptaufgaben des BASIC-Codes sind:

  • Der CCS811 wird initialisiert und einmal pro Sekunde nach dem eCO2-Wert gefragt
  • Der eCO2-Status der Umgebungsluft wird als GRÜN, GELB oder ROT eingestuft
  • Die eingebaute NeoPixel-Matrix oder die einzelne NeoPixel-LED zeigt diese Kategorie lokal durch ihre Farbe an
  • Ein Webinterface zeigt den eCO2-Wert und die Kategorie über einen Browser im (W)LAN an
  • Die Kategorie und der eCO2-Wert können manuell per Telegram-Messenger abgefragt werden, da das Programm mit einem Telegram-Bot arbeitet und eingehende Benutzerbefehle vom Telegram-Server abholt
  • Eine Telegram-Warnmeldung wird automatisch an die letzte Telegram-Chat_id gesendet, wenn sich die Luftqualität im roten Bereich befindet (Bild 3)
  • Die Basislinie der Luftqualität kann manuell durch Drücken der Fronttaste des ATOM-Moduls oder durch einen eingehenden Telegrambefehl gespeichert werden
 
Warning message
Bild 3. Warnmeldung: Die Luft ist so richtig mies!

Die Telegram-Bot-Routine fragt die Telegram-Server regelmäßig nach eingehenden Befehlen ab. Sie reagiert auf diese Befehle, wie das Bild 4 beweist.

  • /e gibt den eCO2-Wert und die Kategorie zurück [GRÜN|GELB|ROT]
  • /s speichert den Basiswert in /baseline.txt
  • /r stellt den Basiswert aus /baseline.txt wieder her
  • /i gibt die lokalen IP-Einstellungen des Moduls zurück
  • [jedes andere Zeichen] bewirkt dasselbe wie /e
 
Control via the Telegram bot
Bild 4. Steuerung des Telegram-Bots

Ihr eigener Telegram-Token

Um die Telegram-Funktionen im BASIC-Programm nutzen zu können, müssen Sie zunächst Ihren eigenen Telegram-Bot erstellen, indem Sie den Anweisungen von BotFather in Ihrer Telegram-App folgen. Dadurch erhalten Sie Ihr persönliches Telegram-Token und einen Bot-Namen. Wichtig: Diese beiden Angaben müssen Sie in das BASIC-Programm einfügen, um die entsprechenden Variablen zu setzen.

Die Verwendung von Annex32-BASIC, dessen aktuelle Version Sie stets im Annex-RDS-Forum abholen können, hat sicherlich zumindest den Vorteil, auch für unerfahrene Programmierer gut lesbar und auch an die eigenen Bedürfnisse anpassbar zu sein. Zum besseren Verständnis der Funktionen ist der code dennoch reichlich mit Kommentaren versehen. Dieses Skript wird dann in den webbasierten Editor von Annex32 eingefügt und im ESP32-Modul als Autorun-Datei (/default.bas) gespeichert.

Program excerpt - web page output
Programmauszug: Ausgabe der Webseite

(210566-01) Übersetzung: Rolf Gerstendorf
Dieser Artikel wird voraussichtlich in Elektor Mai/Juni 2023 erscheinen.


Sie haben Fragen oder Kommentare?

Haben Sie technische Fragen oder Anmerkungen zu diesem Artikel? Dann wenden Sie sich bitte per E-Mail an den Autor oder die Elektor-Redaktion.