Ich hatte schon länger mit einem Ambi-Light-ähnlichen System für mein Home-Cinema geliebäugelt. Wer sich darunter nichts vorstellen kann: Es handelt sich um ein Band von LED, die hinter dem Bildschirm um den ganzen Bildschirm herum angebracht sind und wo jede LED in der Farbe leuchtet, die der Rand-Bereich des Bildschirms an der Stelle gerade zeigt.
Rechts ein kleines animiertes GIF dazu.

Philipps stellt Bildschirme her, die dieses Feature integriert haben – das ganze hat natürlich seinen Preis und wer seinen funktionierenden Bildschirm nicht einfach wegschmeißen will, weil es da was Neues mit ein paar Pixeln mehr oder Ambilight gibt, der kann sich sein Ambilight gegebenenfalls selbst basteln.

Anleitungen für die verschiedensten Anwendungsgebiete finden sich im Internet viele. In meinem Fall ging es darum, meinen Mac, der als Mediacenter fungiert und der die einzige Anlaufstelle für TV und Filme ist, mit Hilfe eines Arduino Uno mit einem Ambilight auszustatten.
Auf der AdaFruit-Homepage wird dies im Projekt namens Adalight sehr anschaulich erklärt, so dass auch technisch weniger begabte (also da zähle ich mich jetzt mal dazu) zum Ziel kommen können.

Leider funktioniert bei mir – wie so oft bei Arduino-Projekten – nicht alles auf Anhieb. Ich wähnte mich schon am Ziel, stellte aber ein Flackern der LED fest, welches ich erst nach stundenlangem Googeln und Probieren abstellen konnte.

Der Adalight-Artikel ist wirklich sehr gut geschrieben und ich empfehle jedem, zuerst einmal wie dort beschrieben vor zu gehen.
Sollten dort Probleme auftreten, ist hier meine leicht abgewandelte Variante:

Adalight mit Arduino Uno und 50 LED

Meine Einkaufsliste:

In der Kategorie 'Sowieso im Schrank gefunden' :

  • Arduino Uno samt USB-Kabel
  • Breadboard-Kabel

Software:

  • Arduino IDE ... na klar! (Hier wären auch noch ältere Versionen zu finden, die unter MacOS X <10.7 laufen)
  • Processing. Bloß nicht die aktuellste Version herunterladen, sondern Version 2.2.1! Version 3.x hat ein Problem mit dem Adalight-Skript.
  • FastLED-Bibliothek (benötigen wir für den Arduino)

Software-Alternativen:

Angeblich soll man den Arduino mit seinen angeschlossenen LEDs auch mit der Software Prismatik ansteuern können (so würde man sich Processing sparen; Die Arduino IDE und das entsprechende Skript samt FastLED-Bibliothek benötigt man weiterhin). Hierzu benötigt man noch eine Config-Datei, die man hier erstellen kann.
Allerdings konnte ich die ganze Sache nicht testen, da die Software trotz angeblicher MacOS-10.6.8-Kompatibilität auf meinem 10.6.8-Mac nicht lief.

Der Arduino

Das vom Adalight-Projekt auf GitHub zur Verfügung gestellte Skript für den Arduino hatte bei mir im Endeffekt dafür gesorgt, dass die LED flackerten. Dies mag wohl damit zusammenhängen, dass ich nicht genau dieselben LED wie auf der Projektseite vorgeschlagen, verwendete.

Auf dieser Seite des Adafruit-Forums wurde ich fündig, statt SPI.h die separate Bibliothek FastLED zu verwenden (leider erst, nachdem ich andere Tipps wie mal schnell nen LED abtrennen, versucht hatte).

Der abgewandelte Code aus dem Forumseintrag steht hier nochmals zum Download parat (Foreneinträge verschwinden ja gerne mal).

Processing

Processing analysiert die durchschnitts-Farbwerte der Randbereiche des aktuellen Bildschirminhaltes und sendet diese Information an den Arduino, der dann die entsprechenden LED schaltet.

Der enstprechnde Quellcode auf GitHub ist auf 25 LED ausgelegt, für meinen 40"-Bildschirm musste ich ihn auf 50 LED umfunktionieren. Wie das geht, ist auf der Adalight-Projektseite sehr gut beschrieben.

Der Komplettheit halber hier auch nochmals der abgewandelte Quellcode, bei dem sehr wahrscheinlich außerdem noch die Zeile 156 geändert werden muss, in der auf den seriellen Anschluss zugegriffen wird:

port = new Serial(this, Serial.list()[0], 115200);

Mit viel Glück bleibt's bei

Serial.list()[0]
, kann aber auch
Serial.list()[1]
,
Serial.list()[2]
,... sein.
Je nachdem, wie viele Serial-Schnittstellen vorhanden sind.

Welche Schnittstelle die richtige ist, findet man am besten heraus, indem man in Processing einen neuen Sketch erstellt und folgenden Code einfügt:

import processing.serial.*;
Serial port;

println(Serial.list());

