Hétvégi projekt: Ambilight

Az Ambilight-ot eredetileg a Philips fejlesztette ki, amivel látszatra megnövelhető a TV mérete, kíméli a szemet és jobban érvényesül a filmek képi világa. Erről bővebben itt.

Én élőben még sosem láttam ilyet, de pár videót megnézve nagyon megtetszett a dolog, így gondoltam építek magamnak egy ilyen megvilágítást a monitoromhoz.

Lássuk, hogy lehet ilyet kivitelezni, ha nem tud alapból ilyet a monitorunk!

A történet lényegében két fő részből áll:

  1. Van az operációs rendszeren futó program, ami elemzi a megjelenített képet és a LED-ek számának megfelelő színkód sort generál.
  2. Van egy Arduino aminek USB-n át elküldi a program a színkódokat: Ezeket az Aruinon futó kód feldolgozz és küldi tovább a LED-eknek.

A net persze tele van leírásokkal, hogy lehet ilyet készíteni, de nekem nem tetszett, hogy mindenki a monitorra ragasztja fel az Arduinot, aminek kell húzni egy USB kábel a géptől és egy tápkábelt a LED szalag számára. Nekem ez így túl sok kábel és egyébként sem szeretném valahova fellógatni az Arduinot. 

Legyen inkább az Aruino is a gépben! Ebben az esetben csak a LED-ek számára kell a táp és a vezérlő jelnek egy szál. Ez pedig mehet egy kábelen, egyenesen a gépből, hiszen a tápellátást is adhatja maga a tápegység.

A tápellátás nem gond, azt közvetlen a tápegységről kilehet vezetni. 
Az Arduino USB-re kötése rafináltabb! USB portra dugni és így kintről bevezetni nem szerettem volna kábelt, de megnézve az alaplapot, szerencsére volt még rajta fel nem használt USB kivezetés. 
Ez tök jó, erre mehet az Arduino! Tucat USB kábelből egyet kiválasztva, azt méretre vágva és tüskesor csatlakozót forrasztva rá, már rá is dugható az alaplapi csatlakozóra.

Szuper! Van táp, van Arduino kapcsolat, de hogy vezessük ki őket valami esztétikusabb megoldással?
Beletúrva a "Majd jó lesz valamire" dobozomba, találtam egy falra szerelhető, Matávos telefoncsatlakozó dobozt. Fénykorában még fehér volt, de mostanra jól besárgult, szerintem lehet vagy 20 éves. Nem gond, fújjuk le feketére, úgy egész jól mutat majd.
A dobozba szépen belefér az Arduino és egy jack csatlakozó aljzat is. Ez pont jó, mert pont három kivezetés valósítható meg vele.
GND, 5V és ar Arduino 5-ös digitális kimenete került erre. 

A "Majd jó lesz valamire" dobozban lapult még pár PC kártya háttakaró lemez is. Egyiken egy soros port kivezetés lehetett, amire pont jól felcsavarozható volt a doboz.
Így már csak bekellet pattintani a gépbe, rákötni az alaplapra és a tápra. 
Ezzel a PC felőli része kész is a történetnek.

Jöhet a LED szalag felszerelése a monitorra.
Elég nagy (34") monitorom van, ráadásul ultra wide, így 3 méter LED szalag kellet. Ebből a WS2812B típusú, címezhető, 5V-al működöt választottam. Felülre és alulra került 48, az oldalra pedig 20-20 darab LED. Azaz összesen 136 LED felel a hangulatért.
Az átvezetéseket egyszerű rézdrót meghajlításával és ráforrasztásával oldottam meg a sarkokban. A LED szalag bemenete pedig alulra középre került.
A kábel másik végére pedig értelemszerűen egy jack csatlakozó került fel.

Most hogy a hardware kész, jöhet a program része a dolognak.

Az operendszeren futó programból több választási lehetőség is van. Én jelenleg hármat próbáltam ki, de nem vagyok 100%-ban megelégedve. Noh nem is a működéssel, hanem a lehetőségek tárházát találom kevésnek.

Mit szeretnék:

  • Valós idejű screen grabbing (ez alap hogy tudnia kell ugye :) )
  • Fix szín beállítása minden LED-nek, amolyan egyszerű háttérfényként.
  • Fix számú LED adott színre állítása. Azaz pl. a monitor alján lévő csík világítson fehéren. Ez funkcionálna asztal megvilágításként.
  • A fenti három mód közül egyszerűen lehessen váltogatni. Mondjuk profilok létrehozásával.

Prismatik - Link
Egész jó kis program, majdnem mindent tud amit szeretnék. Kivéve, hogy megadott LED-et nem tudok adott színre állítani. 
Viszont lehet profiloket létrehozni, fix háttérszint állítani. Sőt, elérhető szinte minden oprendszerre.
Egy nagy probléma van vele, hogy az adatátviteli sebességnek max 115200 baudot lehet megadni. Ez viszont elég kevésnek bizonyult, mert 60 FPS-nél bufferelnie kell az átküldendő adatot, ami jó kis lagot eredményez, ergó élvezhetetlen lesz az effekt.

