Wie man Feinstaub mit einem Raspberry Pi messen kann [Update]

Wie man Feinstaub mit einem Raspberry Pi messen kann [Update]

Wir messen an unserer Schule regelmäßig den Feinstaubgehalt in der Luft. Besonders zwischen Februar und Mai sind die Werte hier in Süd-Ost Asien sehr hoch, da es in dieser Zeit kaum regnet, es sehr trocken und heiß ist und viele Wiesen und Felder abgebrannt werden. Das alles wirkt sich negativ auf die Qualität der Luft aus. Heute möchte ich zeigen, wie man den Feinstaub mit einem Raspberry Pi messen kann. Doch vorher möchte ich kurz auf die Frage eingehen: Was ist Feinstaub überhaupt und was wollen wir messen?

Was ist Feinstaub?

Ganz grob kann man sagen, dass es sich bei Feinstaub um sehr kleine Partikel / Teilchen in der Luft handelt. Man unterscheidet dabei zwischen PM10 und PM2.5 (Particulate Matter, auch Feststoffteilchen). Bei PM10 handelt es sich dabei um alle Partikel in der Luft, die kleiner als 10µm sind, bei PM2.5 entsprechend alle Teilchen, die kleiner als 2.5µm sind. Je kleiner die Teilchen, also v.a. alles kleiner als 2.5µm, desto gefährlicher sind sie für die Gesundheit, da sie bis in die Lungenbläschen eindringen können.

Die WHO empfiehlt z.B. folgende Grenzwerte:

  1. Jahresmittel PM10 20 µg/m³
  2. Jahresmittel PM2,5 10 µg/m³
  3. Tagesmittel PM10 50 µg/m³ ohne zulässige Tage, an denen eine Überschreitung möglich ist.
  4. Tagesmittel PM2,5 25 µg/m³ ohne zulässige Tage, an denen eine Überschreitung möglich ist.

Diese Werte liegen unter den in den meisten Ländern festgelegten Grenzen. In EU ist ein Jahresmittel für PM10 von 40 µg/m³ zulässig.

Was ist der Air Quality Index (AQI)?

Ausgehend von dem Feinstaubgehalt in der Luft kann man den Air Quality Index berechnen. Er gibt an, wie „gut“ oder „schlecht“ die Luft gerade ist. Leider gibt es hier keinen einheitlichen Standard, da verschiedene Länder diesen jeweils anders berechnen oder andere Skalen haben. Der Wikipedia-Artikel zum Air Quality Index liefert dafür einen gute Übersicht. An unserer Schule richten wir uns nach der Einteilung wie sie von der EPA (United States Environmental Protection Agency) festgelegt wurde.

AQI

Soweit ein kurzer Abriss zum Thema Feinstaub und AQI.

Was brauchen wir für die Feinstaubmessung?

Eigentlich braucht es nur zwei Dinge:

  • einen Raspberry Pi (jedes Modell geht, am besten ein Modell mit WLAN)
  • Feinstaubsensor SDS011

SDS011

Das war es schon 🙂 Wer sich für einen Raspberry Pi Zero W entscheidet, benötigt noch ein Adapterkabel auf einen Standard-USB Anschluss, da der Zero nur Micro-USB hat. Den Sensor bekommt man am besten bei Aliexpress. Dort kostet er um die 17-20$. Der Sensor hat eine USB-Adapter für die serielle Schnittstelle mit dabei.

Installation

Für unseren Raspberry Pi laden wir uns das entsprechende Raspbian Lite Image herunter und schreiben es auf die Micro-SD Karte. Dokumentiert ist das z.B. hier. Auf die Einrichtung der WLAN-Verbindung gehe ich an dieser Stelle nicht ein. Dazu gibt es viele Tutorials im Netz.

Wer nach dem Booten gleich SSH aktiviert haben möchte, muss in der boot-Partition einen leere Datei mit dem Namen ssh anlegen. Die IP des Raspberry Pis bekommt man am besten über den eigenen Router / DHCP Server heraus. Danach kann man sich per SSH anmelden (Standardpasswort ist raspberry):

Für unseren Sensor verwenden wir eine kleines Python-Modul, was uns einiges an Arbeit abnimmt. Dazu müssen wir noch einige Pakete installieren und das Repository auf den Pi klonen.

Alle benötigten Pakete sollten jetzt installiert sein und das Modul für unseren Sensor befindet sich in /home/pi/sds011. Unter /home/pi/sds011/Code/text.py gibt es ein Testprogramm, mit dem man den Sensor testen kann. Bevor wir das Programm aufrufen können, müssen wir noch wissen, an welchem seriellen Port der USB-Adapter steckt. dmesg hilft uns weiter:

In der letzten Zeile steht unsere Schnittstelle: ttyUSB0. Wir brauchen jetzt noch zwei Dinge: einmal ein kleines Python-Skript, welches die Daten ausliest und in eine JSON-Datei speichert und dann werden wir eine kleine HTML-Seite basteln, die diese Daten ausliest und darstellt.

Daten auf dem Raspberry Pi auslesen [Update]

Wir erstellen zuerst eine Instanz des Sensors und lesen dann alle 5 Minuten für 30 Sekunden den Sensor aus. Diese Werte können natürlich angepasst werden. Zwischen den Messintervallen versetzen wir den Sensor in einen Schlafmodus, um die Lebensdauer zu erhöhen (Lebensdauer beträgt laut Hersteller ca. 8000 Stunden).

[Update, 27.02.2018] Ich habe festgestellt, das meine Python3 Version des Skripts die serielle Schnittstellen nicht ansprechen konnte, z.B. nach einem Reboot. Erst nach mehrmaligem Starten des Skripts konnten dann die Daten gelesen werden. Woran das liegt, habe ich leider nicht herausgefunden, aber mit Python2.7 funktioniert es ohne Probleme. Deshalb hier eine neue Version des Skripts, welche auf Python2.7 basiert.

