Luftqualitätsmonitor
Projektziel:
- Messung von Feinstaub, Kohlendioxid, flüchtigen organischen Verbindungen, Temperatur, Luftfeuchtigkeit und Luftdruck
- Anzeige der Messdaten auf einem e-Paper-Display
- Konfiguration über ein Webinterface
- Perspektivisch soll ein Außentemperaturfühler eingebunden werden
Elektrischer Aufbau
Mikrocontroller
Das elektronische Herz des Luftqualitätsmonitors ist ein Lolin D32 mit einem EPS32 Mikrocontroller. Der EPS32 hat den Vorzug, ein WLAN-Modul integriert zu haben, so dass der Luftqualitätsmonitor sich beispielsweise die aktuelle Zeit von einem entsprechenden Dienst besorgen und über ein Webinterface konfiguriert werden kann. Außerdem - und das ist die interessanteste Möglichkeit - können weitere Sensoren ihre Daten an die Basisstation übermitteln. Interessant dürfte vor allem ein Außensensor sein.
e-Paper-Display
Die Messergebnisse sollen sollen alle paar Minuten auf einem e-Paper dargestellt werden. Eingesetzt wird das Waveshare e-Paper Display mit 7,5 Zoll Bildschirmdiagonale. Um das Display mit einem Arduino kompatiblen mikrocontroller ansteuern zu können, wird die GxEPD-Bibliothek benötigt.1)
Anschluss des Displays an den Lolin D32 bei Verwendung der Bibliothek GxEPD:
- „3,3V“ (rot): 3V
- „GND“ (schwarz): GND
- „DIN“ (blau): Pin 23
- „CLK“ (gelb): Pin 18
- „CS“ (orange): Pin 5
- „DC“ (grün): Pin 17
- „RST“ (weiß): Pin 16
- „BUSY“ (violett): Pin 4
Im Sketch müssen nur die folgenden Pins definiert werden:
#include <GxEPD.h> #include <GxGDEW075T8/GxGDEW075T8.cpp> // 7.5" b/w #include <GxIO/GxIO_SPI/GxIO_SPI.cpp> #include <GxIO/GxIO.cpp> GxIO_Class io(SPI, SS, 17, 16); GxEPD_Class display(io, 16, 4);
Um nicht auf die Fonts beschränkt zu sein, die mit der Adafruit-GFX-Bibliothek eingebunden werden, wird die Bibliothek U8g2_for_Adafruit_GFX verwendet.
#include <U8g2_for_Adafruit_GFX.h>
U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;
void setup () {
u8g2_for_adafruit_gfx.begin(display);
}
Sensoren
Feinstaubsensor: SDS011
[Ist noch nicht eingetroffen.]
Bibliothek: https://github.com/lewapek/sds-dust-sensors-arduino-library
Luftqualitätssensor: Adafruit SGP30 TVOC/eCO2 Gas Sensor
Der CO2-Anteil und der Anteil flüchtiger organischer Verbindungen wird mit dem Adafruit SGP30 TVOC/eCO2 Gas Sensor gemessen (Datenblat).
SCL: Pin 19 SCK: Pin 18
Ebenfalls ausprobiert habe ich den Adafruit CCS811 Air Quality Sensor, der jedoch im Vergleich zu dem SGP30 einige Nachteile hat. Abgesehen davon, dass er sowohl für eCO2 (400 to 8192 parts per million) als auch für TVOC (0 to 1187 parts per billion) deutlich kleinere Messbereiche hat, korrelieren die Werte für eCO2 und TVOC mit einem Koeffizient von annähernd 1. Der Wert für eCO2 scheint also lediglich das Produkt einer Multiplikation des TVOC-Werts mit einer Konstanten zu sein. Zweitens stehen die Messwerte in keinem nachvollziehbaren Zusammenhang mit Ereignissen wie beispielsweise dem Durchlüften der Wohnung. Mit anderen Worten: Der Sensor misst Mist.
Temperatur-, Luftfeuchtigkeitssensor und Barometer: Adafruit BME280
Schon bei meinem Feinstaubsensor ist mir aufgefallen, dass der BME280 zu hohe Temperaturwerte anzeigt. Er liegt immer 1 bis 2 Grad über den Temeperaturwerten für meinen Wohnort.
Um korrekte Temperaturdaten zu erhalten, muss der Sensor im „forces mode“ betrieben werden.
bme.setSampling(Adafruit_BME280::MODE_FORCED, Adafruit_BME280::SAMPLING_X1, // temperature Adafruit_BME280::SAMPLING_X1, // pressure Adafruit_BME280::SAMPLING_X1, // humidity Adafruit_BME280::FILTER_OFF );
Helligkeitssensor: Adafruit TSL2591 High Dynamic Range Digital Light Sensor
Um den Verschleiß des Displays zu minimieren, wird das Display nur aktualisiert, wenn es so hell ist, dass man das Display auch ablesen kann. Zum Einsatz kommt der Adafruit TSL2591 High Dynamic Range Digital Light Sensor, da ich diesen bereits aus meinem Schlafphasenwecker-Projekt kenne und sehr gute Erfahrungen damit gemacht habe.
Kontrolle über Taster
Um verschiedene Funktionen aufzurufen, werden auf der Oberseite des Gehäuses zwei Taster verbaut.
Funktionen (vorläufig):
- beide Taster gleichzeitig lange gedrückt halten: Einstellen von Datum und Uhrzeit
- einen Taster kurz drücken: verschiedene Anzeigemodi
- einen Taster doppelt drücken: Blättern zu älteren Sensorlogs
Stromversorgung
Da der Teensy recht viel Strom verbraucht hat es keinen Sinn, den Innenraumluftqualitätsmonitor mit einer Batterie zu betreiben. Stattdessen wird der Monitor mit einem externen Steckernetzteil betrieben. Um die Elektronik gegen Überspannung und Verpolung zu schützen kommt der Step-Down Voltage Regulator D24V25F5 von Pololu zum Einsatz. Der ist zwar völlig überdimensioniert, bietet aber neben einem weiten Eingangsspannungsbereich (6 bis 38 Volt) auch einen Verpolungsschutz. Er liefert eine Ausgangsspannung von 5 Volt, mit der der Teensy und der Feinstaubsensor versorgt werden. Das Display und die Sensoren werden mit 3,3 Volt vom Teensy betrieben.
Um die Daten auf ein Datum und eine Uhrzeit beziehen zu können, wird die Echtzeituhr des Teensy mit einer Stützbatterie gestützt.
Mechanischer Aufbau
Der mechanische Aufbau soll so einfach und kompakt wie möglich sein. Das Gehäuse wird gedruckt.
Programmierung
Wie bei allen meinen jüngeren Elektronikbastelprojekten werden wichtige Entwicklungsstufen der Programmierung dokumentiert werden.
- Programmversion 0.1: Die grundlegendsten Funktionen wurden integriert
- Programmversion 0.2: Integriert verschiedene WiFi-Funktionen