Home > Tutorials > Ambi-TV – Ambilight mit dem Raspberry Pi nachrüsten

Ambi-TV – Ambilight mit dem Raspberry Pi nachrüsten

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

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.

amilight

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!

Alternative Hardware

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.

  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.

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:

 

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.

Anschließend wird nun das Modul gebaut und installiert.
Nun kann das Modul mit seinen Abhängigkeiten in den Kernel geladen werden.
spi-bcm2708 aus der Blacklist austragen. Raute davor setzten
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.

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.

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

rpi
wiring

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.

strips

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:

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

 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:

  • 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

(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).

Vielen Dank an ps915 für dieses Tutorial.

 

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (3 votes, durchschnittlich: 2,67 von 5)
Loading...

Über raspberry.tips

10 Kommentare

  1. Hallo :)
    Also erstmal vielen dank für diesen Tollen Beitrag. Ein Kollege und ich haben uns dafür entschieden, dies als unser Schulprojekt zu machen. Die Teile sind bestellt, jedoch noch nicht da.
    Der Text ist für mich an ein paar stellen nicht ganz verständlich, weswegen ich fragen wollte, ob es ein Video Tutorial zum verlöten und anschließen der einzelnen Kabel gibt. Wenn ja, wäre das echt super hilfrei
    Mit freundlichen Grüßen,

    Nico

  2. Hallo,
    erstmal super Seite!!
    Ich habe auch genau diesen Videograbber, leider erscheint bei mir eine Fehlermeldung beim Installieren des Treibers nach ‘sudo bash get-kernel-source.sh’ :

    gzip: usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz: No such file or directory

    und zuletzt:

    make: *** No rule to make target ‘oldconfig’. Schluss.
    das gleiche dann nochmal mit ‘prepare’ und ‘scripts’ als Argument…

    Jemand eine Idee an was das liegen könnte??

    Vielen Dank schon mal!

  3. Hi,

    wozu benötigt man denn die unter Punkt 9 benannten Steckerbuchsen?
    Ich hab es jetzt zum 3. mal gelesen und mir fehlt der Zusammenhang.

    grüße Mirko

  4. Hallo,

    funkioniert die Ausgabe des Fernsehbildes auch über den av ausgang oder muss es unbedingt hdmi sein?

    vielen dank im voraus

    arokh12

    • Ja und spart zusätzlich auch noch den HDMI-Splitter und HDMI auf AV Konverter, also muss nur die AV-Quelle direkt an den Videograbber gesteckt werden und los geht’s.
      Dies ermöglicht z.B. den SCART-Ausgang des Fernsehers (eigentlich für einen Videorecorder gedacht) (falls vorhanden, meist Kombination aus Ein- und Ausgang an Stecker 1) an den Pi zu schließen und somit auch bei normalem DVB-T Fernsehen mit dem im Fernseher verbauten Empfänger Ambilight zu genießen, oder (falls vorhanden) den 2. Ausgang des normalen Sattelitenempfängers direkt anzuschließen.
      Bei ersterem ist zu beachten, dass der Fernseher aber nur “sein eigenes” oder nur analoges Bildmaterial ausgibt, HDMI-Eingänge werden darüber nicht ausgegeben, was zur Verwendung einer HDMI-Quelle den beschriebenen Aufbau mit Splitter und Konverter erforderlich macht.

      P.S.: Alles ohne Gewähr :p Habe mir das bis jetzt immer nur im Kopf so geplant, aber bis jetzt weder etwas bestellt, noch etwas selbst ausprobiert, würde es aber wie oben beschrieben Aufbauen um die Kosten (fürs erste) zu reduzieren :D

  5. Hi,

    ich hänge seit 2 Tagen fest an :
    sudo cp usbtv.ko /lib/modules/`uname -r`/extra

    jedesmal kommt cp: Aufruf von stat für „usbtv.ko“ nicht möglich: Datei oder Verzeichnis nicht gefunden
    Wobei sollte diese denn ursprünglich erzeugt werden? Damit ich einen Anhaltspunkt habe wo ich was falsch gemacht habe oder es bei mir hakt.

    Grüße Mirko

    • Also neuer Pi neues System und beim Modul aufbauen und installieren

      cd usbtv-driver/
      make

      kommen hier schon Fehler!

      pi@raspberrypi ~/ambi-tv-master/misc/usbtv-driver $ make
      make -C /lib/modules/3.18.7-v7+/build M=/home/pi/ambi-tv-master/misc/usbtv-driver modules
      make[1]: Entering directory ‘/usr/src/linux-source-3.18.7-v7+’
      CC [M] /home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.o
      /home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.c:638:8: warning: initialization from incompatible pointer type [enabled by default]
      /home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.c:638:8: warning: (near initialization for ‘usbtv_vb2_ops.stop_streaming’) [enabled by default]
      /home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.c: In function ‘usbtv_probe’:
      /home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.c:719:8: error: ‘V4L2_FL_USE_FH_PRIO’ undeclared (first use in this function)
      /home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.c:719:8: note: each undeclared identifier is reported only once for each function it appears in
      scripts/Makefile.build:263: recipe for target ‘/home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.o’ failed
      make[2]: *** [/home/pi/ambi-tv-master/misc/usbtv-driver/usbtv.o] Error 1
      Makefile:1381: recipe for target ‘_module_/home/pi/ambi-tv-master/misc/usbtv-driver’ failed
      make[1]: *** [_module_/home/pi/ambi-tv-master/misc/usbtv-driver] Error 2
      make[1]: Leaving directory ‘/usr/src/linux-source-3.18.7-v7+’
      Makefile:6: recipe for target ‘all’ failed
      make: *** [all] Error 2

      Kann es sein das es na der Kernelversion 3.18 liegt?

      Gruß Mirko

      • Hallo Leute,

        ich habe genau das gleiche Problem, nach “cd usbtv-driver/
        make” kommt auch die Error Meldung.
        Hat evtl. jemand einen Lösung?

    • ich komme auch nicht weiter an denn Punkt wie geht das ??
      die Anleitung ist ein bissen schwer verständlich gemacht

Schreibe einen Kommentar

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