AmbiBox - Link
Ez már majdnem mindent tud amit kell! Lehet profilokat létrehozni, egyszerűen váltogatni köztük, akár billentyűzet kombinációval is. Szépen átküldi az adatokat ez is, nincs lag. Sajnos x számú LED-nek nem lehet szint beállítani ebben sem, viszont lehet hozzá írni plugineket, igy ez viszonylag egyszerűen megoldható.
Egy nagy gond van vele: A beállító felületen, ahol meglehet adni a vertikális / horizontális LED-ek számát, valami oknál fogva arányaiban akarja kezelni a LED-ek számát. Tehát nem tudok 40 / 20-at megadni, mert ha vízszintesen 40-et adok meg, akkor Ő a függőlegest 30-ra állítja. Ha függőlegeshez 20-at írok, akkor a vízszintest 50-re írja át.
Sajnos ez a gond pont elég ahhoz, hogy használhatatlan legyen a progi, pedig ez tényleg mindenre is jó lenne :(
Esetleg majd megkeresem a konfig fájlját a profiloknak és megnézem mi van ha kézzel írom be az értékeket. 

Adrilight - Link
Ezzel már nincsenek átviteli problémák, mert 1000000 baudon kommunikál. Gyönyörűen megy 60 FPS-el is, teljesen reszponziv a történet.
Sajnos ez nem tud sem fix háttérszint, sem pedig LED-ekre szabott színbeállítást sem :(
Viszont mivel a fő célt nagyon jól teljesíti, így ezt használom.
A forráskódja nyílt, letölthető, így lehet majd magam hozzákódolom a hiányolt funkciókat. Vagy lehet írok egy progit amivel a háttérvilágítás és az asztal megvilágítás között lehet kapcsolgatni. Csak nem akarok két programoz használni egy eszközhöz ha nem muszáj...

Szóval programból van pár, de mindegyik elég foghíjas. Ezekkel még kell futnom pár kört. 
Noh de elég is ennyit a szóból, nem is terveztem erről ennyit regélni :)

Lássuk egy videót a végeredményről és pár képet az építés folyamatáról.

VIDEÓ MEGNYITÁSA ]
 

Nekem jelenleg tetszik a dolog, egyáltalán nem zavaró és ha nem a fényekre figyelek, tényleg olyan hatást kelt mintha több lenne a kép mint amekkora valójában. 
Most már csak a software részen kell kicsit csiszolni, hogy tudja is azt amit még akarok! :)

 

UPDATE

Végül arra jutottam, hogy megbuherálom az Adrilight kódját.
Le is töltöttem GitHub-ról, ami tartalmazza az egész Visual Studio projektet. 
VS-t nem használok, így ezt még külön fel kellet tenni. 6 Gb csupán...
Kis tanulmányozás után szerencsére könnyedén betudtam iktatni azokat a dolgokat amire szükségem volt még:

  • Fix színű háttérfény - ez kék lett, mert az a kedvencem :) Ez simán hangulatvilágításként szolgál.
  • Fehér fény csak az alsó LED csíkon - ez asztal megvilágítást szolgál
  • Random fények - ezt meg csak úgy, mert nagyon geek a színátmenet :D )

Ezek bekerültek az értesítési ikon, jobb klikkre felbukkanó menüjébe, így egy pillanat alatt lehet váltani a módok között.
Ha semmi nincs bekapcsolva, akkor alapértelmezés szerint, képfeldolgozással működik. És persze ugyanitt totálisan kikapcsolható az egész ha nem szeretnék fényeket.

Most már tényleg mindent tud a program ami nekem kell!
 

Hozzászólások

Még csak a videóba néztem bele, de mocsokjóóóóóóóóó :)

Gratula

Nem rossz, de csak belepofázás végett, mibe került volna ezt csak hardware-ből megoldani?

Ha így csinálod, valóban több, de van egyszerűbb módja is:

- Régebben akartam készíteni, más ok miatt nem lett belőle semmi (szekrény került a tv mellé, így okafogyottá vált). Ilyen megvalósítást nem láttam még (csak fpga-val), de van a toshibanak egy hdmi scaler -je, azzal egészen 320x200-ig le lehet scale-elni fhd-ről és van parallel rgb kimenete. A 320x200 pedig már bőven feldolgozható egy stm32-vel real time. Az stm32 kb 1200 huf (arduino árban van). Így az extra költség egyedül a scaler és a pcb hozzá (a scaler kb 2k huf, a pcb-re pedig van pár út)

// Happy debugging, suckers
#define true (rand() > 10)

De durca, jó lett! :)

Biztos, hogy nem én gonoszoltam le!

De jó, régen akartam ilyet csinálni, most eszembe juttattad. Van is itthon vagy 3m LED szalag.

Azon gondolkodom vajon a Vodás mediaboxra hogy lehetne ezt ráhekkelni :D

Én is gondolkodtam ilyesmin, de végül elvetettem, mert több HDMI input támogatása még talán megoldható, de a WebOS-es szoftvereket (Plex, Netflix) nem lehet felokosítani vele. :(

Kodihoz van plugin, én egy philips hue ledszalagot hajtottam meg vele, pillanatok alatt összerakható, tök jól működik.

A plugin kódjából gondolom lehet tanulni hogy csinálja.

Gábriel Ákos

Köszi a beszámolót! :) Jó cucc! :)

Tök hasznosak az új menüpontok, nem akarsz nekik pull reqestet nyitni githubon?

Lehet majd igen, de jelenleg nagyon kókány módon egészítettem ki a kódot, meg kellene csinálni szebben, jobban.
Másik, hogy minden hard kódolva van, nincs semmihez beállítási lehetőség a felületen. Nekem így jó, de másnak valószínű nem.

Lehet majd unalmasabb óráimban dolgozok még rajta. 
2018 óta nem volt változás a projektben úgy látom, megérdemelne egy kis bővítést, mert egyébként nagyon jó prog. 

Ez tipikusan az a use case amire egy plugin rendszer lenne a legalkalmasabb. A beállításokat is meg lehetne oldani elegánsan. Akkor mindenki olyan funkcióval egészíthetné ki a programot, ami neki tetszik.

Félreértés elkerülése végett, nyilván nem várom el, hogy ezt megvalósítsd.