Hyperion Ambilight – adaptív TV-háttérvilágítás. PaintPack: csináld magad dinamikus Ambilight világítás Lehetséges megvalósítási lehetőségek

2007-ben a Philips szabadalmaztatott egy hihetetlenül egyszerű, de túlzás nélkül lenyűgöző TV-háttérvilágítási technológiát. Az ilyen adaptív háttérvilágítással a szem kevésbé fárad el a sötétben való nézelődés során, fokozódik a jelenlét effektus, kitágul a megjelenítési terület stb. Az Ambilight nemcsak videó- ​​és fotótartalmakra, hanem játékokra is alkalmazható. Az Ambilight a Philips TV-k fémjelzõjévé vált. Azóta a Philips fokozottan ügyel arra, hogy a nagy gyártók közül senkinek eszébe se jusson beleavatkozni a szentségbe valami hasonló megalkotásával. Valószínűleg lehetséges ennek a technológiának a licencelése, de a feltételek valahogy túlzóak, és a többi piaci szereplő nem különösebben hajlandó erre. Kis cégek is próbálkoztak (és ma már vannak, akik ezt teszik) hasonló technológiát külön készletek formájában bevezetni, de a Philips büntetés elkerülhetetlen volt. Így a legjobb esetben, ha a cég valahogy nem újítja meg a szabadalmat vagy annak származékát, más gyártók csak 2027-ben tudnak hasonlót gyártani.

De ez a büntetés nem vonatkozik ránk, hétköznapi fogyasztókra. Szabadon megtehetjük, amit jónak látunk. Ma részletesen elmondom, hogyan készíthet saját adaptív háttérvilágítást egy olyan TV-hez vagy monitorhoz, mint a Philips Ambilight (a továbbiakban: Ambilight). Egyesek számára a cikk nem tartalmaz újdonságot, mert... Több tucat ilyen projekt létezik, és cikkek százai születtek különböző nyelveken, és több ezer ember van, aki ezt már megtette magának. De sokak számára mindez nagyon érdekes lehet. Nincs szükséged különleges képességekre. Csak fizika alapismeretek a gimnázium 8. osztályához. Nos, csak egy kis vezetékek forrasztása.

Hogy jobban megértsd, miről beszélek, bemutatom a példámat a történtekről. A 42 hüvelykes TV valós költsége körülbelül 1000 rubel és 2 óra munka.


A videó nem közvetíti teljes egészében az összes érzést és hatást, de a gyerekek először ültek tátott szájjal.

Lehetséges megvalósítási lehetőségek

Számos lehetőség van az Ambilight megvalósítására. Ezek a videó forrásától függenek.

A legolcsóbb, legegyszerűbb és leghatékonyabb megoldás a Windows, Mac OS X vagy Linux rendszert futtató számítógép jelforrásként. Manapság nagyon elterjedtek az Atom processzorokon lévő Windows dobozok, amelyek ára 70 dollártól kezdődik. Mindegyik ideális az Ambilight megvalósításához. Már több éve használok különféle Windows-boxokat (tévéállványban) médialejátszóként, írtam néhány véleményt, és ezeket tartom a legjobb TV set-top boxoknak a médiatartalomhoz. Ennek az opciónak a hardveres megvalósítása ugyanaz az összes felsorolt ​​operációs rendszer esetében. Erről a lehetőségről fogok beszélni a cikkben.. A szoftver rész a Windows rendszerhez kapcsolódik majd univerzális vezérlőprogramként fog működni. Használható Mac OS X és Linux rendszerrel.

A második lehetőség, hogy a jelforrás egy Android alapú média set-top box, amiből szintén rengeteg van. Ez a lehetőség a legproblémásabb. Először is, a kiemelés csak a Kodi médiakombájnban (és annak mellékágaiban) fog működni. Másodszor, az esetek túlnyomó többségében minden csak akkor működik, ha a hardveres videó dekódolás le van tiltva, ami a legtöbb doboznál elfogadhatatlan. A projekt hardveres megvalósítása is bizonyos követelményeket támaszt. Nem nyúlok hozzá, de ha valami konkrétan érdekel, igyekszem kommentben válaszolni.

A harmadik lehetőség a jelforrástól független megoldás. Ez a legdrágább, de abszolút univerzális megoldás, mert... a jelet közvetlenül a HDMI-kábelről veszi. Ehhez szüksége lesz egy meglehetősen nagy teljesítményű mikroszámítógépre (például egy Raspberry Pi-re), egy HDMI-elosztóra, egy HDMI-RCA AV átalakítóra, egy USB 2.0 analóg videorögzítő eszközre. Csak ezzel az opcióval garantáltan használhatja az Ambilightot bármilyen TV set-top box/vevőkészülékkel, Android boxokkal, Apple TV-vel, játékkonzolokkal (például Xbox One, PlayStation 4) és egyéb HDMI kimenettel rendelkező eszközökkel. Az 1080p60 támogatással rendelkező verziónál az alkatrészek költsége (LED szalag nélkül) körülbelül 70 dollár, 2160p60 támogatással körülbelül 100 dollár lesz. Ez a lehetőség nagyon érdekes, de külön cikket kell írni róla.

Hardver

A megvalósításhoz három fő komponensre lesz szükség: egy vezérelhető RGB LED szalagra, egy tápegységre és egy Arduino mikroszámítógépre.

Először egy kis magyarázat.

A WS2811 egy háromcsatornás vezérlő/meghajtó (chip) RGB LED-ekhez, egyvezetékes vezérléssel (tetszőleges LED-hez). A WS2812B egy SMD 5050-es tokozású RGB LED, amibe már WS2811 vezérlő is be van építve.

Az egyszerűség kedvéért a projekthez megfelelő LED szalagok neve WS2811 vagy WS2812B.

A WS2812B szalag egy olyan szalag, amelyen a WS2812B LED-ek sorba vannak helyezve. A szalag 5 V feszültséggel működik. Vannak különböző LED-sűrűségű szalagok. Általában ez: 144, 90, 74, 60, 30 méterenként. A védelemnek különböző fokozatai vannak. Leggyakrabban ezek a következők: IP20-30 (védelem szilárd részecskék ellen), IP65 (por és vízsugár elleni védelem), IP67 (por elleni védelem és védelem a részleges vagy rövid ideig tartó 1 m mélységű vízbe merítés ellen). Hátlap fekete-fehérben.

Íme egy példa egy ilyen szalagra:


A WS2811 szalag egy olyan szalag, amelyen egy WS2811 vezérlő és valamilyen RGB LED van sorba rakva. Vannak olyan opciók, amelyeket 5 V és 12 V feszültségre terveztek. A sűrűség és a védelem hasonló az előző opcióhoz.

Íme egy példa egy ilyen szalagra:


Vannak WS2811 „csíkok” is nagy és erős LED-ekkel, mint az alábbi képen. Alkalmasak az Ambilight megvalósítására is néhány hatalmas panelen.


Melyik szalagot válassza, WS2812B és WS2811?

Fontos tényező a szalag tápegysége, amelyről egy kicsit később beszélek.

Ha van otthon tápellátásra alkalmas tápegysége (gyakran a tápegységek otthon maradnak a régi vagy sérült berendezésekből), akkor a tápfeszültség alapján válasszunk szalagot, pl. 5 V - WS2812B, 12 V - WS2811. Ebben az esetben egyszerűen pénzt takarít meg.

Magamtól tudok ajánlani. Ha a LED-ek teljes száma a rendszerben nem több, mint 120, akkor WS2812B. Ha több, mint 120, akkor WS2811 12 V üzemi feszültséggel. Meg fogja érteni, hogy ez miért van így, ha a szalagnak a tápegységhez kell csatlakoztatnia.

Milyen szintű szalagos védelmet válasszak?

A legtöbb számára az IP65 megfelelő, mert... Az egyik oldalon „szilikon” (epoxigyanta) van bevonva, a másikon 3M öntapadó felület található. Ez a szalag kényelmesen felszerelhető TV-re vagy monitorra, és kényelmesen letörli a port.

