Luftgütesensor mit BME680 und MH-Z14A

Einen BME680 hatte ich ja bereits, unschön aber erfolgreich, an das TTN angebunden, ich hatte aber noch einen zweiten. Zusätzlich hatte ich noch einen MH-Z14A CO2 Sensor und einen Wemos Mini zur Hand. Daraus entstand die Idee einen Luftgütesensor zu machen und die Büroluft zu überwachen. Der Sensor sollte dabei nicht an das TTN angeschaltet werden, da ich nicht genug PINs über hatte, er eh im Büro mit WLAN-Versorgung steht und ich auch direkt per UDP  in InfluxDB schreiben lassen kann. Somit baue ich einen Sensor mit WLAN Anbindung und nicht mit LoRaWAN.

Luftgütesensor
 

Übersicht MH-Z14A

Der MH-Z14A ist für knapp unter 20€ zu haben und bietet gegenüber dem Vorgänger MH-Z14, den Vorteil, das er sich automatisch selbst kalibriert. Ähnlich wie die Wetterstation von Netatmo, geht der Sensor von einem minimalen CO2-Pegel von 400ppm aus, da dieses dem normalen CO2 Gehalt der Außenluft entspricht. Innerhalb von 24 Stunden geht der Sensor davon aus, das der niedrigste Wert 400ppm entsprechen muss und passt seine Messung entsprechend an. Für normal genutzte Räume wie zu Hause oder im Büro, sollte dieses auch passen. Trotzdem finde ich die Zeitspannen etwas kurz, und würde sie gerne auf drei Tage verlänger. Bisher habe ich dafür jedoch nichts gefunden und die Zeit muss zeigen ob die so genannte ABC (Automatic Baseline Correction) alle 24 Stunden ein Problem wird.

Der MH-Z14A, kann auf drei Arten seine Daten ausgaben. Diese wären UART, PWM oder analoges Signal. Ich habe mich für UART entschieden, da es die für mich einfachste Variante war und man sich Umrechnungen spart, da die Werte direkt geliefert werden. Für meinen Luftgütesensor perfekt.

MH-Z14A
 

Aufbau der Hardware des Luftgütesensor

Ich habe alles auf ein Breadboard zusammengesteckt und folgendermaßen miteinander verbunden. Solltet ihr hier etwas ändern, müsst ihr natürlich auch den Arduino Sketch anpassen. Die Pinbelegung des MH-Z14A könnt ihr der Anleitung entnehmen.

 

D1 Mini BME680 MH-Z14A
D1 SCL
D2 SDA
D3 19
D4 18
3.3V VCC
5V 17
GND GND 16

 

Anpassung der Software

Den nötigen Sketch findet ihr auf GitHub. Die nötigen Vorbereitungen, um den BME680 mit BSEC anzubinden, habe ich hier bereits erklärt. Ihr müsst also vorher noch ein paar Dateien kopieren und Einstellungen in der Arduino IDE anpassen.

Natürlich müsst ihr auch noch weitere Settings vornehmen.

  1. Anpassung der WiFi Zugangsdaten
  2. Die IP eueres InfluxDB Servers
  3. Der Port der InfluxDB

[code lang=“java“]
//WiFi Settings
const char* ssid = "Your SSID";
const char* password = "Your PW";

// the IP address of your InfluxDB host
byte host[] = {1, 1, 1, 1};

// the port that the InfluxDB UDP plugin is listening on
int port = 8089;
[/code]

 

Per UDP schreibe ich meine Daten in InfluxDB. Dabei nenne ich das Measurement arbeit, was ihr auch noch anpassen solltet und schreibe immer Temperatur, Luftfeuchtigkeit, Luftdruck, IAQ und CO2 in die Datenbank.

// concatenate the temperature into the line protocol
//line = String("arbeit t=" + temperature);
line += F("arbeit t=");
line += String(temperature);
line += F(",h=");
line += String(humidity);
line += F(",p=");
line += String(pressure/100);
line += F(",iaq=");
line += String(iaq);
line += F(",co2=");
line += String(pulse);
Serial.println(line);


time co2 h iaq p t
---- --- - --- - -
1511530007925440814 655 36.47 178.93 1004.66 25
1511529707908582084 658 36.54 172.22 1004.7 24.95
1511529407905623629 655 36.34 173.53 1004.7 24.97
1511529107888048877 628 36.27 163.44 1004.68 24.91
1511528807872365987 613 36.16 162.07 1004.66 24.89

 

Anpassung InfluxDB

Wie komme ich nun also an die Daten meines Luftgütesensor. Ich schreibe meine Daten in InfluxDB mittel der UDP Methode. Die Methode ist einfach, hat aber einen entscheidenden Nachteil, es ist keine Authentifizierung möglich. Mittels HTTP ist dieses möglich, aber ich hab es nach Mehreren Stunden aufgegeben, ich habe es einfach nicht geschafft. Damit der Zugriff funktioniert, müsst ihr die influxdb.conf in /etc/influxdb anpassen und influxdb neu starten.

Wichtig sind die Punkte enabled, bind-address und database. Ihr müsst enabled auf true setzen, ansonsten funktioniert es nicht. Mittels bind-address sagt ihr auf welchem Port InfluxDB lauschen soll. Der Port muss natürlich noch frei sein und in dem Sketch angepasst werden. Mittels database verweist ihr auf die entsprechende Datenbank, in die ihr schreibt.

Damit hatte ich sofort Erfolg und Daten wurden in die Datenbank geschrieben.

[code lang=“java“]
[[udp]]
enabled = true
bind-address = ":8089"
database = "env"
# retention-policy = ""

# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Batching
# will buffer points in memory if you have many coming in.

# Flush if this many points get buffered
batch-size = 5000

# Number of batches that may be pending in memory
# batch-pending = 10

# Will flush at least this often even if we haven’t hit buffer limit
batch-timeout = "1s"

# UDP Read buffer size, 0 means OS default. UDP listener will fail if set above OS max.
# read-buffer = 0
[/code]

 

2 Gedanken zu „Luftgütesensor mit BME680 und MH-Z14A“

Schreibe einen Kommentar