Im Homeverzeichnis legen wir eine Datei mit dem Namen aqi.py an und kopieren den folgenden Inhalt hinein:

Schneller geht es mit:

Damit das Skript fehlerfrei durchläuft sind noch zwei kleine Dinge nötig:

Nun kann man das Skript starten:

Skript automatisch starten lassen [Update]

Damit wir nicht jedes mal das Skript von Hand starten müssen, können wir es mit einem Cronjob z.B. bei jedem Neustart des Raspberry Pis mit starten lassen. Dazu öffnen wir die crontab-Datei

und ergänzen am Ende die nachfolgende Zeile:

Nun startet unser Skript automatisch bei jedem Neustart mit.

HTML-Seite für Anzeige der Messwerte und AQI

Weiter oben haben wir bereits einen leichtgewichtigen Webserver lighttpd installiert. Unsere HTML-, Javascript- und CSS-Datei müssen wir also im Verzeichnis /var/www/html/ speichern, damit wir von einen anderem Computer / Smartphone auf die Daten zugreifen können. Mit den nächsten drei Befehlen laden wir die entsprechenden Dateien einfach herunter:

Die Hauptarbeit findet in der Javascript-Datei statt, die unsere JSON-Datei öffnet, den letzten Wert nimmt und anhand dieses Wertes den AQI berechnet. Dann werden noch die Hintergrundfarben anhand der Skala der EPA angepasst.

Nun man die Adresse des Raspberry Pis einfach im Browser aufrufen und die aktuellen Feinstaubwerte betrachten, z.B. http://192.168.1.5:

AQI Website

Die Seite ist sehr einfach gestaltet und kann noch erweitert werden, z.B. um eine Grafik, die den Verlauf der letzten Stunden anzeigt usw. Pull Requests sind willkommen 🙂 Der komplette Quellcode befindet sich auf Github.

Fazit

Für relativ wenig Geld können wir jetzt den Feinstaub mit einem Raspberry Pi messen. Ob draußen fest installiert oder als mobiles Messgerät – Einsatzmöglichkeiten gibt es viele. An unserer Schule haben wir beides im Einsatz. Einerseits einen Sensor der Tag und Nacht die Werte im Freien misst und einen mobilen Sensor, mit dem wir die Effektivität unserer Luftfilter in den Klassenzimmern überprüfen.

So sieht das ganze bei uns in der Schule aus:

AQI Sensor

Unter http://luftdaten.info gibt es noch eine andere Möglichkeit einen ähnlichen Sensor zu bauen. Da bekommt man die Software bereits fertig geliefert und das Messgerät ist noch mal kompakter, da kein Raspberry Pi verwendet wird. Tolles Projekt!

Ein Feinstaubsensor ist ein Projekt, was sich auch gut mit Schülern im Informatikunterricht oder einer Arbeitsgemeinschaft umsetzen lässt!

Wofür setzt du einen Raspberry Pi ein?

10 Gedanken zu „Wie man Feinstaub mit einem Raspberry Pi messen kann [Update]

  1. Danke für den klasse Artikel. Mich würde noch das Gehäuse für den fest installierten Pi/Sensor interessieren und wie der mit Strom versorgt wird.

  2. @Tom: Wir haben alles in einer Plastikbox, in die wir die Teile geklebt oder geschraubt haben. Von außen wir ein Schlauch durch die Wand am Sensor angeschlossen. Ich lade später mal noch ein Bild hoch.

  3. Sehr hilfreich. Danke. BTW: Wie kann ich Text Dateien, die nicht mit txt enden sondern z.B. mit conf oder json in der Vorschau anzeigen?

  4. Danke für die TOP Anleitung. Würde mir noch ein Script für eine RRDtool DB und eine Grafische Auswertung wünschen über bestimmt Zeitpunkte wünschen.

  5. @Hanz: Ja, an eine grafische Auswertung habe ich schon gedacht, aber noch nicht umsetzen können. Das sollte aber keine großes Problem sein.

  6. Hi, danke fürs Script, die Sache mit der grafischen, zeitlichen Visualisierung möchte ich nochmal aufgreifen: Gibt’s evtl. schon etwas fertiges im Netz? Man muss ja das Rad nicht immer neu erfinden.

  7. Zum Thema grafische Auswertung… Schaut euch doch mal das Projekt auf Luftdaten.info genauer an. (z.B. auch was im Git gehostet ist)

    Die NodeMCU’s senden ihre Werte an eine API von Luftdaten.info. Das sollte auch mit dem Raspberry funktionieren und ihr nehmt dann auch am gemeinsamen Sensor Netzwerk teil… Als Bonus sozusagen bekommt ihr die grafischen Auswertungen. (Und ihr seid auch auf der Karte mit dabei) Es gibt dort auch weitere Informationen und Projekte. z.B. kann man sich über das Webinterface die Daten auch an eine eigene (private) API’s schicken lassen… Sprich ein PHP Skript auf einem Server… Das Projekt ist vom OK Lab und ich gehe davon aus, dass alles Open Source ist. PS: ich habe an einem Workshop einen Feinstaub Sensor mit denen gebastelt, war auch sonst schon auf ein paar Veranstalltungen… Bin aber nicht weiter OK Lab Verbandelt… Die „Werbung“ mache ich aus Begeisterung für das Projekt. Hier gelandet bin ich, weil ich die NodeMCU Lösung um einen Raspberry PI ergänzen will. (BTW. Top Anleitung ich freu mich schon, wenn der neue Sensor kommt)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.