Come configurare smartphone e PC. Portale informativo
  • casa
  • Programmi
  • Retroilluminazione dinamica del monitor su Arduino. Pixel Lighting è semplice e veloce

Retroilluminazione dinamica del monitor su Arduino. Pixel Lighting è semplice e veloce

Philips nel 2007 ha brevettato una tecnologia di retroilluminazione TV incredibilmente semplice, ma, senza esagerare, sorprendente. Con una tale retroilluminazione adattiva, gli occhi si stancano meno quando si guarda al buio, l'effetto della presenza aumenta, l'area di visualizzazione si espande, ecc. Ambilight è applicabile non solo ai contenuti video e fotografici, ma anche ai giochi. Ambilight è diventato un segno distintivo dei televisori Philips. Da allora, Philips è stata strettamente vigile sul fatto che nessuno dei principali produttori avrebbe nemmeno osato invadere il sacro creando qualcosa di simile. Probabilmente è possibile concedere in licenza questa tecnologia, ma le condizioni sono in qualche modo proibitive e altri attori del mercato non sono particolarmente ansiosi di farlo. Anche le aziende più piccole hanno cercato (e ora ci sono aziende che lo fanno) di implementare una tecnologia simile sotto forma di kit separati, ma la punizione da parte di Philips era inevitabile. Quindi nel migliore dei casi, se l'azienda non rinnova in qualche modo il brevetto o il suo derivato, altri produttori potranno produrre qualcosa di simile solo nel 2027.

Ma noi, consumatori ordinari, non siamo colpiti da tale punizione. Siamo liberi di fare ciò che pensiamo sia giusto per noi stessi. Oggi vi spiegherò nel dettaglio come realizzare autonomamente una retroilluminazione adattiva per un televisore o un monitor come Philips Ambilight (di seguito semplicemente Ambilight). Per alcuni, l'articolo non conterrà nulla di nuovo, perché. ci sono dozzine di progetti di questo tipo e centinaia di articoli sono stati scritti in lingue diverse e ci sono migliaia di persone che hanno già fatto lo stesso per se stesse. Ma per molti, tutto questo può essere molto interessante. Non hai bisogno di abilità speciali. Solo nozioni di base di fisica per la terza media. Beh, un bel po' di fili di saldatura.

Per capire meglio di cosa sto parlando, fornirò il mio esempio di quello che è successo. Costi reali per TV 42 "- circa 1000 rubli e 2 ore di lavoro.


Il video non trasmette tutte le sensazioni e l'effetto nel suo insieme, ma per la prima volta i bambini si sono seduti a bocca aperta.

Possibili implementazioni

Esistono diverse varianti delle opzioni di implementazione di Ambilight. Dipendono dalla sorgente video.

L'opzione più economica, semplice ed efficace: la sorgente del segnale è un PC Windows, Mac OS X o Linux. Ora i box Windows su processori Atom sono molto comuni, che costano da $ 70. Tutti sono ideali per implementare Ambilight. Uso vari box Windows (nel mio mobile TV) come lettore multimediale da diversi anni, ho scritto un piccolo gruppo di recensioni e li considero i migliori set-top box per contenuti multimediali. L'implementazione hardware di questa opzione è la stessa per tutti i sistemi operativi elencati. Si tratta di questa opzione di cui parlerò nell'articolo.. La parte software farà riferimento al sistema Windows, AmbiBox agirà come un programma di controllo universale. Con Mac OS X e Linux puoi usare .

La seconda opzione: la fonte del segnale è un set-top box multimediale basato su Android, di cui esiste anche un numero enorme. Questa opzione è la più problematica. Innanzitutto, la retroilluminazione funzionerà solo nel combinatore multimediale Kodi (e nei fork di questo progetto). In secondo luogo, nella stragrande maggioranza dei casi, tutto funziona solo con la decodifica video hardware disabilitata, il che è inaccettabile per la maggior parte delle scatole. Anche l'implementazione hardware del progetto impone determinati requisiti. Non lo toccherò, ma se qualcosa di specifico mi interessa, cercherò di rispondere nei commenti.

La terza opzione è una soluzione indipendente dalla fonte. Questa è la soluzione più costosa, ma assolutamente universale, perché. Il segnale viene prelevato direttamente dal cavo HDMI. Per questo, avrai bisogno di un microcomputer sufficientemente potente (come Raspberry Pi), uno splitter HDMI (splitter), un convertitore AV HDMI-RCA, un dispositivo di acquisizione video analogico USB 2.0. Solo con questa opzione potrai utilizzare Ambilight con qualsiasi set-top box/ricevitore, box Android, Apple TV, console di gioco (ad esempio Xbox One, PlayStation 4) e altri dispositivi che dispongono di un'uscita HDMI. Per la versione con supporto 1080p60, il costo dei componenti (senza striscia LED) sarà di circa $ 70, con supporto per 2160p60 - circa $ 100. Questa opzione è molto interessante, ma è necessario scrivere un articolo separato su di essa.

Hardware

Per l'implementazione, avrai bisogno di tre componenti principali: una striscia LED RGB controllabile, un alimentatore e un microcomputer Arduino.

Innanzitutto, alcune spiegazioni.

WS2811 è un controller/driver (chip) a tre canali per LED RGB con controllo a filo singolo (indirizzamento a LED arbitrario). Il WS2812B è un LED RGB in un pacchetto SMD 5050 che ha già un controller WS2811 integrato.

Per semplicità, le strisce LED adatte al progetto sono denominate WS2811 o WS2812B.

