Feb 28

Lange nichts mehr aus der Welt der Elektronik hier gepostet. Also dann mal ­čÖé

Es gibt seit 2-3 Jahren 5050-LED-Stripes (oder auch einzelne LEDs) mit aufgel├Âtetem Controller (in SMD). zB diese hier. Das Coole an den Dingern ist, dass die ├╝ber 3 Anschl├╝sse verf├╝gen (+5V/GND Data-In, bzw. Data-Out) und man mit diesen 3 Anschl├╝ssen zig St├╝ck aufmal ansteuern kann. Technisch funktioniert die Schnittstelle so, dass man auf den D-In-Port des Strips ein 800kHz-Signal gibt, mit dem man dann jeder LED einzelnd den R/G/B-Wert mitgeben kann. Lauflichter, Uhren, alles was sich blinkt und bewegt sind damit also kein Problem. In der Community gibt es zig Libraries, die das Leben mit dem Ding etwas einfacher gestaltet. Hervorheben m├Âchte ich die FastLED-Lib. Die ist zwar relativ gross (Ein Arduino/ATMEL mit min. 16kB Flash sollte es schon sein), man hat daf├╝r aber an nahezu alles gedacht.

Im Code werden die LEDs per Array angesteuert. Das ist quasi ein Array of Arrays (untendrunter liegen noch jeweils 3 Elemente f├╝r RGB).

Jetzt hat der Arduino/ATMel als solches ein kleines Problem mit der Genauigkeit der internen Uhr. Um das zu umschiffen, gibt es RTC’s die per SPI ansteuerbar sind. 5er Pack am Fluss f├╝r ca. 10 Euro. Die Dinger sind deartig Pr├Ązise, dass ich – nach jetzt 1,5Monaten keinerlei (sichtbare) Abweichung feststellen kann. Zum Vergleich: Ohne RTC lief der Arduino nach etwa 24h um 30sek. falsch. Klar kann man versuchen den mC mit ein paar Tricks (bspw. dem OSCCAL) zu eichen. Aber sobald sich die Umgebungstemperatur ├Ąndert, war es das auch wieder.

Nun, was kommt raus? Kombiniert man, die bei Adafruit┬áerh├Ąltlichen, 2812-Viertelkreise mit einem Arduino Pro micro, IKEA-Bilderrahmen, ein wenig Handarbeit und einem externen(!) 5V-Netzteil (die LEDs saugen da etwas) eine nette Uhr:


Den entsprechenden Code (schmutzig, as usual ­čÖé ) hab ich mal bei ┬ágithub┬áabgelegt.

Tagged with:
Mrz 26

Sehr cool was mit dem Arduino so alles machbar ist. Um es vorweg zu nehmen: Mit dem Ding habe ich eine Ansteuerung eines BetaBrite LED-Moduls via Netzwerk gebaut (also im „Live-Betrieb“ OHNE Rechner benutzbar).

Doch vorne angefangen:

Vor ein paar Jahren hatte ich mir bei eBay ein BetaBrite geschossen – Das ist so eine nette Laufschrift, die man zum Leute qu├Ąlen draussen an seinen Copyshop h├Ąngen kann, so man(n) den einen hat. Die Idee war damals die Temperaturdaten meiner Wetterstation und ein paar andere Dinge anzeigen zu lassen. Ist aber nie so richtig umgesetzt worden, da mein „Serverpark“ im Keller steht, und die Anzeige dort nat├╝rlich null Nutzwert hat. Vor ein paar Tagen bin ich dann auf das Arduino-Projekt gestossen – klang (und ist auch) alles sehr vielversprechend:

