Unsere AirQuality Sensor Box

AirQuality Prototyp

Der aktuelle Prototyp des AirQuality Sensors.

ElektronikDas OK Lab Bonn ist noch jung (mehr über uns in diesem OpenNRW Interview) aber wir sind voller Ideen. So viele Ideen, dass sehr viele leider erst einmal auf der Warteliste stehen bleiben müssen. Schließlich machen wir das alles in unserer Freizeit. Und die ist bekanntlich immer knapp. Trotzdem haben wir schon ein paar Dinge umgesetzt, wie z.B. den Bonn-O-Mat für die Bürgermeisterwahl in Bonn 2015, die Katalogisierung der Bonner Stolpersteine und ein Portal für Eltern, Kinder, Jugendliche. Dennoch wollen wir — ganz dem „Open“ Gedanken folgend — etwas transparenter werden, was wir so machen. Und in diesem Artikel hier soll es um unsere AirQuality Ambitionen gehen.

So fing alles an

Angeregt durch eine entsprechende Initiative des OK Lab Stuttgart (wo es “dank” der Kessellage wirklich ein Feinstaub Problem gibt) haben wir uns gefragt, ob wir in Bonn eigentlich auch ein Luft-Problem haben. Dem ist tatsächlich so, also freuten sich Stefan und Salim, dass sie ihr Elektronik-Bastel-Faible sinnvoll einbringen konnten. Denn leider gibt es für ganz Bonn bisher nur eine einzige, offizielle Messstation für Feinstaub und andere schädliche Gase. Die steht auch noch eher am Stadtrand, in Auerberg.

AirQuality Sensoren

Wenn man ein bisschen in die Recherche zu Feinstaub und Sensoren für selbigen einsteigt, stößt man recht schnell auf einen Sensor-Typ, der nach folgendem Prinzip arbeitet: Staubteilchen werden durch den Luftstrom, der durch einen Heizwiderstand erzeugt wird, nach oben befördert und durchfliegen — vereinfacht gesagt — eine Art Lichtschranke, wo sie einen “Schatten” erzeugen. Die Häufigkeit dieser Ereignisse wird dann gezählt. Man misst z.B. 30 Sekunden lang und zählt wie oft es “dunkel” wurde. Im Datenblatt eines solchen Sensors (z.B. PPD42NS oder DSM501A [PDFs]) gibt es dann Kurven, die die gemessene, prozentuale “Dunkelzeit” letztlich in die Feinstaubkonzentration pro Einheitsvolumen Luft (kann schonmal eine krumme, amerikanische Einheit sein) umrechnen. (Ist ein Polynom 3. Grades, Koeffizienten hat jemand mal experimentell herausgefunden.)

Also haben wir uns ein paar dieser Sensoren bestellt und dann überlegt, wie es weitergeht.

Welche Plattform?

Man fängt ja gern mal an, einen seiner Arduinos auszupacken und so einen Sensor direkt anzuschließen, um zu schauen, ob da Daten rauspurzeln und ob man damit etwas anfangen kann. Das klappte auch relativ schnell. Aber wir müssen ja weiter denken. Am Ende steht das Ziel, dass wir interessierten Bonner Bürgern ein kleines Kästchen in die Hand drücken können, das sie sich zuhause draußen hinstellen und es funkt dann die Messwerte irgendwohin zurück. Da kommen schnell Fragen auf:

  • Wir brauchen offenbar Internet Konnektivität. Aber wie? Netzwerkkabel? Doof. WiFi? Cool, aber wie konfiguriert der Nutzer das für seinen AP zuhause, wenn das Kästchen keine Ein-/Ausgabemöglichkeiten hat. Braucht es die? Braucht es eine App, die mit dem Kästchen spricht? Das Kästchen müsste also bei der ersten Inbetriebnahme selbst AccessPoint sein und sich nach erfolgreicher Konfiguration als normaler Client in das konfigurierte WLAN einbuchen. Aufwändig und setzt voraus, dass der Nutzer zuhause ein WLAN hat.
  • Alternative? Mobilfunk! Ein GSM-Modul und eine SIM Karte? Hm. Da wäre die Connectivity einfacher als mit WiFi, aber wo kommt die notwendige SIM Karte her und welcher Vertrag ist dahinter und wer bezahlt den? Müssen wir uns auf die Suche nach Sponsoren machen?
  • Wo schicken wir denn unsere Daten hin? Brauchen wir einen eigenen Server? Es gibt fertige Messagebroker für solche Anwendungen wie beispielsweise MQTT. Aber was ist dieses MQTT eigentlich?
  • Wieviel Strom darf so ein Kästchen denn verbrauchen? Soll es mit Batterie/Akku laufen? Darf es einen Netzanschluss haben? Wollen wir sogar Solarzellen dranbauen, damit es seinen Akku selbst wieder laden kann?
  • Wo und wie genau muss man es denn aufstellen? In welcher Höhe? Wie nah an einer Wand?
  • Sind die Messwerte, die wir mit einem Feinstaubsensor ermitteln, der um die €10,– kostet überhaupt ernst zu nehmen und vergleichbar mit denen offizieller Messstationen von Land oder Bund?
  • Was machen wir denn mit den Daten dann?
  • Wie hoch dürfen denn die Produktionskosten so einer Box sein? Wann wird sie zu teuer?
  • Welche Umweltgifte wollen wir noch messen? Ozon, SO2, NO, NO2? Lichtverschmutzung? Lärmbelastung? Aber das geht ja dann schon über Luftqualität hinaus.

