RGB Led Controller Teil. 1 Programmierung

Erstellt von Ryust Lightworks | |   Tutorials | Tutorial Blog

Tutorial: RGB Led Controller Teil. 1 Programmierung

In dieser Bauanleitung werde ich den kompletten Zusammenbau eines RGB LED Tools dokumentieren, da hier ein Controller zum Einsatz kommt der für viele verschiedene Tools benutzt werden kann und ich hoffe das solch eine Dokumentation einigen Leuten helfen kann.

Das hier gebaute Tool ist für das Light Writing gedacht und vereinfacht diese Technik. Zudem bietet es die Möglichkeit schnell zwischen den Farben wechseln zu können.

Das Tool besteht aus einem Gehäuse aus dem 3D Drucker, einem Arduino Micro, einer WS2816B LED, zwei Potentiometer (10k oder 100K), zwei Schalter, einem Druckknopf und diversen Kabeln. Die Modelle für das Gehäuse und den kompletten Programmcode kann man auf Thingiverse finden. Der Arduino Micro ist sehr klein und ist bestens geeignet die LED zu steuern, daher benutze ich diesen Arduino sehr gerne in meinen Projekten. Zu beachten hierbei ist, das der Arduino und die WS2816B LED beide mit 5V betrieben werden. Das hier gebaute Tool benutzt 4 AAA Akkus, welche zusammen eine Spannung von 4,8V liefern. Man könnte auch 3 AAA Batterien benutzen die dann 4,5V liefern, 4 AAA Batterien hätten jedoch schon eine zu hohe Spannung. Daher sollte man vorher überlegen ob man mit Batterien oder Akkus arbeiten will und sein Tool entsprechend auslegen. Als Halterung für die Akkus benutze ich ebenfalls einen 3D Druck das auf Thingiverse zu finden ist: "Flexing battery holders". Bild 1

Programmierung

Zunächst braucht man die Arduino Entwicklungsumgebung um den Mikrocontroller zu programmieren. Das hört sich jetzt gleich sehr kompliziert an, ist es aber eigentlich gar nicht. Die Entwicklungsumgebung ist frei verfügbar. Nach der Installation erhält man erst mal einen recht übersichtlichen Text Editor mit dem man den Quellcode für den Arduino erstellen kann. Bei diesem Tool benutze ich noch eine Bibliothek mit Namen FastLED mit der man sehr einfach und schnell so gut wie alle bekannten RGB LEDs über den Arduino steuern kann. Auf der Homepage dieser Bibliothek findet man einen Download. Zur Installation muss die Bibliothek in den entsprechenden Pfad von der Arduino Software kopiert werde. Unter Windows ist dies üblicherweise „C:\Users\{User Name}\Documents\Arduino\libraries“ wenn man dies nicht anders konfiguriert. Die Bibliothek wird einfach nur in diesen Pfad entpackt, so das dort ein Unterordner mit dem Namen „FastLED“ existiert (oder mit entsprechender Versionskennung dahinter). Danach muss die Entwicklungsumgebung neu gestartet werden, falls man diese schon gestartet hatte. Nun sind wir bereit dazu das Programm zu schreiben. Bild 2

Anhand der Beispiele von der FastLED Bibliothek kann man sich das meiste was hier gebraucht wird zusammen suchen, ich werde hier aber Stück für Stück das Programm erklären.

Um die soeben installierte Bibliothek zu benutzen wird ganz oben in der ersten Zeile angegeben das man in diesem Programm die Bibliothek benutzen will mit dieser Zeile: Bild 3

Als nächstes werden ein paar Definitionen getroffen, damit man das eigentliche Programm schnell an andere Tools anpassen kann. Diese Zahlen und Werte könnte man auch mitten im Programm schreiben, dann müsste man für eine Änderung jedoch den ganzen Code durchgehen. Benutzt man globale Variablen oder Definitionen, so braucht man bei einem anderen Tool meist nur diese Werte ändern und kann den Rest des Programms einfach so wie es ist benutzen. Zunächst definiere ich an welchen Pins des Arduinos später welche Komponenten angeschlossen werden: Bild 4