Eine simple Plattform incl. Entwicklungsumgebung f├╝r die ATMEGA-Microcontroller Serie mit massenweise Zubeh├Âr. Wer das Ding nicht kennt, einfach mal bei arduino.cc umschauen. Bezugsquellen sind u.a. watterod, komputer.de oder auch farnell.com, sofern man (bei farnell) denn im Besitz eines Stundentenausweises ist (Die Spareffekte dort sind vernachl├Ąssigbar). Der Knaller an dem Ding ist jedoch der Preis. So gibt es den Arduino f├╝r ca. 20-28 Euronen incl. Versand zu haben. Der Microcontroller l├Ąsst sich ├╝ber die USB-Schnittstelle (sowohl auf Mac, PC oder Linux) in einer Art C-Dialekt f├╝r Kids programmieren (Ist wirklich extremst Easy). Das ganze geht so in Richtung SPS – daher heisst der Dialekt wohl auch „Processing“. Man hat im Template quasi 2 vorgefertigte „Prozeduren“:

  • void setup – wird einmalig aufgerufen, wenn der ATMEGA hochgefahren wird und dient zum initialisieren der Ports, etc.
  • void loop – wird, wie der Name schon sagt, im Loop kontinuierlich durchlaufen – bei mir kamen da direkt Errinerungen an die Lehrzeit wieder hoch (SPS – Merker setzen und sowas)

Hardwaretechnisch verf├╝gt das Ding ├╝ber 14 Digitale I/O Pins, von denen 6 per PWM ansteuerbar sind (alles TTL-Pegel), sowie 6 Analoge ein/Ausg├Ąnge mit einer 8bittigen genauigkeit im A/D bzw. D/A Wandler. S├Ąmtliche Anschl├╝sse sind auch f├╝r Wurstfinger, wie meine, leicht verf├╝gbar, sodass L├Âten – wenn man es denn nicht gerade drauf anlegt – ausf├Ąllt.

Zur├╝ck zum Titel dieses Eintrags. Zus├Ątzlich zum Board habe ich mir noch eine Ethernet-Shield geg├Ânnt. Shields sind sowieso die Erfindung hier uberhaupt. Man kann sich das als „Huckepack“-Platine vorstellen, die bestimmte Pins des Arduinos belegen und dann weiter Funktionalit├Ąten bereitstellen. Das eth-Shield stellt also einen Netzanschluss zur Verf├╝gung, und genehmigt sich daf├╝r 6 Pins. (Eine gute ├╝bersicht ├╝ber den „Pinverbrauch“ und verf├╝gbare Shields gibts ├╝brigens bei shieldlist.org). Das Shield selbst l├Ąsst sich dann im „Processing“ ├╝ber ein paar Simple Funktionen ansteuern / auslesen.

Problematisch beim BetaBrite war, dass dieses ├╝ber eine RS232 (vulgo: Serielle) Schnittstelle verf├╝gt, der Arduino aber nur TTL-Pegel verarbeiten kann. Es gibt f├╝r den Ard. eine Serial-Library, mit der man aus zwei weiteren Pins einen Seriellen Anschluss „emulieren“ kann, aber ohne korrekte RS232-Pegel ist das suboptimal. Was tun ? Mal ein wenig gekramt, und dann ist mir ein MAX232 zwischen die Finger gekommen – quasi genau das was man braucht. Die Schaltung mit dem MAX232 ist mehr als simpel (Einfach ausgedr├╝ckt konvertiert der 232 die Pegel). Somit steht das ganze Hardwarem├Ąssig schonmal. Ethernet-Shield -> Arduino -> MAX232 -> BetaBrite. Fehlt nur noch die „Software“. Die Ansteuerung der BetaBrites ist schnell im Netz gefunden (z.B. hier, bzw. als PDF direkt beim Hersteller). Der Code auf dem Arduino umfasst gerade mal 2kB (incl. inline-Dokumentation !!!). Falls interesse besteht, stell ich den gerne mal hier ein.

Was kann das ganze jetzt ?

Nun, Der Microcontroller mit Ethernetanschluss „horcht“ auf TCP-Port 23. Immer wenn sich etwas connected und eine Zeile schreibt, dann gibt der Controller das an das Betabrite weiter. Serverseitig kann ich nun, aus dem Keller heraus :-), das BetaBrite ansteuern, wo immer auch Netz verf├╝gbar ist…

Tagged with:
preload preload preload