Schlagwort-Archive: Arduino

Mit LoRaWAN Lichter blinken lassen

Mir fiel die Tage auf, dass es wenige verstaendliche Anleitungen fuer LoRaWAN-Spielereien auf Deutsch gibt – was schade ist, weil a) die Technik zu Spielereien geradezu einlaedt und b) wir in Ulm ein recht enges Netz an Gateways haben.

Deswegen hier die kurze Dokumentation, wie wir ueber LoRaWAN Lichter an- und ausgeschaltet haben. Der verwendete Code ist vollstaendig auf github und ist zu ueberwiegenden Teilen von @Nitek geschrieben worden.

Teil 1: Der Empfaenger

Das wirkt jetzt etwas unintuitiv, aber weil das der einfachere und guenstigere Part ist, fangen wir mal mit dem Empfaenger an 😉

Verwendete Teile waren:

  • NodeMCU (oder WeMos D1 oder sonst irgendetwas ESP8266-basiertes)
  • WS2801-basierte RBG-LED-Lichterkette
  • Jumperkabel zum Verbinden der letzteren beiden Teile

Der Code basiert zu groessten Teilen auf dem Basic MQTT ESP8266 Example, und arg viel mehr ist es auch nicht. Der WiFiManager erspart uns, die WLAN-Credentials hart einzuprogrammieren, und am Ende geht es nur mehr darum, den passenden TTN-MQTT-Server einzutragen:

  • MQTT_USERNAME: Der Name der Application in der TTN-Console
  • MQTT_SERVER: Der URI des Handlers – laesst sich ueber die Application Settings in der TTN-Console ueber Settings → General → Handler herausfinden (z.B. eu.thethings.network)
  • MQTT_PASSWORT: Ein Access Key, am besten einer, der nur die Messages lesen und ansonsten nichts einstellen/konfigurieren kann. Den Key kannst du ueber „Settings/Access Keys“ in der TTN-Console anlegen, anschliessend taucht er im Console-Overviews auf und kann durch Klick auf das Augen-Symbol angezeigt werden (siehe Abbildungen unten, z.B. „ttn-account-v2.2[…]“)

Im Sketch selber (ja, da gehoert’s eigentlich nicht hin) sind noch PLACEID und MQTT_DEVICE zu definieren. PLACEID legt fest, auf welche Integer in der MQTT-Payload die Node reagiert. Steht hier z.b. ‚1‘ und in der Payload wird die 1 mitgeschickt, schaltet die Node ihr Licht ein. MQTT_DEVICE muss fuer jede Node eindeutig anders sein – d.h. selbst wenn mehrere Nodes auf dieselbe Payload reagieren sollen, brauchen sie unterschiedliche Device-Namen. Sonst kegeln sie sich bei der Registrierung im Endlosloop gegenseitig aus dem MQTT-Server.

Alles andere im Code ist lediglich Standard-Registrierung am Server und eine etwas laengliche Definition der LED-Lichterkette, die sich einschalten und beim Abschalten kurz rot leuchten soll. Das war’s auch schon.

Teil 2: Der Sender

Der Sender ist etwas komplizierter – erstens, weil ja ein „User Interface“ (sorry :D) dazugehoert, und weil das LoRa-Shield angesteuert werden muss. Notwendige Teile sind:

  • Stinknormaler Arduino Uno (oder Klon)
  • Dragino LoRa Shield (868 MHz) mit Rubberduck-Antenne
  • TM1638 LED and Key Module (unter dem Namen leicht in den einschlaegigen Shops zu finden)
  • DuPont-Verbindungskabel fuer Key/LED-Modul und Arduino

Der Arduino-Sketch ist auch relativ schnell gegessen: NWKSKEY[16] und APPSKEY[16] sind jeweils der Network Session Key und der App Session Key aus der TTN Console (ueber die Application → Devices → Dein registriertes Device). Wenn in der TTN Console DEADBEEF… steht, wird das im Sketch als { 0xDE, 0xAD, 0xBE, 0xEF, …} gespeichert. DEVADDR ist analog die Device Address aus der TTN Console.

