Feinstaubmessung mit Raspberry Pi

Feinstaubmessung mit SDS011

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.

  1. Das Raspian Linux wird ganz normal auf dem Raspi installiert. Einfach der Installationsanleitung für NOOBS folgen.
  2. Nach dem Start den USB-WLAN stick einstecken, etwas warten und dann oben rechts im Menü das WLAN auswählen, Passwort eingeben, fertig.
  3. 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 stehen
    usb 1-1.5: ch341-uart converter now attached to ttyUSB0
  4. Jetzt richten wir die serielle Schnittstelle ein
    stty -F /dev/ttyUSB0 9600 raw
  5. Und schon können wir Daten vom Sensor lesen
    od -x --endian=big /dev/ttyUSB0
  6. 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
    ...
  7. 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.
  8. Damit das Shellskript funktioniert, müssen noch zwei Tools installiert werden:
    sudo apt-get install -fym bc wget
  9. 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 $
  10. 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!
  11. 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.
  12. Auf der Sparkfun Seite gibt es oben rechts einen Knopf "Export to Analog.io", damit kann man dann eine hübsche Grafik anzeigen.
  13. 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

 

3 Comments

Danke!

Danke für den Hinweis. Ist bereits korrigiert.

Neuen Kommentar schreiben