Diese Zahlen bzw. Bezeichner entsprechen der Beschriftung auf dem Arduino an den Pins bzw. Lötstellen. Hierbei werden die analogen Pins mit einem A angegeben, die digitalen Pins jedoch einfach nur mit ihrer Zahl. Wenn hier also eine 3 steht, so ist es auf dem Arduino der Pin D3.

Hier ist also definiert das am Pin A0 der Potentiometer für die Farbe (Hue) angeschlossen wird, am Pin A1 der Potentiometer A1, an Pin D3 das Signalkabel zur LED, an Pin D6 der Druckknopf zum Einschalten des Lichtes und an die Pins D7 und D8 der Schalter für die verschiedenen Funktionen des Controllers angeschlossen werden. Für diesen Controller habe ich eine Funktion vorgesehen das die Farbe der LED gesteuert werden kann, und eine die einen Regenbogen-Farbverlauf auf der LED ablaufen lässt.

Als nächstes werden noch ein paar Definitionen für die FastLED Bibliothek getroffen: Bild 5

Der Chipset gibt hier an welche LED man an diesem Controller benutzt. Die Bibliothek unterstütze so gut wie alle steuerbaren RGB LEDs (z.B. NeoPixel, APA106, ...), so das man hier meist einfach nur die Bezeichnung eingeben kann. Die unterschiedlichen LEDs werden teilweise auch unterschiedlich angesteuert, dafür wird in der nächsten Zeile angegeben in welcher Reihenfolge die Grundfarben an die LED übertragen werden. Hier also Grün-Rot-Blau. Die Letzte Zeile gibt an wie viele LEDs angeschlossen sind. Man könnte hier den Wert auch viel höher setzen, da ich bei diesem Tool aber meist nur eine LED oder ggf. ein paar vorgesehen habe gebe ich aus Performance Gründen hier nur 5 an, kann also bis zu 5 LEDs mit diesem Controller steuern.

Für das Programm benötigen wir noch ein paar Variablen, um beim Ablauf die Werte auszuwerten: Bild 6

Hier wird sich die Helligkeit, die Werte von den Potentiometern, der letzte Programmdurchlauf „Tick“ und die Geschwindigkeit für den Farbverlauf verwaltet.

Als nächstes wird noch eine globale Variable definiert mit der man die LEDs ansteuert, hier wird als Array-Größe auch gleich die Anzahl der LEDs benötigt: Bild 7

Nach den Definitionen können wir nun um die Setup Funktion kümmern um den Controller vorzubereiten. Diese Funktion ist recht übersichtlich: Bild 8

In der ersten Zeile wird hier die FastLED Bibliothek initialisiert und die vorher definierten Werte übergeben. Die letzten drei Zeilen bereiten die Pins für den Funktions-Schalter und den Druckknopf vor. Es wird angegeben das diese als Input benutzt werden und das diese ungeschaltet eine hohe Spannung haben (PULLUP). Dies heißt dann, dass man diese Pins zum Schalten auf GRND bzw. an den – Pol anlegen muss.

Nun geht es um den eigentlichen Programmablauf. Dieser wird in der loop Funktion programmiert. Gleich zu Anfang werten wie hier immer die Potentiometer aus: Bild 9

In den ersten beiden Zeilen werden hier Variablen für die Farbe der LED definiert.

Die beiden Blöcke darunter werten jeweils die beiden Potentiometer aus. Wenn man mit der „analogRead“ Funktion einen Pin ausliest erhält man eine Zahl zwischen 0 und 1023, da wir aber für die Farbe eine Zahl zwischen 0 und 255 benötigt wird die Funktion „map“ benutzt. Hier wird einfach der zu übersetzende Wert, die unteren und oberen Bereiche vom Quell und Zielbereich angegeben.

Als nächstes werten wir den Druckknopf aus: Bild 10

Dieser wird auf „LOW“ also niedrige Spannung geprüft. Der Knopf wird so verkabelt, dass er beim Drücken dann den Pin mit GRDN verbindet, so das man mit dieser Zeile erkennt dass er gedrückt wird. Ansonsten muss der Controller ja eigentlich auch gar nichts mehr machen.