Abhaengig vom abgefangenen Knopf auf der UI-Platine wird der Payload nun ein Integer uebergeben – und das wird in doSend() abgeschickt. Mehr gehoert nicht dazu 🙂

Und wozu das Ganze?

Das eigentliche Ziel war, an einem Aussichtspunkt ueber der Stadt ein Knopfbrettl mit spannenden Landmarken in der Stadt anzubringen, das mit LoRaWAN in die Stadt funkt. Und wer dort beispielsweise auf „Schwoerhaus“ drueckt, laesst eine auf den Punkt gerichtete Lampe blinken 😀

So weit sind wir noch nicht, aber Ende Mai war die Wirtschaftsministerin in Ulm an der TFU, und wir haben die Technik (mit den Lichterketten und den nodeMCUs) quasi gehighjackt, um die Ministerin reihum ihre Gespraechspartner*innen zu „erleuchten“. Hat geklappt 😉

via GIPHY

Arduino mit Protoshield

Richtiges Werkzeug. Dann gehts.

Arduino mit Protoshield

Gut vier Jahre habe ich nun meinen Arduino, und ganz offen gestanden: Die meiste Zeit lag er in der Ecke herum.

Das hat sich ganz drastisch geaendert, seitdem ich mir ein Protoshield mit Breadboard drauf und endlich flexible(!) statt starrer Breadboardkabel gekauft habe. Die gab’s fuer jeweils wenige Euros auf ebay, wahlweise mit vier Wochen Lieferzeit aus China, oder fuer ein bissel mehr Geld mit schnellerem Versand aus Europa.

Ob und wie der Abgesang auf die 8-bit-µCs bald kommen wird, und ob wir dann alle nur noch auf RasPis und anderen „vollwertigen“ Rechnern coole Hardware-Dinge machen, vermag ich nicht zu sagen. In der Zwischenzeit prototype ich jedenfalls IR-Sender und -Empfaenger, damit wir beim Girls’Day eigene „uulmduinos“ zum Selberloeten und Fernseher-ausmachen bauen lassen koennen 🙂 In der Selbstloet-Variante kosten die unter 10 EUR – und liegen damit noch weit ueber den Uno- und Nano-Clones aus China, die teilweise fuer weniger Geld zu haben sind, als ein blanker Atmega328 in der DIP-Variante. Wahnsinn.

(Randnotiz: Was ausserdem sehr zum Spass am Arduino-prototypen beigetragen hat, war die Anschaffung eines  Sortierkoefferchens. Meine Eltern wollten mir wohlmeinend die Vorzuege von Sortierkoefferchen, z.B. fuer Lego, schon im Kindesalter beibringen. Aber manche Dinge versteht man wohl erst ab einem gewissen Alter. Tja.)

Cheapduinos

Vor knapp zwei Jahren hatte ich hier ja schon einmal ueber Arduino und kompatible Boards geschrieben. Damals gab es auch schon Varianten, die man beispielsweise in die Kleidung einnaehen konnte, was damals aber noch relativ preisintensiv war.

DFRobot tut sich schon seit einigen Jahren durch durchdachte, guenstige Arduino-Clones hervor, und dazu gehoert nun auch der Cheapduino (Wiki): Auf einem Atmega8 basierende einnaehbare Mini-Arduino-Clones, immerhin mit drei digitalen Pins, die alle PWM koennen, und drei analogen Pins; I²C kann’s auch.

Um Platz zu sparen, wird die serielle Schnittstelle zum Programmieren ueber einen micro-FPC-Anschluss angesteckt, d.h. man braucht wenigstens einen Adapter von micro-FPC auf das hoffentlich schon vorhandene FTDI-Board, um das Teil zu programmieren. Gibt’s bei lipoly.de einzeln fuer 3,40 EUR (Kabel und Adapter ebenfalls), oder im 5er-Pack samt Kabel und Adapter fuer knapp 21 EUR.

PS: Mit aehnlichem Formfaktor, einem AtMega 32u4 (Leonardo-kompatibel) unter der Haube, integriertem Mini-USB-Anschluss und einem hoeheren Preislabel (7 USD im Zehnerpack) kommen aus demselben Haus demnaechst Beetles (Wiki) daher.

