pills online cheap5pills.com and http://cheap5pills.com/generic-clomid-clomiphene/ and nolvadex 10mg to link.
Permalink

39

#busstop Lampe mit Arduino selber bauen

lampe

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!

39 Kommentare

  1. @Bastian
    Bin natürlich für Verbesserungen gerne zu haben. Hat ja seinen Grund, bin ich Sales Manager und nicht programmierer!

  2. @peter
    Vor 4 Jahren hätte ich sicher versucht daraus irgendwas zu machen das sich verkaufen lässt. Mit Website zur Konfiguration der Haltestelle und und und. Bin froh, kann ich heute einfach so was für mich bauen, die Idee teilen und mich auf wesentliche Dinge konzentrieren. :-)

  3. @Bastian
    Cool, bei dir sieht es ja massig nach basteln aus. :-) Wär ja witzig, wenn die Matrix noch die entsprechende Nummer der Buslinie anzeigen würde. Den Code hast du natürlich sauber als Projekt abgespeichert. Sehr cool. Werde den Blogbeitrag dann noch ergänzen. Ich denke da gibt es noch den einen oder anderen der da mitmacht. Danke auf jeden Fall für deinen input und viel Spass.

  4. ChliiTierChnübler 7. Januar 2012 um 19:56

    Ich kann mir nich helfen, aber das ist verdammt sexy was ihr da sagt @baschti @leumund

  5. @ Christian: Schon wieder so ein Ding, mit dem ich mich verzetteln könnt’ ;-)
    @ ChliiTierChnübler: Das war offensichtlich zu sexy – oder woher kommen die (ausgesprochen ungewohnten) Rechtschreib- und Kommafehler? ;-)

  6. Ein wirklich originelles Projekt. Gratulation Christian.

    Auf die Fahrplan-API bin ich gespannt. Mit den Live-Daten des Fahrplanes könnte man noch viele Erweiterungen deines Projektes realisieren. Da könntest du auch wieder die grosse LED-Anzeige aus deinem Projekt (Feed-Irgendwas ??) von früher einsetzen.

    Hoffentlich hast du mit diesem Projekt beim einen oder anderen Leser das Interesse an Arduino geweckt. Wie man aus der Projektbeschreibung erkennen kann, benötigt man nicht grosse Elektronik-und Programmierkenntnisse. Interesse an etwas Neuem, Fantasie und etwas handwerkliches Geschick reichen schon

    Herzlichen Dank auch für die Erwähnung meines Buches ;-)

    Gruss
    Thomas

  7. Cool! Und zwei Dinge finde ich besonders interessant:

    Einerseits, dass die Bernmobil JSON-Daten liefert. Als ich noch für die damalige Webagentur von Bernmobil arbeitete, war es schon für uns schwierig, an die Live-Daten ranzukommen. Schön, dass es da Fortschritte gibt. Eine öffentliche API wäre sehr wünschenswert.

    Und dann kannst du mir jetzt ja mein Wunsch-Teil bauen: Eine Lampe, die sich per Web-API ansteuern lässt. Die kann man dann z.B. jedes Mal aufleuchten lassen, wenn man im Webshop etwas verkauft hat :)

  8. Toll
    Wollte mich schon länger mal mit Arduino beschäftigen. Da ich z. Zt einen Funkwecker auf dem Bürotisch habe, welcher dann der Metallhülle des Gebäudes immer etwas nachgeht, verpasse ich den Bus regelmässig.
    Werd mir so ein Teil bauen müssen.

    Danke für die Inspiration und Infos

  9. @Chliitierchnübli
    Danke. :-)

    @oli
    Ach, das bestellt man sich und dann läuft das in 30 Minuten.

    @Marcel
    Danke für den Hinweis.

    @Marcel Widmer
    Du könntest ja einen Besucherindikator für die Website von Dominique machen. :-)

    @Thomas
    Danke für dein Feedback. Ich habe deine Mail erhalten, vielleicht hast du aber noch ein paar Tipps hier für die Leser wie man den Code ein wenig optimieren könnte. Insbesonders das Fehlerhandling ist teilweise noch nicht optimal, bei mir passiert es manchmal, dass sich der Arduino aufhängt weil er keine Daten bekommt. Dazu wäre die Erweiterung zur Reduktion der Zugriffe nicht schlecht, Bastian hat scheinbar schon Probleme gekriegt mit dem Parsen der search.ch Website.

    @stoipi
    Cooler Link zum dezibert. :-) Danke

    @sprain
    Ich denke mal du kannst das ganz alleine. Die Vorlage hast du ja, die Frage wäre dann noch, wie man sowas vom Webserver zum Arduino pushen könnte.

    @Gion
    Viel Spass!

  10. Pingback: Arduino Ethernet - Marcel Hauri

  11. cool, thx @leumund für den Beitrag! wenn ich auch kaum dazu kommen werde, dies oder was ähnliches selbst zu bauen… Aber zu wissen dass und wie es gehen würde, ist auch schon was ;-)

  12. @sprain & @leumund: ein einfaches pushen könnte so umgesetzt werden:
    – dein zuhause meldet die heim-ip über einen dynamischen dns-service (zb. dyn.com) an die aussenwelt (viele leute haben ein NAS welche diese funktion in der software eingebaut haben)
    – der dns-dienst stellt die heim-ip unter einer URL, zb. funkyarduinoproject.dyn.com zur verfügung
    – der router zuhause wird per NAT so konfiguriert, dass eingehender netzwerkverkehr auf bspw. port 45’000 an die ip des arduino boards weitergeleitet wird
    – der webserver baut nach belieben eine verbindung zur adresse aus schritt 2 auf und übermittelt notwendige daten

    voilà :-)

  13. @m@nu
    Danke für deinen Hinweis. Stimmt, ich hatte ja auch mal ein Plugin gemacht für WordPress, welches neue Kommentare an mein Feedboard gepusht hatte. War in etwa dasselbe Prinzip. Ich überlege mir grad mal eine Demo Software für Arduino zu schreiben. Dann könnte man wirklich bei jedem Verkauf eine Lampe blinken lassen. :-)

    Ich habe sogar eine fixe IP, also kann ich einen beliebigen Domainnamen auf meinen Hausanschluss mappen. Die einzige Frage die ich schon länger habe, wie ist es möglich, z.b. mehrere Subdomains wie arduino.leuhome.ch und diskstation.leuhome.ch auf IP Adressen im Heimnetz zu routen? (jeweils z.b. Port 80)? Was benötige ich dazu?

  14. @leumund: das kannst du problemlos machen. im prinzip hast du dann das gleiche konzept wie wenn du auf einer maschine mehrere websites mit verschiedenen domains hosten würdest (da entscheidet nähmlich erst der installierte webserver darüber, welche website jetzt eigentlich angezeigt werden soll)

    möchtest du bei einem spezifischen port landen, musst du lediglich die url um den port erweitern, also zum beispiel: arduino.leumund.ch:45000

  15. @m@nu
    Und mit was für einem Teil könnte ich das machen? Gibt es entsprechende Router Software oder einenTrafficverteilerserverapp?

  16. @lemund
    bei deinem router findest du irgendwo eine konfigurationsmöglichkeit die sich “NAT” oder “Portweiterleitung” nennt. hier trägst du zwei dinge ein:
    – die IP deines arduino sowie den port, auf welchem dieser die verbindungen erwartet
    – weiter musst du den port definieren, welcher von aussen an den arduino weitergeleitet wird.

    weitere infos zu NAT findest du hier: http://de.wikipedia.org/wiki/Network_Address_Translation#Verwendung_von_Destination-NAT

  17. @m@nu
    Ja, Nat und Portweiterleitungen sind mir bekannt. Ich möchte aber ein System, mit dem ich beliebige Domains (und Subdomains) ohne Angabe von Port Nummer auf verschiedene interne Geräte umleiten kann. Also arduino.leuhome.ch auf die .10, synology.leuhome.ch auf die .11 und vielleicht noch foxboard.leuhome.ch auf die .30. Also müsste ich einen DNS Server haben der die Verteilung nach innen macht? Im Router würde ich dann wohl einfach mal alle request zu diesem Server schicken?

  18. @leumund
    ah! jetzt versteh’ ich was du meinst:
    dies ist mit DNS alleine nicht zu lösen. eine url ist jeweils nicht an einen bestimmten port gebunden.
    eine mögliche lösung wäre eine proxysoftware hinter deinem router, welche anhand der url im http-request den traffic auf entsprechende geräte und deren ports verteilt.
    diese lösung würde dann jedoch NUR mit http-requests funktionieren, denn andere protokolle haben normalerweise nicht die ziel-url in ihrem inhalt stehen.

    hmmm, da juckt es mich grad’ ein bisschen in den fingern ;-)

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

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

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

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

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

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

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

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

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

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

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

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

Jetzt kommentieren: