Benutzer-Werkzeuge

Webseiten-Werkzeuge


arduino:innenraumluftqualitaetsmonitor

Innenraumluftqualitä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

https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout?view=all#overview

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.

Tags: Arduino Luftqualität Teensy

1) Es gibt auch andere Bibliotheken. Nur ein Beispiel findet sich hier.
Auf dieser Seite werden Cookies für die Bereitstellung personalisierter Inhalte und die Seitenanalyse mit Matomo verwendet. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Weitere Information
arduino/innenraumluftqualitaetsmonitor.txt · Zuletzt geändert: 08.08.2018 14:15 von Frickelpiet