Kümmern wir uns jetzt erstmal darum die LED einfach in einer Farbe leuchten zu lassen: Bild 11

Hier wird also der „Color“ Pin geprüft, ob dieser geschaltet wurde.

Als kleiner Trick wird als nächstes geprüft ob der Potentiometer ganz am Anschlag ist. Im HSV Farbraum wird die Farbe mit dem Hue Wert bestimmt, jedoch kann man hier kein Weiß so einfach mit Zahlen angeben. Da aber sowohl Hue = 0 als auch Hue = 255 Rot ergibt bestimme ich hier einfach das bei 0 oder 1 dann Weiß als Farbe benutzt werden soll. Da hier nur eine RGB LED benutzt wird ist dies aber auch immer ein gemischtes Weiß. Wenn der „Hue“ Wert vom Potentiometer unter 2 ist wird hier also die Farbe Weiß und die Helligkeit gesetzt, ansonsten die Farbe aus den entsprechenden Werten. Danach wird eine kurze Wartezeit eingebaut da es performanter ist wenn der Controller nicht die ganze Zeit durch rennt.

Damit ist der Teil der Programmierung um die LED einfach in einer Farbe leuchten zu lassen eigentlich auch schon erledigt.

Als nächstes kümmern wir uns dann um den Regenbogen Farbverlauf: Bild 12

Als erstes wird der Pin abgefragt, der diese Funktion steuert, der Pin wird also wieder auf „LOW“ geprüft. Da ich jetzt nicht einen dritten Potentiometer einbauen wollte, und in diesem Modus der Potentiometer für die Farbe nicht relevant ist benutze ich diesen einfach dazu die Geschwindigkeit des Farbverlaufes zu kontrollieren. Dazu wird dann der ausgelesene Wert wieder mit der „map“ Funktion in einen anderen Zahlenbereich übersetzt. Ich habe hier ein Intervall zwischen 2 und 30 gewählt, da aus Erfahrungen dazwischen eine brauchbare Geschwindigkeit entsteht. Als nächstes wird der letzte gemerkte „Tick“ mit dem aktuellen verglichen. Dies wird gemacht damit man eine feste Zeitspanne hat um den Farbwert hoch zu zählen. Dazu wird die Funktion „millis“ benutzt, diese gibt zurück seid wie vielen Millisekunden der Arduino schon eingeschaltet ist. Wenn die Zeitspanne, die mit dem Potentiometer eingestellt wurde erreicht ist, wird der Farbwert also hoch gezählt und der letzte „Tick“ auf den aktuellen gesetzt. Anschließend wird dann die aktuelle Farbe wieder an die LED übergeben.

Und um das Programm abzuschließen: Bild 13

wird hier noch falls der Druckknopf nicht gedrückt ist die LED abgeschaltet (in dem die Farbe Schwarz gesetzt wird), und die offenen Klammern geschlossen.

Alles in allem ist das Programm also sehr überschaubar, dafür aber sehr effektiv und für viele Tools verwendbar.

Um den Code nun auf den Arduino zu spielen muss man in der IDE erstmal auswählen welchen Arduino man angeschlossen hat. Schließt einfach den Arduino mit einem USB Kabel an den PC an und wählt im Menü aus um welches Modell es sich handelt. Bild 14

Danach muss man noch den Port auswählen. Im Menü dafür sollte der angeschlossene Arduino schnell zu finden sein. Meist sieht man hier auch als welches Modell er erkannt wird. Bild 15

Nun braucht man den Code nur noch hoch zu laden. Dies macht man mit dem zweiten runden Button am oberen Ende des Fensters. Bild 16

Der Code wird erst kompiliert, und falls noch Fehler sind diese angezeigt. Sind keine Fehler mehr im Code vorhanden. So beginnt der Upload automatisch. Nachdem dieser erfolgreich war kann man den Arduino wieder vom USB Kabel ziehen und mit dem Zusammenbau des Controllers beginnen.

Zurück
Bild 1
Bild 2
Bild 3
Bild 4
Bild 5
Bild 6
Bild 7
Bild 8
Bild 9
Bild 10
Bild 11
Bild 12
Bild 13
Bild 14
Bild 15
Bild 16