Zum Inhalt der Seite



HowTo: LEDs programmieren für den kleinen Geldbeutel LED Programmierung

Autor:  Anonchi

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.

Schaltung by Anonchi

  • 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: 

https://goo.gl/s6YGAk

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

 

Datum: 15.08.2015 17:33
Sollte die LED gegen GND nicht auch nen Vorwiderstand haben? So ganz ohne kommt mir komisch vor.
Kann man den Ausgang eigentlich auch hochohmig schalten? Dann könnte man auch "beide aus", also sowohl die gegen GND als auch die gegen Vcc am gleichen Ausgang, realisieren - zwar ergibt sich hier eine Reihenschaltung der zwei LED(-Gruppen) zwischen GND und Vcc, aber bei 3V dürfte ja die Durchlassspannung von zwei LEDs hintereinander unterschritten sein, so dass bei offenem Ausgang beide auch wirklich dunkel sind. Sofern das aber durch Umschalten auf Eingang gelöst ist, wird die Umschaltung evtl. zu langsam sein, um von dem Dimmen mittels PWM Gebrauch zu machen.
Avatar
Datum: 15.08.2015 17:59
Vorne weg: ich habe nicht sehr viel Ahnung von Etechnik - darum habe ich mich immer gedrückt (und es mir nun notgedrungen angeeignet), aber ich versuche deine Fragen so gut es geht zu beantworten :)

>Sollte die LED gegen GND nicht auch nen Vorwiderstand haben? So ganz ohne kommt mir komisch vor.<
Ich habe mich bei den LEDs nach einem anderen Tutorial gerichtet, das nicht genau erwähnt hat, wie das ganze verschaltet ist. Da habe ich mir aus einem Bild die Infos hergeleitet und es ausprobiert. Aber jetzt, wo du es sagst - stimmt, ein Vorwiderstand sollte hier wohl noch rein. Die LED hat es überlebt, aber wäre sicherer. Ich ergänze einen Kommentar in dem Tutorial gleich noch.

>Kann man den Ausgang eigentlich auch hochohmig schalten?<
Daran hatte ich bisher noch nicht gedacht. Aber ich habe eben mal nachgeforscht und zumindest in Foren ist die Rede davon, das nur Eingänge hochohmig zu schalten sind, aber keine Ausgänge. Eine genaue Aussage kann ich hier aber nicht treffen. Dafür müsste ich mein Trinket aus meinem Stab noch einmal ausbauen :) Ich gehe der Fragestellung aber noch einmal genau auf den Grund, wenn ich an meinem nächsten Mikrocontroller sitze.

Vielen Dank für deine Fragen/Kommentare!

Avatar
Datum: 15.08.2015 18:26
Kleiner Tip:
Es gibt auch Mikrokontroller mit einem vorprogrammierten Blinktakt. Da brauchst du dann gar nix zu programmieren, sondern musst dir einfach nur den richtigen raussuchen, für den Takt den du haben willst. :)
Avatar
Datum: 15.08.2015 18:35
Danke für den Tipp, aber ich programmiere eigentlich sehr gerne :) Das hat mir am meisten an den LEDs Spaß gemacht! Weil ich mich einfach immer wieder umentscheiden kann und alles so programmieren kann, wie ich es gerade möchte. Und am Ende blinkt alles genau so, wie ich es vorgegeben habe. Ich finde das kann wirklich sehr viel Spaß machen, wenn man so viel Einfluss hat.
Avatar
Datum: 15.08.2015 18:55
Also bisher habe ich nur das analogWrite benutzt (das nur auf die Ausgänge #0, #1, #4 geht). Ich müsste mal testen, wie das im digitalen Bereich aussieht. Ob das zum flackern kommt müsste ich auch einfach mal austesten. Ich habe bisher nur die Erfahrung gemacht, das wenn ich Parallelität simulieren will er schon Probleme mit dem dimmen bekommt. An der Stelle habe ich mich versucht so einfach wie möglich zu halten, könnte sein, das er dann mit dem delay ebenfalls Probleme an der Stelle bekommt.

Zu den Batterien: gut zu wissen, das habe ich irgendwie überlesen (*hust*) Bislang haben meine zwei Batterien einen ganzen Tag Gamescom überstanden und leuchten noch immer so schön, wie zuvor. Also zu erkennen sind da keine Probleme. Ich hatte eher damit gerechnet, dass das Trinket Probleme bekommt, wenn ich 3 1.5V Batterien anhänge.

Danke schon mal für die Tipps, das nächste Mal spiele ich mal mit den digitalen in-/outputs, vielleicht funktioniert es ja und vor allem verwende ich dann 3 1.V Batterien - man lernt ja immer dazu :) Solche Tipps sind bei so etwas wirklich gold wert, wenn man noch am Anfang steht.


Zum Weblog