Arduino und Co: µC fuer Dummies

Arduino Uno unboxing
arduino uno unboxing by bjepson
, cc-by-nc-sa

Wenn ich ein einzelnes Projekt benennen muesste, das meines Erachtens am Meisten fuer die breite Zugaenglichkeit von Mikrocontrollern (µCs) fuer die breite (Nicht-Experten-)Masse getan hat, dann duerfte das Arduino sein. Waehrend man frueher neben einem Evaluationsboard entweder einen Rechner mit klassischer serieller Schnittstelle oder gleich einen ISP zur Programmierung brauchte, und dann auch noch die Untiefen der µC-C-Programmierung erlernen musste, hat der Arduino die Huerden bis zum schnellen Bastelprojekt deutlich gesenkt.

Ich hatte auch ewige Zeiten das oben verlinkte Pollin-AVR-Evaluationsboard herumliegen und versucht, ATMega8-Controller zu programmieren — arg weit bin ich damit aber nie gekommen. Von Arduino hatte ich immer wieder einmal gehoert und Anfang des Jahres stiess ich auf diese Dokumentation — und wusste, dass ich mir so ein Teil kaufen wuerde 🙂

Arduino The Documentary (2010) English HD from gnd on Vimeo.

Der eine Trick, der bei Arduino alles anders macht, ist der eingebaute Bootloader. Nach dem Reset des Chips wartet dieser wenige Sekunden lang, ob jemand versucht, ihm ueber die eigene serielle Schnittstelle neue Software unterzuschieben, und programmiert sich gegebenenfalls mit dieser neu. Auf den Arduino-Platinen ist hierfuer nochmals ein eigener Controller verbaut, der zwischen USB-Anschluss und µC vermittelt, so dass man weder auf einen externen Programmer noch auf klassische serielle Schnittstellen auf Rechnerseite angewiesen ist. Einfach, aber genial.

Der zweite Trick ist die Entwicklungsumgebung, die auf Processing basiert und mittels ihrer Bibliotheken die hardwarenahen Operationen sehr weit wegabstrahiert. An die Stelle bitweiser Verschiebeoperationen treten Funktionen wie digitalWrite(7, HIGH) um beispielsweise an den Pin 7 ein ausgehendes 1-Signal anzulegen — das sollte kein Problem sein, wenn man jemals rudimentaer C oder Java zu programmieren gelernt hat.

Addendum, 2016-03-04: Der urspruengliche Entwickler von Wiring hat dieser Geschichte auch noch ein Scherflein beizutragen. Insbesondere die Doku sollte nicht ohne diesen Kontext gesehen werden.

Arduino Motion Detector
arduino motion detector by plamoni
, cc-by-sa

Mittlerweile sind knapp elf Monate vergangen, in denen ich in der Freizeit immer wieder mit dem Arduino Uno herumgespielt, eigene Shields gebastelt und Low-Cost-Nachbauten auf Lochraster aufgebaut habe. Und Zeit fuer ein wenig Gerante, was mir nicht so ganz gefallen hat.

Shields vs. Breadboard

Arduino ist modular erweiterbar ausgelegt: Ueber die Steckheader beidseitig der Platine sollen sogenannte Shields aufgesteckt werden koennen, die dem Controller beispielsweise Ein- und Ausgabemoeglichkeiten geben: LC-Displays, Taster, Drehregler, Ethernet-Schnittstellen, was auch immer man dort haben moechte.

Das ist an sich eine nette Idee, wenn man mal eben etwas zusammenstecken moechte — und gleichzeitig meines Erachtens der groesste Mist an der ganzen Plattform. Klar, ein LCD-Shield mit Buttons ist fuer 15 EUR zu haben und sofort, ohne weiteren Aufwand aufgesteckt und verwendbar. Das geht aber meines Erachtens nur so lange gut, wie man sich wirklich in dieser Shield-Welt aufhalten und mit Originalboards basteln moechte. Will man jemals mit Steckbrettern (Breadboards) arbeiten, um eigene Komponenten zu verwenden, wird’s mitunter haarig. Man kann sich entweder Prototyping-Shields kaufen (oder aetzen), auf denen man die Komponenten einsteckt, oder muss Arduino und Breadboard auf irgendeine Unterlage kleben, damit diese zueinander fixiert sind und nicht bei jeder Bewegung die Verbindungskabel auseinandergezogen werden.

