Mich hat schon seit längerem Interessiert wie viel Staub denn so in meiner Werkstatt rumschwirrt. Kürzlich habe ich den preiswerten Nova PM SDS011 Feinstaubsensor mit USB Anschluss entdeckt. Genau das richtige für ein Werkstattprojekt mit dem Rasperry Pi.
Das Ziel ist die momentane Feinstaubbelastung zu messen und zusätzlich eine Statistik über die Zeit zu erhalten. Dafür verwende ich den Nova PM SDS011 Feinstaubsensor. Den bekommt man für ca. Fr. 25.- bei Aliexpress. Als Server verwende ich einen Raspberry Pi mit Raspian OS. Da mein Raspberry Pi noch kein WLAN hat kommt noch ein USB-WLAN Adapter von Edimax dazu.
- Das Raspian Linux wird ganz normal auf dem Raspi installiert. Einfach der Installationsanleitung für NOOBS folgen.
- Nach dem Start den USB-WLAN stick einstecken, etwas warten und dann oben rechts im Menü das WLAN auswählen, Passwort eingeben, fertig.
- Dann kommt schon der erste Versuch mit dem Sensor. USB einstecken und mal überprüfen ob der Sensor erkannt wird. Das machen wir in dem wir den Kernel Log mit dem Kommando
dmesg
ausgeben. Gegen den Schluss sollte dann irgendwo folgendes stehenusb 1-1.5: ch341-uart converter now attached to ttyUSB0
- Jetzt richten wir die serielle Schnittstelle ein
stty -F /dev/ttyUSB0 9600 raw
- Und schon können wir Daten vom Sensor lesen
od -x --endian=big /dev/ttyUSB0
- Das Resultat sieht dan ungefähr so aus:
0000000 aac0 4000 4600 dead 11ab aac0 4000 4600
0000020 dead 11ab aac0 4000 4600 dead 11ab aac0
0000040 3f00 4400 dead 0eab aac0 3f00 4400 dead
0000060 0eab aac0 3f00 4400 dead 0eab aac0 3f00
… - Als nächstes müssen wir diesen Zahlenwurm in menschenlesbare Messwerte umwandeln. Um das Format zu verstehen, können wir das Datenblatt konsultieren und ein entsprechendes Progrämmchen in Form eines Shellskripts schreiben.
- Damit das Shellskript funktioniert, müssen noch zwei Tools installiert werden:
sudo apt-get install -fym bc wget
- Das Skript stammt ursprünglich aus dem Make Magazin, hatte aber noch Fehler. Die lauffähige Version findest du auf Pastebin.
Wichtig ist, dass in der 3. Zeile ein existierendes Verzeichnis angegeben werden muss. Jedesmal wenn du das Skript startest, wird der Messwert dort in einer Textdatei hinzugefühgt. Die Ausgabe sieht dann so aus:pi@raspberrypi:~/src/bash $ ls -al
insgesamt 16
drwxr-xr-x 3 pi pi 4096 Feb 11 15:34 .
drwxr-xr-x 3 pi pi 4096 Feb 11 15:28 ..
drwxr-xr-x 2 pi pi 4096 Feb 11 15:29 etc
-rwxr-xr-x 1 pi pi 1207 Feb 11 15:34 feinstaub.sh
pi@raspberrypi:~/src/bash $ ./feinstaub.sh
aac0 4200 5200 dead 1fab
aac0
check for correct intro characters: ok
Feinstaub PPM25: 6.6
Feinstaub PPM10: 8.2
pi@raspberrypi:~/src/bash $
- Für die Statistik verwende ich den online Datensammler von Sparkfun. Die Verwendung ist ganz einfach: Unter data.sparkfun.com die notwendigen Daten eingeben und schon erhält man eine URL mit der man die Werte speichern kann. Achtung: Alle Daten sind öffentlich!
- Damit die Daten aus dem Skript zu sparkfun gelangen, muss nur der Kommentar von der letzten Zeile im Skript entfernt werden. Und natürlich müssen die Werte deinem Account angepasst werden.
- Auf der Sparkfun Seite gibt es oben rechts einen Knopf «Export to Analog.io», damit kann man dann eine hübsche Grafik anzeigen.
- Damit jede Minute automatisch eine Messung erfolgt, muss noch ein Cronjob eingerichtet werden. Der Crontabeintrag sieht in meinem Fall folgendermassen aus:
* * * * * /home/bin/pi/src/bash/feinstaub.sh
6 Gedanken zu “Feinstaubmessung mit Raspberry Pi”
Kurz und trocken —- genau was ich gesucht habe.
Gruss aus Madiswil
wget statt wegt, dann klappt es.
Danke für den Hinweis. Ist bereits korrigiert.
Hat sich die Bastelei gelohnt? Sind die Werte aufschlussreich, sodass sich der Nachbau empfiehlt?
Ich verwende den Sensor in meiner Werkstatt. Sobald ich zu schleifen oder sägen beginne, gehen die Werte nach oben. Vor allem wenn Maschinen im Einsatz sind. Ob die absoluten Zahlen korrekt sind kann ich nicht sagen. Aber ich kann sicher feststellen, ob wenig, mittel oder viel Feinstaub in meiner Werkstatt rumschwirrt. Als Indikator zum Lüften sicher ausreichend.
Ich habe mir auch schon überlegt, basierend auf den Messdaten eine Lüfter zu steuern.
Vielen Dank für den Blogartikel. Hat mir sehr geholfen. Klasse Anleitung von der Hardware über die Software bis zum finalen Cronjob.