La striscia WS2812B è una striscia con LED WS2812B in serie. Il nastro funziona con una tensione di 5 V. Esistono nastri con diverse densità di LED. Di solito è: 144, 90, 74, 60, 30 al metro. Ci sono diversi gradi di protezione. Molto spesso è: IP20-30 (protezione contro l'ingresso di particelle solide), IP65 (protezione contro polvere e getti d'acqua), IP67 (protezione contro la polvere e protezione contro l'immersione parziale o breve in acqua fino a una profondità di 1 m) . Fodera in bianco e nero.

Ecco un esempio di tale nastro:


Un nastro WS2811 è un nastro su cui sono posizionati in serie un controller WS2811 e una sorta di LED RGB. Sono disponibili opzioni progettate per tensioni di 5 V e 12 V. Densità e protezione sono simili alla versione precedente.

Ecco un esempio di tale nastro:


Ci sono anche i "nastri" WS2811 con LED grandi e potenti, come nella foto sotto. Sono anche adatti per implementare Ambilight per alcuni pannelli enormi.


Quale nastro scegliere, WS2812B e WS2811?

Un fattore importante è l'avanzamento del nastro, di cui parlerò un po' più avanti.

Se hai un alimentatore adatto a casa (spesso gli alimentatori rimangono a casa da apparecchiature vecchie o danneggiate), scegli un nastro in base alla tensione dell'alimentatore, ad es. 5V - WS2812B, 12V - WS2811. In questo caso, risparmierai semplicemente denaro.

Da parte mia posso dare una raccomandazione. Se il numero totale di LED nel sistema non è superiore a 120, allora WS2812B. Se più di 120, quindi WS2811 con una tensione operativa di 12 V. Perché esattamente, capirai quando si tratta di collegare il nastro all'alimentazione.

Quale livello di protezione del nastro dovrei scegliere?

Per la maggior parte, IP65 andrà bene. è rivestito da un lato con “silicone” (epossidico) e dall'altro ha una superficie autoadesiva 3M. È conveniente montare questo nastro su una TV o un monitor ed è conveniente pulirlo dalla polvere.

Quale densità di LED scegliere?

Per il progetto sono adatti nastri con una densità da 30 a 60 LED al metro (ovviamente ne sono possibili 144, nessuno lo vieta). Maggiore è la densità, maggiore è la risoluzione Ambilight (numero di zone) e maggiore è la luminosità complessiva massima. Ma va tenuto presente che più LED nel progetto, più complesso sarà il circuito di alimentazione del nastro e sarà necessario un alimentatore più potente. Il numero massimo di LED in un progetto è 300.

Comprare un nastro

Se la TV o il monitor sono appesi al muro e tutti e 4 i lati hanno molto spazio libero nelle vicinanze, è meglio posizionare il nastro sul retro attorno al perimetro su tutti e 4 i lati per ottenere il massimo effetto. Se la TV o il monitor sono installati su un supporto o non c'è abbastanza spazio libero sotto, il nastro deve essere posizionato sul retro su 3 lati (cioè sul fondo senza nastro).

Per me, ho scelto un nastro bianco WS2812B IP65 con 30 LED al metro. Avevo già un alimentatore da 5 V adatto. Ho deciso 60 o 30 LED al metro, ma ho scelto quest'ultimo dopo aver esaminato il video con esempi di implementazione già pronti: la luminosità e la risoluzione mi andavano bene e l'alimentatore è più facile da organizzare, meno cavi. Aliexpress ha un numero enorme di lotti di nastri WS2812B. Ho ordinato 5 metri per $ 16. Per la mia TV (42", 3 lati) mi servivano solo 2 metri, cioè si poteva comprare per 10$, i restanti tre metri per un amico. I prezzi cambiano spesso con i venditori, ci sono molte offerte, quindi basta scegliere un economico lotto su Aliexpress molto apprezzato (le parole chiave di ricerca sono WS2812B IP65 o WS2811 12V IP65).




Acquisto di un alimentatore per il nastro

L'alimentazione è selezionata da potenza e tensione. Per WS2812B - tensione 5 V. Per WS2811 - 5 o 12 V. Il consumo energetico massimo di un LED WS2812B è 0,3 W. Per WS2811 nella maggior parte dei casi lo stesso. Quelli. la potenza dell'alimentatore deve essere almeno N*0,3 W, dove N è il numero di led presenti nel progetto.

Ad esempio, hai un televisore da 42", hai optato per un nastro WS2812B con 30 LED al metro, hai bisogno di 3 metri di nastro su tutti e 4 i lati. Avrai bisogno di un alimentatore con una tensione di 5 V e una potenza massima di 0,3 * 30 * 3 = 27 W , ovvero 5 V / 6 A. Nella mia implementazione vengono utilizzati solo 3 lati, solo 60 LED (per la precisione, quindi 57) - potenza da 18 W, ovvero 5 V / 4 A.

Sono stato a lungo inattivo caricatore USB multiporta ORICO CSA-5U (8 A), rimasto dalla vecchia recensione. Ha un'alimentazione parallela alle porte (questo è di fondamentale importanza), questa memoria è l'ideale per me come alimentatore, perché. Collegherò il nastro tramite 2 connessioni parallele (le spiegazioni saranno un po' più avanti nell'articolo).


Se non avessi questa memoria, sceglierei (ci sono informazioni che è in questo alimentatore che gli interni sono messi a 2,5 A, quindi è necessario studiare questo problema in modo più dettagliato con il venditore o guardare altro Modelli).

L'acquisto di un microcomputer

Ambilight sarà controllato da un microcomputer Arduino. Arduino Nano su Aliexpress costa circa un pezzo.

Costi per la mia opzione (per TV 42"):

$ 10 - 2 metri WS2812B IP65 (30 LED al metro)
$ 4 - alimentazione 5 V / 4 A (non ho speso soldi per l'alimentatore, cito il costo per chiarezza)
$ 2,5 - Arduino Nano
-----------
16,5$ o 1000 rubli

Implementazione hardware

La cosa più importante è organizzare correttamente l'avanzamento del nastro. Il nastro è lungo, la tensione cala ad alta corrente, soprattutto a 5 V. La maggior parte dei problemi che si presentano a chi si fa Ambilight sono legati all'alimentazione. Uso una regola: è necessario creare un alimentatore separato per ogni 10 W di consumo energetico massimo a 5 V e 25 W di consumo energetico a 12 V. La lunghezza dell'alimentatore (dall'alimentatore al nastro stesso) dovrebbe essere minimo (senza margine), specialmente a 5 AT.

Lo schema di collegamento generale è il seguente (lo schema mostra il collegamento di alimentazione per la mia versione):


L'alimentazione viene fornita al nastro su entrambe le estremità: due connessioni parallele. Ad esempio, se avessi retroilluminato su tutti e 4 i lati e il nastro avesse 60 LED al metro (ovvero, potenza massima 54 W), allora farei il seguente alimentatore:


I cavi di alimentazione devono essere utilizzati in modo appropriato, più piccolo è il calibro (AWG), meglio è, in modo che siano sufficienti con un margine per l'intensità di corrente calcolata.

Ci sono due pin che vanno ad Arduino dal nastro. GND da collegare al pin corrispondente su Arduino. E DATA, che deve essere collegato al sesto pin digitale tramite una resistenza da 300-550 Ohm (meglio 470 Ohm). Se non hai un resistore, nella maggior parte dei casi tutto funzionerà bene senza di esso, ma è meglio averne uno. La resistenza può essere acquistata per un paio di centesimi in qualsiasi negozio di radio. Il microcomputer Arduino stesso può essere posizionato in qualsiasi custodia conveniente, molti usano l'uovo a sorpresa Kinder per questo. L'Arduino dovrebbe essere posizionato il più vicino possibile al nastro in modo che il cavo DATA sia il più corto possibile.

Saldare i fili al nastro è facile. La regola principale è che il tempo di contatto con il saldatore dovrebbe essere minimo;

Nel mio caso si è rivelato così:



Due cavi USB neri di alta qualità sono stati utilizzati per l'alimentazione e uno bianco per il collegamento a un computer. Ho finito le guaine termorestringenti bianche, ho usato quelle rosse. Non così "bello", ma mi sta bene (è nascosto comunque dietro la TV).

Una domanda importante è come piegare il nastro ad angolo retto? Se hai un nastro per 60 LED, allora il nastro deve essere tagliato e collegato con fili corti (posizionando tutto questo in un tubo termorestringente). Puoi acquistare connettori angolari speciali per tre pin per strisce LED (ci sono 4 pin nella foto, solo per esempio):


Se hai una striscia di 30 LED, la distanza tra i LED è grande, puoi facilmente fare un angolo senza tagliare. Rimuovere un pezzo del rivestimento “silicone”, isolare (anche con “nastro adesivo”) la piazzola di contatto e piegarla secondo lo schema:

Ho tagliato un pezzo di nastro adesivo per esercitarmi. La cosa principale è non esagerare: leggermente piegato una volta e basta. Non è necessario piegarsi qua e là, non è necessario stringere con forza la linea di piegatura.


Ecco una vista posteriore della TV, tutti i fili passano attraverso il foro all'interno dell'armadio:

Parte software

Questo è il più semplice.

Colleghiamo il microcomputer Arduino tramite USB. Il driver (interfaccia seriale CH340) verrà installato automaticamente. Se ciò non accade, allora nella cartella Arduino IDE c'è una cartella Driver con tutto ciò di cui hai bisogno.

Avvia l'IDE Arduino e apri il file Adalight.ino.


Modificare il numero di LED nel codice. ne ho 57


Strumenti > Scheda > Arduino nano
Strumenti > Porta > Seleziona porta COM (ci sarà l'opzione giusta)

Fare clic sul pulsante "Download":


Il programma ti informerà quando il download è completo (è letteralmente un paio di secondi).

Pronto. Scollega Arduino da USB e ricollegalo. Il nastro diventerà rosso, verde e blu in sequenza: l'Arduino è attivato e pronto per l'uso.

Scarica e installa il programma. Nel programma, fai clic su "Altre impostazioni" e specifica il dispositivo: Adalight, porta COM e il numero di LED. Scegli il numero di fotogrammi da acquisire (fino a 60).


Quindi, fai clic su Mostra zone di acquisizione > Procedura guidata zona. Scegli la configurazione del tuo nastro.


Fare clic su Applica e salva impostazioni. Questo completa le impostazioni di base. Quindi puoi sperimentare con le dimensioni delle zone di acquisizione, eseguire la correzione del colore del nastro, ecc. Il programma ha molte impostazioni diverse.


Per attivare un profilo è sufficiente fare doppio clic sull'icona corrispondente (profili AmbiBox) nell'area di notifica di Windows. Il nastro si accenderà immediatamente. Si spegne anche con un doppio clic.

Questo è fondamentalmente. Hai visto il risultato all'inizio dell'articolo. Niente di complicato, economico e interessante. Sono sicuro che farai di meglio, quindi condividi i tuoi mestieri nei commenti.

Per diluire un po' le recensioni sui costumi da bagno, ti parlerò della mia esperienza nella creazione di una retroilluminazione dinamica per una TV. abbastanza per fare habr di muschio
parte principale illuminazioneè ancora una striscia LED, quindi è stata lei a decidere di inserirla nel titolo. sebbene nella costruzione siano stati coinvolti un po 'più di componenti.

Se hai desiderato a lungo avvitare la retroilluminazione alla tua TV non Philips, ma avevi paura di provarlo, provalo. è più facile di quanto sembri.

Per cominciare, un piccolo video del risultato.


Al momento - la retroilluminazione funziona ancora più fredda - nelle impostazioni l'ho impostata su una luminosità più alta e una frequenza di aggiornamento più alta, ora nei film d'azione o nelle scene in un club (quando c'è un flash stroboscopico nell'inquadratura) - l'intera parete esplode solo di luce

Come farlo è abbastanza semplice:
+
+
+
un po' di coraggio =
Ambilight

Maggiori dettagli sui punti:
1 Avevo già un lampone in quel momento. L'ho comprato lì su Amazon, ma penso che l'origine del ruolo non giochi qui - il consiglio è unificato e puoi acquistarlo assolutamente ovunque - l'importante è che non consiglio di prendere una BU. dopo un certo periodo di tempo alla massima frequenza senza radiatori aggiuntivi, ho iniziato a presentare problemi. Lo attribuisco al surriscaldamento, ma potrebbe anche essere uno stupido difetto di fabbricazione. I lamponi sono estremamente sensibili alla fonte di alimentazione, quindi fai immediatamente scorta di un normale alimentatore con un basso livello di ondulazione ... (e in modo che non affondi sotto carico)
2 Il nastro stesso. Come funziona, penso che sia abbastanza bello da vedere nel video. non c'è niente di speciale nel nastro stesso: ho tagliato dei pezzi in modo che fosse sufficiente per esattamente 3 bordi della TV. Ho saldato i punti di curvatura con pezzi di filo (inizialmente ho fatto il collegamento con i connettori, ma si è subito infuriato che i pezzi di filo uscissero lunghi - ho tagliato tutto e l'ho saldato a pezzetti)
3 Brillante programma hyperion. È installato su lamponi (ho OpenElec multimediale come sistema operativo) secondo le istruzioni per gli idioti. Ho anche capito bene la prima volta. Nel processo di lavoro, acquisisce stupidamente i dati sul colore dei bordi dello schermo, esegue la media e invia segnali di controllo alla striscia LED. Il nastro strizza l'occhio con tutti i colori dell'arcobaleno, il pubblico è estasiato. Durante la riproduzione in fullHD con un peso di 30 giga, il carico aggiuntivo per percentuale è del 5-10%. Non influisce in alcun modo sulla velocità.

Il risultato supera le più rosee aspettative:
con una densità di LED di 30 tonnellate al metro, l'intera parete dietro il televisore (distanza di circa 10-15 centimetri) è colorata con i colori dello schermo. visivamente, la scena si allontana... beh, per quanto ci sia proprio questo muro. nessun ritardo di trasmissione. almeno impossibile da tracciare con l'occhio. tutto è liscio e chiaro. Per uno smartphone, esiste un programma interessante con il quale è possibile impostare la retroilluminazione in modalità lounge: impostare il colore/luminosità desiderati o eseguire uno dei modelli proposti (come una luce rossa accesa, o solo un arcobaleno, o per esempio di transizioni di colore).
Quando la retroilluminazione viene spenta mentre guarda i cartoni animati, la figlia si indigna e chiede di restituire tutto.)))