Arduino LED Modulearduino led module by lenp17, cc-by-nc-sa

Dazu kommt, dass die Arduino-Boards seit Generationen einen Designfehler mitschleppen, der aus Abwaertskompatibilitaetsgruenden beibehalten wird (sic!): Auf einer Seite haben zwei der Anschlussheader einen nicht standardkonformen Abstand, was zur Folge hat, dass man bei Lochrasteraufbauten Dinge verbiegen (oder seinen Arduino umbauen) muss. So etwas nervt tierisch, vor allem, wenn man bedenkt, dass das alles ganz anders gehen koennte.

Selbstbau auf Steckbrett

Die simpelste Variante, sich einen Arduino-kompatiblen Aufbau zusammenzustecken, bedarf naemlich nur einer kleinen Handvoll Bauteile fuer knapp 10 EUR, von denen die Haelfte fuer den Spannungsregler noetig ist. Noch einmal knapp 12 EUR gehen fuer einen Adapter mit dem FTDI-Chip drauf, der fuer die Signalwandlung von USB auf Serielle Schnittstelle zustaendig ist — den man aber frueher oder spaeter ohnehin einfach haben will. Mit diesem lassen sich naemlich auch die integrierteren „offiziellen“ Arduino-Varianten ohne eingebauten USB-Port programmieren, wie der oben abgebildete Arduino Pro Mini oder seine Klone. Mit dem simplen Steckbrettaufbau laesst sich prima basteln und experimentieren (Sets dafuer gibt’s natuerlich auch bei umtriebigen Haendlern zu kaufen), und das fertige Produkt kann spaeter 1:1 auf Lochraster oder z.B. mittels Fritzing auf „richtige“ Platine uebertragen werden.

Die einzigen zwei Nachteile der Steckbrett-Variante sind, dass ein „Overhead“ mit Quarz und Kondensatoren (bzw. einem Resonator) und dem Reset-Button samt Pull-Up-Widerstand „mitgeschleppt“ bzw. jedes Mal haendisch aufgebaut werden muss, und dass man wissen muss, welcher physikalische µC-Pin mit welchem Arduino-Pinout korrespondiert. Fuer letzteres kann man sich einfach einen Aufkleber fuer den Controller-Ruecken drucken (oder kaufen) — fuer ersteres gibt es gleich mehrere Loesungen.

Arduino-based remote
arduino-based remote by cibomahto
, cc-by-sa

Die Bare-Bones-Varianten

Die simpelste und spassigste mir bekannte Loesung, Reset, Takt und Status-LEDs fuer ein Steckbrett zu optimieren, ist das Ardweeny, das „huckepack“ auf den Controllerruecken gesetzt wird — Pinout-Bezeichnungen gleich inklusive.

Andersherum, mit sehr kompakten Boards, auf denen der AVR-Controller sitzt, gibt es gleich mehrere: DorkBoard, Boarduino und das BareBonesBoard/BBB (Foto oben). Letzteres hat dann zwei Weiterentwicklungen hervorgebracht, die ich momentan von allen Arduino-Clones am interessantesten finde: Einmal das ReallyBareBonesBoard/RBBB, das ueber JeeLabs auch in Europa mit 14 EUR noch recht erschwinglich zu haben ist. Bei dieser Variante kann man (je nach Geschmack) die Platine gegebenenfalls noch um den Hohlstecker oder gar die gesamte Spannungsregelung „kuerzen“, falls man diese nicht braucht. JeeLabs hat sich dann auch dieser Variante noch einmal angenommen und die kaugummiriegelgrossen JeeNodes daraus weiterentwickelt, die von Haus aus mit einem RFM12-Funkmodul fuer drahtlose Kommunikation daherkommen.

