Permalink

40

#busstop Lampe mit Arduino selber bauen

Klar, ein Blick auf den ausgedruckten Haltestellenplan an der Kühlschranktür, kombiniert mit der Fähigkeit die durchschnittliche Gehzeit von der Abfahrzeit abzuziehen und damit im richtigen Moment zum Bus zu gehen hilft auch den Bus nicht zu verpassen.

Aber eine Lampe, die die Farbe dann wechselt wenn es optimal ist um zur Busstation zu gehen ist nicht nur sexy, sondern ganz einfach zu bauen:

Das ganze ist technisch gesehen einfach und kostet nicht einmal 100 Franken, und da schon einige nachgefragt haben, habe ich mir die Zeit genommen und stelle hier das Projekt näher vor. Damit sollte es für jedermann, der Grundkenntnisse in PHP hat möglich sein, eine solche Lampe in ein paar Stunden zusammenzubauen und zu programmieren. Es wird kein Werkzeug oder Lötkolben benötigt, die Komponenten können ganz einfach zusammengesteckt werden. Aber der Reihe nach…

Benötigtes Material:

In der Schweiz kann man das Arduino Board bei Boxtec oder dshop.ch, der auch die BlinkM LEDs führt, kaufen. Alles zusammen kostet gerade mal 93 Franken. Dazu kommt noch das Lampengehäuse.

Lampengehäuse

Grundsätzliche Schwierigkeit aller Arduino Basteleien ist, dass keine ansprechenden Gehäuse auf dem Markt sind. Hier scheint die Gehäuseindustrie zu pennen oder der Markt ist einfach zu klein. Ich habe für mein #busstop Projekt im Ausverkauf eine Lampe von SCE France zum halben Preis gefunden. Ideal in der Grösse um die Elektronik wohnzimmertauglich zu kaschieren.

Ansonsten ist natürlich fast jede Lampe geeignet, die mit einem Milchglas oder Seidenpapier den Farbwechsel schön unterstützt. Beliebt bei Arduino Bastlern sind übrigens Gläser, bei denen man die Stromzuführung über den Deckel hereinführt.

Arduino, Plug-n-Play OpenSource Prozessor

Obwohl ich schon 2007 zum ersten mal über die Arduino Open Source Plattform geschrieben habe, und seit einiger Zeit auch das Buch Arduino Praxiseinstieg von Thomas Brühlmann habe, habe ich erst jetzt zum ersten mal mit der Plattform auseinandergesetzt. Ich war positiv überrascht, da, im Vergleich zum bisher von mir verwendeten Foxboard der Arduino sofort betriebsbereit ist. Kein Wunder, wird die Hardware auch Künstlern zur einfachen Realisation von Lichtinstallationen und anderen Kunstprojekten empfohlen.

Zum Starten kann man einfach das Arduino Ethernet Board mit dem Kommunikationsboard verbinden, USB Kabel anschliessen und auf dem Rechner die Arduino Software installieren (Linux, Mac OS X oder Windows).

Danach lädt man den Sketch (das Arduino Programm) in den Arduino und schon läuft alles. Beispiele für einfache und komplexere Programme findet man im Internet an allen Ecken und Enden. Es lohnt sich wirklich auch für nicht-Bastler sich das mal anzuschauen.

BlinkM, intelligente RGB Led

Die BlinkM ist eine programmierbare RGB-LED, die über eine I2C Schnittstelle vom Arduino gesteuert werden kann. Man kann sowohl Farbsequenzen speichern oder einfach die Farbe wechseln. Will man nur eine Farbe anzeigen, könnte man auch mit einer einfachen LED arbeiten die man entsprechend ein- und ausschaltet.

Der Vorteil der BlinkM RGB Led ist ist aber, dass man sie ohne weitere elektronische Beschaltung direkt am Arduino einsetzen kann. Will man die Lichtstärke um ca. 30% erhöhen, lohnt sich der seperate Anschluss der Speisung wie im Datenblatt vermerkt.

Fahrplandaten-Mashup

