Skip to content

Latest commit

 

History

History
95 lines (66 loc) · 8.58 KB

README.md

File metadata and controls

95 lines (66 loc) · 8.58 KB

Mobiler Feinstaubsensor - Raspberry Pi (Software)

Hier finden Sie das Python Programm fuer den Nachbau des Feinstaubsensors auf Basis eines Raspberry Pi, SDS011 Feinstaubsensors und einem GPS Empfaengers wie in der C't 1/2018 beschrieben. Die Bedienung des Feinstaubsensors erfolgt ueber eine Web-Oberflaeche die durch den Flask Web-Server bereitgestellt wird.

Hinweis

Inzwischen wurde das Programm auch fuer die Android-Plattform durch den User "optiprime" portiert. Weitere Details dazu sind im Abschnitt "Mobiler Feinstaubsensor - Android-Variante" weiter unter aufgeführt. Mein Dank für diese Portierung geht an den GitHub User optiprime.

Komponentenliste

Die Liste der Komponenten die Sie benoetigen um den mobilen Feinstaubsensor selber bauen zu koennen finden Sie auf meinem Blog: www.byteyourlife.com

Version 0.1

Die erste Version der mobilen Variante des Feinstaubsensors sah bei mir wie auf dem folgenden Bild gezeigt aus. ByteYourLife - Feinstaubsensor

Version 1.0

Die aktuelle Version des mobilen Feinstaubsensor sieht wie auf dem nachfolgenden Bild gezeigt aus. ByteYourLife - Feinstaubsensor

BME280 Sensor - fuer Luftdruck, Luffeuchte und Temperatur

In den Feinstaubsensor wurde noch ein Adafruit BME280 Sensor fuer Luftdruck, Luftfeuchte und Temperatur integriert. Die Programme wurden entsprechend angepasst. Damit der BME280 Sensor angesprochen wird und die Messwerte in die CSV Datei geschreiben werden muss das Programm "web_feinstaub_bme280.py" und die HTML Datei "index_bme280.html" verwendet werden. Entsprechend muss die Start Datei "feinstaub_start.sh" angepasst werden damit das Programm "web_feinstaub_bme280.py" automatisch nach dem Einschalten des Raspberry Pi gestartet wird.

ByteYourLife - Feinstaubsensor

Wunschliste

Die Wunschliste listet die Funktionen auf die ich noch gerne in das Projekt integrieren möchte.

Sleep / Measure Mode fuer den SDS011 Sensor

Ich würde sehr gerne eine Funktion in mein Programm integrieren die den SDS011 Sensor auch in den Sleep Mode versetzt wenn keine Messung erfolgen soll. Auch wäre es so möglich abhängig von der Geschwindigkeit den Messintervall des SDS011 einzustellen. Den Hinweis dazu habe ich von dem GitHub User luetzel erhalten. Ich habe mir das folgende Projekt jetzt genauer angeschaut und werde wohl auf diesem Code aufsetzen. Frank Heuer SDS011 Python

Mobiler Feinstaubsensor - Android-Variante mit HC-06 Bluetooth Adapter

Da fast alle Android-Handys über einen leistungsfähigen Prozessor, GPS und Bluetooth verfügen, kommt man bei dieser Lösung auch ohne Raspberry-Pi und die externe GPS-Maus aus. Das Python-Programm läuft dann unter Android und die Verbindung zum Feinstaubsensor SDS011 erfolgt über Bluetooth. Prinzipiell wäre auch der Betrieb auf iPhone möglich, wurde aber im Testaufbau mangels Geräteverfügbarkeit nicht weiter verfolgt.

Benötigte Komponenten

Neben dem Android-Handy werden weitere Teile benötigt:

  • Feinstaubsensor SDS011 und Schlauchstück (siehe oben)
  • Bluetooth-Wireless-Modul HC-06 oder HC-05 (Kosten: ca. 4€ - 13€, Amazon, Aliexpress, ...)
  • Powerbank (siehe oben)
  • Altes USB-Kabel zum Anschluss an Powerbank (z.B. von ausrangierter Computermaus oder Tastatur, o.ä.)
  • Software: QPython-App (kostenlos)

Anschluss der Komponenten

Die Hardware-Komponenten werden wie folgt verkabelt:

Verkabelung

Ähnlich wie in der Raspberry-Variante werden sie in eine passende Box gepackt und mit der Powerbank verbunden.

Fotos vom Aufbau