Bene, al fine di rispettare la politica MySKU, una revisione dei dettagli stessi:
Striscia LED - rivista più volte. Ho lo stesso identico. Molto buona. la qualità è eccellente. viene visualizzato se la memoria serve - 16 milioni di sfumature. non contava esattamente. richiede alimentazione aggiuntiva - appeso un più o meno sul blocco 5v 2A - 2 metri sono più che sufficienti. Penso che basteranno per 3, ma non garantisco. Ho portato i contatti di controllo ai lamponi GPIO.

Malinka è un computer a scheda singola. Non trascurato solo dai pigri. Un'ottima cosa per imparare le basi di Linux e per costruire un media center minimalista e flessibile. Si è rivelata un'opzione ideale per me: scorre tutti i contenuti a mia disposizione, funziona come un indicatore di ricevitore TV Internet, finge di essere un ricevitore di segnale AirPlay quando voglio avviare qualcosa dal mio telefono o laptop. Ottima cosa - 3 watt e tanto divertimento + supporto HDMI CEC pronto all'uso - tutto è controllato dal telecomando TV nativo.

E infine, un video di follow-up:

Un paio di giorni fa ho deciso di fare altri demovidos, già in un nuovo appartamento.

il colore della parete è pistacchio, non ho modificato le impostazioni e non lo farò. quindi i colori sono un po' verdastri. Mi piace ma non mi interessa cosa ne pensi