Aber der Reihe nach …

Internet Konnektivität

Nachdem erste Versuche mit einem Arduino, einem DHT22 Temperatur und Luftfeuchte Sensor und einem Ethernet Shield erfolgreich waren, haben wir eine WiFi Alternative gesucht — und im seit geraumer Zeit bei Bastlern sehr beliebten ESP8266 Chip gefunden. Da er kaum $2 kostet, haben wir gleich eine Hand voll davon eingekauft. Dieses kleine Wunderwerk funktioniert prima — in zahlreichen verschiedenen Varianten. Im einfachsten Fall belässt man die vorhandene “AT”-Firmware darauf, verbindet seine Seriell-Pins (und ein paar mehr) mit dem Arduino. Dann erstellt man sich in seinem Sketch ein Serial Objekt und spricht dann über die serielle Schnittstelle mit klassischen AT-Befehlen [PDF] mit dem ESP8266. Auf diese Weise bucht man ihn in sein heimisches WLAN ein. Das Absenden von HTTP Requests (zum Übermitteln von Sensordaten an einen Server) kann man dann “zu Fuß” selbst auch mit AT Kommandos machen oder man findet eine Library, die das schon gekapselt hat. Aber hier will ich nicht ins Detail gehen. Auch das klappte dann irgendwann.

NodeMCU & LUA

LUA ist eine derzeit hippe Programmiersprache und in der Community wurde mit dem NodeMCU Projekt eine LUA Firmware für den ESP8266 Chip geschaffen. Man kann auch schon fertige LUA-Boards mit EPS8266 Chip kaufen und es gibt eine praktische Oberfläche für die, die nicht alles von der Commandline aus machen wollen oder Eclipse oder andere Tools dafür anwerfen wollen (was aber auch geht). Da wir ziemlich schnell auf Timing-Probleme gestoßen sind, haben wir den LUA Ansatz aber nicht weiter verfolgt.

ST Microelectronics & mbed

So ein Arduino ist eine feine Sache, aber eigentlich ist er für das was er kann zu teuer, zu langsam, hat zu wenig Speicher (RAM wie Flash) und weitere Nachteile. Auf der Suche nach etwas Besserem stolperten wir über die mbed Entwicklungsumgebung für ARM-Prozessorarchitekturen und die Firma ST Microelectronics mit ihrem mbed kompatiblem Nucleo32 Board, was uns schon auf Grund der Cortex M* Prozessorarchitektur und der deutlich höheren Taktfrequenz gefiel (wobei letztere jetzt nicht unbedingt notwendig für unser Projekt ist und wir ja auch auf den Stromverbrauch achten müssen). Via Twitter haben wir STM angesprochen, nach Antwort per eMail unser OK Lab erläutert und unsere Bastelideen. Und wir haben einfach mal gefragt, ob sie uns nicht mit ein paar Boards unterstützen wollen.

Das taten sie sehr gern, denn sie fanden unsere Ambitionen toll! (Und ein paar Discovery Boards mit TFT Touchscreen gab’s noch dazu! Manchmal muss man einfach nur fragen. Haben wir später nochmal bei einer anderen Firma wiederholt, siehe unten…)