Aufbau1 Aufbau2 Aufbau3

Software-Installation und -Konfiguration

QPython lässt sich kostenlos über den Google Playstore installieren. Bitte nicht QPython3 verwenden, das unsere Code nicht kompatibel mit Python 3.X ist. Nach Start der App ist zunächst das Python-Modul flask zu installieren. Hierzu zunächst auf den oberen Button mit dem gelben Quadrat drücken und im Folgedialog *pip_console.py" oder "pip4console.py" auswählen. In dem sich dann öffnenden Terminal-Fenster das Kommando

pip install flask

eingeben. Nach erfolgreicher Installation kann man mit dem Zurück-Befehl ins Hauptmenü zurückkehren. Die Nachfrage, ob das Programm im Hintergrund weiterlaufen soll, ist zu verneinen.

Im nächsten Schritt legt man eine Kopie der Datei web_feinstaub.py mit Namen main.py an. Das vereinfacht auch den späteren Start des Programms auf dem Handy. In den ersten paar Zeilen von main.py (Konfigurationsblock) tragen wir die Bluetooth-Adresse des HC-06/HC-05 Moduls ein:

# Bluetooth MAC-Addresse des HC05/HC06-Moduls, welcher die Verbindung zum
# SDS011-Sensor herstellt.
sds011_bluetooth_device_id = '20:14:08:13:25:28'

Wer die Adresse nicht kennt, kann sie nach Pairing (PIN 1234 oder 0000) des Android-Handys mit dem HC-06/HC-05 z.B. mittels der App Bluetooth Terminal HC-05 einfach bestimmen. Mit dieser App lässt sich auch die Bluetooth-Übertragung der Feinstaubwerte überprüfen. Da es sich hierbei um Binärdaten handelt, bitte die Darstellung von ASCII auf HEX umstellen.

Nun kopiert man das komplette Programmverzeichnis Feinstaubsensor inklusive aller Unterverzeichnisse auf das Handy in den Internen Speicher und dort in das Unterverzeichnis qpython\projects. Das geht besonders einfach, wenn man das das Handy über den USB mit dem PC verbindet.

Programmstart und -terminierung

Drückt man nun im Hauptmenü von QPython wieder auf das gelbe Quadrat, so erscheint jetzt auch Feinstabsensor in der Programmübersicht. Das Programm läßt sich mit einem Klick starten. Erscheint die schon in der Raspberry-Variante beschriebene Bedienoberfläche:

Android-Programmlauf

Das Programm läuft problemlos im Hintergrund weiter und speichert Messdaten, selbst wenn man das Handy für andere Zwecke nutzt. Über die für die für das jeweilige Androidsystem typischen Gesten kann man das Programm durch Termierung der QPython-App beenden. Ganz wichtig ist, dass man in den Akku-/Stromspareinstellungen des Systems eine Ausnahme für die QPython-App einträgt, sonst wird dem Feinstaubsensor nach wenigen Minuten Laufzeit im Hintergrund der Saft abgedreht und es hagelt Exceptions.

Datenauswertung

Die Messdaten werden im Unterverzeichnis Feinstaubsensor im Internen Speicher des Handys gespeichert. Schließt man sein Handy wieder über den USB an den PC an, so lassen sich die Daten sehr einfach übertragen bzw. sofort in Google Earth öffnen.

SDS011-Mock

Wenn man noch auf die Lieferung seines SDS011 Sensors wartet oder das Zusammenspiel der Komponenten testen möchte, kann man einen Mock, d.h. eine Ersatzkomponente für den Sensor bauen, die schnittstellenkompatibel ist. Hierzu kann z.B. ein Arduino Nano verwendet werden, dessen serielles Interface mit dem HC-06 verbunden wird. Das passende Arduino-Programm ist im Verzeichnis SDS011_Mock abgelegt.

Mobiler Feinstaubsensor - Android-Variante mit USB Adapter

Eine Idee auf die mich Sebastian Müller brachte ist eine Android Variante nur mit einem USB Adapter zu bauen. Noch fehlt mir das Wissen die Programmierung auf Basis der durch "optiprime" entwickelten Android Variante vorzunehmen. Aber der Zugriff ueber das USB Kabel auf den SDS011 Sensor sollte eventuell mit den hier beschriebenen USB Host Serial Facade moeglich sein.

Hier ist schon mal die notwendige Hardware zu sehen.

USB serial Andorid version