Ho intenzione di acquistare +69 Aggiungi ai preferiti Mi è piaciuta la recensione +16 +48

I televisori con retroilluminazione dinamica attorno alla cornice del display sono una delle caratteristiche distintive di Philips. E a differenza di molti altri, funziona. Tuttavia, tutto ha un prezzo e i televisori con Ambilight e un maggiore effetto immersivo sono più costosi di molti altri modelli.

Gli sviluppatori russi hanno proposto un metodo che consentirà di dotare i monitor di qualsiasi produttore di retroilluminazione dinamica. Per fare ciò, non devi nemmeno portare il dispositivo in un centro assistenza: ci vuole solo un po' di tempo e costanza.

In generale, tale retroilluminazione può essere acquistata sotto forma di componenti radio e configurata in modo indipendente. Ma, come mostra la pratica, questo è quasi paragonabile alle opzioni già pronte di PaintPack.

Sono offerti due modelli base: una versione monitor (30 LED) e una versione TV (60 LED). Ce n'è anche uno molto semplice - per 10 LED, ma è adatto solo per i monitor più piccoli.

La versione TV è dotata di alimentatore esterno. Inoltre, un numero maggiore di LED parla a suo favore, che offre un'ampia area di retroilluminazione (si illuminerà in modo più ampio e più alto, in altre parole). Se queste opzioni non sono adatte per qualsiasi motivo, puoi contattare gli sviluppatori: con un piccolo sovrapprezzo, offriranno una versione modificata.

mindrunway.ru

PaintPack, infatti, è una piccola valigetta a cui sono collegate strisce LED rimovibili su entrambi i lati. La scatola con il riempimento contiene indicatori e un connettore di alimentazione, oltre a microUSB per il collegamento a un PC. E' presente anche un connettore master (proprietario) per il collegamento seriale di due dispositivi.

Il corpo del dispositivo è posizionato sul retro del televisore o del monitor. Quindi le strisce LED vengono posate secondo le istruzioni, l'alimentazione viene collegata e inizia la stregoneria. Quando si collega PaintPack a un computer tramite un connettore USB, è necessario installare i driver e configurare il dispositivo nel programma in dotazione.


mysku.ru

La configurazione viene eseguita utilizzando il pacchetto AmbiBox. Devi andare nel menu "Retroilluminazione intelligente", selezionare il metodo di cattura dello schermo e una delle modalità operative offerte nel programma:

  1. Sfondo statico: qualsiasi colore è impostato, il bagliore dei LED è regolato.
  2. Musica a colori: la retroilluminazione lampeggerà a tempo con il suono della musica. Il colore della retroilluminazione è impostato su giallo-verde.
  3. Sfondo dinamico: un flusso regolare di un colore nell'altro.
  4. La cattura dello schermo è la modalità operativa principale.

In questa modalità, puoi catturare il colore dai film e dai giochi che stai guardando. Il colore della retroilluminazione cambierà in base all'immagine sullo schermo, divisa in zone superiore, inferiore e laterale (ciascuna separatamente).

PaintPack funziona un po' più lentamente rispetto alla controparte ufficiale di Philips. Ma data la differenza di costo e la possibilità di aggiornare qualsiasi dispositivo, la scelta è ovvia.

Alcuni anni fa, su mySKU è stata pubblicata una straordinaria recensione, che ha pubblicato P43YM. Anche i commenti su questa recensione sono sorprendenti: è solo un'enorme base di conoscenze (così enorme che il browser carica a malapena questa pagina). Il tempo passa, i componenti diventano più economici, mySKU acquisisce un nuovo pubblico che potrebbe essersi perso questa recensione. Ho anche deciso di descrivere con parole mie il processo di creazione di una retroilluminazione adattiva per una TV o un monitor come Philips Ambilight. Forse la mia recensione sarà utile a qualcuno.

Philips nel 2007 ha brevettato una tecnologia di retroilluminazione TV incredibilmente semplice, ma, senza esagerare, sorprendente. Con una tale retroilluminazione adattiva, gli occhi si stancano meno quando si guarda al buio, l'effetto della presenza aumenta, l'area di visualizzazione si espande, ecc. Ambilight è applicabile non solo ai contenuti video e fotografici, ma anche ai giochi. Ambilight è diventato un segno distintivo dei televisori Philips. Da allora, Philips è stata strettamente vigile sul fatto che nessuno dei principali produttori avrebbe nemmeno osato invadere il sacro creando qualcosa di simile. Probabilmente è possibile concedere in licenza questa tecnologia, ma le condizioni sono in qualche modo proibitive e altri attori del mercato non sono particolarmente ansiosi di farlo. Anche le aziende più piccole hanno cercato (e ora ci sono aziende che lo fanno) di implementare una tecnologia simile sotto forma di kit separati, ma la punizione da parte di Philips era inevitabile. Quindi nel migliore dei casi, se l'azienda non rinnova in qualche modo il brevetto o il suo derivato, altri produttori potranno produrre qualcosa di simile solo nel 2027.

Ma noi, consumatori ordinari, non siamo colpiti da tale punizione. Siamo liberi di fare ciò che pensiamo sia giusto per noi stessi. Oggi vi spiegherò nel dettaglio come realizzare autonomamente una retroilluminazione adattiva per un televisore o un monitor come Philips Ambilight (di seguito semplicemente Ambilight). Per alcuni, l'articolo non conterrà nulla di nuovo, perché. ci sono dozzine di progetti di questo tipo e centinaia di articoli sono stati scritti in lingue diverse e ci sono migliaia di persone che hanno già fatto lo stesso per se stesse. Ma per molti, tutto questo può essere molto interessante. Non hai bisogno di abilità speciali. Solo nozioni di base di fisica per la terza media. Beh, un bel po' di fili di saldatura.

Per capire meglio di cosa sto parlando, fornirò il mio esempio di quello che è successo. Costi reali per TV 42 "- circa 1000 rubli e 2 ore di lavoro.



Il video non trasmette tutte le sensazioni e l'effetto nel suo insieme, ma per la prima volta i bambini si sono seduti a bocca aperta.

Possibili implementazioni

Esistono diverse varianti delle opzioni di implementazione di Ambilight. Dipendono dalla sorgente video.

L'opzione più economica, semplice ed efficace: la sorgente del segnale è un PC Windows, Mac OS X o Linux. Ora i box Windows su processori Atom sono molto comuni, che costano da $ 70. Tutti sono ideali per implementare Ambilight. Uso vari box Windows (nel mio mobile TV) come lettore multimediale da diversi anni, ho scritto un piccolo gruppo di recensioni e li considero i migliori set-top box per contenuti multimediali. L'implementazione hardware di questa opzione è la stessa per tutti i sistemi operativi elencati. Si tratta di questa opzione di cui parlerò nell'articolo.. La parte software farà riferimento al sistema Windows, AmbiBox agirà come un programma di controllo universale. Con Mac OS X e Linux puoi usare .