Das Setup war von Arduino auf Nucleo/mbed schnell umgebaut und lief dann auch stabil. Aber vom ESP8266 lediglich dessen WiFI Funktionalität via AT-Befehle nutzen? Das gefiel uns nicht so ganz. Der kann mehr!

ESP8266 kann mehr

An dieser Stelle wird es Zeit, zu erwähnen, dass so ein ESP8266 nicht nur ein reiner WiFi Chip ist, sondern auch eine komplette CPU inklusive einiger GPIO Pins, einer Echtzeituhr, einem Analog-Digital-Converter mit (leider nur) einem analogen Input (0..1V) und einer kompletten, existierenden Toolchain für die Programmierung in C/C++. Warum also noch einen “externen” Mikroprozessor, wie einen Arduino oder auch ein STM Nucleo Board nutzen, wenn die Leistung dieses kleinen, im ESP8266 integrierten Mikroprozessors ausreichend ist? Ein Arduino läuft mit 16MHz, ein ESP8266 mit 80 bzw. 160MHz! Und der Kostenunterschied erst!! Natürlich muss man auf den Stromverbrauch achten — wenn man als Ziel hat, die Box mit Akku zu betreiben. Aber wir sind ja noch im Prototypenbau, optimiert wird später!

Leider war es zunächst etwas aufwändig, die vom Hersteller dafür vorgesehene Toolchain an den Start zu bekommen (aber natürlich auch kein Hexenwerk). Es geht jedoch zum Glück seit einiger Zeit deutlich einfacher, denn seit Version 1.6.4 kann man der Arduino IDE andere Board-Architekturen quasi per Plug-In unterjubeln und ein paar findige Freaks haben genau das für den ESP8266 gemacht. Die Installation läuft problemlos und mit einem FTDI- oder CP2102-Dongle (USB↔Seriell) überträgt man sein Kompilat (auch mit 460.800 oder gar 921.600 Baud) direkt aus der Arduino IDE auf den ESP8266 (de facto wird da immer eine komplett neue Firmware im Hintergrund gebastelt, die dann übertragen wird). Das klappt und bringt natürlich schonmal eine willkommene Verkleinerung der Ausmaße der nötigen Hardware, da der ESP8266 im Vergleich zu einem Arduino Uno oder dem STM Nucleo Board deutlich kleiner ist.

Anschluss gesucht

Leider hat so ein ESP8266–01 Modul, wie wir es verwendet haben, nur zwei nach außen geführte GPIO Pins (und der analoge Input ist nicht dabei), was für den Anschluss zahlreicher Sensoren natürlich nicht ausreichend ist. Aber auch da gibt es Abhilfe, denn dieser Chip ist so dermaßen beliebt, dass es ihn in zahlreichen Bauformen gibt — auch solchen, die sämtliche Pins der CPU nach außen geführt haben. Die bulgarische Firma Olimex hat da etwas hübsches und günstiges im Angebot, was wir bestellt haben, das MOD-WIFI-ESP8266-DEV Board.

Und dann sind wir noch über opensensors.io gestolpert, einem öffentlichen und kostenlosen Mosquitto (MQTT) Server (“Broker”). MQTT ist — wie oben schon angedeutet — ein Protokoll, welches sich gerade für IoT Schnittstellen etabliert. Man kann sich auch einen eigenen MQTT Broker aufsetzen, aber für den Moment genügen uns die öffentlichen. Meist ist es so: wenn man seine Sensordaten auch öffentlich bereitstellt — was wir in unserem Fall ja machen würden — , dann sind die Accounts oft kostenlos. Eine (wie auch immer geartete) Visualisierungs-Software kann dann beispielsweise auf ein Echtzeit-Streaming-API des MQTT Brokers aufsetzen oder über das MQTT API direkt erfolgen — inklusive aller historischer Daten. Aber so weit sind wir ja noch nicht.

Mit GSM/GPRS Mobilfunk ins Internet?

Und dann war da ja noch das Thema WiFi vs. Mobilfunk für die Internet-Verbindung. Das würde uns die nicht so einfache Konfiguration der Verbindung zum heimischen AP erleichtern und Mobilfunk gibt es ja heutzutage wirklich fast überall. Denn: wir brauchen ja kein LTE und auch kein UMTS. Wir senden ja nur ein paar Byte und das auch nur vielleicht einmal pro Stunde. Da reicht natürlich schon EDGE.

