HowTo: LEDs programmieren für den kleinen Geldbeutel
Hey, es wird mal wieder Zeit für ein kleines HowTo von meiner Seite aus!
Nachdem ich mich nun endlich an meine LEDs gewagt habe, Bücher und Co gelesen habe (auch das LED Buch von Kamui), wollte ich noch einen Schritt weiter gehen - meine LEDs selbst programmieren. Da ich vor kurzem erst meinen Masterabschluss in Informatik gemacht habe, dachte ich mir - hey, du hast das doch in der Theorie irgendwie gelernt, wieso nicht anwenden? Die Anwendung kostetet mich doch 30 Stunden Arbeit. Die meiste Arbeit hatte ich mit dem 'ähm wie verbinde ich das jetzt' und 'wie programmiere ich das jetzt genau?'. Diese Zeit will ich euch sparen, daher hier das kleine HowTo!
Materialliste (ja ich habe versucht so günstig wie möglich zu kommen :))
- Adafruit Trinket (unser Herzstück - ein Mikrocontroller) -> hier <- zu kaufen. (10,75€)
- (Edit: Eine Alternative, die ich über einen Facebook Kommentar genannt bekommen habe: Arduino Nano - ist günstiger, braucht aber laut dem Facebook Kommentar mehr als 2 Batterien. Damit habe ich mich selber noch nicht befasst. Will es euch aber nicht vorenthalten)
- LEDs (je nach Farbe und Anzahl) z.B. hier 10 rote LEDs für 2,75€
- Edit: Ein User, der sich intensiver damit befasst hat vertraut lieber http://https://www.leds.de/, wem die LEDs von Amazon suspekt sind oder wer bestimmte Ansprüche hat, kann sich hier auch umsehen
- Widerstände - für meinen Fall 150Ohm (ca. 10 Stück kosten weniger als 1€)
- Battery Case (für 2 AA-Baterien = 3V) gibt es hier für 1,19€
- Kabel (damit ihr das ganze auch verbinden könnt) - ich habe mir Klingeldraht im Baumarkt gekauft, aber teilweise auch alte PC Kabel genutzt, die hier noch für die Lüfterverkabelung rumlagen. An sich kann man fast alles an Draht verwenden, was zu verlöten ist. Kostenpunkt: ca 5 Euro für 5m. Ihr braucht aber nicht einmal im Ansatz so viel. Das ist etwas das kauft man nur einmal.
- Edit: Ein Nutzer hat darauf hingewiesen, das man hier auch viel falsch machen kann beim Draht. Wichtig ist zu wissen, das zu dünner Draht zu einem Kabelbrannt führen kann. Die Wahl des Klingeldrahts habe ich getroffen aufgrund dessen, was mir jemand mit Erfahrung geraten hat. Also bitte keine zu dünnen Drähte nutzen und am besten Isolierband am Ende über die Verbindungsstellen kleben :)
- Lötkolben: ist zwingend notwendig (ich hab den billigsten genommen, den ich finden konnte) - hier müsst ihr selbst entscheiden. So etwas kauft man sich in der Regel nur einmal.
- Edit: Ein weiterer Kommentar, der mich erreicht hat: man braucht nicht zwangsweise einen Lötkolben, es reichen auch Bananenstecker oder Lüsterklemmen (ich persönlich bevorzuge das Löten)
- USB Kabel: USB auf Micro-B USB - das Trinket besitzt einen einen Micro-B USB Anschluss. Ich selbst hatte hier so ein Kabel schon herumliegen. Das sieht so ähnlich aus, wie für ein Smartphone der USB Anschluss. Ansonsten siehe Amazon :)
Wie ihr seht ist die Materialliste zwar lang, aber die einzelnen Komponenten sind günstig (abgesehen von dem Trinket). Wenn ich nun die Materialkosten für mein letztes Projekt zusammen rechne, komme ich auf ca 15 Euro, wobei 10 Euro alleine das Trinket ausmacht. Und würdet ihr auf einer Con für 15 Euro eine schöne blinkende Schaltung kaufen? Die ihr selbst programmieren könnt? Ist doch eigentlich ein angenehmer Preis.
1. Schritt: Das Trinket zum blinken bringen
Wenn ihr euern ersten kleinen Mikrocontroller in der Hand haltet werdet ihr sicherlich als erstes durch euer Zimmer rennen mit: Jetzt blink schon! Und genau das machen wir jetzt. Das Trinket besitzt eine eingebaute rote LED, die man direkt programmieren kann. Also USB Kabel rein und los gehts!
Aber hier kommen wir auch schon zu dem ersten Schritt, der mich selbst Stunden gekostet hat. Die Software installieren.
Ich hatte einige Probleme mit der Software, das ist System abhängig. Am meisten Erfolg hatte ich mit Version 1.6.3 - aber ihr könnt auch die aktuelle Version ausprobieren. Ansonsten - schreibt mich an, ich versuche euch dann so gut es geht zu helfen :)
(Wer direkt die Infos möchte z.B. aufgrund Probleme oder Fehlermeldungen: https://learn.adafruit.com/introducing-trinket/introduction ist die offizielle Seite von Adafruit mit der Anleitung an der ich mich orientiert habe.)
Download 1.6.3: https://www.arduino.cc/en/Main/OldSoftwareReleases#previous (nach unten scrollen, ihr braut Version 1.6.3)
Nachdem ihr das Trinket mit USB verbunden habt, wird das Gerät vermutlich automatisch installiert (ich habe es nur unter Win8 getestet). Das heißt Treiber ist da, Software ist installiert, nun geht es ans programmieren. Ihr startet die Software und bekommt ein kleines Fenster zu sehen, in dem ihr Programmcode eingeben könnt. Kopiert den Beispielcode von https://learn.adafruit.com/introducing-trinket/programming-with-arduino-ide in das Programmfenster (das mittlere große).
Als nächstes müsst ihr der Software noch mitteilen, welche Art von Mikrocontroller ihr benutzt (also in diesem Fall das Adafruit Trinket). Wählt die folgenden Einstellungen:
Falls ihr diese Einstellungen nicht wählen könnt, habt ihr eine andere Software Version oder eine andere Konfigurationsdatei. Es kann sein, dass die Software dann euer Trinket nicht erkennt! (Schreibt mich dann einfach an, ich versuche euch zu helfen :))
Danach müsst ihr den Code 'Verifizieren' das ist der Button links oben. Dabei wird im Hintergrund einiges durchgeführt und getestet, damit ihr nichts auf euer Trinket spielt, das fehlerhaft ist.
Wenn also euer Programmcode richtig ist (sollte er nach dem Kopieren), könnt ihr euer erstes Programm hochladen (das ist der zweite Button neben dem Verifizieren). Das hochladen funktioniert in 2 Schritten:
- auf das kleine Knöpfchen auf dem Trinket drücken (dann blinkt die rote LED ganz schnell). Auf Youtube gibt es ein kleines Video wie die LED dann blinkt: https://youtu.be/4HC2T0FGMH4
- auf den hochladen Button in eurer Software drücken
Wie in der Abbildung zu sehen gibt es noch einen unteren Bereich, in dem jetzt Informationen angezeigt werden (wenn ihr verifiziert oder hochladet). Mit den Meldungen werdet ihr kaum etwas anfangen können, aber meistens hilft hier Google ganz gut :)
An dieser Stelle war ich sehr oft sehr gefrustet und habe verschiedene Versionen von Arduino benutzt, bis es endlich funktioniert hat. Ab und zu kann es auch helfen einfach zwei- oder dreimal den Code hochzuladen.
Wenn ihr aber eine weiße Meldung in dem unteren Fenster bekommt, dass das hochladen abgeschlossen ist, könnt ihr euch freuen. Das war der schlimmste Teil, der Rest wird spaßig :)
2. Schritt: LEDs verdrahten
Jetzt wo wir eine eingebaute LED zum leuchten gebracht haben, wollen wir das auch mit mehreren LEDs handhaben. An der Stelle ist zu erwähnen, das ich nicht weiter auf LEDs und ihre Eigenschaften eingehe oder wie man die LEDs zusammenbaut, was Widerstände sind und co. Da empfehle ich euch Kamuis Book of Cosplay Lights hier steht alles, was ihr darüber wissen müsst!
Edit: Da hier auch noch einmal ein Kommentar aufkam: ihr solltet euch auf jeden Fall Grundkenntnisse vorher aneignen, bevor ihr drauf los lötet/verkabelt. Kamuis Buch ist eine Möglichkeit dies zu tun und der Schaltplan, den ich hier aufführen werde ist auch nur ein 'so könnte man es machen' - also bitte vorher informieren.
So nun aber zu dem erweiterten Wissen: hier die Overall Infos
- Programmierbar als Ausgänge sind die Pins #0, #1, #4
- #1 und die interne rote LED sind gleich geschaltet (das heißt, ihr könnt bereits ohne Verdrahtung der LEDs die rote LED programmieren)
- Batterieanschlüssen (Battery Case): BatteryCase + = Board (Bat+) und BateryCase - = Board(GND)
So viel zu den Infos für die Fortgeschrittenen - hier gibt es nun meine eigene Schaltung (unten die Erklärung) und nein, ich habe keine Ahnung von Schaltplänen, das ist mein erster :D bei Fehlern bitte melden, ich verbessere das.
- 1. Kreislauf: 3 LEDs parallel (Ausgang #1 mit Bat+)
- 2. Kreislauf: 1 LED gegensätzlich zu den 3 LEDs (Ausgang #1 mit GND)
- Edit: hierzu gibt es einen Kommentar weiter unten. Ein Vorwiderstand (wie bei den anderen Kreisläufen) sollte auch hier verbaut werden. Ich kann es aktuell nicht testen, aber aus rein logischer Sicht sollte hier ein weiterer Widerstand eingebaut werden.
- 3. Kreislauf: 1 LED unabhängig vom Rest (Ausgang #0 mit Bat+)
3. Schritt: Programmierung
Der Teil war für mich persönlich der angenehmste, hier kann man sich nach Herzenslust ausleben (besonders als Informarikerin :D). Aber nun erst mal einiges grundlegendes, was die Programmierung angeht. Viele haben Angst davor, aber es ist wirklich leicht zu erklären.
Ihr habt in diesem Fall 3 Blöcke, die euch interessieren:
- der globale Block:
int led = 1;
hier definiert ihr Werte, die ihr später nutzt - z.B. int led = 1; und int ledZero = 0; um eure Ausgänge zu definieren
- den Setup Block:
void setup(){ }
dieser Block wird einmal beim Start ausgeführt. Hier definiert ihr nur, das ihr die globalen Werte als Ausgänge nutzt
- der Schleifen Block:
void loop(){ }
das ist der Hauptblock unserer Programmierung. Diese sogenannte Schleife wird unendlich oft ausgeführt. Hier geschieht der 'Magic' Teil, an dem wir unsere LEDs erleuchten lassen.
Diese drei Elemente findet ihr auch in dem Beispielprogramm, das ich euch weiter oben bereits verlinkt habe. Ich selbst habe ein kleines Programm geschrieben, um einige LEDs unterschiedlich zu steuern (über 3 Ausgänge) und dabei schnelle und langsames ein- und ausblenden Effekte zu generieren.
Wenn ihr daran Interesse habt, könnt ihr euch diesen etwas komplexeren Code hier herunterladen:
Und was stehen da nun drin?
Eigentlich geht es nur darum, das ihr euren LEDs mitteilt wann sie an oder aus sind (bzw. wie stark 'an' sie sind). Ein analogWrite(led, HIGH) zum Beispiel schaltet die LED am Ausgang 1 (da wird global led=1 gesetzt haben) auf den hellsten Wert. Und ein analogWrite(led, LOW) schaltet die LED auf den niedrigsten Wert (in dem Fall aus). Mit einem delay(10) könnt ihr eine Verzögerung einbauen. In der Zeit, die ihr in Klammern angebt, passiert nichts und alles bleibt, wie es ist. Das könnt ihr nun auch noch kombinieren zu einer weiteren Schleife, in der ihr langsam von LOW nach HIGH geht. Damit schafft ihr ein langsames angehen.
for (int i=0; i<256; i++) {
analogWrite(sLed, i); // PWM the LED from 0 to 255 (max)
delay(sDelay);
}
Genauso funktioniert das auch in die umgekehrte Richtung (mehr dazu in meinem kleinen Programm oben). Mit diesen Bausteinen könnt ihr nun schon herumexperimentieren und eure ersten kleine Programme schreiben.
4. Schritt: Größer, Höher, Weiter, Besser
Es gibt viele verschiedene Bibliotheken die ihr verwenden könnt, sozusagen Erweiterungen. Neue Funktionen, einfachere Handhabung, mehr Kontrolle. Es gibt vieles, was ich selbst noch nicht ausprobiert habe.
Ein Beispiel ist hier aufgeführt: https://learn.adafruit.com/neopixel-cyber-falls
Und teilweise gibt es auch noch andere Mikrocontroler, die sich preislich im selben Rahmen bewegen, aber andere Funktionalitäten bieten. Schaut euch selbst bei Adafruit um und entwickelt eure eigene bunte, blinkende Welt! Ich würde euch gerne zum Abschluss meine pulsierende LED Kugel zeigen, aber leider hatte ich keine Zeit mehr für ein Video - mein Kostüm musste erst einmal zur Gamescom fertig werden und das war eine wirklich knappe Sache ;)
Edit: Ganzzzzz wichtig: ich habe in einem Größenverhältnis von 15-20 LEDs am Ende gearbeitet. Bitte bedenkt das bei der Planung eurer Projekte. Wenn ihr einen Aufbau mit 100 LEDs und mehr plant dann wird es womöglich nicht auf diese Art und Weise funktionieren!.
Ich hoffe, ich konnte euch ein guten ersten Einblick geben. Wenn ihr Fragen habt:
Schreibt mich auf Animexx an, auf Facebook (http://www.facebook.de/AnonchisCosplay) oder sendet mir eine E-Mai an: anonchis-cosplay@outlook.com
Eure
Anonchi