La seconda opzione: la fonte del segnale è un set-top box multimediale basato su Android, di cui esiste anche un numero enorme. Questa opzione è la più problematica. Innanzitutto, la retroilluminazione funzionerà solo nel combinatore multimediale Kodi (e nei fork di questo progetto). In secondo luogo, nella stragrande maggioranza dei casi, tutto funziona solo con la decodifica video hardware disabilitata, il che è inaccettabile per la maggior parte delle scatole. Anche l'implementazione hardware del progetto impone determinati requisiti. Non lo toccherò, ma se qualcosa di specifico mi interessa, cercherò di rispondere nei commenti.

La terza opzione è una soluzione indipendente dalla fonte. Questa è la soluzione più costosa, ma assolutamente universale, perché. Il segnale viene prelevato direttamente dal cavo HDMI. Per questo, avrai bisogno di un microcomputer sufficientemente potente (come Raspberry Pi), uno splitter HDMI (splitter), un convertitore AV HDMI-RCA, un dispositivo di acquisizione video analogico USB 2.0. Solo con questa opzione potrai utilizzare Ambilight con qualsiasi set-top box/ricevitore, box Android, Apple TV, console di gioco (ad esempio Xbox One, PlayStation 4) e altri dispositivi che dispongono di un'uscita HDMI. Per la versione con supporto 1080p60, il costo dei componenti (senza striscia LED) sarà di circa $ 70, con supporto per 2160p60 - circa $ 100. Questa opzione è molto interessante, ma è necessario scrivere un articolo separato su di essa.

Hardware

Per l'implementazione, avrai bisogno di tre componenti principali: una striscia LED RGB controllabile, un alimentatore e un microcomputer Arduino.

Innanzitutto, alcune spiegazioni.

WS2811 è un controller/driver (chip) a tre canali per LED RGB con controllo a filo singolo (indirizzamento a LED arbitrario). Il WS2812B è un LED RGB in un pacchetto SMD 5050 che ha già un controller WS2811 integrato.

Per semplicità, le strisce LED adatte al progetto sono denominate WS2811 o WS2812B.

