Co to jest ambilight, to chyba nie trzeba tłumaczyć. Jeśli ktoś jednak nie wie, to zachęcam do poczytania na wikipedii ( https://en.wikipedia.org/wiki/Ambilight ) o patencie philipsa. Jak to z patentami bywa, telewizory tylko jednej firmy posiadają tylne podświetlenie. Odkąd jednak pojawiło się raspberry pi, możliwe jest zamontowanie sobie podświetlenia do dowolnego telewizora (ja osobiście mam telewizor LG, stary hdready a zamontowanie ambilight znacznie polepszyło oglądanie filmów). Opis jak zainstalować ambilight, czerpałem z niemieckiej strony: http://www.forum-raspberrypi.de/Thread-hyperion-ambilight-projekt-fuer-hdmi-quellen-raspberrypi-raspbian-hyperion-tv-beamer .Mimo skomplikowanego opisu instalacja jest banalnie prosta.

Co jest potrzebne:
- raspberry pi (dowolny model, testowałem na raspberry pi 1 B i raspberry pi 3B) z zainstalowanym systemem (autor niemieckiego artykułu jak również ja mamy zainstalowanego raspbiana)
- diody LED WS2801 (z czterema wejściami, dwa to zasilanie, jeden to sygnał zegara, jeden to linia danych) - (coraz trudniej je dostać) w cenie ok. 50 PLN za 1m (długość zależy od wielkości telewizora i od tego, czy chcemy mieć ledy dookoła tv czy np. tylko z boków. Led WS2801 można zastąpić diodami WS2812B ale wtedy niezbędny jest dodatkowy moduł zrobiony np. na arduino (ponieważ tego nie testowałem, to nie będę opisywał)
- USB videograbber (koszt ok. 80 zł), wygląda on mniej więcej tak:

- jeśli telewizor mamy podłączony do tunera przez eurozłącze lub mamy nowszy tuner, podłączony przez hdmi ale równlogle sygnał wizji jest dostępny na złączu "scart" (podobno nowsze tunery "NC+" tak mają), to sygnał "podkradamy" z eurozłącza (musimy znaleźć piny, na których jest sygnał cvbs i tam się podłączamy naszym grabberem - żółta końcówka). Wg rozpiski pinów, pin 19 to wyjście CVBS, pin 17 to masa CVBS. Niestety, mój tuner "nki" jest starego typu i generuje sygnał albo na wyjściu hdmi albo na eruozłączu, co wyklucza to rozwiązanie (mógłby tv podłączyć przez eurozłącze i ustawić w tunerze generowanie sygnału na tym złączu, ale wtedy będę miał maksymalnie rozdzielczość PAL lub NTSC, co dyskwalifikuje ten sposób podłączenia). Jednak i tu jest rozwiązanie, które wymaga dokupienia 2 elementów dodatkowych.
- splitter czyli rozdzielacz sygnału hdmi (ceny wahają się od 30 - 300 zł, zależy od jakości i ilości wyjść, nam wystarczy podział na 2 wyjścia)

- konwerter sygnału hdmi do CVBS (cena ok. 50 PLN)

Zamiast rozdzielacza i konwentera można kupić 2 w 1 (są już takie dostępne).
 

- potrzebujemy jeszcze mocnego zasilacza (samo raspberry pi potrzebuje zasilacza 2,5 A). Ja kupiłem zasilacz 5V/7A w sklepie internetowym http://www.plcs.net.pl/index.php/katalog-automatyki/zasilacze/meanwell/zasilacze-do-zabudowy/seria-g3-15-do-150w/rs-35-5-zasilacz-rs-35-5-5v-dc-7a.html w niskije cenie, 50 PLN + przesyłka.

Sposób podłączenia tych wszystkich urządzeń jest intuicyjny. Wyjście hdmi z tunera podłączamy do wejścia rozdzielacza hdmi. Jedno wyjście rozdzielacza hdmi podłączamy do TV, drugie wyjście podłączamy do wejścia konwentera hdmi/cvbs. Wyjście konwentera łączymy z wejściem grabbera (żółte), sygnały audio pomijamy, bo dźwięku nie potrzebujemy przecież przechwytywać. Grabber podłączamy do wejścia USB w raspberry. Żeby nie używać do każdego urządzenia osobnych zasilaczy, zasilamy konwenter i splitter z naszego zasilacza. Możemy z zasilaczy, które są dołączone do w/w urządzeń odciąć wtyczki (uprzednio sprawdzając, gdzie jest + a gdzie -) i podłączyć do zasilacza. Ja w/w urządzenia wyjąłem z obudowy i wsadziłem wszystko (łącznie z grabberem) do 1 obudowy, żeby zaoszczędzić miejsce.

Ledy zasilamy z naszego zasilacza, sygnały podłączamy do raspberry pi w następujący sposób: pin DI leda podłączamy do pinu MOSI w raspberry, pin CI leda podłączamy do pinu CLK w rasspberry. Opis pinów dla raspberry można znaleźć w sieci lub na w/w stronie źródłowej.

Jeśli nie chcemy sterować ambilightem w jakiś automatyczny sposób to połączenia możemy na tym zakończyć. Ja osobiście podłączyłem jeszcze prosty układzik na CNY17 (transoptor) do portu USB telewizora, aby po włączeniu tv włączał się ambilight. Po włączeniu telewizora na wyjściu USB pojawia się napięcie 5V, które oświeca LEDa w transoptorze, co powoduje przewodzenie tranzystora w tym elementcie i podanie stanu niskiego na wejście GPIO 5 w raspberry. Resztę załatwia prosty skrypt w pythonie, który jest zamieszczony poniżej. Schemacik układu na transoptorze:

Ważne jest, żeby + przy R2 było podłączone do 3,3V, gdyż raspberry pi na pinach nie toleruje wyższych napięć. Napięcie 3,3 V można wziąć z raspberry pi z pinu 1 lub 17. GND w telewizorze nie trzeba oczywiście łączyć z GND raspberry, gdyż samo świecenie led nam wystarcza do wysterowania transoptora. Pin 6 transoptora również zostawiamy nie podłączony.

Po wykonaniu powyższych połączeń, możemy uruchomić raspberry (zakładam, że system jest już zainstalowany). Jeśli system na karcie SD nie jest zainstalowany, to oczywiście najpierw go instalujemy. Możemy ściągnąć gotowego, skonfigurowanego raspbiana ze strony źródłowej (wtedy prawdopodnie będziemy mieć już wszystko zainstalowane) lub czystego raspbiana ze strony: https://www.raspberrypi.org/downloads/raspbian/ . Nie będę tu opisywał instalacji i konfiguracji systemu, bo znajdziemy tego mnóstwo w sieci.

Zakładam, że raspberry mamy podłączone do tv a do usb w raspberry mamy podłączoną klawiaturę i myszę (nie będę opisywał, jak używać VNC i SSH bo możemy również to znaleźć w sieci). No więc, jak widzimy pulpit raspbiana, otwieramy okno terminala. Wpisujemy w terminalu:
"dmesg | grep -i video" (oczywiście bez cudzysłowia) i naszym oczom powinny ukazać się wpisy, jak na rysunku (oczywiście mogą się trochę różnić, interesuje nas tylko, czy jest zainstalowany grabber - figuruje on jako "Fushicai USB007" lub jakoś tak).

Jeśli grabber jest zainstalowany to ok.

Teraz w zasadie jedna rzecz, którą musimy sami zainstalować: Hyperion. Można zainstalować tak, jak proponuje autor na niemieckiej stronie, ja jednak zawsze instaluję ze strony projektu hyperion: https://www.raspberrypi.org/downloads/raspbian/

Wpisujemy po kolei:

curl -k -L --output install_hyperion.sh --get https://raw.githubusercontent.com/hyperion-project/hyperion/master/bin/install_hyperion.sh

wciskamy enter i czekamy. Po zakończeniu wpisujemy:

chmod +x install_hyperion.sh

znowu enter. Po czym wpisujemy:

sudo sh ./install_hyperion.sh

I to wszystko jeśli chodzi o instalację hyperiona. Po zakończeniu ściągamy program w javie do konfiguracji hyperiona: https://sourceforge.net/projects/hyperion-project/files/hypercon/HyperCon.jar (tu link do gotowego pliku jar, który możemy odpalić pod windowsem - musimy mieć zainstalowaną javę: https://www.java.com/pl/download/manual.jsp ). Plik jar można odpalić również pod raspbianem, nie ma to znaczenia. Zaznaczam, że ekspertem nie jestem, opiszę to, co akurat jest niezbędne, jakby coś nie działało, to szukać rozwiązania w sieci. Po uruchomieniu pojawia nam się okno:

 

HARDWARE:

Configuration name: możemy zostawić, najwyżej zmienimy później.
Type: oczywiście WS2801 bo takich ledów użyliśmy
Output: zostawiamy jak jest,czyli: /dev/spidev0.0 czyli SPI w raspberry
Baudrate: 1000000 (ja mam 250000)
RGB Byte Order: RGB lub możemy mieć inną kolejność, np. RBG  (wybieramy wartość RGB a potem wyświetlamy na tv każdy kolor i sprawdzamy, czy kolory nie są zamienione, jeśli są to wracamy do tego punktu i wpisujemy tak, żeby się zgadzało z naszymi ledami). Ja mam RBG
Construction: tu zaznaczamy, jeśli mamy ledy w rogach tv (wszystko na bieżąco się pokazuje, więc łatwo się domyśleć)
Direction: Clockwise
LEDs Horizontal: ilość ledów w poziomie (góra i dół)
LEDs Left: ilość ledow z lewej strony
LEDs Right: ilość ledów z prawej strony
Bottom Grap: Jeśli od dołu mamy podstawkę do tv i za nią nie ma ledów, to określamy ile nam brakuje (zwiększając na dole po środku robi się przerwa na podstawkę)
1st LED offset: podajemy pierwszego led'a, czyli tam, gdzie podłączyliśmy sygnał z raspberry (ten led jest traktowany jako pierwszy)
Horizontal i Vertical depth: procentowo określamy ile pikseli będzie uśrednianych do brania koloru
Horizontal i Vertical gap: jak daleko od końców ekranu będą pobierane próbki do odwzorowania
Overlap: zachodzenie na siebie pikseli
 

PROCESS

Można pozmieniać nasycenie kolorów, częstotliwość próbkowania itp

GRABBER

Tu koniecznie zaznaczyć: GRABBERV4l2 jako Enabled
Device: /dev/Video0 (chyba, że nasz grabber jest inaczej widoczny w systemie)

EXTERNAL

JSON Server TCP Port: 19444 (możemy zmienić, jeśli mamy już zajęty). Dzięki temu ustawieniu możemy ściągnąć na telefon ze sklepu PLAY programik: Hyperion Free i pobawić się ledami z komórki.
 

SSH

System: All systems
Target IP: ip naszej malinki
Port: 22
Username: użytkownik na naszej malinie
Password: hasło do maliny

Jeśli tutaj klikniemy na connect to możemy sprawdzić, czy wszystko działa bezpośredno z tego programu (możemy ustawić kolory, sprawdzić czy wyświetlają się prawidłowo itp)

Po skonfigurowaniu klikamy: Create Hyperion Configuration i zapisujemy plik: hyperion.config.json . To jest nasz plik konfiguracyjny hyperiona, który podrzucamy na raspberry do katalogu: /etc/hyperion

Wykonujemy albo restart maliny albo restart hyperiona wydając komendę w terminalu: sudo service hyperion restart
I od tej pory nasz hyperion pracuje.

Wspomniany skrypt pythona do współpracy z usb uruchamiający hyperiona: ściągnij
 

Jeśli nie czujesz się na siłach, nie podchodź do tematu, można uszkodzić raspberry przy błednym podłączeniu (ja w każdym razie nie biorę za to odpowiedzialności). Zdaję sobie sprawę, że opis jest nieco lakoniczny, ale w połączeniu z niemiecką stroną powinniście dać radę to uruchomić.

A teraz filmik, prezentacja pracującego u mnie ambilight'a: