ambi-tv ist ein kleines Open-Source Paket, mit dem sich ein embedded Linux Board relativ einfach als Ambilight für einen Fernseher oder Monitor betreiben lässt. Das Raspberry Pi eignet sich hierfür exzellent. 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.

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, usw… 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.

amilightBenötigte Komponenten:

  1. Raspberry Pi (A oder B): Amazon
  2. HDMI Splitter: Amazon
  3. HDMI-to-Composite Adapter: Amazon
  4. USB Videograbber: Amazon
  5. LPD8806 RGB-LED Streifen: Watterott
  6. 5V Netzteil, mind. 4A: Amazon
  7. Drucktaster (optional): WatterottAmazon
  8. Stiftleiste: FarnellAmazon 
  9. Steckerbuchsen: Farnell
  10. Signalkabel: FarnellAmazon
  11. Micro-USB Kabel: AmazonAmazon
  12. Kühlkörper für Raspberry Pi: WatterottAmazonAmazon

 

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.

1. 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. Bitte benutz folgendes Image: 2013-07-26-wheezy-raspbian
Bevor mit dem nächsten Schritt angefangen wird, sollte Raspbian installiert sein, sowie das Raspberry Pi mit einem Monitor verbunden sein.

2. 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.

  1. Das usbutils Paket muss installiert sein: `sudo apt-get install usbutils`
  2. Der Videograbber wird an einen USB-Port des Raspberry Pi gesteckt: Das LED auf dem Grabber sollte aufleuchten.
  3. 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.
Viel Glück!

3. ambi-tv Respository 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 clonen https://github.com/gkaindl/ambi-tv

Alle anderen laden die Software besser als ZIP-Datei herunter und entpacken sie anschließend:

wget https://github.com/gkaindl/ambi-tv/archive/master.zip
unzip master.zip
cd ambi-tv-master

 

4. Videograbber-Treiber installieren

Nun kann der Treiber für den Videograbber installiert. 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.

cd misc
sudo bash get-kernel-source.sh

 

Anschließend wird nun das Modul gebaut und installiert.

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`

 

Nun kann das Modul mit seinen Abhängigkeiten in den Kernel geladen werden.

sudo modprobe videobuf2_core
sudo modprobe videobuf2_vmalloc
sudo modprobe usbtv

spi-bcm2708 aus der Blacklist austragen. Raute davor setzten

sudo nano /etc/modprobe.d/raspi-blacklist.conf
#spi-bcm2708

 

Wenn alles geklappt hat, sollte es nun das Videodevice `/dev/video0` geben.
Es empfiehlt sich auch, die drei Module `videobuf2_core`, `videobuf2_vmalloc` und `usbtv` in dieser Reihenfolge in `/etc/modules` einzutragen, damit sie bei einem Neustart von nun an automatisch geladen werden.

sudo nano /etc/modules

spi-bcm2708
videobuf2_core
videobuf2_vmalloc
usbtv

 

5. 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.

sudo apt-get install mplayer
sudo mplayer tv:// -tv device=/dev/video0 -hardframedrop

 

Wenn alles funktioniert, sollte man nun den (möglicherweise gequetschten) Videostrom sehen können.
Sind dabei Bildstörungen sichtbar, ist es wohl notwendig, das Raspberry Pi zu übertakten. Dies kann deshalb der Fall sein, weil das RPi über keinen „echten“ USB-Controller verfügt und daher vieles in Software erledigen muss, weshalb die USB-Bandbreite nicht ideal ist.
Es empfiehlt sich, nun einen Kühlkörper auf die beiden großen, gut sichtbaren Chips an der Oberseite des Raspberry Pi zu kleben.

Anschließend wird das Raspberry Pi übertaktet: Dazu verwendet man am besten das Programm `raspi-config`.

sudo raspi-config

 

Dort folgt man den Anweisungen auf dem Bildschirm, um den Punkt „Overclock“ auszuwählen, wo man das Raspberry Pi auf dem höchsten auswählbaren Setting übertaktet. Anschließend wird das Raspberry Pi neu gestartet.
Wird jetzt noch einmal mit `mplayer` getestet, sollten keine Störungen mehr sichtbar sein.

6. 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.

hardware_ws2801_connection

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.

rpi

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.

7. RGB Streifen aufkleben

Jetzt muss noch der RGB-Streifen an den Monitor oder Fernseher geklebt werden.

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.

8. 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:

cd ambi-tv-master
make

Danach wird die Konfigurationsdatei für ambi-tv angelegt: Im Repository ist bereits eine Beispieldatei vorhanden, die einfach nach `/etc/` kopiert werden kann.

sudo cp sample.conf /etc/ambi-tv.conf

9. 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:

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.

10. ambi-tv ausprobieren

Nun sollte alles so weit eingerichtet sein, dass man ambi-tv ausprobieren kann. Dazu startet man die Software, und zwar so

cd ambi-tv-master
sudo bin/ambi-tv --button-gpio 3

(Falls ihr ein älteres RevA Raspberry Pi habt, verwendet bitte eine 1 anstatt der 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).

 

bekannte Fehler / Hotfix

Falls ihr Probleme bei der richtigen Farbdarstellung haben solltet hilft dieser AmbiTV-ColorFix. Einfach das Zip Archiv downloaden, entpacken und die lpd8806-spidev-sink.c & main.c in das ambi-tv Verzeichnis kopieren und dadurch die vorhandenen ersetzen, dann mittels make ambi-tv das Projekt neu kompilieren.

wget https://www.thomasbendig.de/wp-content/uploads/2015/12/AmbiTV-ColorFix.zip
unzip AmbiTV-ColorFix.zip

Nachdem du kompiliert hast kannst du die einzelnen Farb Kanäle in der Konsole „abschwächen“:

  • mit 1 bzw. 4 veränderst du den Multiplikator für den Rot Kanal
  • mit 2 bzw. 5 veränderst du den Multiplikator für den Grün Kanal
  • mit 3 bzw. 6 veränderst du den Multiplikator für den Blau Kanal
  • mit b bzw. d veränderst du die Helligkeit.

Beispiel Konfiguration

Hier findest ihr auch meine Einstellungen in der ambi-tv.conf:

# ambi-tv configuration file
# tbendig <dev@tomben.de>
# Please have a look at the included file README.md for information on
# how this file works.
#

v4l2-grab-source {
name v4l2-video
video-device /dev/video0
buffers 4
crop-left 1
crop-top 1
crop-right 1
crop-bottom 1
autocrop-luminance-threshold 25
}

timer-source {
name timer-30fps
millis 33
}

lpd8806-spidev-sink {
name led-frame
spi-device /dev/spidev0.0
spi-speed-hz 2500000
less-top 37-0       # left-to-right
less-bottom 58-95   # left-to-right
less-left 38-57     # top-to-bottom
less-right 115-96   # top-to-bottom
led-inset-top 3
led-inset-bottom 3.8
led-inset-left 3
led-inset-right 3.5
blended-frames 6
gamma-red 1.55
gamma-green 1.45
gamma-blue 1.5
}

avg-color-processor {
name avg-color
}

edge-color-processor {
name edge-color
box-width 8
box-height 8
}

mood-light-processor {
name mood-light
speed 2
}

&program_tv_edge_color {
activate &v4l2-video
activate &edge-color
activate &led-frame
}
&program_tv_avg_color {
activate &v4l2-video
activate &avg-color
activate &led-frame
}

&program_mood_light {
activate &timer-30fps
activate &mood-light
activate &led-frame
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.