La striscia WS2812B è una striscia con LED WS2812B in serie. Il nastro funziona con una tensione di 5 V. Esistono nastri con diverse densità di LED. Di solito è: 144, 90, 74, 60, 30 al metro. Ci sono diversi gradi di protezione. Molto spesso è: IP20-30 (protezione contro l'ingresso di particelle solide), IP65 (protezione contro polvere e getti d'acqua), IP67 (protezione contro la polvere e protezione contro l'immersione parziale o breve in acqua fino a una profondità di 1 m) . Fodera in bianco e nero.

Ecco un esempio di tale nastro:


Un nastro WS2811 è un nastro su cui sono posizionati in serie un controller WS2811 e una sorta di LED RGB. Sono disponibili opzioni progettate per tensioni di 5 V e 12 V. Densità e protezione sono simili alla versione precedente.

Ecco un esempio di tale nastro:


Ci sono anche i "nastri" WS2811 con LED grandi e potenti, come nella foto sotto. Sono anche adatti per implementare Ambilight per alcuni pannelli enormi.


Quale nastro scegliere, WS2812B e WS2811?

Un fattore importante è l'avanzamento del nastro, di cui parlerò un po' più avanti.

Se hai un alimentatore adatto a casa (spesso gli alimentatori rimangono a casa da apparecchiature vecchie o danneggiate), scegli un nastro in base alla tensione dell'alimentatore, ad es. 5V - WS2812B, 12V - WS2811. In questo caso, risparmierai semplicemente denaro.

Da parte mia posso dare una raccomandazione. Se il numero totale di LED nel sistema non è superiore a 120, allora WS2812B. Se più di 120, quindi WS2811 con una tensione operativa di 12 V. Perché esattamente, capirai quando si tratta di collegare il nastro all'alimentazione.

Quale livello di protezione del nastro dovrei scegliere?

Per la maggior parte, IP65 andrà bene. è rivestito da un lato con “silicone” (epossidico) e dall'altro ha una superficie autoadesiva 3M. È conveniente montare questo nastro su una TV o un monitor ed è conveniente pulirlo dalla polvere.

Quale densità di LED scegliere?

Per il progetto sono adatti nastri con una densità da 30 a 60 LED al metro (ovviamente ne sono possibili 144, nessuno lo vieta). Maggiore è la densità, maggiore è la risoluzione Ambilight (numero di zone) e maggiore è la luminosità complessiva massima. Ma va tenuto presente che più LED nel progetto, più complesso sarà il circuito di alimentazione del nastro e sarà necessario un alimentatore più potente. Il numero massimo di LED in un progetto è 300.

Comprare un nastro

Se la TV o il monitor sono appesi al muro e tutti e 4 i lati hanno molto spazio libero nelle vicinanze, è meglio posizionare il nastro sul retro attorno al perimetro su tutti e 4 i lati per ottenere il massimo effetto. Se la TV o il monitor sono installati su un supporto o non c'è abbastanza spazio libero sotto, il nastro deve essere posizionato sul retro su 3 lati (cioè sul fondo senza nastro).

Per me, ho scelto un nastro bianco WS2812B IP65 con 30 LED al metro. Avevo già un alimentatore da 5 V adatto. Ho deciso 60 o 30 LED al metro, ma ho scelto quest'ultimo dopo aver esaminato il video con esempi di implementazione già pronti: la luminosità e la risoluzione mi andavano bene e l'alimentatore è più facile da organizzare, meno cavi. Aliexpress ha un numero enorme di lotti di nastri WS2812B. Ho ordinato 5 metri per $ 16. Per la mia TV (42", 3 lati) mi servivano solo 2 metri, cioè si poteva comprare per 10$, i restanti tre metri per un amico. I prezzi cambiano spesso con i venditori, ci sono molte offerte, quindi basta scegliere un economico lotto su Aliexpress con un punteggio elevato (le parole chiave di ricerca sono WS2812B IP65 o WS2811 12V IP65).




Acquisto di un alimentatore per il nastro

L'alimentazione è selezionata da potenza e tensione. Per WS2812B - tensione 5 V. Per WS2811 - 5 o 12 V. Il consumo energetico massimo di un LED WS2812B è 0,3 W. Per WS2811 nella maggior parte dei casi lo stesso. Quelli. la potenza dell'alimentatore deve essere almeno N*0,3 W, dove N è il numero di led presenti nel progetto.

Ad esempio, hai un televisore da 42", hai optato per un nastro WS2812B con 30 LED al metro, hai bisogno di 3 metri di nastro su tutti e 4 i lati. Avrai bisogno di un alimentatore con una tensione di 5 V e una potenza massima di 0,3 * 30 * 3 = 27 W , ovvero 5 V / 6 A. Nella mia implementazione vengono utilizzati solo 3 lati, solo 60 LED (per la precisione, quindi 57) - potenza da 18 W, ovvero 5 V / 4 A.

Sono stato a lungo inattivo caricatore USB multiporta ORICO CSA-5U (8 A), rimasto dalla vecchia recensione. Ha un'alimentazione parallela alle porte (questo è di fondamentale importanza), questa memoria è l'ideale per me come alimentatore, perché. Collegherò il nastro tramite 2 connessioni parallele (le spiegazioni saranno un po' più avanti nell'articolo).


Se non avessi questa memoria, sceglierei (ma nei commenti scrivono che spesso mettono dentro 2,5 A, quindi è meglio studiare questo problema in modo più dettagliato).

L'acquisto di un microcomputer

Ambilight sarà controllato da un microcomputer Arduino. Arduino Nano su Aliexpress costa circa un pezzo.

Costi per la mia opzione (per TV 42"):

$ 10 - 2 metri WS2812B IP65 (30 LED al metro)
$ 4 - alimentazione 5 V / 4 A (non ho speso soldi per l'alimentatore, cito il costo per chiarezza)
$ 2,5 - Arduino Nano
-----------
16,5$ o 1000 rubli

Implementazione hardware

La cosa più importante è organizzare correttamente l'avanzamento del nastro. Il nastro è lungo, la tensione cala ad alta corrente, soprattutto a 5 V. La maggior parte dei problemi che si presentano a chi si fa Ambilight sono legati all'alimentazione. Uso una regola: è necessario creare un alimentatore separato per ogni 10 W di consumo energetico massimo a 5 V e 25 W di consumo energetico a 12 V. La lunghezza dell'alimentatore (dall'alimentatore al nastro stesso) dovrebbe essere minimo (senza margine), specialmente a 5 AT.

Lo schema di collegamento generale è il seguente (lo schema mostra il collegamento di alimentazione per la mia versione):


L'alimentazione viene fornita al nastro su entrambe le estremità: due connessioni parallele. Ad esempio, se avessi retroilluminato su tutti e 4 i lati e il nastro avesse 60 LED al metro (ovvero, potenza massima 54 W), allora farei il seguente alimentatore:


I cavi di alimentazione devono essere utilizzati in modo appropriato, più piccolo è il calibro (AWG), meglio è, in modo che siano sufficienti con un margine per l'intensità di corrente calcolata.

Ci sono due pin che vanno ad Arduino dal nastro. GND da collegare al pin corrispondente su Arduino. E DATA, che deve essere collegato al sesto pin digitale tramite una resistenza da 300-550 Ohm (meglio 470 Ohm). Se non hai un resistore, nella maggior parte dei casi tutto funzionerà bene senza di esso, ma è meglio averne uno. La resistenza può essere acquistata per un paio di centesimi in qualsiasi negozio di radio. Il microcomputer Arduino stesso può essere posizionato in qualsiasi custodia conveniente, molti usano l'uovo a sorpresa Kinder per questo. L'Arduino dovrebbe essere posizionato il più vicino possibile al nastro in modo che il cavo DATA sia il più corto possibile.

Saldare i fili al nastro è facile. La regola principale è che il tempo di contatto con il saldatore dovrebbe essere minimo;

Nel mio caso si è rivelato così:



Due cavi USB neri di alta qualità sono stati utilizzati per l'alimentazione e uno bianco per il collegamento a un computer. Ho finito le guaine termorestringenti bianche, ho usato quelle rosse. Non così "bello", ma mi sta bene (è nascosto comunque dietro la TV).

Una domanda importante è come piegare il nastro ad angolo retto? Se hai un nastro per 60 LED, allora il nastro deve essere tagliato e collegato con fili corti (posizionando tutto questo in un tubo termorestringente). Puoi acquistare connettori angolari speciali per tre pin per strisce LED (ci sono 4 pin nella foto, solo per esempio):


Se hai una striscia di 30 LED, la distanza tra i LED è grande, puoi facilmente fare un angolo senza tagliare. Rimuovere un pezzo del rivestimento “silicone”, isolare (anche con “nastro adesivo”) la piazzola di contatto e piegarla secondo lo schema:

Ho tagliato un pezzo di nastro adesivo per esercitarmi. La cosa principale è non esagerare: leggermente piegato una volta e basta. Non è necessario piegarsi qua e là, non è necessario stringere con forza la linea di piegatura.


Ecco una vista posteriore della TV, tutti i fili passano attraverso il foro all'interno dell'armadio:

Parte software

Questo è il più semplice.

Colleghiamo il microcomputer Arduino tramite USB. Il driver (interfaccia seriale CH340) verrà installato automaticamente. Se ciò non accade, allora nella cartella Arduino IDE c'è una cartella Driver con tutto ciò di cui hai bisogno.

Avvia l'IDE Arduino e apri il file Adalight.ino.


Modificare il numero di LED nel codice. ne ho 57


Strumenti > Scheda > Arduino nano
Strumenti > Porta > Seleziona porta COM (ci sarà l'opzione giusta)

Fare clic sul pulsante "Download":


Il programma ti informerà quando il download è completo (è letteralmente un paio di secondi).

Pronto. Scollega Arduino da USB e ricollegalo. Il nastro diventerà rosso, verde e blu in sequenza: l'Arduino è attivato e pronto per l'uso.

Scarica e installa il programma. Nel programma, fai clic su "Altre impostazioni" e specifica il dispositivo: Adalight, porta COM e il numero di LED. Scegli il numero di fotogrammi da acquisire (fino a 60).


Quindi, fai clic su Mostra zone di acquisizione > Procedura guidata zona. Scegli la configurazione del tuo nastro.


Fare clic su Applica e salva impostazioni. Questo completa le impostazioni di base. Quindi puoi sperimentare con le dimensioni delle zone di acquisizione, eseguire la correzione del colore del nastro, ecc. Il programma ha molte impostazioni diverse.


Per attivare un profilo è sufficiente fare doppio clic sull'icona corrispondente (profili AmbiBox) nell'area di notifica di Windows. Il nastro si accenderà immediatamente. Si spegne anche con un doppio clic.

Questo è fondamentalmente. Hai visto il risultato all'inizio dell'articolo. Niente di complicato, economico e interessante. Sono sicuro che farai di meglio!

Ho intenzione di acquistare +435 Aggiungi ai preferiti Mi è piaciuta la recensione +270 +577

Buon pomeriggio.

Per il mio primo articolo, ho scelto uno dei miei mestieri di maggior successo: l'analogo HDMI-passthrough di Ambilight di Philips, di seguito chiamerò questa composizione "Atmosvet".

introduzione
Non è molto difficile trovare soluzioni e articoli già pronti / aperti su Internet su come realizzare Ambilight per un monitor / TV se si visualizza un'immagine da un PC. Ma nel mio sistema multimediale, visualizzare un'immagine su una TV da un PC richiede solo il 5% del tempo di utilizzo, gioco più tempo dalle console di gioco, il che significa che ho dovuto inventare qualcosa di mio.
Dati iniziali:
  • TV al plasma da 60 pollici
  • HTPC basato su Asrock Vision 3D 137B
  • Xbox 360
La maggior parte dei dispositivi utilizza HDCP per riprodurre contenuti anche durante i giochi.
Requisiti:
È necessario fornire un supporto centralizzato per Atmosvet per tutti i dispositivi collegati alla TV.
Implementazione
Non ti dirò come ho attaccato una striscia LED da 4,5 m alla TV e cosa si deve fare con Arduino, puoi usarlo come base.

L'unico avvertimento:
Ho notato che si stavano verificando strani sfarfallio nella parte inferiore dello schermo, all'inizio ho commesso un errore sul segnale, ho ripreso il deflicker, cambiato il ridimensionamento dell'immagine e ho scoperto un sacco di altre cose, è migliorato, ma lo sfarfallio non ha aiutato. Ha cominciato a guardare. Si è scoperto che lo sfarfallio era solo alla fine del nastro e quindi con scene luminose. Prendendo un multimetro, ho misurato la tensione all'inizio, al centro e alla fine del nastro e ho indovinato la causa dello sfarfallio: all'inizio del nastro era 4,9 V (sì, l'alimentatore cinese fornisce una tensione con una deviazione, questo non è significativo), a metà 4.5 alla fine 4.22 - La caduta di tensione è troppo significativa, ho dovuto risolvere il problema semplicemente - a metà del nastro ho portato l'alimentazione dall'alimentatore, il filo si è acceso dietro la TV . Ha aiutato immediatamente, qualsiasi sfarfallio si è fermato del tutto.

Catturare un'immagine con una webcam
La prima versione di prova per l'esecuzione dell'idea e la sua visualizzazione è stata scelta catturando un'immagine tramite una webcam) era simile a questa:

La bassa resa cromatica e l'elevata latenza hanno mostrato che questa implementazione non poteva essere utilizzata in alcun modo.

Catturare un'immagine tramite HDMI

Nel processo di ricerca delle possibili opzioni, il seguente schema è stato scelto come il più affidabile e di bilancio:

  • Il segnale da tutti i dispositivi viene inviato a uno switch HDMI 5in-1out che supporta HDCP
  • Il segnale di uscita viene inviato a uno splitter HDMI 1in-2out, che non solo supporta HDCP, ma lo disattiva anche in uscita (grazie ai cinesi).
  • Uno dei segnali in uscita va alla TV
  • L'altra uscita va al convertitore da HDMI a AV
  • Il segnale S-Video va alla casella di acquisizione ICONBIT
  • La scatola di acquisizione si collega all'HTCP sempre funzionante tramite USB, che è collegato al controller del nastro Arduino sulla TV.

Inizialmente, sembra selvaggio e simile alle stampelle, ma:

  • Funziona.
  • Il tutto è totale, ordinare dalla Cina mi è costato 3-4 mila rubli.

Perché non ho usato una scheda di acquisizione HDMI? È semplice: l'opzione più economica e conveniente è Blackmagic Intensity Shuttle, ma non può funzionare con segnale 1080p/60fps, solo 1080p/30fps, il che non è accettabile, perché. Non volevo abbassare il framerate per poter catturare l'immagine. + questo caso costa circa 10 mila. rubli. - che non è economico con un risultato sconosciuto.

Le perdite nella conversione da HDMI a S-video sono trascurabili per l'acquisizione del colore con una risoluzione di retroilluminazione a LED 46x26.

Inizialmente, ho provato a utilizzare EasyCap per acquisire S-video (ha molte varianti cinesi), ma la linea di fondo è che il chip utilizzato è estremamente scadente e non puoi lavorarci usando openCV.

L'unico aspetto negativo è che il segnale di uscita S-Video conteneva barre nere ai bordi che tagliano il contenuto reale (circa 2-5%), ho tagliato l'immagine in uscita dalla scheda di acquisizione per rimuovere queste barre, la perdita dell'immagine in quelle zone in pratica non ha influito sul risultato.

Morbido
Per me, questa è stata la parte più interessante, perché. Non mi piace molto fare casino con i ferri.

Per catturare l'immagine, ho usato openCV e in particolare il suo wrapper CV .NET emgu.

Ho anche deciso di applicare diverse tecniche di post-elaborazione e preparazione delle immagini prima di passare l'elenco dei colori al controller.

Processo di elaborazione del telaio
1. Ricezione di un fotogramma catturato
2. Ritaglia la cornice per eliminare le strisce nere
Tutto è semplice qui:
frame.ROI = new Rectangle(8, 8, frame.Width - 8, frame.Height - 18 - 8);
Ritagliamo 8 pixel dall'alto, 8 da destra e 18 dal basso (non c'è una striscia a sinistra)
3. Ridimensiona la cornice alla risoluzione della retroilluminazione, non è necessario che portiamo con noi un'immagine sana
Niente di complicato, lo facciamo usando openCV:
frame.Resize(LedWidth - 2*LedSideOverEdge,
LedHeight - LedBottomOverEdge - LedTopOverEdge,
INTER.CV_INTER_LINEARE);
Il lettore attento noterà un'abbondanza di variabili. Il fatto è che la cornice della mia TV è abbastanza grande, occupa 1 LED ai lati, 1 in alto e 3 in basso, quindi il ridimensionamento viene fatto sui LED che si trovano direttamente di fronte al display, e integriamo gli angoli già in seguito . Durante il ridimensionamento, otteniamo solo i colori medi che i pixel del LED dovranno avere.
4. Mappatura dei LED dalla cornice ritagliata
Bene, anche qui tutto è semplice, passiamo stupidamente da ogni lato e riempiamo in sequenza una matrice di 136 valori con il colore dei LED. È successo così che al momento tutte le altre operazioni sono più facili da eseguire con un array di LED che con un frame, che è più difficile da elaborare. Inoltre, per il futuro, ho aggiunto il parametro "profondità" di acquisizione (numero di pixel dal bordo dello schermo, per mediare il colore del LED), ma nella configurazione finale si è rivelato migliore senza di esso.
5. Eseguire la correzione del colore (bilanciamento del bianco/bilanciamento del colore)
Le pareti dietro la TV sono in legno, il legno è giallo, quindi è necessario compensare il giallo.
var blue = 255.0f/(255.0f + blueLevelFloat)*pixelBuffer[k];
var green = 255.0f/(255.0f + greenLevelFloat)*pixelBuffer;
var red = 255.0f/(255.0f + redLevelFloat)*pixelBuffer;
In generale, inizialmente ho preso il bilanciamento del colore dai sorgenti di qualche editor open source, ma non ha cambiato il bianco (il bianco è rimasto bianco), ho cambiato un po' le formule, ho digitato e ho ottenuto esattamente quello che mi serviva: se il livello di la componente del colore è negativa (ho capito come - manca questo colore), quindi aggiungiamo la sua intensità e viceversa. Per le mie pareti ha funzionato: RGB(-30,5,85).

Nella correzione del colore, eseguo anche l'equalizzazione del livello del nero (il nero arriva a circa 13,13,13 in RGB) semplicemente sottraendo 13 da ciascun componente.

6. Eseguire la desaturazione (ridurre la saturazione dell'immagine)
Nel setup finale non utilizzo la desaturazione, ma ad un certo punto potrebbe essere necessaria, infatti rende i colori più "pastello", come l'Ambilight di Filippo. Non darò il codice, convertiamo semplicemente da RGB -> HSL, riduciamo la componente di saturazione (saturazione) e torniamo già a RGB.
7. Sfarfallio
Succede solo che l'immagine in ingresso "trema" - questa è una conseguenza della conversione in un segnale analogico, come credo. All'inizio ho provato a decidere a modo mio, poi ho esaminato i sorgenti del filtro Defliker utilizzato in VirtualDub, l'ho riscritto in C# (era in C++), mi sono reso conto che non funziona, perché è un'impressione tale che lotta con lo sfarfallio tra i fotogrammi, alla fine ho combinato la mia soluzione e questo deflettore ha ottenuto qualcosa di strano, ma funziona meglio del previsto. Il deflettore originale funzionava solo con l'intensità dell'intero frame, ne ho bisogno per ogni LED separatamente. Il deflicker originale ha confrontato la variazione di intensità come somma, mi piace confrontare meglio la lunghezza del vettore di colore, il deflicker originale ha confrontato il delta della variazione di intensità rispetto al fotogramma precedente, questo non si adatta e l'ho rifatto per il valore medio dell'intensità all'interno della finestra dei frame precedenti. E tante altre piccole cose, a seguito delle quali poco è rimasto dello sfarfallio iniziale.
L'idea principale: in base all'intensità media dei frame precedenti, modificare il frame corrente se la sua intensità non è superiore a una certa soglia (ho questa soglia nel setup finale 25), se la soglia viene superata, la finestra viene ripristinata senza modifiche.
Codice leggermente modificato (per leggibilità fuori contesto) del mio deflicker:
Array.Copy(_leds, _ledsOld, _leds.Length); per (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; ) // Calcola il fattore di regolazione per il led corrente. scala variabile = 1,0; int r, g, b; if (ledChange) ( per (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) ( scala = 1.0f/((media+lumSum)/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 >massimo) massimo = g; se (b > max) max = b; doppia s; se (scala*max > 255) s = 255,0/max; altrimenti s = scala; r = (int)(s*r); g = (int) (s*g); b = (int) (s*b); // mantieni l'evidenziazione doppia k; if (sr > _lv) ( k = (sr - _lv)/(doppio) (255 - _lv); r = (int) ((k*sr) + ((1.0 - k)*r)); ) if ( sg > _lv) ( k = (sg - _lv)/(doppio) (255 - _lv); g = (int) ((k*sg) + ((1.0 - k)*g)); ) if (sb > _lv) ( k = (sb - _lv)/(doppio) (255 - _lv); b = (int) ((k*sb) + ((1.0 - k)*b)); ) _leds[i] = Colore .Da Argb(r, g, b); ) /* Fase di rammollimento temporale. */ if (ledChange || _softening == 0) continua; 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 = _led[i].R; g = _led[i].G; b = _led[i].B; totale; se (diffR< _softening) { if (diffR >(_ammorbidimento >> 1)) ( sum = _leds[i].R + _leds[i].R + _ledsOld[i].R; r = sum/3; ) ) if (diffG< _softening) { if (diffG >(_ammorbidimento >> 1)) ( sum = _leds[i].G + _leds[i].G + _ledsOld[i].G; g = sum/3; ) ) if (diffB< _softening) { if (diffB >(_ammorbidimento >> 1)) ( sum = _leds[i].B + _leds[i].B + _ledsOld[i].B; b = sum/3; ) ) _leds[i] = Color.FromArgb(r, g, b); )
Sia _leds un array di LED della classe Color, _ledsOld siano i valori del frame prima della conversione, LedLumWindow sia la larghezza della finestra dei frame precedenti, per stimare la variazione media di intensità, nel setup finale avevo una finestra di 100, che è di circa 30 fotogrammi al secondo equivale a 3 secondi. _lumData - matrice di valori di intensità dei frame precedenti.

Alla fine, questo meccanismo ha dato all'immagine effetti inaspettati ancora più piacevoli, è difficile descrivere come viene percepito visivamente, ma lo rende più scuro dove necessario e più luminoso dove necessario, come un contrasto dinamico. L'obiettivo del deflicker è ampio, non solo per eliminare lo sfarfallio, ma anche per bilanciare il colore di output in generale, sia nei componenti che nel tempo all'interno della finestra.

8. Livellamento dei LED da parte dei vicini.
In generale, nella configurazione finale, l'anti-aliasing non mi piaceva molto e l'ho disattivato, ma in alcuni casi può tornare utile. Qui facciamo semplicemente la media del colore di ciascun LED rispetto ai suoi vicini.
var smothDiameter = 2*_smoothRadius + 1; Array.Copy(_leds, _ledsOld, _leds.Length); per (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) ( pos = pos - _ledsOld.Length; ) r += _ledsOld.R; g += _ledsOld.G; b += _ledsOld.B; ) _leds[i] = Color.FromArgb(r/smothDiameter, g/smothDiameter, b/smothDiameter); )
9. Salviamo lo stato corrente in modo che il thread di invio del pacchetto lo afferri e lo invii al controller di retroilluminazione.
Ho deliberatamente separato il processo di elaborazione dei frame e di invio dei pacchetti al controller: i pacchetti vengono inviati una volta a un certo intervallo (io ho 40 ms) in modo che l'arduino canti per elaborare il precedente, perché più spesso di 30 ms si soffoca, quindi gira fuori che non dipendiamo direttamente dall'acquisizione del frame rate e non interferiamo con quel processo (e anche l'invio di un pacchetto perde tempo).
Un po' di arduino
Non puoi semplicemente prendere e inviare un pacchetto pesante all'arduino attraverso la serie, perché andrà oltre il buffer HardwareSerial predefinito e perderai la sua fine.
Questo si risolve semplicemente: impostiamo il valore della dimensione del buffer HardwareSerial su una dimensione sufficiente per contenere l'intero pacchetto inviato con una matrice di colori, per me è 410.
interfaccia utente
Il software stesso è stato implementato come servizio win, per poter configurare tutti i parametri + abilita/disabilita ho realizzato una Web UI che comunicava con il servizio tramite il WebService sul servizio. L'interfaccia finale sullo schermo del telefono cellulare si presenta così:
Risultato
Di conseguenza, il risultato ha soddisfatto tutte le aspettative e ora, quando gioco su console, mi immergo ancora di più nell'atmosfera del gioco.

Come risultato generale del lavoro, ho registrato un video con il lavoro dell'atmosfera secondo il mio schema:

Esempio di prova 1: Pacific Rim, scena della battaglia di Shanghai, questo film è buono per test e dimostrazioni, molte scene luminose e lampi, fulmini, ecc.:

Esempio di test 2: alcuni video MLP trapelati da YouTube funzionano molto bene per testare scene con colori brillanti (mi piacevano le strisce), così come scene dal ritmo veloce (alla fine del video puoi vedere gli effetti del ritardo, visibili solo nel video, quando questo non è evidente nella visualizzazione reale, ho provato a misurare il ritardo sul video - è risultato 10-20 ms):

E infine, vale la pena notare il consumo di risorse da HTPC:
HTPC Ho un ASRock Vision 3D su i3, il servizio di atmosfera consuma il 5-10% della CPU e 32 MB di RAM.

Grazie per l'attenzione, spero davvero che il mio articolo possa aiutare qualcuno.

Articoli correlati in alto