Nun haben wir die gesamte Elektronik, die es ermöglicht, auch ohne laufenden Computer jederzeit zu wissen wann man zur Haltestelle laufen muss. Jetzt brauchen wir noch Fahrplandaten. Eine einfache, aber auch anspruchslose Lösung wäre natürlich das einprogrammieren eines Fahrplans in den Mikroprozessor. Damit könnten wir uns auch die Ethernetanbindung sparen. Aber in Zeiten des Internet of things geht das ja gar nicht. D.h., wir holen uns die Daten direkt aus dem Internet wobei es 3 Varianten gibt.

  1. Echtzeitdaten von Bern Mobil

    In meinem Fall, bekomme ich von Bern Mobil direkt einen JSON Datensatz für meine Haltestelle. Dieser beinhaltet Echtzeitdaten, das heisst, meine Lampe funktioniert auch bei Verspätungen immer noch korrekt! Für diese Anwendung muss man aber den Dateninhaber, in diesem Fall Bern Mobil um einen Zugang für die entsprechende Haltestelle bitten und hat ausserhalb Berns überhaupbt keine Daten.

  2. XML Schnittstelle der Schweizerischen Bundesbahnen

    Meine Recherchen ergaben, dass scheinbar zwar ein inoffizieller Zugang zu den Fahrplandaten der SBB und der assozierten Unternehmen besteht. Anderseits soll es irgendwann 2012 auch eine offizielle API geben. Wäre natürlich eine schöne Lösung, wenn auch dort Echtzeitdaten zur Verfügung stehen, ich will aber jetzt meine #busstop Lampe dokumentieren

  3. Daten von fahrplan.search.ch

    Ich verwende als universelle Datenquelle für jede Haltestelle die Website fahrplan.search.ch, welche ich mit einer einfachen DOM Abfrage parse. Dadurch bekommen wir Schweizweit die notwendigen Daten und können die Schnittstelle einfach an den gewünschten Ort anpassen.

Daten von fahrplan.search.ch parsen

Das Parsen der Fahrplandaten übernimmt ein PHP Skript auf einem normalen Webhost. Dadurch erspare ich mir mühseliges Parsen auf dem Arduino, welches rechenintensiv ist und vorallem auch Libraries benötigen, die den beschränkten Speicher schnell füllen. Auf einem Apache/PHP Hosting wie zum Beispiel von Cyon.ch, können wir mit PHP ganz einfach die notwendigen Daten herausfiltern.


Die Ergebnisse der Haltestellenabfrage von fahrplan.search.ch, hier am Beispiel Bern,Sulgenau können den eigenen Bedürfnissen entsprechend gefiltert und manipuliert werden. Zu beachten ist, dass search.ch jederzeit die Datenstruktur anpassen kann und unser Parser dann unter Umständen nicht mehr funktioniert.

Im Falle von search.ch, parsen wir zuerst die Resultate in ein Array und filtern dann die richtige Linie und die richtige Destination heraus. Hier das entsprechende PHP Script busstop_parser.php.

Das Resultat der PHP Datei auf dem eigenen Webserver liefert direkt einen Status (off, green, red) als Textausgabe, diesen Wert übernimmt der Arduino Sketch und steuert damit die RGB Led.

Der #busstop Arduino Sketch

Bis vor 7 Tagen wusste ich nicht einmal, dass man einem Arduino Programm sketch sagt. Für unsere Anwendung benötigen wir einen solchen Sketch, den man über die Arduino Software (gibts für Linux, Windows und Mac OS X) auf das Ethernet Board lädt.

Dieser Arduino Sketch ruft in definierbaren Abständen mein PHP Script auf dem Webserver auf, das ihm den Status der RGB Led mitteilt. Es werden Rot, Grün und Aus unterstützt. Die Logik des Server Skripts wertet dafür die Abfahrtszeiten von fahrplan.search.ch für eine bestimmte Haltestelle und eine bestimmte Destination aus. Es besteht natürlich die Möglichkeit jegliche andere Informationen im Netz auszuwerten und durch Farbe auf dem Arduino auszugeben. (z.B. Besucher auf einer Website, Goal Conversions etc.)

Wie schon geschrieben, das Skript auf dem Arduino sollte möglichst einfach bleiben. Ich bin sicher der Sketch kann noch vereinfacht und vorallem vielleicht ein wenig robuster gemacht werden. Hier der Code:

Einschränkungen

In der vorliegenden Version kann jeweils nur eine Linie und eine Endstation angezeigt werden. Dies vorwiegend dadurch, dass ein Mix von verschiedenen Linien nicht sehr einfach auf der RGB Led dargestellt werden kann. Grundsätzlich könnte man aber eventuell auf die Rot Phase verzichten und dafür eine Linie mit Rot, eine mit Grün und sofern für beide Linien die Zeit ideal ist, ein Mix der beiden Farben verwenden.

