Die ursprüngliche Idee für dieses Projekt kam durch eine Anfrage im Forum. Das professionell hergestellte MoodLight war Basis der Anforderung (http://www.mood-light-galaxy.d…_Mood_Light__Classic_.php). Da es mit 2x2 Pixeln ein überschaubarer Aufwand ist, habe ich mich an die Entwicklung gemacht.
Was man unter MoodLight versteht, ist sicher teilweise Auslegungssache. Insbesondere das Programm spielt dabei eine entscheidende Rolle. Neben weichen Farbübergängen soll es fest einstellbare Farben geben. Ergänzt wurde dies durch verschiedene Fading-Programme. Die Bedienung erfolgt über einen Encoder. Verzichtet wurde hier zunächst auf Komfort wie eine Fernbedienung.
Aufbau
Der mechanische Aufbau wurde mit Alu-Profilen und Plexiglas realisiert. Als Rückseite dient eine dünne Sperrholzplatte. Die Alu-Profile stammen aus der Serie mit Nuten, so dass man sie mit dem entsprechenden Zubehör (Winkel) wunderbar verschrauben kann. Zuvor wurden die Ecken auch Gehrung geschnitten (wenn man nicht das richtige Werkzeug hat, gar nicht so einfach).
Das Profil hat eine Abmessung von 40x10mm, wobei zwei Nuten eingearbeitet sind. Eine umlaufende Nut dient dabei als Aufnahme der Plexiglas-Platte. Damit hat man nach Außen eine saubere Abdeckung und abgerundete Kanten.
Die mechanische Konstruktion klingt einfach, hat aber ihre Tücken im Detail. So muss man die Schrauben der Nut sehr fest anziehen, da Aluminium weich ist und sonst das Gebilde instabil wird. Weiterhin wurden die Winkel auch zur Befestigung des Rückdeckels verwendet. Dazu wurde eine Bohrung angebracht und Gewinde M3 geschnitten.
Letztendlich ist durch diesen Aufbau der Abstand der LEDs zum Plexiglas nur ca. 2,5cm. Das ist leider ein wenig zu knapp, so dass man noch geringfügig Spots sieht (allerdings weniger als auf den Fotos). Hier werde ich nochmals mit einer zweiten Schicht experimentieren. Aktuell fehlt noch der Einbau des Encoders sowie der Spannungsversorgung.
LEDs
Als LED-Basis dienen Samsung-RGB-LEDs, die sich durch viele positive Eigenschaften bewährt haben. Von Vorteil war dabei, dass ich bereits Stripe-Platinen dafür fertigen ließ. Das gesamte Gehäuse hat eine Abmessung von 30x30cm, so dass meine 25cm langen Platinen (geteilt) ideal dafür passen. Nach kurzem Test habe ich mich für 9 LEDs pro „Pixel“ entschieden. Insgesamt dienen also 36 LEDs als Grundlage. Da je 3 LEDs in Reihe geschaltet sind, werden 12V als Betriebsspannung verwendet.
Steuerung
Die Steuerung macht das eigentliche MoodLight. Klar geht man hier auf Mikrocontroller. Anbieten würden sich verschiedene Varianten wie DMX zur Steuerung oder auch die beliebten TLC-Chips, wie sie synvox auch auf seiner RGB-Wall verwendet.
Da es sich bei 2x2 RGB-Pixeln nur um 12 Kanäle handelt und das Modul auch einzeln betrieben werden soll, habe ich mich für Software-PWM entschieden. In Mikrocontroller.net gibt es einen sehr guten Artikel, der verschiedene Varianten beschreibt und dabei in Hinblick auf die Prozessor-Auslastung Optimierungen vornimmt. Leider wird dabei maximal ein Port angesprochen, also nicht ausreichend Kanäle. Für die Erweiterung fehlte mir etwas die Ruhe, so dass ich nach ein wenig Suchen das passende (darauf aufbauende) gefunden habe: http://www.the-powl.de/knowhow/softpwm/index.php.
Damit war die Grundlage geschaffen. Jetzt galt es nur noch, die MoodLight-Programme zu entwerfen. Entwickelt habe ich zunächst mit meinem myAVR-Entwicklungsboard und vier angeschlossenen RGB-LEDs sowie dem Encoder. Das erste Testprogramm macht dabei nichts weiter, als alle Farben (also weiß) gleichzeitig langsam hoch- und wieder herunterzufahren. Im MoodLight-Programm läuft das dann diagonal und jeweils invertiert ab.
Das Programm 2 ist ein RGB-Fading-Programm. Die Farben werden hintereinander durchlaufen (Regebogen-Fader). Auch hier ist der Effekt über die Diagonale und invertiert hergestellt.
Das eigentliche MoodLight-Programm folgte dann. Die Idee dahinter: für jedes Pixel wird per Zufall eine Farbe errechnet. Von der aktuellen Farbe wird dann weich auf die Zielfarbe geblendet (Fading), und das für alle vier Pixel. Da die Differenz unterschiedlich sein kann, läuft eine Farbe ggf. länge als die andere. Dann folgt eine einstellbare Wartezeit, bis die nächste Überblendung folgt. Da dieses Verfahren mit den drei RGB-Kanälen sehr aufwendig ist, habe ich mich entschlossen, das HSB-Modell zu verwenden. Dies hat den angenehmen Nebeneffekt, dass man die Helligkeit einstellen kann. Der Einfachheit halber habe ich den Wert für die Sättigung konstant auf Maximum gehalten. Somit muss je Pixel nur noch ein Wert „gefadet“ werden.
Nach dem gleichen Prinzip erfolgte die Entwicklung des „Farbrades“. Eine Basis-Farbe wird als Ausgangswert im HSB-Modus festgelegt und anschließend wird der Wert stetig erhöht. Da der HSB-Farbraum ein Kreis (bzw. Kegel) ist, springt am Ende des Wertebereiches die Farbe nicht einfach um, sondern beginnt von vorn. eigentlich ganz einfach.
Abgerundet wird alles durch eine fest einstellbare Farbe. Hier kann man nach belieben die Farben definieren. Diese werden aktuell noch im RGB-Mode festgelegt. Damit findet auch keine Helligkeitsregelung statt. Hier kann man noch eine Umstellung auf HSB vornehmen.
Das letzte Programm ist eigentlich gar kein Programm. Es zeigt einfach nur die 4 Farben des Farbkreises an und ermöglicht die Einstellung der Helligkeit. Dies war erforderlich, das nur ein Encoder als Bedienelement angeschlossen sein sollte. Für spätere Anwendungen könnte man noch zwischen kurzem und langem Tastendruck unterscheiden.