Zur gleichen Zeit stolperten wir über das C027-G25 Board von U-Blox. Sehr cool: neben einem GSM/GPRS Modul hat es sogar GPS — und wir müssen ja auch die Standorte unserer Boxen kennen, wenn wir später mal die Messwerte geografisch auf einer Karte von Bonn visualisieren wollen. Natürlich kann man sich das manuell notieren, wo man eine Box aufbaut. Aber irgendwann, wenn man mal tausende der Boxen ausgeliefert hat, macht das keinen Sinn mehr und viel cooler ist es natürlich, wenn die Box ihre Position selbst kennt und zurückfunken kann. Das Board basiert, wie die Nucleos auch, auf einem Cortex M3 Prozessor und ist mbed kompatibel — großartig!

Leider ist so ein C027 Modul nicht ganz günstig (UVP ca. €100,–, aber im Netz z.T. für ca. €70 zu haben). Kurzerhand haben wir mal wieder beim Hersteller via Twitter angefragt, ob sie uns da nicht sponsern wollen:

Es ging ein bisschen hin und her, aber schließlich hat es geklappt!

Müssen wir uns jetzt mal anschauen, wie wir mit dem GSM Modul und dem GPS Empfänger in mbed umgehen können. Und da Stefan bei der Telekom arbeitet, ist er natürlich auch dran, von dort ein paar M2M SIM Karten gesponsert zu bekommen.

Zum prototypen ist das sicher gut, aber wenn man dann mal ein echtes Produkt daraus machen will, ist das natürlich auch zu groß, zu teuer, zu überdimensioniert. Aber U-Blox hat die relevanten Module ja auch einzeln im Angebot … 😉

Stabiler Prototyp

Jetzt geht es erst einmal darum, eine stabile Version der Hardware inkl. Software fertigzustellen, damit wir in einen ersten kleinen Friendly User Test einsteigen können, um zu sehen, wie sich alles verhält und wo wir noch verbessern müssen. Stromverbrauch-Optimierungen stehen da ganz sicher ganz oben auf dem Zettel. Das Prinzip ist klar: die meiste Zeit schlafen die Sensoren und die CPU und das WiFi. Man misst ja nicht jede Sekunde, sondern nur alle paar Minuten. Dazu weckt man die notwendigen Komponenten auf und ermittelt die Messwerte. Auch das Versenden an den MQTT Broker muss man nicht jedes Mal machen, wenn man gemessen hat, sondern vielleicht einmal pro Stunde.

So sieht unser aktueller Prototyp aus:

AirQuality Prototyp

Der aktuelle Prototyp des AirQuality Sensors.

Positionierung

Dabei wird es auch interessant, Erfahrungswerte zu sammeln, wo und wie man so eine Sensorbox sinnvollerweise aufstellt. Der Feinstaubsensor der Messstation Bonn-Auerberg ist auf 3,50m Höhe montiert — und es ist keine Wand in der Nähe. Das könnte ja bei einem Balkon oder einer Terrasse schon schwierig werden. Eigentlich gibt es ja immer irgendwo eine Wand oder ein Dach. Und 3,50m sind schon hoch. Wer will sich das schon aufs Dach schrauben? Und wenn die Prototypen noch eine Steckdose brauchen wird’s doppelt knifflig.

Vergleichbarkeit

Und dann ist da noch der Punkt mit der Vergleichbarkeit der gemessenen Werte. Temperatur, Luftfeuchte, Luftdruck sind sicher nicht das Problem, da stellt sich eher die Frage nach der Genauigkeit. Aber die von uns verwendeten Feinstaubsensoren basieren natürlich auf einem ganz anderen Messverfahren als die offiziellen — und kosten auch nur einen Bruchteil. Unsere Werte sind sicher nicht vergleichbar mit den offiziell gemessenen. Aber nichtsdestotrotz sind sie untereinander, relativ vergleichbar und ein Maß für die Feinstaubbelastung.

Ausblick

Wir haben neue Feinstaubsensoren entdeckt, Laser-basiert, die gewisse Vorteile versprechen (vor allem weniger Stromverbrauch). Sie sind unterwegs zu uns. Genau wie Solarzellen, Li-Ion-Akkus und Ladeschaltungen. Luftdruck-Sensoren sind schon angekommen. Alles muss eingebaut werden. Das ist unsere aktuelle Forschungsfront. Stay tuned! 😉

Damian Paderta
Lab Lead OK Lab Bonn