Auf "Play" klicken, neu geöffnetes Fenster wieder schließen; interessant ist die Log-Ausgabe im Sketch-Fenster.
Uns interessiert die Nummer des Eintrages des Arduinos mit /dev/tty. (nicht /dev/cu.). Im Bild rechts wäre es die Nummer 4 und wir müssten
port = new Serial(this, Serial.list()[4], 115200);
im Adalight-Sketch verwenden.
Ist man sich nicht sicher, welchen Namen der Arduino hat, dann mal ausstecken, Sketch lauf lassen, wieder einstecken und Sketch nochmals laufen lassen. Der nun hinzugekommene Port ist der Arduino.

Das letztendliche Adalight-Programm lässt sich direkt mit dem Playknopf aus Processing heraus starten, aber auch über das Datei-Menü als eigenständiges Programm exportieren (leider alles auf Java-Grundlage und benötigt bei mir im Betrieb ~70% Prozessorauslastung; ich arbeite derzeit an einer C-Variante, die ich dann an dieser Stelle veröffentlichen werde).

Hardware

Da ich mir gleich einen LED-Strang mit 50 LED gekauft hatte, erledigte sich bei mir die hier beschriebene Geschichte mit zwei 25er-LED-Stränge hintereinander hängen, aber den Power vom Netzteil in der Mitte einspeisen.
Arduino am einen Ende und Strom am anderen Ende anhängen war in meinem Fall kein Problem.

Hier das eine Ende des LED-Strangs mit dem kleineren (würde mal sagen "männlichen") Stecker, in den sich Standard-Breadboard-Kabel einfach reinstecken lassen (rechte Seite des Steckers im Bild).
 
Hier das andere Ende der drei Breadboard-Kabel in den Arduino-Anschlüssen GND (blau), 13 (grün) und 11 (weiß).
 
So wahrscheinlich etwas besser erkennbar.
 
...und das andere Ende des LED-Strangs mit dem weiblichen Stecker, den wir nicht benötigen und dem Stromanschluss, den wir in einen weiblichen Stecker klemmen ( blau, + rot), welchen wir dann ans Netzgerät stecken können.
 

Installation

Größte letzte Hürde für mich als Heimwerker-Pfuscher war die Installation der LED hinter dem Bildschirm.

Mein Bildschirm ist schon ziemlich alt und hat eine massive Wandhalterung (die deutlich schwerer ist, als ein gesamter neuer LED-Bildschirm samt Halterung).
Mit einer VESA-Wandhalterung hätte sich wahrscheinlich eine einfachere Installationsmöglichkeit gefunden, aber das hier ist schon recht speziell.

Der erste Versuch, die LED einfach mit Isolierband festzukleben war von Anfang an zum Scheitern verurteilt: Das Isolierband löste sich bei den meisten LED recht schnell wieder.

Versuch zwei war ein Rahmen mit vier aneinander geschraubten Holzleisten. Die schafften es allerdings gar nicht erst bis hinter den Bildschirm, da ich die Holzleisten nicht so wirklich stabil aneinander geschraubt bekam (hatte recht dünne Holzleisten genommen, da ja die LED durchgeschoben werden müssen und ich nicht noch weitere 10kg an die TV-Wandhalterung hängen wollte). Zusätzlich hatte es beim Löcher-Bohren noch die eine oder andere Leiste zerjagt.

Zufällig stieß ich irgendwo auf die Idee, Plastik-Elektro-Installationsrohre zu verwenden.
Zwei Rohre und vier Verbindungs-Winkel aus dem Baumarkt hatten mich um die 8€ gekostet. Zwar hatte ich 20mm Rohrdurchmesser gewählt, ein dickeres 25mm-Rohr wäre aber fast besser gewesen, da die Löcher, die man rein bohrt, nur ein paar Millimeter kleiner als das Rohr selbst sind.
 
Für die 50 LED habe ich nun in die beiden langen (horizontalen) Rohre je 15 Löcher mit einem 13er-Bohrer gebohrt, in die kurzen (vertikalen) Rohre 8 Löcher und in die vier Ecken jeweils 1 Loch.
Zusammengesteckt sieht das ganze nicht mal so übel aus.

Vorteil der Rohr-Lösung ist übrigens zudem:
Bis auf die vier LED in den Ecken kann man durch Drehen der Rohre die LED noch leicht schwenken, sollten sie hinter dem Bildschirm zu hell oder zu dunkel vortreten.

Nun noch die LED in das Loch stecken. Haben bei mir gut gehalten, ohne wieder raus zu rutschen, auch wenn ich mit einem Teppichmesser hier und da nochmals etwas nachhelfen und das Loch vergrößern musste.
 
Alle vier Rohre miteinander verbunden, musste ich am Bildschirm selbst nicht mal etwas befestigen.
Auf die Wandhalterung gelegt hält das Ganze von selbst.
 
Und hier nochmal das Endergebnis in Bewegung.
 

Wieso es sich lohnen könnte, den Artikel im Auge zu behalten

Momentan stört mich noch die recht hohe Prozessor-Auslastung durch das Processing-Java-Applet und ich arbeite an einem neuen Code in C statt in Java. Wenn ich so weit bin, werde ich den Code an dieser Stelle veröffentlichen.