Dieses Repository enthält die Software für eine CO2-Ampel mit LCD Display, welche kontinuierlich die CO² Konzentration in der Umgebungsluft misst. Die gemessen Werte werden als Zahlenwert (ppm) und in einer Ampel-Darstellung (Ok, Hoch, Kritisch) ausgegeben.
Optional kann die Ampel per WLAN mit dem CO2-Server verbunden werden, welcher die gemessenen Werte protokolliert und auswertet.
In Zeiten der Corona-Pandemie ist neben dem Tragen von Masken und dem Einhalten eines Mindestabstands ein regelmäßiges Lüften von gemeinsam genutzten Räumen sehr wichtig. Anhand der CO² Konzentration lässt sich die Güte der Umgebungsluft abschätzen, insbesondere der Anteil der Ausatemluft, welche potentiell gefährliche Aerosole enthalten kann. Mappt man die gemessenen Werte auf eine Ampelanzeige, kann hierüber eine Lüftungsempfehlung für den betroffenen Raum gegeben werden.
Eine detailliertere Erklärung finden Sie im Artikel Der CO2-Warner für die Schule des Make: Magazins 5/2020 des Heise Verlags.
Benötigte Hardware
- MHZ19 Sensor
- HD44780 LCD Display mit I2C Adapter
- Wemos D1-Mini
- Header und Kabel, ggf. Lüsterklemme
- Micro-USB Kabel
- Gehäuse (3D-Druck oder einfach eine Verpackungsbox, z.Bsp. Lindt Hello Schokolade)
- Optional: Power Bank (für mobile Nutzung)
Die Spannungsversorgung für Sensor und Display erfolgt über den 5V Pin des D1-Mini, welcher wiederum über den USB-Anschluss mit Spannung versorgt und programmiert wird.
Die Pinbelegung wurde so gewählt, dass die Schaltung zur Neuprogrammierung nicht vom D1-Mini getrennt werden muss (TX und RX bleiben frei). Die eingebaute LED des D1-Mini kann noch verwendet werden (via D4). Außerdem stehen noch 2 GPIO-Pins mit Pull-Up/Down Widerständen zum Anschluss von optionalen Tastern zur Verfügung (D3 und D8).
Die Bauteile sind wie folgt zu verschalten. Bei den mehrfach verbundenen Pins (5V und G) kam eine Lüsterklemme zum Einsatz.
D1-Mini | MHZ19 Sensor | HD44780 LCD Display |
---|---|---|
5V | VIN (rot) | VCC |
G | GND (schwarz) | GND |
D1 | SCL | |
D2 | SDA | |
D5 | TXD (grün) | |
D6 | RXD (blau) |
Der Sensor verfügt neben zwei Pin-Reihen, an welche Header angelötet werden können, auch über eine kleine Steckverbindung, welche ebenfalls die nötigen Pins zur Verfügung stellt.
Hiervon werden lediglich die Pins 3 (GND), 4 (Vin), 5 (RXD) und 6 (TXD) benötigt.
Um das HD44780 LCD Display mit I2C ansprechen zu können, ist ein I2C-Adapter nötig. Für eine native Ansteuerung über den parallelen Datenbus (6 Pins für 4 Bit Datenbus, R/W und Enable) sind am D1-Mini zu wenig Pins verfügbar.
Der I2C-Adapter bietet zusätzlich die Möglichkeit, die LCD Hintergrundbeleuchtung via Software ein- und auszuschalten. Hiermit könnte man die Anzeige beim Erreichen der Warn-Schwelle blinken lassen.
Außerdem verfügt der I2C-Adapter über 2 Pins um die LCD Hintergrundbeleuchtung zusätzlich per Schalter ein- und auszuschalten zu können. So könnte man die Anzeige bei Dauereinsatz der CO2-Ampel über Nacht abschalten.
Zur Umsetzung einer Menüsteuerung können optional 2 Taster angeschlossen werden.
Aktivieren Sie das Define #define has_buttons
am Anfang der Datei src\main.cpp
wenn Taster angeschlossen sind.
Durch Verwendung von GPIO-Pins mit internen Pull-Up/Down-Widerständen sind keine separaten Vorwiderstände nötig.
D1-Mini | Taster 1 | Taster 2 |
---|---|---|
5V | x | |
G | x | |
D3 (Pull-Up) | x | |
D8 (Pull-Down) | x |
Ohne die Verwendung von Tastern ist die Ampel immer im Messmodus.
Ansonsten wechselt Taster 1 in ein Auswahlmenü zwischen:
- Messmodus
- Kalibrierung
- Infoanzeige
Taster 2 aktiviert die gewählte Funktion bzw. schaltet die Infoanzeige zwischen folgenden Werten um:
- Laufzeit der Ampel
- Letzter Fehlercode des Sensors
- Genauigkeit des Sensors
- Hintergrund CO²-Wert
- Version des Sensors
Am GPIO Pin D7 kann eine optionale Multicolor LED mit WS2812 Controller Chip angeschlossen werden.
Aktivieren Sie das Define #define has_statusled
am Anfang der Datei src\main.cpp
wenn die LED angeschlossen ist.
Wenn aktiviert wird der Ampel Status über die Farbe der LED visualisiert:
- Violett - Software startet und Verbindung zum WLAN wird aufgebaut (bei Verwendung des CO2-Servers)
- Blau - Initialisierungsphase direkt nach dem Start der Ampel (1 Minute)
- Grün - CO2 Konzentration niedrig
- Orange - CO2 Konzentration im Warn-Bereich
- Rot blinkend - CO2 Konzentration im kritischen Bereich. Lüften erforderlich.
Benötigte Software unter Windows 10:
Weitere Tools werden automatisch als VS Code Plugins installiert, sobald der Root-Ordner dieses Repositories in Visual Studio geladen wurde:
-
VSCode und Git müssen installiert sein
-
Windows Eingabeaufforderung öffnen (z.Bsp. mit
[Win]-R
,cmd
,[Enter]
) -
In den Ordner wechseln, der Code-Repositories enthalten soll (z.Bsp.
Source\Repos
) und dieses Repo mit Git klonen:cd mkdir Source\Repos cd Source\Repos git clone https://github.com/ramdacxp/co2-ampel.git cd co2-ampel
-
In den neu angelegten Ordner wechseln und diesen in Visual Studio Code öffnen (
File > Open Folder ...
oder auf der Kommandozeile mitcode .
) -
Die vorgeschlagenen Erweiterungen (u.A. Platform IO) installieren
-
Das Projekt übersetzen mit
Terminal > Run Build Task
Der C++ Quellcode der CO²-Ampel befindet sich in der Datei src\main.cpp
.
Diese CO2-Ampel bietet optional die Möglichkeit, die Messwerte per WLAN an einen CO2-Server zu senden. Dieser Server kann die Messwerte von mehreren Datenquellen im CSV-Format speichern und für Auswertungen bereitstellen. Er bietet eine grafische Anzeige der Verlaufs der CO² Konzentration über die Zeit.
Der Server kann auf einem eigenen Rechner im lokalen WLAN betrieben. So müssen keine Messwerte an Dienste im Internet übertragen werden. Der Server ist in Docker lauffähig. Fertige Docker-Container für Window, Linux und Raspberry Pi stehen zur Verfügung.
Um die Serverunterstützung zu aktivieren:
- Aktivieren Sie das Define
#define use_co2_server
am Anfang der Dateisrc\main.cpp
. - Kopieren Sie
credentials-sample.h
nachcredentials.h
und tragen Sie hier die WLAN Zugangsdaten ein. - Passen Sie
SERVER_POST_URL
an die Adresse des zu verwendenden CO2-Servers an.