Mögliche Erweiterungen

Wie immer, ich programmiere nur ab und zu, und meistens nach dem try and error system. Für Inputs und Anregungen rund um das PHP Skript und den Arduino Sketch bin ich natürlich dankbar. Bitte nutzt dazu die Kommentarfunktion hier im Blog oder direkt bei den Skripts auf Github.

Ansonsten sehe ich folgende Optimierungsmöglichkeiten für dieses Projekt:

  • Reduktion unnötiger Abrufe

    Die aktuelle Methode mit der direkten Übergabe der Farbe benötigt teilweise unnötige Webrequests. Möglich wäre, die Anzahl der Abrufe zu reduzieren, indem man die Logik in das Arduino Board verschiebt. Durch die Übergabe der Sekunden vom Serverskript an den Arduino, könnte danach entsprechend der Restzeit die Steuerung der Led vorgenommen werden und nach Ablauf der Abfahrt erst wieder eine Verbindung aufgebaut werden. Dadurch würden viele unnütze Abfragen weggelassen.

  • LED Matrix

    Eine schöne Erweiterung wäre auch der Einsatz einer LED Matrix auf der man die Linie mit anzeigen könnte. Im Falle von mehreren Linien würden entsprechend die Nummern alternierend erscheinen. Die Gefahr besteht aber, dass es sehr schnell zu einem nervösen blinkenden Gadget wird, daher für mich auch die Reduktion auf eine Linie.

  • Stromzuführung über PoE

    Damit die Lampe nicht zwei Kabel (Ethernet und Speisung) benötigt, kann das Arduino Board mit einer sogenannten PoE (Power over Ethernet) Erweiterung bestellt werden. Dies benötigt aber zusätzlich auch einen PoE Switch oder einen PoE Injector. Dies schlägt insgesamt mit fast hundert Franken Mehrkosten auf, macht aber das ganze Projekt noch wohnzimmertauglicher.

  • BlinkM Max RGB LED

    BlinkM LED, die etwa 1’000 mal Lichtstärker ist als die Standardvariante. Benötigt in jedem Fall die zusätzliche Speisung und ist wohl wirklich sehr sehr stark.

Vielen Dank an Michu von Neophob für die Inspiration durch sein Stripinvaders Projekt.

Über Anregungen, Erfolgsmeldungen, Fehlerbereinigungen, Optimierungen und Feedbacks freue ich mich natürlich! Viel Spass beim basteln!

40 Kommentare

  1. Pingback: Arduino Ethernet - Marcel Hauri

  2. Pingback: Die M-Lampe • backflash, gadget, kult, lampe, migros • Der LeuMund.ch

  3. Pingback: Der Busstop-Bus • arduino, bus, busstop, lampe, öv, tram, zug • Der LeuMund.ch

  4. Pingback: Bus-Modell als Wartezeitanzeiger bis zum nächsten Bus | Homemade Gadgets

  5. Pingback: Verkehrsdaten für alle – Make Camp 2012 • api, bahn, daten, öv, technologie, tram, verkehr, zug • Der LeuMund.ch

  6. Pingback: Spielzeug für Männer (und Frauen) – Arduino Mikrokontroller Umgebung › TechnikBlog

  7. Pingback: Internet of Things Zurich Meetup am 26.6.2012 • arduino, iot, meetup, zhdk • Der LeuMund.ch

  8. Pingback: Neuer Arduino WiFi Shield • arduino, busstop, diy, wifi • Der LeuMund.ch

  9. Pingback: Philips hue: Die Smarte LED-Lampe für jedermann › TechnikBlog

  10. Pingback: IoT Quantified Self and Citizen Sensing meet up in Zurich

  11. Pingback: Arduino Praxiseinstieg von Thomas Brühlmann • Der LeuMund.ch • arduino, ble, bluetooth, buch, programmieren, prototyp

  12. Pingback: Auf ein Mittagessen mit dem Arduino Gründer | Der LeuMund.ch | arduino, iot, programmieren, prozessor, tech

  13. Pingback: Opendata.ch » Innovationsschub für den Schienenverkehr – Verkehrsdienstleister und Community am selben Tisch

Jetzt kommentieren: