ambi-tv ist ein kleines Open-Source Paket, mit dem sich ein Raspberry Pi relativ einfach als Ambilight für einen Fernseher oder Monitor betreiben lässt. Ambilight ist eine von Phillips entwickelte Technologie, bei der RGB-LEDs an den rückseitig an den Kanten des Bildschirms angebracht werden, um das Bild farblich über die Monitorgrenzen hinaus auszudehnen. Ein (englischsprachiges) Demo-Video, wie das mit ambi-tv aussieht bzw. wie das Hardware-Setup zusammengesetzt ist, gibt es auf YouTube.
ambi-tv unterscheidet sich von anderen Ambilight-Clones prinzipiell dadurch, dass das Gerät, mit dem die RGB-LEDs gesteuert werden (also in unserem Fall das Raspberry Pi) nicht gleichzeitig die Videoquelle sein muss. Stattdessen greift ambi-tv direkt auf einen HDMI-Videostrom zu, um die Farben abzuleiten. Deshalb kann man ambi-tv mit allen HDMI-Videoquellen verwenden, also z.b. Blu-Ray Playern, digitalen Satellitenempfängern, terrestrischen Digitalempfängern, Spielekonsolen, AppleTV, uvm. Wenn alle HDMI-Geräte mittels eines HDMI-Switch an den Fernseher angeschlossen sind, müssen auch niemals Kabel umgesteckt werden.
Dazu wird ein HDMI-Splitter verwendet, der das Signal an den Fernseher/Monitor sowie an einen HDMI-to-Composite Adapter sendet, der wiederum über einen USB-Videograbber mit dem Raspberry Pi verbunden ist. Ansonsten sind nur noch ein paar Kabel zu verlöten, um den RGB-LED-Streifen zu betreiben, wobei allerdings keine großartigen Lötkenntnisse notwendig sind. Dieses Tutorial ist für diejenigen interessant, die Ambilight nachrüsten wollen und es für verschiedenste Quellen (DVD Player, Reciever, AppleTV) nutzten möchten.
Inhaltsverzeichnis
Benötigte Komponenten
Folgende Komponenten werden benötigt. Ich habe Links hinzugefügt, wo die Komponenten innerhalb der EU (also zollfrei) bestellt werden können. HDMI Splitter, HDMI-to-Composite Adapter und Videograbber müssen nicht unbedingt die verlinkten sein – Es gibt eine ganze Reihe von vergleichbaren anderen!
- Raspberry Pi (A, B oder B+)
- HDMI Splitter
- HDMI-to-Composite Adapter
- USB Videograbber
- LPD8806 RGB-LED Streifen
- 5V Netzteil, mind. 4A
- Drucktaster (optional)
- Stiftleiste:
- Steckerbuchsen
- Signalkabel
- Micro-USB Kabel
- Kühlkörper für Raspberry Pi
Alternative Hardware
- USB Videograbber
LogiLink Audio und Video Grabber USB 2.0 Dieser läuft mit dem Fushicai Chipsatz Quelle - HDMi-to-Composite
Mini HDMI zu Composite Video AV Konverter Quelle - HDMI Splitter
HDMI Splitter 2 fach 1×2 1080p auch für 3D 1:2 Verteiler HDCP Full HD 1 In 2 Out Quelle - Netzteile:
Schaltnetzteil, geschlossen, 5V / 10A / 60W bezogen auf diesen Beitrag - LEDS
WS2801 Link1 Link2 (Soll nach Änderungen im Sourcecode funktionieren -> Quelle1 Quelle2)
Es ist besonders darauf zu achten, dass das 5V Netzteil zumindest auf 4A zertifiziert ist, da damit nicht nur das Raspberry Pi, sondern auch der RGB-LED Streifen betrieben werden soll: Ein schwaches Netzteil (z.b. 0.5A oder 1A) brennt sonst durch! Die benötigte Länge des RGB-LED Streifens hängt natürlich vom Umfang des Bildschirms ab: Am Besten ist es, den Bildschirm auszumessen, weil man sich mit Pi mal Daumen sonst leicht verschätzt, und der Streifen ist nicht unbedingt billig.
Bauanleitung
Im ersten Abschnitt bringen wir den USB Videograbber auf dem Raspberry Pi zum Laufen. Danach wird der RGB-LED Streifen mit dem Raspberry Pi verbunden, und zuletzt wird ambi-tv konfiguriert.
Raspbian auf RPi installieren
ambi-tv wurde unter Raspbian entwickelt. Zwar funktioniert es auch unter anderen Distributionen (und sogar auf anderen Boards), aber für diese Anleitung wird Raspbian vorausgesetzt. Bevor mit dem nächsten Schritt angefangen wird, sollte Raspbian installiert sein, sowie das Raspberry Pi mit einem Monitor verbunden sein.
Videograbber-Kompatibilität testen
Jetzt kommt der Teil, bei dem ihr die Daumen drücken müsst: Es gibt verschiedene Chipsets in diesen billigen Videograbbern, wobei ich aber nur einen einzigen zum Laufen gebracht habe, indem ich einen alpha-Treiber aus dem linux-next tree modifiziert habe. Alle neueren Chargen der „LogiLink“ oder „EasyCap“ gebrandeten Gräber sollten dieses Chipset haben – Ältere Modelle verwenden ein anderes Chipset, das auf Raspberry Pi nicht so gut funktioniert.
Deshalb testen wir jetzt, ob der Videograbber das „richtige“ Chipset verwendet.
- Das usbutils Paket muss installiert sein: `sudo apt-get install usbutils`
- Der Videograbber wird an einen USB-Port des Raspberry Pi gesteckt: Das LED auf dem Grabber sollte aufleuchten.
- Das Kommando `lsusb` wird nun ausgeführt.
Innerhalb des Output von `lsusb` sollte nun irgendwo der Text `ID 1b71:3002` vorkommen – Das ist die ID des fushicai usbtv Chipsets, das für mich gut funktioniert. Seht ihr diesen Output, ist alles in Ordnung.
Seht ihr diesen Output nicht, könntet ihr probieren, es selbst zum Laufen zu bekommen (meine Anleitung bezieht sich leider nur auf das fushicai Chipset). Alternativ könnt ihr den Grabber auch zurückgeben und einen anderen probieren: Leider kann von außen bzw. von der Packung nicht auf das verwendete Chipset schließen, aber wie gesagt, die neueren Modelle der Grabber, die optisch so aussehen wie der von mir verzinkte weiter oben, sollten das fushicai Chipset verwenden.
Ambi-Tv herunterladen
Ist sichergestellt, dass der Videograbber unterstützt wird, kann der ambi-tv Quellcode heruntergeladen werden. Erfahrene User oder Entwickler, die vorhaben, ambi-tv zu modifizieren, können direkt das git repository clonenhttps://github.com/gkaindl/ambi-tv
Alle anderen laden die Software besser als ZIP-Datei herunter und entpacken sie anschließend:
1 2 3 |
wget https://github.com/gkaindl/ambi-tv/archive/master.zip unzip master.zip cd ambi-tv-master |
Videograbber-Treiber installieren
Nun kann der Treiber für den Videograbber installiert werden, allerdings muss dafür das modifizierte Kernel-Modul gebaut werden. Dann werden die aktuellen Kernel-Quellen sowie das Symbol-File installiert, um out-of-tree Module bauen zu können.
1 2 |
cd misc sudo bash get-kernel-source.sh |
1 2 3 4 5 |
cd usbtv-driver/ make sudo mkdir -p /lib/modules/`uname -r`/extra sudo cp usbtv.ko /lib/modules/`uname -r`/extra sudo depmod `uname -r` |
1 2 3 4 |
sudo modprobe videobuf2_core sudo modprobe videobuf2_vmalloc sudo modprobe usbtv |
1 2 3 |
sudo nano /etc/modprobe.d/raspi-blacklist.conf #spi-bcm2708 |
1 |
sudo nano /etc/modules |
1 2 3 4 |
spi-bcm2708 videobuf2_core videobuf2_vmalloc usbtv |
Raspberry Pi mit Videosignal verbinden
Das HDMI-Kabel, das zum Monitor/Fernseher führt, wird nun abgesteckt und in den Input des HDMI-Splitters gesteckt. Output 1 des Splitters kommt an den Monitor. Output 2 des Splitters wird mit dem HDMI-to-Composite Adapter verbunden. Schließlich wird der Composite-Ausgaben des Adapters mit dem Composite-Eingang des Videograbbers verbunden.
Wichtig ist, dass der HDMI-to-Composite Splitter auf PAL eingestellt ist, sofern euer Modell dafür einen Umschalter hat. Natürlich macht ambi-tv am meisten Spaß, wenn ihr eure HDMI-Geräte über einen vorgeschalteten HDMI-Switch mit dem Monitor verbindet, denn dann könnt ihr alle Geräte damit nutzen, ohne jemals Kabel umstecken zu müssen.
Ist das Raspberry Pi mit einem Monitor verbunden, kann man das jetzt den Videograbber auch mit `mplayer` testen.
1 2 |
sudo apt-get install mplayer sudo mplayer tv:// -tv device=/dev/video0 -hardframedrop |
Sind dabei Bildstörungen sichtbar, ist es wohl notwendig, das Raspberry Pi zu übertakten. Anleitung zum übertakten könnt diesen Artikel verwenden.
Kabel verlöten
Als nächstes werden die Kabel verlötet, mit denen das Raspberry Pi mit dem RGB-LED Strip verbunden wird. Zuerst wird das Micro-USB Kabel zerschnitten und die Isolierung an der Schnittstelle ein wenig zurückgezogen. Weitergearbeitet wird nun mit der Kabelhälfte, an der sich der Micro-USB Stecker befindet (also der Stecker, der ins Raspberry Pi passt). Ist die Isolierung zurückgezogen, so sieht man 4 Kabel, wobei eines rot, eines schwarz ist. Die anderen beiden Kabel sind hier nicht relevant.
Nun wird das positive Ende des 5V Netzteils mit dem roten Kabel verlötet, das negative Ende mit dem schwarzen Kabel – Die Polarität des Netzteilkabels sollte auf dem Netzteil aufgedruckt sein. Entweder kann das Netzteilkabel zerschnitten werden, um des direkt an das Micro-USB Kabel zu löten, oder (wenn verfügbar) kann auch ein passender Stecker verwendet werden, mit dem sich das Micro-USB Kabel an das Netzteil stecken lässt.
Danach wird jeweils ein weiteres Kabel (sozusagen als Weiche) an die Lötstellen gehängt, sodass der RGB-LED Strip von demselben Netzteil wie das Raspberry Pi betrieben werden kann.
Die anderen Enden der beiden Kabelweichen werden nun mit dem RGB-LED Strip verbunden: Ist an eurem Streifen ein Stecker dran, kann man die Kabel an ein Stück Stiftleiste löten, um diese als Stecker zu verwenden. Ansonsten werden die Kabel direkt an den positiven bzw. negativen Versorgungspin des LED Streifens gelötet.
Die Lötstellen auf dem LED Streifen sind beschriftet, also bitte genau nachschauen, dass die Kabel an die richtige Stelle gelötet werden!
Zum jetzigen Zeitpunkt solltet ihr nun ein Kabelkonstrukt haben, mit dem das 5V Netzteil sowohl das Raspberry Pi, als auch den LED Streifen mit Spannung versorgt.
Jetzt wird das Steuersignal des LED Streifens mit dem Raspberry Pi verbunden: Dazu lötet man zwei weitere Kabel an den LED Streifen, und zwar an die Stellen, die mit `CLK` und `DAT` beschriftet sind.
Man bricht nun ein Stück von der Steckerleiste ab, das drei Eingänge hat: Die Signalkabel für `CLK` und `DAT` werden an der anderen Seite nun an die äußeren beiden Pins der dreibeinigen Steckerleiste gelötet. Hier muss man vorsichtig sein, dass man mit dem mittleren Pin keinen Kurzschluss zusammenlötet: Der mittlere Pin muss frei bleiben!
Jetzt steckt man die Steckerleiste in den Header P1 auf dem Raspberry Pi, sodass das `DAT` Signal mit Pin 19, das `CLK` Signal mit Pin 23 verbunden ist. Dazu gibt es auch ein Bild, um das besser zu illustrieren.
Hat man nun noch den optionalen Drucktaster, lötet man jeweils ein Kabel an die beiden Seiten des Tasters. Die anderen Enden der Kabel lötet man an ein Stück Steckerleiste mit 2 Pins.
Anschließend wird die Steckerleiste in die Pins 5 und 6 des P1 Headers auf dem Raspberry Pi gesteckt (das ist ebenfalls auf dem Bild eingezeichnet).
Übrigens, nicht erschrecken, falls während des Zusammensteckens der Kabel plötzlich einige LEDs auf dem Streifen angehen: Das ist normal, da das Raspberry Pi möglicherweise in einem Zustand ist, in dem die Steuersignale für den LED Streifen undefiniert sind.
RGB Streifen anbringen
Der verzinkte LPD8806 wird in einer wasserdichten Plastikverkleidung geliefert: Diese kann man aber aufschneiden und entfernen, wenn man will, damit der Streifen deutlich schmäler wird.
Ziel sollte es sein, den LED-Streifen möglichst gleichmäßig an alle 4 Kanten des Fernsehers zu kleben. Idealerweise sollte der Streifen so geklebt sein, dass die LEDs nach hinten zeigen, nicht so, dass die LEDs seitlich vom Bildschirm weg zeigen.
Zum Aufkleben eignet sich doppelseitiges Klebeband sehr gut, wobei man besser ein stärkeres Klebeband aus dem Baumarkt oder Bastelgeschäft verwenden.
Lässt sich der RGB Streifen nicht gut um die Ecken des Bildschirms knicken, kann man den Streifen auf den dafür aufgedruckten Linien auch mit einer Schere zerschneiden: Anschließend verbindet man die Schnittstelle über die Ecke wieder, in dem man 4 kleine Stücke Signalkabel dazwischen lötet.
ambi-tv installieren
Nachdem der Aufbau nun abgeschlossen ist, wird die ambi-tv Software installiert. Dazu gehen wir wieder in das Verzeichnis mit dem zuvor heruntergeladenen Repository und führen `make` aus:
1 2 |
cd ambi-tv-master make |
1 |
sudo cp sample.conf /etc/ambi-tv.conf |
ambi-tv konfigurieren
Einmal wird es jetzt noch knifflig: Zwar sind die Default-Einstellungen alle verwendbar, aber die konkrete Geometrie eures LED Streifens müsst ihr doch noch selbst einstellen. Dazu sucht man in der Datei `/etc/ambi-tv.conf` nach den Zeilen `leds-top`, `leds-bottom`, `leds-left` und `leds-right`.
Diese Konfigurationszeilen müssen nun so editiert werden, dass jeweils alle LEDs festgelegt sind, die sich bei eurer Installation eben oben, unten, links und rechts auf dem Monitor befinden.
Die LEDs fangen bei 0 an und hören bei n-1 auf:
Hätte eure Installation also 100 LEDs, so wäre das erste LED 0, das letzte LED 99.
Das erste (also eigentlich 0-te) LED ist das LED, das sich direkt neben den Signalkabeln befindet, die mit dem Raspberry Pi verbunden sind.
Die Reihenfolge der horizontalen Konfiguration ist stets von links nach rechts, die der vertikalen Konfiguration von oben nach unten.
Gibt es einen Bereich, wo ihr keine LEDs aufgeklebt habt (zum Beispiel dort, wo der Monitor den Standfuß hat), so kann man mittels des Postfix „X“ eine Anzahl an LEDs angeben, die an dieser Stelle ausgespart wird (damit die interne Geometrie wieder stimmt).
Dies ist ein bisschen kompliziert, weshalb ich das (hoffentlich) besser erklären kann, indem ich die Default-Einstellung aus `sample.conf` (also meine eigene Einstellung) erkläre:
1 2 3 4 |
leds-top 34-63 leds-bottom 13-0,4X,97-84 leds-left 33-14 leds-right 64-83 |
- An der Oberseite meines Fernseher befindet sich ganz links das LED Nummer 34, ganz rechts das LED Nummer 63.
- An der linken Seite ist das oberste LED die Nummer 33, das unterste LED die Nummer 14.
- Auf der rechten Seite ist das oberste LED die Nummer 64, das unterste die Nummer 83
Ich habe meinen LED Streifen also im Uhrzeigersinn um den Fernseher geklebt.
Die Unterseite ist ein bisschen komplizierter:
Hier ist das linke LED die Nummer 13, das rechte LED die Nummer 84.
Allerdings gibt es in der Mitte eine Lücke, wo sich der Standfuß meines Fernsehers befindet:
Dort wollte/konnte ich keine LEDs hin kleben, weshalb sich eine Lücke ergibt. Diese Lücke ist in etwa so breit, dass dort 4 LEDs hin passen würden. Diese Lücke wird durch das „4X“ beschrieben, das also bedeutet „Hier sollten 4 LEDs sein, sind sie aber nicht“.
Indem diese Lücke ambi-tv mitgeteilt wird, kann die Software die LED Geometrie erkennen und weiß nun, dass LED 0 und LED 97 eben nicht direkt nebeneinander sein, sondern räumlich durch in etwa 4 LEDs getrennt, wodurch die korrekte Zuordnung der LEDs zu Bildschirmpositionen gewährleistet ist.
Alles klar? Falls nicht, bitte den Absatz nochmals durchlesen: Es ist sehr wichtig, dass die LED Geometrie korrekt definiert ist, da es sonst zu allerlei unerwartetem Verhalten kommen kann.
ambi-tv verfügt über eine ganze Reihe weiterer Konfigurationsmöglichkeiten, die hier aber den Rahmen sprengen würden: Die Parameter sind aber in der Dokumentation auf der Github-Seite (auf Englisch) beschrieben. Falls die LED Geometrie nicht richtig mit dem Bildschirmbild ausgerichtet ist, empfiehlt es sich, sich diese Parameter anzusehen.
ambi-tv ausprobieren
Nun sollte alles so weit eingerichtet sein, dass man ambi-tv ausprobieren kann. Dazu startet man die Software, und zwar so
1 2 |
cd ambi-tv-master sudo bin/ambi-tv --button-gpio 3 |
Der Parameter teilt ambi-tv mit, wo der Taster zu finden ist.
Wenn alles klappt, solltet ihr nun den Ambilight-Effekt basierend auf dem HDMI-Signal sehen. Falls es nicht klappt, empfiehlt es sich, die Anleitung nochmal zu lesen, ob sich nicht wo ein Fehler eingeschlichen hat.
Mittels des Tasters kann man ambi-tv pausieren (also ausschalten): Dazu drückt man den Taster einmal. Drückt man den Taster erneut, so wird der Effekt wieder eingeschaltet.
Ist ambi-tv nicht pausiert, kann man den Taster auch zweimal schnell hintereinander drücken, um zwischen den definierten Effekten durchzuschalten: Derzeit sind 3 Effekte vorhanden, nämlich der Ambilight-Effekt (also die Weiterführung der Kantenfarben durch die LEDs), ein Durchschnittfarb-Effekt (wobei die LEDs alle in der gemittelten Farbe des Videobilds leuchten) und ein Moodlight-Effekt, bei dem die LEDs durch die Regenbogenfarben schalten (dieser Effekt funktioniert auch, wenn kein Videosignal vorhanden ist).
Vielen Dank an ps915 für dieses Tutorial.