Milyen LED-sűrűséget válasszak?

A projekthez méterenként 30-60 LED sűrűségű szalagok alkalmasak (természetesen 144 is lehetséges, senki sem tiltja). Minél nagyobb a sűrűség, annál nagyobb az Ambilight felbontás (zónák száma) és annál nagyobb a maximális általános fényerő. De érdemes megfontolni, hogy minél több LED van a projektben, annál bonyolultabb lesz a szalag tápellátási áramköre, és erősebb tápegységre lesz szükség. A LED-ek maximális száma egy projektben 300.

Szalag vásárlása

Ha TV-je vagy monitora a falon lóg, és mind a 4 oldalán sok szabad hely van a közelben, akkor a legjobb hatás érdekében a szalagot a legjobb, ha hátulra, a kerület mentén mind a 4 oldalon helyezi el. Ha a TV-t vagy a monitort állványra szerelték fel, vagy alul kevés a szabad hely, akkor a szalagot 3 oldalra (azaz aljára szalag nélkül) helyezze a hátlapra.

Magamnak egy fehér WS2812B IP65 szalagot választottam, méterenként 30 LED-del. Volt már megfelelő 5V-os tápom. Döntöttem, hogy méterenként 60 vagy 30 LED-et használok, de a videó áttekintése után, kész kivitelezési példákkal az utóbbit választottam - a fényerő és a felbontás is megfelelt, a tápegységet pedig könnyebb volt megszervezni, és kevesebb volt a vezeték. Az Aliexpress rengeteg WS2812B szalaggal rendelkezik. 5 métert rendeltem 16 dollárért. A TV-mhez (42", 3 oldal) csak 2 méter kellett, azaz 10 dollárért megvehetem, a maradék három métert egy barátnak. Az árak gyakran változnak az eladók között, sok ajánlat van, úgyhogy válassz egy olcsó telket Aliexpress magas minősítéssel (kulcsszavak keresése - WS2812B IP65 go WS2811 12V IP65).




Tápegység vásárlása a szalaghoz

A tápellátást a teljesítmény és a feszültség alapján választják ki. WS2812B esetén - feszültség 5 V. WS2811 esetén - 5 vagy 12 V. Egy WS2812B LED maximális energiafogyasztása 0,3 W. A WS2811 esetében ez a legtöbb esetben ugyanaz. Azok. A tápegység teljesítményének legalább N * 0,3 W-nak kell lennie, ahol N a projektben lévő LED-ek száma.

Például van egy 42"-es TV-je, méterenként 30 LED-es WS2812B szalagot választott, mind a 4 oldalra 3 méter szalagra van szüksége. 5 V feszültségű, 0,3 maximális teljesítményű tápegységre lesz szüksége * 30 * 3 = 27 W , azaz 5 V / 6 A. Az én megvalósításom csak 3 oldalt használ, összesen 60 LED-et (pontosabban 57) - teljesítmény 18 W-tól, azaz 5 V / 4 A.

Az ORICO CSA-5U (8 A) többportos USB töltőm sokáig tétlenül hevert, egy régi felülvizsgálatból maradt meg. Portjai párhuzamosan kapnak tápellátást (ez kritikusan fontos), tápnak ez a töltő számomra ideális, mert... A szalagot 2 párhuzamos csatlakozáson keresztül fogom csatlakoztatni (magyarázat a cikk későbbi részében lesz).


Ha nem lenne ez a töltőm, akkor azt választottam volna (arról van információ, hogy ez a konkrét táp 2,5 A-es belsővel van felszerelve, ezért érdemes ezt a kérdést az eladóval részletesebben áttanulmányozni, vagy más modelleket nézni) .

Mikroszámítógép vásárlás

Az Ambilightot egy Arduino mikroszámítógép fogja vezérelni. Az Arduino Nano az Aliexpressen körülbelül darabba kerül.

Az én opcióm költségei (42"-es TV-hez):

10 dollár – 2 méter WS2812B IP65 (30 LED méterenként)
4 - 5 V / 4 A tápegység (nem költöttem pénzt tápra, az érthetőség kedvéért megadom a költségeket)
2,5 dollár - Arduino Nano
-----------
16,5$ vagy 1000 rubel

Hardveres megvalósítás

A legfontosabb dolog a szalag tápellátásának megfelelő megszervezése. A szalag hosszú, a feszültség leesik nagy áramerősségnél, különösen 5 V-nál. A legtöbb probléma, amely az Ambilight-ot készítők számára felmerül, az áramellátással kapcsolatos. Én azt a szabályt használom, hogy minden 10 W-hoz külön tápegységet kell készíteni 5 V-on és 12 V-on minden 10 W-hoz, 12 V-on pedig 25 W-hoz. A tápegység hossza (a tápegységtől magáig a szalagig) minimálisnak kell lennie (tartalék nélkül), különösen 5 IN-nél.

Az általános bekötési rajz a következő (a diagram az én verzióm tápellátását mutatja):


A szalag mindkét végén áramellátást kap - két párhuzamos csatlakozás. Például, ha mind a 4 oldalon világítanám, és a szalagon méterenként 60 LED lenne (azaz a maximális teljesítmény 54 W), akkor a következő tápegységet készíteném:


Az összekötő vezetékeket megfelelően kell használni, minél kisebb a mérő (AWG), annál jobb, hogy elegendőek legyenek a számított áramerősséghez.

Két érintkező kerül az Arduino-hoz a szalagról. GND, amelyet az Arduino megfelelő érintkezőjéhez kell csatlakoztatni. És DATA, amelyet a hatodik digitális érintkezőhöz kell csatlakoztatni egy 300-550 Ohmos ellenálláson keresztül (lehetőleg 470 Ohm). Ha nincs ellenállása, akkor a legtöbb esetben minden jól működik anélkül, de jobb, ha van. Bármely rádióüzletben vásárolhat ellenállást néhány kopejkáért. Maga az Arduino mikroszámítógép bármilyen kényelmes tokba helyezhető, sokan Kinder meglepetéstojást használnak ehhez. Az Arduinót a lehető legközelebb kell elhelyezni a szalaghoz, hogy az DATA kapcsolat minimális legyen.

A vezetékek forrasztása a szalaghoz egyszerű. A fő szabály az, hogy a forrasztópákával való érintkezési idő minimális legyen.

Az én esetemben így alakult:



Két fekete, jó minőségű USB-kábelt használtak az áramellátáshoz, egy fehéret pedig a számítógéphez való csatlakozáshoz. Elfogyott a fehér hőre zsugorodó cső, ezért pirosat használtam. Nem olyan "szép", de nekem megfelel (amúgy el van rejtve a tévé mögött).

Fontos kérdés, hogyan lehet a szalagot derékszögben hajlítani? Ha van egy 60 LED-es csíkja, akkor a szalagot le kell vágni és rövid vezetékekkel össze kell kötni (egy hőre zsugorodó csőbe helyezve). Speciális három tűs sarokcsatlakozókat vásárolhat LED szalagokhoz (a képen például 4 tű van):


Ha van egy 30 LED-es csíkja, akkor a LED-ek közötti távolság nagy, könnyen sarkot készíthet vágás nélkül. Távolítson el egy darabot a „szilikon” bevonatból, szigetelje le (akár ragasztószalaggal is) az érintkezőt, és hajlítsa meg az ábra szerint:

Vágtam egy darab szalagot a gyakorláshoz. A lényeg az, hogy ne vigyük túlzásba – egyszer enyhén hajlítsuk meg, és kész. Nem kell ide-oda hajlítani, nem kell túl erősen megnyomni a hajlítási vonalat.


Íme a kilátás a TV hátuljáról, az összes vezeték átmegy a lyukon a szekrénybe:

Szoftver rész

Ez a legegyszerűbb dolog.

Az Arduino mikroszámítógépet USB-n keresztül csatlakoztatjuk. A meghajtó (CH340 soros interfész) automatikusan telepítésre kerül. Ha ez nem történik meg, akkor az Arduino IDE mappában van egy Drivers mappa mindennel, amire szüksége van.

Indítsa el az Arduino IDE-t, és nyissa meg az Adalight.ino fájlt.


A kódban megváltoztatjuk a LED-ek számát. 57 vagyok.


Eszközök > Tábla > Arduino nano
Eszközök > Port > Válassza ki a COM portot (a kívánt opció ott lesz)

Kattintson a „Letöltés” ​​gombra:


A program értesíti Önt, ha a letöltés befejeződött (ez szó szerint néhány másodperc).

Kész. Le kell választania az Arduinót az USB-ről, és újra csatlakoztatnia kell. A szalag egymás után pirosan, zölden és kéken világít – az Arduino aktiválva van, és használatra kész.

Töltse le és telepítse a programot. A programban kattintson a „További beállítások” elemre, és adja meg az eszközt - Adalight, COM port és a LED-ek számát. Válassza ki a rögzíteni kívánt képkockák számát (legfeljebb 60).


Ezután kattintson a „Rögzítési zónák megjelenítése” > „Zónabeállítás varázsló” elemre. Válassza ki a szalagkonfigurációt.


Kattintson az Alkalmaz és a Beállítások mentése gombra. Ezzel az alapbeállítások befejeződnek. Ezután kísérletezhet a rögzítési zónák méretével, színkorrigálja a szalagot stb. A program számos különféle beállítást tartalmaz.


Profil aktiválásához kattintson duplán a megfelelő ikonra (AmbiBox profilok) a Windows értesítési területén. A szalag azonnal világít. Dupla kattintással is kikapcsolható.

Alapvetően ennyi. Az eredményt a cikk elején láthatta. Semmi bonyolult, olcsó és egészséges. Biztos vagyok benne, hogy tud jobbat csinálni, ezért ossza meg kézműves munkáját a megjegyzésekben.

Bevezetés

Ha szeret filmeket nézni a számítógépen a sötétben, vagy játszani szeretne, bővítheti monitorja képességeit. A dinamikus háttérvilágítás vizuálisan kitágítja a képernyő határait, és ennek köszönhetően a szeme kevésbé lesz fáradt. Ez a projekt nagyon egyszerű, és mivel még újonc vagyok az Arduino-val, azt tudom ajánlani, hogy ezzel a projekttel kezdjek el valamit otthon készíteni.

Tehát szükségünk van:

  • Bármilyen Arduino (UNO, Nano, nem számít).
  • Az Aliexpressen 1-2 méteres WS2812B LED szalag, amiről olvashatsz, rendelhető. Azt tanácsolom, hogy méterenként 60 LED-et vegyen be a jobb hatás érdekében, de 30 is megteszi.
  • Kétoldalas ragasztószalag vagy valamilyen ragasztó.
  • Áramforrás 5V 2A (töltő például tabletről).
  • 220 ohmos ellenállás.
  • Forrasztószerszámok.
  • A számítógéphez szükséges szoftverek, nevezetesen: Arduino IDE, AmbiBox, Arduino IDE könyvtár - FastLed.

Kezdjük el.

Kapcsolat

A LED szalag három érintkezővel rendelkezik - plusz (+), föld (G, GND) és bemenet (IN), valamint a szalag mentén nyilak jelzik a jel irányát. A mi feladatunk 4 db LED szalag darabolása így. úgy, hogy a felső csík egyenlő legyen az alsóval, a jobb - balra. A mérést úgy végezzük, hogy felhelyezzük a szalagot a monitorunk hátuljáról. Általában az alábbi képen látható módon kell csinálni.

Fontos, hogy a felső és alsó LED-ek száma azonos legyen, ugyanez vonatkozik a jobb és a bal oldalra is. Figyelembe kell vennie a szalagon lévő nyilak irányát is, és sorrendben forrasztani kell, mint a képen.
Most csatlakoztatnunk kell a szalagot az Arduino-hoz a diagram szerint:

A tápfeszültségből származó mínusz a szalagon lévő G tűre, az Arduino Plus GND érintkezője pedig közvetlenül a szalagon lévő (+) érintkezőre kerül, a vezérlővezeték pedig egy ellenálláson keresztül a szalagról a kívánt portra. A legfontosabb dolog az, hogy emlékezzen a kikötőre.

Valójában itt a kapcsolat kész.

Beállítások

Nyissa meg a telepített Arduino IDE-t, és telepítse a FastLed könyvtárat (a felső menüben válassza a "Sketch" - "Connect library" - "ZIP könyvtár hozzáadása" menüpontot, és válassza ki a letöltött archívumot a könyvtárral).

Most az Arduino IDE használatával töltse fel a vázlatot az Arduino-ba:

#include "FastLED.h" #define NUM_LEDS 44 // LED-ek száma. #define PIN 6 // Port, amelyhez a vezérlővezeték csatlakozik. #define serialRate 115200 // Az Adalight "Varázsszót" (előtag) küld az adatok küldése előtt. uint8_t prefix = ("A", "d", "a"), szia, lám, chk, i; // Inicializálja a hírfolyamot. CRGB LED-ek; void setup() ( FastLED.addLeds(leds, NUM_LEDS); // LED teszt. LEDS.showColor(CRGB(255, 0, 0)); delay(500); LEDS.showColor(CRGB(0, 255, 0) ); csatlakozzon a programhoz ) void loop() ( // Várja meg a varázsszó első bájtját. for(i = 0; i).< sizeof prefix; ++i) { waitLoop: while (!Serial.available()); // Проверка следующего байта из магического слова. if(prefix[i] == Serial.read()) continue; // В противном случае начинаем все с начала. i = 0; goto waitLoop; } // Ждем старший и младший байт, а так же контрольную сумму. while (!Serial.available()); hi = Serial.read(); while (!Serial.available()); lo = Serial.read(); while (!Serial.available()); chk = Serial.read(); // Если контрольная сумма не совпала, начинаем все с начала. if (chk != (hi ^ lo ^ 0x55)) { i = 0; goto waitLoop; } memset(leds, 0, NUM_LEDS * sizeof(struct CRGB)); // Получаем данные и настраиваем соответствующий светодиод. for (uint8_t i = 0; i < NUM_LEDS; i++) { byte r, g, b; while(!Serial.available()); r = Serial.read(); while(!Serial.available()); g = Serial.read(); while(!Serial.available()); b = Serial.read(); leds[i].r = r; leds[i].g = g; leds[i].b = b; } // Отобразить новое состояние ленты. FastLED.show(); }

Feltöltés előtt meg kell adnia a LED-ek számát és azt a portot, amelyre a vezérlő vezetéket forrasztotta.
44 LED-et kaptam, és a 6. portot használtam.
Ha van egy szalag, és az Arduino már csatlakoztatva van, akkor a vázlat kitöltése után a szalagnak három színben kell villognia, ha ez nem történik meg, húzza ki az USB-kábelt, és helyezze be újra.

Most telepítenünk kell az AmbiBox programot.
A telepítés során a program rákérdez, hogy melyik eszközt használjuk, meg kell adnunk Adalight.
Ebben az „Intelligens monitor háttérvilágítása” fülre kell lépnünk.

Ezután kattintson a "További beállítások" lehetőségre, ekkor az összes funkció megjelenik.

Meg kell jelölnünk azt a portot, amelyre az Arduino csatlakozik (a képen az 1-es szám).
Fel kell tüntetnünk a kapott LED-ek számát (a képen 2-es szám).
Válasszon képernyőrögzítési módot. Rajtad múlik, kísérletezzen, és válassza ki a megfelelőt. Windows 8 módszert használok (a képen a 3. szám).
A „Rögzítési zónák megjelenítése” (4-es szám) lehetőségre is kattinthat, és a szalag beillesztésekor beállíthatja őket. Jól. Például, ha LED-ek nélküli sarkai vannak, akkor a zónák eltolhatók.
Ne felejtse el engedélyezni az automatikus futtatást a Windows rendszerrel a „Programbeállítások” fülön.
Ez minden. Már mindennek működnie kell.

Videó

A megjegyzések működéséhez engedélyezze a javascriptet.

2007-ben a Philips szabadalmaztatott egy hihetetlenül egyszerű, de túlzás nélkül lenyűgöző TV-háttérvilágítási technológiát. Az ilyen adaptív háttérvilágítással a szem kevésbé fárad el a sötétben való nézelődés során, fokozódik a jelenlét effektus, kitágul a megjelenítési terület stb. Az Ambilight nemcsak videó- ​​és fotótartalmakra, hanem játékokra is alkalmazható. Az Ambilight a Philips TV-k fémjelzõjévé vált. Azóta a Philips fokozottan ügyel arra, hogy a nagy gyártók közül senkinek eszébe se jusson beleavatkozni a szentségbe valami hasonló megalkotásával. Valószínűleg lehetséges ennek a technológiának a licencelése, de a feltételek valahogy túlzóak, és a többi piaci szereplő nem különösebben hajlandó erre. Kis cégek is próbálkoztak (és ma már vannak, akik ezt teszik) hasonló technológiát külön készletek formájában bevezetni, de a Philips büntetés elkerülhetetlen volt. Így a legjobb esetben, ha a cég valahogy nem újítja meg a szabadalmat vagy annak származékát, más gyártók csak 2027-ben tudnak hasonlót gyártani.

De ez a büntetés nem vonatkozik ránk, hétköznapi fogyasztókra. Szabadon megtehetjük, amit jónak látunk. Ma részletesen elmondom, hogyan készíthet saját adaptív háttérvilágítást egy olyan TV-hez vagy monitorhoz, mint a Philips Ambilight (a továbbiakban: Ambilight). Egyesek számára a cikk nem tartalmaz újdonságot, mert... Több tucat ilyen projekt létezik, és cikkek százai születtek különböző nyelveken, és több ezer ember van, aki ezt már megtette magának. De sokak számára mindez nagyon érdekes lehet. Nincs szükséged különleges képességekre. Csak fizika alapismeretek a gimnázium 8. osztályához. Nos, csak egy kis vezetékek forrasztása.

Hogy jobban megértsd, miről beszélek, bemutatom a példámat a történtekről. A 42 hüvelykes TV valós költsége körülbelül 1000 rubel és 2 óra munka.


A videó nem közvetíti teljes egészében az összes érzést és hatást, de a gyerekek először ültek tátott szájjal.

Lehetséges megvalósítási lehetőségek

Számos lehetőség van az Ambilight megvalósítására. Ezek a videó forrásától függenek.

A legolcsóbb, legegyszerűbb és leghatékonyabb megoldás a Windows, Mac OS X vagy Linux rendszert futtató számítógép jelforrásként. Manapság nagyon elterjedtek az Atom processzorokon lévő Windows dobozok, amelyek ára 70 dollártól kezdődik. Mindegyik ideális az Ambilight megvalósításához. Már több éve használok különféle Windows-boxokat (tévéállványban) médialejátszóként, írtam néhány véleményt, és ezeket tartom a legjobb TV set-top boxoknak a médiatartalomhoz. Ennek az opciónak a hardveres megvalósítása ugyanaz az összes felsorolt ​​operációs rendszer esetében. Erről a lehetőségről fogok beszélni a cikkben.. A szoftver rész a Windows rendszerhez kapcsolódik majd univerzális vezérlőprogramként fog működni. Használható Mac OS X és Linux rendszerrel.

A második lehetőség, hogy a jelforrás egy Android alapú média set-top box, amiből szintén rengeteg van. Ez a lehetőség a legproblémásabb. Először is, a kiemelés csak a Kodi médiakombájnban (és annak mellékágaiban) fog működni. Másodszor, az esetek túlnyomó többségében minden csak akkor működik, ha a hardveres videó dekódolás le van tiltva, ami a legtöbb doboznál elfogadhatatlan. A projekt hardveres megvalósítása is bizonyos követelményeket támaszt. Nem nyúlok hozzá, de ha valami konkrétan érdekel, igyekszem kommentben válaszolni.

A harmadik lehetőség a jelforrástól független megoldás. Ez a legdrágább, de abszolút univerzális megoldás, mert... a jelet közvetlenül a HDMI-kábelről veszi. Ehhez szüksége lesz egy meglehetősen nagy teljesítményű mikroszámítógépre (például egy Raspberry Pi-re), egy HDMI-elosztóra, egy HDMI-RCA AV átalakítóra, egy USB 2.0 analóg videorögzítő eszközre. Csak ezzel az opcióval garantáltan használhatja az Ambilightot bármilyen TV set-top box/vevőkészülékkel, Android boxokkal, Apple TV-vel, játékkonzolokkal (például Xbox One, PlayStation 4) és egyéb HDMI kimenettel rendelkező eszközökkel. Az 1080p60 támogatással rendelkező verziónál az alkatrészek költsége (LED szalag nélkül) körülbelül 70 dollár, 2160p60 támogatással körülbelül 100 dollár lesz. Ez a lehetőség nagyon érdekes, de külön cikket kell írni róla.

Hardver

A megvalósításhoz három fő komponensre lesz szükség: egy vezérelhető RGB LED szalagra, egy tápegységre és egy Arduino mikroszámítógépre.

Először egy kis magyarázat.

A WS2811 egy háromcsatornás vezérlő/meghajtó (chip) RGB LED-ekhez, egyvezetékes vezérléssel (tetszőleges LED-hez). A WS2812B egy SMD 5050-es tokozású RGB LED, amibe már WS2811 vezérlő is be van építve.

Az egyszerűség kedvéért a projekthez megfelelő LED szalagok neve WS2811 vagy WS2812B.

A WS2812B szalag egy olyan szalag, amelyen a WS2812B LED-ek sorba vannak helyezve. A szalag 5 V feszültséggel működik. Vannak különböző LED-sűrűségű szalagok. Általában ez: 144, 90, 74, 60, 30 méterenként. A védelemnek különböző fokozatai vannak. Leggyakrabban ezek a következők: IP20-30 (védelem szilárd részecskék ellen), IP65 (por és vízsugár elleni védelem), IP67 (por elleni védelem és védelem a részleges vagy rövid ideig tartó 1 m mélységű vízbe merítés ellen). Hátlap fekete-fehérben.

Íme egy példa egy ilyen szalagra:


A WS2811 szalag egy olyan szalag, amelyen egy WS2811 vezérlő és valamilyen RGB LED van sorba rakva. Vannak olyan opciók, amelyeket 5 V és 12 V feszültségre terveztek. A sűrűség és a védelem hasonló az előző opcióhoz.

Íme egy példa egy ilyen szalagra:


Vannak WS2811 „csíkok” is nagy és erős LED-ekkel, mint az alábbi képen. Alkalmasak az Ambilight megvalósítására is néhány hatalmas panelen.


Melyik szalagot válassza, WS2812B és WS2811?

Fontos tényező a szalag tápegysége, amelyről egy kicsit később beszélek.

Ha van otthon tápellátásra alkalmas tápegysége (gyakran a tápegységek otthon maradnak a régi vagy sérült berendezésekből), akkor a tápfeszültség alapján válasszunk szalagot, pl. 5 V - WS2812B, 12 V - WS2811. Ebben az esetben egyszerűen pénzt takarít meg.

Magamtól tudok ajánlani. Ha a LED-ek teljes száma a rendszerben nem több, mint 120, akkor WS2812B. Ha több, mint 120, akkor WS2811 12 V üzemi feszültséggel. Meg fogja érteni, hogy ez miért van így, ha a szalagnak a tápegységhez kell csatlakoztatnia.

Milyen szintű szalagos védelmet válasszak?

A legtöbb számára az IP65 megfelelő, mert... Az egyik oldalon „szilikon” (epoxigyanta) van bevonva, a másikon 3M öntapadó felület található. Ez a szalag kényelmesen felszerelhető TV-re vagy monitorra, és kényelmesen letörli a port.

Milyen LED-sűrűséget válasszak?

A projekthez méterenként 30-60 LED sűrűségű szalagok alkalmasak (természetesen 144 is lehetséges, senki sem tiltja). Minél nagyobb a sűrűség, annál nagyobb az Ambilight felbontás (zónák száma) és annál nagyobb a maximális általános fényerő. De érdemes megfontolni, hogy minél több LED van a projektben, annál bonyolultabb lesz a szalag tápellátási áramköre, és erősebb tápegységre lesz szükség. A LED-ek maximális száma egy projektben 300.

Szalag vásárlása

Ha TV-je vagy monitora a falon lóg, és mind a 4 oldalán sok szabad hely van a közelben, akkor a legjobb hatás érdekében a szalagot a legjobb, ha hátulra, a kerület mentén mind a 4 oldalon helyezi el. Ha a TV-t vagy a monitort állványra szerelték fel, vagy alul kevés a szabad hely, akkor a szalagot 3 oldalra (azaz aljára szalag nélkül) helyezze a hátlapra.

Magamnak egy fehér WS2812B IP65 szalagot választottam, méterenként 30 LED-del. Volt már megfelelő 5V-os tápom. Döntöttem, hogy méterenként 60 vagy 30 LED-et használok, de a videó áttekintése után, kész kivitelezési példákkal az utóbbit választottam - a fényerő és a felbontás is megfelelt, a tápegységet pedig könnyebb volt megszervezni, és kevesebb volt a vezeték. Az Aliexpress rengeteg WS2812B szalaggal rendelkezik. 5 métert rendeltem 16 dollárért. A TV-mhez (42", 3 oldal) csak 2 méter kellett, azaz 10 dollárért megvehetem, a maradék három métert egy barátnak. Az árak gyakran változnak az eladók között, sok ajánlat van, úgyhogy válassz egy olcsó telket Aliexpress magas minősítéssel (kulcsszavak keresése - WS2812B IP65 go WS2811 12V IP65).




Tápegység vásárlása a szalaghoz

A tápellátást a teljesítmény és a feszültség alapján választják ki. WS2812B esetén - feszültség 5 V. WS2811 esetén - 5 vagy 12 V. Egy WS2812B LED maximális energiafogyasztása 0,3 W. A WS2811 esetében ez a legtöbb esetben ugyanaz. Azok. A tápegység teljesítményének legalább N * 0,3 W-nak kell lennie, ahol N a projektben lévő LED-ek száma.

Például van egy 42"-es TV-je, méterenként 30 LED-es WS2812B szalagot választott, mind a 4 oldalra 3 méter szalagra van szüksége. 5 V feszültségű, 0,3 maximális teljesítményű tápegységre lesz szüksége * 30 * 3 = 27 W , azaz 5 V / 6 A. Az én megvalósításom csak 3 oldalt használ, összesen 60 LED-et (pontosabban 57) - teljesítmény 18 W-tól, azaz 5 V / 4 A.

Az ORICO CSA-5U (8 A) többportos USB töltőm sokáig tétlenül hevert, egy régi felülvizsgálatból maradt meg. Portjai párhuzamosan kapnak tápellátást (ez kritikusan fontos), tápnak ez a töltő számomra ideális, mert... A szalagot 2 párhuzamos csatlakozáson keresztül fogom csatlakoztatni (magyarázat a cikk későbbi részében lesz).


Ha nem lenne ez a töltőm, akkor azt választottam volna (arról van információ, hogy ez a konkrét táp 2,5 A-es belsővel van felszerelve, ezért érdemes ezt a kérdést az eladóval részletesebben áttanulmányozni, vagy más modelleket nézni) .

Mikroszámítógép vásárlás

Az Ambilightot egy Arduino mikroszámítógép fogja vezérelni. Az Arduino Nano az Aliexpressen körülbelül darabba kerül.

Az én opcióm költségei (42"-es TV-hez):

10 dollár – 2 méter WS2812B IP65 (30 LED méterenként)
4 - 5 V / 4 A tápegység (nem költöttem pénzt tápra, az érthetőség kedvéért megadom a költségeket)
2,5 dollár - Arduino Nano
-----------
16,5$ vagy 1000 rubel

Hardveres megvalósítás

A legfontosabb dolog a szalag tápellátásának megfelelő megszervezése. A szalag hosszú, a feszültség leesik nagy áramerősségnél, különösen 5 V-nál. A legtöbb probléma, amely az Ambilight-ot készítők számára felmerül, az áramellátással kapcsolatos. Én azt a szabályt használom, hogy minden 10 W-hoz külön tápegységet kell készíteni 5 V-on és 12 V-on minden 10 W-hoz, 12 V-on pedig 25 W-hoz. A tápegység hossza (a tápegységtől magáig a szalagig) minimálisnak kell lennie (tartalék nélkül), különösen 5 IN-nél.

Az általános bekötési rajz a következő (a diagram az én verzióm tápellátását mutatja):


A szalag mindkét végén áramellátást kap - két párhuzamos csatlakozás. Például, ha mind a 4 oldalon világítanám, és a szalagon méterenként 60 LED lenne (azaz a maximális teljesítmény 54 W), akkor a következő tápegységet készíteném:


Az összekötő vezetékeket megfelelően kell használni, minél kisebb a mérő (AWG), annál jobb, hogy elegendőek legyenek a számított áramerősséghez.

Két érintkező kerül az Arduino-hoz a szalagról. GND, amelyet az Arduino megfelelő érintkezőjéhez kell csatlakoztatni. És DATA, amelyet a hatodik digitális érintkezőhöz kell csatlakoztatni egy 300-550 Ohmos ellenálláson keresztül (lehetőleg 470 Ohm). Ha nincs ellenállása, akkor a legtöbb esetben minden jól működik anélkül, de jobb, ha van. Bármely rádióüzletben vásárolhat ellenállást néhány kopejkáért. Maga az Arduino mikroszámítógép bármilyen kényelmes tokba helyezhető, sokan Kinder meglepetéstojást használnak ehhez. Az Arduinót a lehető legközelebb kell elhelyezni a szalaghoz, hogy az DATA kapcsolat minimális legyen.

A vezetékek forrasztása a szalaghoz egyszerű. A fő szabály az, hogy a forrasztópákával való érintkezési idő minimális legyen.

Az én esetemben így alakult:



Két fekete, jó minőségű USB-kábelt használtak az áramellátáshoz, egy fehéret pedig a számítógéphez való csatlakozáshoz. Elfogyott a fehér hőre zsugorodó cső, ezért pirosat használtam. Nem olyan "szép", de nekem megfelel (amúgy el van rejtve a tévé mögött).

Fontos kérdés, hogyan lehet a szalagot derékszögben hajlítani? Ha van egy 60 LED-es csíkja, akkor a szalagot le kell vágni és rövid vezetékekkel össze kell kötni (egy hőre zsugorodó csőbe helyezve). Speciális három tűs sarokcsatlakozókat vásárolhat LED szalagokhoz (a képen például 4 tű van):


Ha van egy 30 LED-es csíkja, akkor a LED-ek közötti távolság nagy, könnyen sarkot készíthet vágás nélkül. Távolítson el egy darabot a „szilikon” bevonatból, szigetelje le (akár ragasztószalaggal is) az érintkezőt, és hajlítsa meg az ábra szerint:

Vágtam egy darab szalagot a gyakorláshoz. A lényeg az, hogy ne vigyük túlzásba – egyszer enyhén hajlítsuk meg, és kész. Nem kell ide-oda hajlítani, nem kell túl erősen megnyomni a hajlítási vonalat.


Íme a kilátás a TV hátuljáról, az összes vezeték átmegy a lyukon a szekrénybe:

Szoftver rész

Ez a legegyszerűbb dolog.

Az Arduino mikroszámítógépet USB-n keresztül csatlakoztatjuk. A meghajtó (CH340 soros interfész) automatikusan telepítésre kerül. Ha ez nem történik meg, akkor az Arduino IDE mappában van egy Drivers mappa mindennel, amire szüksége van.

Indítsa el az Arduino IDE-t, és nyissa meg az Adalight.ino fájlt.


A kódban megváltoztatjuk a LED-ek számát. 57 vagyok.


Eszközök > Tábla > Arduino nano
Eszközök > Port > Válassza ki a COM portot (a kívánt opció ott lesz)

Kattintson a „Letöltés” ​​gombra:


A program értesíti Önt, ha a letöltés befejeződött (ez szó szerint néhány másodperc).

Kész. Le kell választania az Arduinót az USB-ről, és újra csatlakoztatnia kell. A szalag egymás után pirosan, zölden és kéken világít – az Arduino aktiválva van, és használatra kész.

Töltse le és telepítse a programot. A programban kattintson a „További beállítások” elemre, és adja meg az eszközt - Adalight, COM port és a LED-ek számát. Válassza ki a rögzíteni kívánt képkockák számát (legfeljebb 60).


Ezután kattintson a „Rögzítési zónák megjelenítése” > „Zónabeállítás varázsló” elemre. Válassza ki a szalagkonfigurációt.


Kattintson az Alkalmaz és a Beállítások mentése gombra. Ezzel az alapbeállítások befejeződnek. Ezután kísérletezhet a rögzítési zónák méretével, színkorrigálja a szalagot stb. A program számos különféle beállítást tartalmaz.


Profil aktiválásához kattintson duplán a megfelelő ikonra (AmbiBox profilok) a Windows értesítési területén. A szalag azonnal világít. Dupla kattintással is kikapcsolható.

Alapvetően ennyi. Az eredményt a cikk elején láthatta. Semmi bonyolult, olcsó és egészséges. Biztos vagyok benne, hogy tud jobbat csinálni, ezért ossza meg kézműves munkáját a megjegyzésekben.

Az alábbiakban egy TV-hez vagy monitorhoz való Ambilight háttérvilágítás elkészítésének projektje látható. Az előző cikk, a „Dinamikus TV-háttérvilágítás” egy egyszerű megközelítést alkalmazott négy RGB LED-szalag használatával, amely lehetővé tette, hogy a TV mindkét oldalán csak egy szín jelenjen meg.
Ebben a cikkben RGB LED pixelekkel javítjuk megvilágításunkat, amelyek lehetővé teszik az egyes RGB LED-ek vezérlését. Bővebben itt olvashat:.

Tehát amire szükségünk van:
- digitális szalag az új WS2801 vezérlőn alapul. Egy ilyen csík (25 LED) bőven elég egy normál átlagos monitorhoz. Az RGB modulok közötti távolság körülbelül 10 cm Egy nagy TV-hez 2 ilyen sávra lehet szüksége
- stabilizált 5V-os tápegység az RGB LED táplálásához. A maximális tápáramot az RGB LED modulok energiafogyasztása alapján kell kiválasztani. Ha egy szalagot (25 RGB LED) használunk, akkor a tápáram 1,5A, ha 2 szalag, akkor 3A, ill.
- Arduino kontroller, csatlakozók és egyéb apróságok.

Az Arduino és a PSU szalagos csatlakoztatásának megkönnyítése érdekében kisebb módosításokat hajtottak végre. A szalag adat- és órajelsoraihoz összekötő csatlakozókat forrasztottak, hogy azokat biztonságosan be lehessen helyezni az Arduino csatlakozókba. A tápegység csatlakoztatásához egy csatlakozót forrasztottak. Közös földet forrasztottak a csatlakozóból az Arduino-ba. Az alábbi képen szerintem minden teljesen világos:

Az Arduinóban a 13. tűt az órajelhez, a 11. tűt az adatokhoz használták. Ráadásul ne felejtsd el a "talajt".

Most el kell döntenünk, hogy mindez hogyan lesz felszerelve a TV vagy a monitor hátsó falára. Itt számos lehetőség kínálkozik, a LED-eket egyszerűen ragaszthatja ragasztószalaggal a monitor hátuljára, vagy kivághat egy gyönyörű sablont vagy plexit. A sablonunk vékony műanyagból készülne, minden szükséges kivágással a monitorhoz és a tartókhoz:

Ezután egyenletesen el kell helyeznie a 25 RGB LED-et. A LED-ek közötti távolság kb 50 mm.

A sablon elkészítésekor ne takarja el a monitor szellőzőnyílásait, ha vannak.

Az összes RGB LED pixel csatlakoztatása után már csak az Arduino vezérlő csatlakoztatása marad. A kétoldalas ragasztószalag a legalkalmasabb ezekre a célokra. Az USB kábelt az Arduino-hoz, az 5V-os tápegységet pedig az RGB LED szalaghoz csatlakoztatjuk.

Szoftver

Az összes szükséges szoftvert letöltheti a GitHubról. Az Arduino->LEDstream mappában van egy vázlat az Arduino számára. Fordítsa le és töltse be a vezérlőbe.

A számítógép a Processing IDE-hez szoftvert használ, amelyet külön kell letölteni és telepíteni (nem tévesztendő össze az Arduino Processing-el!). Ha a konfiguráció nem rendelkezik 25 RGB LED-del, akkor módosítani kell a vázlatot. Ezenkívül ki kell választania azt a COM portot, amelyhez az Arduino vezérlő csatlakozik az adatok átviteléhez (lásd az alábbi képernyőképet).

A program a következőképpen működik: indítás után a program a háttérben fut, és folyamatosan képernyőképeket készít a képernyőről, és elemzi a kerület egyes pontjainak színeit. Ezután kiszámítja a pontok átlagos színét, és továbbítja az adatokat az Arduino vezérlőnek. És nem számít, hogy mi fut a számítógépen - médialejátszó, böngésző YouTube-videóval vagy valami más.

A programkódot nem vesszük figyelembe, mert... jól van kommentálva. Egyébként a Colorswirl mappában van egy kis példa egy demóvázlatra, amely szivárványt jelenít meg az RGB LED-eken.
Előfordulhat, hogy néhány régi hardver nem bírja a terhelést (például netbookokon az első atomok), mert folyamatosan készülnek a képernyőképek. Ilyenkor a felbontás csökkentése, például 800x600 segíthet.

Jó napot.

Első cikkemhez az egyik legsikeresebb mesterségemet választottam: a Philips Ambilight HDMI-passthrough analógját, a továbbiakban ezt a kompozíciót „Atmosvet”-nek fogom hívni.

Bevezetés
Az interneten nem túl nehéz kész/nyílt megoldásokat és cikkeket találni arról, hogyan készítsünk Ambilightot monitorra/TV-re, ha PC-ről jelenítünk meg képet. De az én multimédiás rendszeremben a számítógépről a TV-re való képek kiadása a használati időnek csak 5%-át teszi ki, több időt játszok játékkonzolról, ami azt jelenti, hogy ki kellett találnom valamit.
Kiinduló adatok:
  • 60"-os plazma TV
  • Asrock Vision 3D 137B alapú HTPC
  • Xbox 360
A legtöbb eszköz HDCP-t használ a tartalom lejátszására még játék közben is.
Követelmény:
A TV-hez csatlakoztatott összes eszköz számára központi Atmosvet-támogatást kell biztosítani.
Végrehajtás
Nem árulom el, hogyan rögzítettem egy 4,5 m-es LED szalagot a TV-hez, és mit kell tenni az Arduino-val, alapnak használhatod.

Az egyetlen figyelmeztetés:
Észrevettem, hogy furcsa villogások vannak a képernyő alján, először hibáztam a jelet, bütykölgettem a deflickert, megváltoztattam a kép átméretezését és előkotortam egy csomó más dolgot, jobb lett, de nem segített a villogáson. Elkezdtem nézni. Kiderült, hogy a villogás csak a szalag végén volt, majd a fényes jelenetek alatt. Multiméterrel megmértem a feszültséget a szalag elején, közepén és végén, és sejtettem a villogás okát: a szalag elején 4,9V volt (igen, a kínai táp ad feszültségeltérést, ez nem szignifikáns), középen 4,5 a végén 4,22 - A feszültségesés túl jelentős , egyszerűen meg kellett oldanom a problémát - A tápegységről csatlakoztattam a tápot a szalag közepére, és a vezetéket a TV mögé vezettem. Azonnal segített, minden villogás teljesen megszűnt.

Készítsen képet webkamerával
Az ötlet és a vizualizáció tesztelésére szolgáló első tesztverziót webkamerával készült képrögzítéssel választottuk ki) ez valahogy így nézett ki:

Az alacsony színvisszaadás és a magas késleltetés azt mutatta, hogy ez a megvalósítás semmilyen módon nem használható.

Rögzítsen képeket HDMI-n keresztül

A lehetséges lehetőségek kutatása során a következő sémát választották a legmegbízhatóbbnak és legköltséghatékonyabbnak:

  • Az összes eszköz jelét a HDCP-t támogató 5in-1-out HDMI-kapcsolóra táplálják
  • A kimenő jelet egy 1in-2out HDMI splitterre vezetik, ami nem csak támogatja a HDCP-t, de a kimeneten letiltja is (hála a kínaiaknak).
  • Az egyik kimeneti jel a TV-hez megy
  • A másik kimenet a HDMI-AV konverterhez megy
  • Az S-Video jel az ICONBIT rögzítődobozába kerül
  • A rögzítődoboz egy mindig bekapcsolt HTCP-hez csatlakozik USB-n keresztül, amely a TV-n lévő Arduino vezérlőszalaghoz csatlakozik.

Kezdetben vadnak és mankóknak tűnik, de:

  • Működik.
  • Összességében ez az egész Kínából rendelve 3-4 ezer rubelbe került.

Miért nem HDMI rögzítőkártyát használtam? Egyszerű: a legolcsóbb és legelérhetőbb lehetőség a Blackmagic Intensity Shuttle, de 1080p/60fps jellel nem tud működni, csak 1080p/30fps - ami nem elfogadható, mert... Nem akartam csökkenteni a képfrekvenciát, hogy el tudjam készíteni a képet. + ez a dolog 10 ezer körülibe került. rubel - ami nem olcsó, ismeretlen eredménnyel.

A HDMI-S-video átalakítás veszteségei elhanyagolhatóak a LED-es háttérvilágítás 46x26-os felbontású színeinek rögzítéséhez.

Kezdetben az EasyCap segítségével próbáltam S-videót rögzíteni (sok kínai változata van), de a lényeg, hogy az ott használt chip rendkívül gyenge, és openCV-vel nem lehet vele dolgozni.

Az egyetlen negatívum, hogy a kimenő S-Video jel fekete csíkokat tartalmazott a széleken, levágva a valós tartalmat (kb. 2-5%), a kimenő képet levágtam a rögzítő tábláról, hogy ezeket a csíkokat eltávolítsam, a kép elvesztése azokon a területeken a gyakorlatban nem befolyásolta az eredményt.

Szoftver
Számomra ez volt a legérdekesebb rész, mert... Nem igazán szeretek hardverekkel bütykölni.

A kép rögzítéséhez az openCV-t és különösen annak .NET wrapper emgu CV-jét használtam.

Úgy döntöttem, hogy néhány különböző technikát alkalmazok a kép utófeldolgozására és előkészítésére, mielőtt elküldöm a színlistát a vezérlőnek.

Keret feldolgozás
1. Rögzített képkocka fogadása
2. Vágja le a keretet a fekete csíkok eltüntetéséhez
Itt minden egyszerű:
keret.ROI = new Téglalap(8, 8, keret.Szélesség - 8, keret.Magasság - 18 - 8);
Vágjon 8 képpontot felülről, 8 képpontot jobbról és 18 képpontot alulról (nincs csík a bal oldalon)
3. A keretet átméretezzük a háttérvilágítás felbontására, nem kell egészséges képet cipelnünk magunkkal
Nincs is semmi bonyolult, ezt openCV-vel csináljuk:
frame.Resize(LedWidth - 2*LedSideOverEdge,
LedHeight - LedBottomOverEdge - LedTopOverEdge,
INTER.CV_INTER_LINEAR);
A figyelmes olvasó észre fogja venni a változók bőségét. Az a helyzet, hogy a TV-m kerete elég nagy, oldalt 1, felül 1, alul 3 LED-et foglal el, így az átméretezés a közvetlenül a kijelzővel szemben található LED-eken történik, a sarkokat pedig később adjuk hozzá. . Átméretezéskor csak azokat az átlagos színeket kapjuk meg, amelyeknek a LED-képpontoknak rendelkezniük kell.
4. Leképezzük a LED-eket a levágott keretről
Nos, itt is minden egyszerű, hülyén megyünk végig minden oldalon, és egymás után 136 értékből álló tömböt töltünk ki a LED-ek színével. Előfordul, hogy jelenleg minden más műveletet könnyebb végrehajtani egy LED-tömbbel, mint egy kerettel, amelyet nehezebb feldolgozni. Ezenkívül a jövőre vonatkozóan hozzáadtam egy paramétert a rögzítés „mélységére” (a képpontok száma a képernyő szélétől, a LED színének átlagához), de a végső beállításnál jobbnak bizonyult. nélküle.
5. Hajtsa végre a színkorrekciót (fehéregyensúly/színegyensúly)
A TV mögötti falak fából vannak, a fa sárga, ezért kompenzálnom kell a sárgaságot.
var kék = 255.0f/(255.0f + blueLevelFloat)*pixelBuffer[k];
var zöld = 255,0f/(255,0f + greenLevelFloat)*pixelBuffer;
var red = 255,0f/(255,0f + redLevelFloat)*pixelBuffer;
Általában eleinte valami nyílt forráskódú szerkesztő forráskódjából vettem a színegyensúlyt, de a fehéren nem változott (a fehér fehér maradt), kicsit módosítottam a képleteken, elgépeltem, és pontosan azt kaptam, amire szükségem volt: ha a színkomponens szintje negatív (értem, hogyan - ez a szín hiányzik), akkor hozzáadjuk az intenzitását, és fordítva. Az én falaimra ez lett: RGB(-30,5,85).

Színkorrekcióban feketeszint-kiegyenlítést is végzek (a fekete RGB-ben valahol 13,13,13 körül jön be) úgy, hogy minden komponensből egyszerűen levonok 13-at.

6. Hajtsa végre a telítettség csökkentését (a kép telítettségének csökkentése)
A végső beállításnál nem használok deszaturációt, de valamikor szükség lehet rá, sőt „pasztellebbé” teszi a színeket, mint a Philips Ambilight. Nem adom meg a kódot, csak konvertálunk RGB -> HSL-ből, csökkentjük a Saturation komponenst, és visszatérünk RGB-re.
7. Deflicker
Megesik, hogy a bemeneti kép „remeg” – ez az analóg jellé alakítás következménye, ahogy hiszem. Eleinte megpróbáltam megoldani a magam módján, majd megnéztem a VirtualDubban használt Defliker szűrő forrásait, átírtam C#-ban (C++-ban volt), rájöttem, hogy nem megy, mert annyira lenyűgöző hogy a képkockák közötti villogással küszködik, Végül kombináltam a megoldásomat és ezt a deflickert, és valami furcsát kaptam, de a vártnál jobban sikerült. Az eredeti deflicker csak a teljes kép intenzitásával működött. Szükségem van mindegyik LED-re külön-külön. Az eredeti deflicker az intenzitásváltozást összegezte, én inkább a színvektor hosszát hasonlítottam össze. Az eredeti deflicker az intenzitásváltozás deltáját hasonlította össze az előző képkockához képest, ez nem megfelelő, és az átlagos intenzitásra változtattam. értéket az előző keretek ablakában. És még sok apróság van, aminek következtében a kezdeti deflickerből már alig maradt meg.
A fő ötlet: az előző képkockák átlagos intenzitása alapján hajtsa végre az aktuális képkocka módosítását, ha annak intenzitása nem haladja meg a bizonyos küszöbértéket (ez a küszöb a 25-ös végső beállításnál van), ha a küszöböt túllépjük, akkor az ablak alaphelyzetbe áll, módosítás nélkül.
Kicsit módosított (a szövegkörnyezetből való olvashatóság kedvéért) kód a deflickeremből:
Array.Copy(_leds, _ledsOld, _leds.Length); for (var i = 0; i< _leds.Length; i++) { double lumSum = 0; // Calculate the luminance of the current led. lumSum += _leds[i].R*_leds[i].R; lumSum += _leds[i].G*_leds[i].G; lumSum += _leds[i].B*_leds[i].B; lumSum = Math.Sqrt(lumSum); // Do led processing var avgLum = 0.0; for (var j = 0; j < LedLumWindow; j++) { avgLum += _lumData; } var avg = avgLum/LedLumWindow; var ledChange = false; if (_strengthcutoff < 256 && _lumData != 256 && Math.Abs((int) lumSum - avg) >= _strengthcutoff) ( _lumData = 256; ledChange = true; ) // Az aktuális led korrekciós tényezőjének kiszámítása. var skála = 1,0; int r, g, b; if (ledChange) ( for (var j = 0; j< LedLumWindow; j++) { _lumData = (int) lumSum; } } else { for (var j = 0; j < LedLumWindow - 1; j++) { _lumData = _lumData; } _lumData = (int) lumSum; if (lumSum >0) ( skála = 1,0f/((átl.+lumÖsszeg)/2); var filt = 0,0f; for (var j = 0; j< LedLumWindow; j++) { filt += (float) _lumData/LedLumWindow; } scale *= filt; } // Adjust the current Led. r = _leds[i].R; g = _leds[i].G; b = _leds[i].B; // save source values var sr = r; var sg = g; var sb = b; var max = r; if (g >max) max = g; ha (b > max) max = b; kettős s; ha (skála*max > 255) s = 255,0/max; else s = skála; r = (int)(s*r); g = (int) (s*g); b = (int) (s*b); // kiemelés megtartása double k; if (sr > _lv) ( k = (sr - _lv)/(double) (255 - _lv); r = (int) ((k*sr) + ((1,0 - k)*r)); ) if ( sg > _lv) ( k = (sg - _lv)/(double) (255 - _lv); g = (int) ((k*sg) + ((1,0 - k)*g)); ) if (sb > _lv) ( k = (sb - _lv)/(double) (255 - _lv); b = (int) ((k*sb) + ((1,0 - k)*b)); ) _leds[i] = Szín .FromArgb(r, g, b); ) /* Időbeli lágyulási fázis. */ if (ledChange || _lágyítás == 0) folytatódik; var diffR = Math.Abs(_leds[i].R - _ledsOld[i].R); var diffG = Math.Abs(_leds[i].G - _ledsOld[i].G); var diffB = Math.Abs(_leds[i].B - _ledsOld[i].B); r = _leds[i].R; g = _leds[i].G; b = _leds[i].B; int összeg; if(diffR< _softening) { if (diffR >(_lágyítás >> 1)) ( összeg = _leds[i].R + _leds[i].R + _ledsOld[i].R; r = sum/3; ) ) if (diffG< _softening) { if (diffG >(_lágyítás >> 1)) ( összeg = _leds[i].G + _leds[i].G + _ledsOld[i].G; g = sum/3; ) ) if (diffB< _softening) { if (diffB >(_lágyítás >> 1)) ( összeg = _leds[i].B + _leds[i].B + _ledsOld[i].B; b = sum/3; ) ) _leds[i] = Color.FromArgb(r, g, b); )
Legyen _leds a Color osztályba tartozó LED-ek tömbje, a _ledsOld a keret átalakítás előtti értékei, a LedLumWindow az előző képkockák ablakának szélessége, hogy megbecsülhessük az átlagos intenzitásváltozást, a végső beállításnál egy 100-as ablak, ami körülbelül 30 képkocka/s-nál 3 másodpercnek felel meg. _lumData - az előző képkockák intenzitásértékeinek tömbje.

Végső soron ez a mechanizmus még kellemesebb, váratlan következményeket adott a képnek, nehéz leírni, hogyan érzékelhető, de ahol szükséges, sötétebbé teszi, ahol szükséges, világosabbá teszi, mint a dinamikus kontraszt. A deflicker célja végül széleskörűnek bizonyult, nemcsak a villogás kiküszöbölésére, hanem a kimeneti színek általános kiegyensúlyozására is, mind összetevőnként, mind az ablakon belüli idő szerint.

8. LED-ek simítása szomszédok által.
Általában a végső beállításnál nem igazán tetszett az élsimítás, és kikapcsoltam, de bizonyos esetekben hasznos lehet. Itt egyszerűen átlagoljuk az egyes LED-ek színét a szomszédokhoz képest.
var smothÁtmérő = 2*_smoothRadius + 1; Array.Copy(_leds, _ledsOld, _leds.Length); for (var i = 0; i< _ledsOld.Length; i++) { var r = 0; var g = 0; var b = 0; for (var rad = -_smoothRadius; rad <= _smoothRadius; rad++) { var pos = i + rad; if (pos < 0) { pos = _ledsOld.Length + pos; } else if (pos >_ledsOld.Length - 1) ( poz = poz - _ledsOld.Length; ) r += _ledsOld.R; g += _ledsOld.G; b += _ledsOld.B; ) _leds[i] = Color.FromArgb(r/smoth Diameter, g/smoth Diameter, b/smoth Diameter); )
9. Mentse el az aktuális állapotot, hogy a csomagküldő szál megragadja és elküldje a háttérvilágítás vezérlőjének.
Szándékosan szétválasztottam a keretek feldolgozásának és a csomagok vezérlőbe küldésének folyamatát: bizonyos időközönként (nekem ez 40 ms) egyszer küldik a csomagokat, hogy az Arduino fel tudja dolgozni az előzőt, mert 30 ms-nál gyakrabban lefullad, így fordul ki, hogy nem függünk közvetlenül a képkockasebesség-rögzítéstől, és nem avatkozunk bele ebbe a folyamatba (de egy csomag küldése is időt veszít).
Egy kicsit az Arduino-ról
Nem lehet csak úgy átvenni és elküldeni egy izmos csomagot a sorozaton keresztül az Arduinónak, mert az túlmegy az alapértelmezett HardwareSerial pufferen, és elveszíti a végét.
Ezt egészen egyszerűen meg lehet oldani: állítsa be a HardwareSerial puffer méretét akkora méretre, hogy a teljes elküldött csomag elférjen a színek tömbjével, számomra ez 410.
UI
Maga a szoftver win szolgáltatásként valósult meg, az összes paraméter konfigurálásához + engedélyezéshez/letiltáshoz készítettem egy webes felhasználói felületet, amely a szolgáltatáson keresztül WebService-en keresztül kommunikált a szolgáltatással. A mobiltelefon képernyőjének végső felülete így néz ki:
Eredmény
Az eredmény végül minden elvárásnak megfelelt, most pedig konzolon játszva még jobban elmerülök a játék hangulatában.

A munka általános eredményeként videót készítettem, amelyben az atmoszféra világítás az én sémám szerint működött:

1. tesztminta: Pacific Rim, Shanghai csatajelenet, ez a film jó tesztelésre és megjelenítésre, sok fényes jelenet és villanás, villámcsapás stb.:

2. tesztminta: Néhány, a YouTube-ról kiszivárgott videó az MLP-ről, nagyon alkalmas élénk színű jelenetek tesztelésére (tetszettek a csíkok), valamint gyorsan változó jelenetekre (a videó végén látható a késleltetés hatása , csak a videón látható, amikor Ez valós nézésnél nem észrevehető, a késleltetést videó segítségével próbáltam mérni - 10-20ms lett belőle):

És végül érdemes megjegyezni a HTPC erőforrás-felhasználását:
HTPC Nekem ASRock Vision 3D van i3-on, az atmoszférikus fényszolgáltatás a CPU 5-10%-át és 32MB RAM-ot eszik.

Köszönöm a figyelmet, nagyon remélem, hogy cikkem valakinek segíteni fog.