Was ich von den JeeNodes halten soll, weiss ich noch nicht so ganz: Die Erweiterungsmoeglichkeiten sind wirklich durchdacht, beispielsweise Adapter mit Inverswandlern, mittels dessem man die Nodes mit nur einer AA-Zelle betreiben kann (das Blog ist uebrigens riesig und sehr lesenswert!), andererseits bringen die JeeNodes wieder ihr eigenes Port-System mit sich, das man zwar nicht mitspielen muss, aber eben doch wieder eine eigene Welt definiert. Gut gefallen mir die RFM12-Module, die spottbillig sind und fuer die meisten Anwendungen den viel teureren ZigBee-Modems kaum etwas nachstehen.

Und was soll ich jetzt kaufen?

Tja, die Qual der Wahl. Lipoly.de verkauft gerade Restbestaende der DFRduino Duemilanove, also Klone der letzten Arduino-Generation, fuer 15 Euro — das ist meines Erachtens ein No-Brainer, wenn man einfach nur unkompliziert einsteigen will. Und falls man sich irgendwann zum Steckbrett noch einen FTDI-Adapter kauft, kommt’s letztlich auf den eigenen Geschmack und die eigenen Anforderungen an, ob es nun ein reiner Steckbrett-Aufbau wird, ein RBBB, JeeNode… oder ob man doch einen Original-Arduino Mega haben moechte, um seinen Roomba fernzusteuern, wie das aktuell in der Medieninformatik der Uni Ulm passiert 🙂

Anmekung: Wer vor dem Henne-Ei-Problem steht, wie der Arduino-Bootloader auf den ATmega kommen soll, kann ihn sich gerne von mir flashen und an der Uni oder im frrm hinterlegen lassen.

Dieser Text steht unter einer cc-by-nc-sa-Lizenz

Arduino everywhere

Bei Hack-a-Day bezichtigen manche Kommentatoren die Autoren schon der erotischen Fixierung auf dieses Ding: Arduino heisst die Plattform, die einem in den letzten Jahren immer haeufiger ueber den Weg laeuft, wenn es um das sogenannte „Physical Computing“ geht — also den Umgang mit kleinen eingebetteten Rechner- oder Microcontrollersystemen, die sich in die Umgebung integrieren und mit dem Benutzer interagieren.

Im Wesentlichen steckt hinter den Arduino-Boards nichts weiter als ein Atmel-MegaAVR-Controller — der aber in standardisierten Entwicklungsboards fuer rund 25 EUR steckt, simpelst per USB zu programmieren ist und dessen Entwicklungstoolchain einem die Programmierung ermoeglicht, ohne dass man allzu tief in bitweises Registerschieben und sonstige Abgruende vorstossen muesste. Wer mag, kann das natuerlich trotzdem tun, der Einsteiger bekommt aber in kuerzester Zeit seine Programme zum Laufen, ohne zuerst tagelang herauszufinden, welche Register genau was anstellen.

Via Netzpolitik.org bin ich vorhin auf eine gut halbstuendige Reportage ueber den Arduino gestossen, und nachdem ich jetzt seit drei Jahren ein einfaches Developer-Board fuer die megaAVRs im Schrank versauern habe, weil es nur ueber die serielle Schnittstelle oder einen ISP zu programmieren ist (den ich nicht habe), werde ich mir nun wohl doch mal so ein Arduino-Board anschaffen. Vielleicht kann man das ja auch in den Kontext von Urban Sensing einbauen 😉

Arduino The Documentary (2010) English HD from gnd on Vimeo.

PS: Kleine Welt. Bei der Herumsuche bin ich dann wieder auf Eli Skipp aus Chicago gestossen, die zusammen mit fin bei der #journeyvienna unterwegs war, und die sich aus einem Arduino einen Handschuh fuer explosive High-Fives baut. Awesome.

Addendum 2016-03-04: Der urspruengliche Entwickler von Wiring hat der Arduino-Geschichte auch noch etwas hinzuzufuegen. Die Doku sollte im Kontext seiner Aussagen gesehen werden.