Come configurare smartphone e PC. Portale informativo

Controllo di potenti LED rgb. LED RGB e Arduino

Si illumina solo in rosso - R, verde - G, blu - B o bianco - CW, solitamente collegato direttamente alla sorgente corrente continua tensione 12 V o 24 V. Le strisce LED R G B, come quelle monocromatiche, possono anche essere collegate a un alimentatore CC collegando tra loro i pin R, G e B.

Ma in questo caso si perderà l’opportunità di attuarlo. effetti di colore illuminazione, per la quale è stato creato il nastro. Pertanto, quando si installano strisce LED colorate, di solito viene installato un controller elettronico nel circuito aperto tra l'alimentatore e la striscia. Ti permette di farlo Modalità automatica modificare il colore e la luminosità del nastro in modalità dinamica come specificato dal telecomando telecomando programma.

Nella foto è mostrato uno schema elettrico per collegare una striscia LED R G B ad una rete a 220 V. L'alimentatore (adattatore) converte Tensione CA 220 V DC tensione 12 V, che viene fornita al controller R G B tramite due fili, rispettando la polarità. È collegato al controller tramite quattro fili in conformità con le marcature Striscia LED. Per facilitare l'installazione e la riparazione Illuminazione a LED I nodi sono collegati tra loro tramite connettori.

Circuito elettrico del LED R G B LED SMD-5050

Per collegare, e ancor più riparare, una striscia LED RGB a livello professionale, è necessario capirne il funzionamento e conoscere il circuito elettrico e il pinout dei LED utilizzati nelle strisce. La foto sotto mostra un frammento di una striscia LED R G B con stampato lo schema elettrico per i cristalli LED.

Come si può vedere nello schema, i cristalli del LED non sono collegati elettricamente tra loro. Tre cristalli multicolori in un alloggiamento LED formano una triade. Grazie a questo design, controllando singolarmente la luminosità di ciascun cristallo, è possibile ottenere un numero infinito di colori del bagliore dei LED. I display si basano su questo principio di gestione del colore. telefono cellulare, navigatori, fotocamere, monitor di computer, TV e molti altri prodotti.

Le caratteristiche tecniche del LED SMD-5050 sono riportate alla pagina del sito “Manuale dei LED SMD”.

Circuito elettrico della striscia LED R G B su LED SMD-5050

Avendo compreso il design del LED, è facile comprendere il design della striscia LED. Nella parte superiore dell'immagine c'è una fotografia di una sezione funzionante della striscia LED R G B, e in basso c'è il suo circuito elettrico.


Come si può vedere dal diagramma, lo stesso cuscinetti di contatto Le strisce LED situate sui lati destro e sinistro sono collegate elettricamente direttamente tra loro. Pertanto, è possibile fornire tensione di alimentazione al nastro da entrambe le estremità e alla sezione successiva del nastro quando è esteso.

I cristalli LED VD1, VD2 e VD3 dello stesso colore luminoso sono collegati in serie. Per limitare la corrente, in ciascuno dei circuiti di colore sono installati resistori di limitazione della corrente. Due di loro hanno una potenza nominale di 150 ohm e uno di 300 ohm, in una catena di cristallo rosso. Viene installato un resistore di valore maggiore per equalizzare la luminosità di tutti i colori, tenendo conto dell'intensità della radiazione proveniente dal cristallo LED e della diversa sensibilità cromatica dell'occhio umano ai diversi colori.

Come tagliare a pezzi la striscia LED

Come probabilmente hai già capito, la striscia LED RGB di qualsiasi lunghezza (questo vale anche per le strisce monocromatiche) è costituita da brevi segmenti indipendenti che rappresentano un prodotto finito. È sufficiente applicare la tensione di alimentazione ai cuscinetti di contatto e il nastro emetterà luce. Per ottenere un pezzo di nastro della lunghezza richiesta, le sezioni elementari vengono collegate tra loro secondo la marcatura delle lettere.

Tipicamente il nastro viene prodotto in una lunghezza di cinque metri. Se necessario, può essere accorciato tagliando trasversalmente lungo la linea tracciata al centro dei cuscinetti di contatto tra i segni, a volte in questo punto viene inoltre applicata un'immagine simbolica delle forbici. A volte è necessario tagliare il nastro per installarlo ad angolo. In questo caso, i contatti tagliati con lo stesso nome sono collegati tra loro mediante saldatura con pezzi di filo.

Modi per controllare il colore del bagliore
Strisce LED RGB

Esistono due metodi di controllo modalità colore funzionamento della striscia LED R G B, tramite tre interruttori o un dispositivo elettronico.

Il principio di funzionamento del controller più semplice sugli interruttori

Diamo un'occhiata al principio di funzionamento del controller più semplice, basato su interruttori meccanici. Come interruttore per controllo manuale utilizzando il nastro RGB luminoso, è possibile utilizzare tre tasti interruttore a muro, progettato per collegare lampadari e lampade alla rete domestica 220 V. Schema elettrico le connessioni appariranno così.


I resistori R1-R3 servono a limitare la corrente e possono essere installati ovunque nel circuito di alimentazione per cristalli dello stesso colore. Utilizzando questo schema, è possibile collegare nastri RGB progettati per una tensione di alimentazione sia di 12 V che di 24 V.

Come si può vedere dallo schema, il terminale positivo dell'alimentatore è collegato direttamente al terminale positivo della strip LED, comune ai LED di tutti i colori, e il terminale negativo è collegato ai contatti R, G e B della striscia attraverso un interruttore. Usando un interruttore di tre interruttori, puoi ottenere sette colori di bagliore del nastro. Questo è il più semplice, affidabile e modo economico controllare i colori luminosi del nastro RGB.

Principio di funzionamento del controllore elettronico

Per ottenere un numero infinito di colori luminosi del nastro R G B e in modalità automatica, modificare dinamicamente il valore flusso luminoso, invece degli interruttori che usano unità elettrica, che si chiama controller RGB. È compreso nel circuito aperto tra l'alimentatore e il nastro R G B. In genere, il kit controller include un telecomando che consente di controllarne a distanza la modalità operativa e, di conseguenza, la modalità di illuminazione della striscia LED.

Poiché il funzionamento della striscia LED richiede solitamente una tensione continua di 12 V (meno spesso 24 V), collegarla alla rete corrente alternata 220 V utilizza un alimentatore o un adattatore che converte la tensione alternata in tensione di corrente continua, che viene fornita all'unità di controllo tramite una connessione staccabile.


Diamo un'occhiata al principio di funzionamento di un controller RGB utilizzando l'esempio del controller più semplice e più utilizzato, il modello LN-IR24. Si compone di tre unità funzionali: il controller di controllo RGB, tasti di accensione e chip sensore a infrarossi (IR). Il chip del controller è programmato con l'algoritmo operativo richiesto per la striscia LED. Il chip del controller è controllato da un segnale proveniente dal chip del sensore IR. Il sensore IR riceve un segnale di controllo quando si premono i pulsanti sul telecomando.

La tensione di alimentazione alla striscia LED è controllata tramite tre transistor ad effetto di campo che funzionano in modalità commutazione. Quando arriva un segnale dal chip del controller Controllo RGB al gate del transistor, la sua giunzione drain-source si apre e la corrente inizia a fluire attraverso i LED, a seguito dei quali iniziano a emettere luce. La luminosità dei LED viene controllata mediante variazioni ad alta frequenza dell'ampiezza dell'impulso della tensione di alimentazione fornita (modulazione dell'ampiezza dell'impulso).

Selezione di un alimentatore e di un controller per il nastro RGB

L'alimentatore per la striscia LED RGB deve essere selezionato in base alla tensione di alimentazione e al consumo di corrente. Le più popolari sono le strisce LED per una tensione CC di 12 V. Il consumo di corrente nei circuiti R, G e B può essere trovato sull'etichetta o determinato in modo indipendente utilizzando i dati di riferimento per i LED presentati nella tabella alla pagina del sito Tabella di riferimento dei parametri dei più diffusi LED SMD. È consuetudine indicare il consumo energetico di un nastro per metro della sua lunghezza.

Diamo un'occhiata a un esempio di come determinare il consumo energetico Strisce RGB tipo sconosciuto per una tensione di alimentazione di 12 V. Ad esempio, è necessario selezionare un alimentatore e un controller per una striscia RGB lunga 5 m.La prima cosa da fare è determinare il tipo di LED RGB installati sulla striscia. Per fare ciò basta misurare la dimensione dei lati del LED. Diciamo che risulta essere 5 mm × 5 mm. Dalla tabella determiniamo che questa dimensione è per un LED del tipo LED-RGB-SMD5050. Successivamente è necessario contare il numero di alloggiamenti LED per metro di lunghezza. Diciamo che sono 30 pezzi.

Un cristallo LED consuma una corrente di 0,02 A, tre cristalli sono posizionati in una custodia, quindi il consumo totale di corrente di un LED sarà 0,06 A. Ci sono 30 LED per metro di lunghezza, moltiplicare la corrente per la quantità 0,06 A × 30 = 1,8 A. Ma i diodi sono collegati tre in serie, il che significa che il consumo di corrente reale di un metro di nastro sarà tre volte inferiore, cioè 0,6 A. La lunghezza del nostro nastro è di cinque metri, quindi il totale il consumo di corrente sarà 0,6 A × 5 m = 3 A.

I calcoli hanno dimostrato che per alimentare un nastro RGB lungo cinque metri, è necessario un alimentatore o un adattatore di rete con una tensione di uscita CC di 12 V e una corrente di carico di almeno 3 A. L'alimentatore deve avere una riserva di corrente, quindi un È stato selezionato il modello di adattatore APO12-5075UV, progettato per una corrente di carico fino a 5 A. Quando si sceglie un alimentatore, è necessario tenere conto che il suo connettore di uscita deve corrispondere al connettore RGB del controller.

Quando si sceglie un controller, è necessario tenere conto del fatto che il consumo di corrente in un singolo canale R, G o B sarà tre volte inferiore. Pertanto, nel nostro caso, dobbiamo prendere un controller progettato per una tensione di 12 V e un massimo corrente consentita il carico per canale non è inferiore a 3 A/3=1 A.

Ad esempio, il controller LN-IR24B R G B soddisfa questi requisiti. È progettato per una corrente di carico fino a 2 A (è possibile collegare fino a 10 metri di nastro RGB). Permette di accendere e spegnere il nastro, selezionare 16 colori statici e 6 modalità dinamiche da remoto, da una distanza massima di otto metri, utilizzando un elegante telecomando. La tensione di alimentazione al controller viene fornita dall'alimentatore o scheda di rete utilizzando il jack CC coassiale. Il controller RGB LN-IR24B è leggero e ha dimensioni complessive ridotte.


Aspetto Nella foto è mostrato il kit per illuminazione strip LED preparato in base ai risultati del calcolo. Il kit comprende un alimentatore modello APO12-5075UV, controller R G B LN-IR24B con telecomando e strip LED R G B.


Se devi collegare più strisce RGB da cinque metri, avrai bisogno di un controller più potente, ad esempio CT305R, che ti consente di fornire corrente fino a 5 A ai LED dello stesso colore. Questo controller può essere controllato non solo utilizzando un telecomando, ma anche tramite una rete da un computer, trasformando così l'illuminazione RGB in colore e accompagnamento musicale durante l'ascolto della musica.

Non è accettabile collegare in serie strisce LED lunghe più di cinque metri, poiché i percorsi di corrente della striscia stessa hanno una sezione ridotta. Tale connessione porterà ad una diminuzione del flusso luminoso su una sezione del nastro che supera la lunghezza di cinque metri. Se è necessario collegare più strisce LED da cinque metri, i conduttori di ciascuna di esse sono collegati direttamente al controller.

In potenti modelli di controller per la connessione dispositivi esterni Vengono utilizzate morsettiere in cui i fili vengono fissati con una vite. Accanto ai terminali devono essere presenti dei contrassegni. INPUT (IN) significa ingresso; a questi terminali è collegato un alimentatore esterno dal quale viene fornita la tensione di alimentazione per il controller stesso e per le strisce LED. La polarità è indicata ulteriori segni"+" e "-". Il mancato rispetto della corretta polarità durante il collegamento dell'alimentazione può danneggiare il controller.

Il gruppo di terminali per il collegamento del nastro RGB è contrassegnato dalla dicitura OUTPUT (OUT) e significa uscita. I colori sono indicati dalle lettere R (rosso), G (verde), B (blu) e V+ (questo è il filo comune di qualsiasi altro colore). Di solito anche i fili colorati provengono dal nastro ed è sufficiente collegarli semplicemente da un colore all'altro.

Noto che puoi collegare con successo una striscia LED monocromatica a qualsiasi controller RGB che corrisponda alla corrente. Quindi sarà possibile utilizzare il telecomando per modificare la modalità del suo bagliore: accenderlo, spegnerlo, modificare la luminosità, impostare una modalità dinamica per modificare la luminosità.

Continuiamo a padroneggiare il PWM, questa volta per il controllo Colore RGB GUIDATO.

In sostanza, un LED RGB combina tre LED convenzionali: rosso, verde e blu.

Di conseguenza, un LED RGB ha 4 gambe: una gamba e una gamba comune (di solito la più lunga) vengono utilizzate per controllare ciascun colore. Sia il catodo (-) che l'anodo (+) possono essere comuni. Lo schema mostra un esempio di circuito con anodo comune.

È interessante notare che mescolando questi 3 colori puoi ottenere quasi tutti gli altri colori. Se accendi tutti e 3 i LED contemporaneamente, ottieni Colore bianco.

Ora per quanto riguarda l'implementazione, ho ottenuto un LED con un catodo comune, corrente nominale, che secondo la scheda tecnica era 20 mA. C'è però una piccola sfumatura: ogni colore ha la propria soglia di accensione. Ad esempio, per un LED rosso, 20 mA corrispondevano a una tensione di 2,1 V, verde e blu a una tensione di 3,2 V. In generale, la gamba del microcontrollore deve resistere a questa corrente, quindi è possibile collegarla in sicurezza al microcontrollore tramite resistori di limitazione della corrente.
l'ho usato transistor pnp, tuttavia, non impongo questa idea a nessuno.

Atmega8 ha 3 canali PWM: due canali sul timer1 (pin PB.1 - OCR1A, PB.2 - OCR1B) e uno sul timer2 (pin PB.3 - OCR2). Regolando il riempimento PWM, regoliamo la tensione sul LED e, di conseguenza, la sua luminosità.

Noi creiamo nuovo progetto, imposta il timer2.

Poiché OCR2 è a 8 bit e OCR1 è a 10 bit, il valore massimo di OCR2=0xFF(255) e OCR1A/B=0x3FF(1023), ovvero 4 volte di più. Teniamo conto di questa caratteristica, quindi, affinché i canali siano regolati equamente, impostiamo la frequenza del timer su 4 volte più alta. Rispettivamente, massima luminosità per OCR2 sarà a 0xFF e per OCR1 a 0x3FF.

Configuriamo le gambe PB1-PB3 come uscita. Aggiungiamo il codice al ciclo principale del programma che accende gradualmente il rosso da 0 a 255, quindi lo spegne gradualmente da 255 a 0.

mentre(OCR1A<0x3FF) { OCR1A++; delay_ms(2); } while(OCR1A>0x00) ( OCR1A--; ritardo_ms(2); )

Risultato:

Se devi ottenere un determinato colore, ad esempio il viola, aprine alcuni redattore grafico, ad esempio Paint.net, vai sulla tavolozza, fai clic sul colore che ti piace, a destra, dove dice RGB, verrà visualizzato valori numerici R=255, B=220.

Ho il canale R su OCR2, quindi sentiti libero di scrivere 0xFF(255) in OCR2, canale B su OCR1A, ma poiché... il valore massimo è 1023, quindi ricalcoliamo proporzionalmente:

(220*1023)/255=882 quindi lo inseriamo tranquillamente in OCR1A, il risultato è abbastanza simile.

Questo articolo tratta le nozioni di base sull'utilizzo di un LED RGB (rosso verde blu) con un Arduino.

Usiamo la funzione analogWrite per controllare il colore RGB del LED.

A prima vista, i LED RGB sembrano proprio dei normali LED, ma in realtà hanno tre LED all'interno: uno rosso, uno verde e sì, uno blu. Controllando la luminosità di ciascuno, puoi controllare il colore del LED.

Cioè, regoleremo la luminosità di ciascun LED e otterremo colore desiderato l'output è come se fosse la tavolozza di un artista o come se stessi regolando le frequenze sul tuo lettore. Per questo è possibile utilizzare resistori variabili. Ma lo schema risultante sarà piuttosto complesso. Fortunatamente Arduino ci offre la funzione analogWrite. Se utilizziamo i pin contrassegnati “~” sulla scheda, possiamo regolare la tensione fornita al LED corrispondente.

Nodi richiesti

Per realizzare il nostro piccolo progetto, avremo bisogno di:

1 LED RGB 10 mm

3 resistori 270 Ω (strisce rosse, viola, marroni). È possibile utilizzare un resistore con una resistenza fino a 1 kOhm, ma non dimenticare che all'aumentare della resistenza, il LED inizia a brillare meno intensamente.


Le sei cifre del numero corrispondono a tre coppie di numeri; la prima coppia è la componente rossa del colore, le due cifre successive sono la componente verde e l'ultima coppia è la componente blu. Cioè l'espressione #FF0000 corrisponde al colore rosso, poiché questa sarà la luminosità massima del LED rosso (FF è 255 V sistema esadecimale), e le componenti rossa e blu sono pari a 0.

Prova ad accendere un LED utilizzando, ad esempio, una tonalità indaco: #4B0082.

Le componenti rossa, verde e blu dell'indaco sono rispettivamente 4B, 00 e 82. Possiamo usarli all'interno della funzione "setColor" con riga successiva codice:

setColor(0x4B, 0x0, 0x82); // indaco

Per i tre componenti, utilizziamo una notazione che prefissa ciascuno un carattere "0x" iniziale.

Mentre giochi con diverse tonalità del LED RGB, non dimenticare di impostare il "ritardo" dopo averle utilizzate.

PWM e Arduino

Latitudinale modulazione degli impulsi(PWM (PWM in inglese)) è uno dei metodi di gestione dell'energia. Nel nostro caso, il PWM viene utilizzato per controllare la luminosità di ogni singolo LED.

La figura seguente mostra schematicamente il segnale proveniente da uno dei pin PWM di Arduino.


Ogni 1/500 di secondo l'uscita PWM genera un impulso. La lunghezza di questo impulso è controllata dalla funzione "analogWrite". Cioè, "analogWrite(0)" non genererà alcun impulso, ma "analogWrite(255)" genererà un segnale che durerà fino all'inizio di quello successivo. Cioè, sembrerà che venga inviato un impulso continuo.

Quando specifichiamo un valore compreso tra 0 e 255 all'interno della funzione analogWrite, generiamo un impulso di una certa durata. Se la lunghezza dell'impulso è del 5%, forniremo il 5% della potenza massima disponibile all'uscita Arduino specificata e sembrerà che il LED non sia alla massima luminosità.

Lascia i tuoi commenti, domande e condividi esperienza personale sotto. Spesso dalle discussioni nascono nuove idee e progetti!

Per controllare questi dispositivi viene utilizzato un controller RGB. Ma oltre a lui, dentro l'anno scorso Viene utilizzata la scheda Arduino.

Arduino - principio di funzionamento

Scheda Arduino

Una scheda Arduino è un dispositivo su cui è installato un microcontrollore programmabile. Connesso ad esso vari sensori, controlli o encoder e, secondo un dato schizzo (programma), la scheda controlla motori, LED e altro attuatori, incluse altre schede Arduino che utilizzano il protocollo SPI. Il dispositivo può essere controllato tramite a distanza, modulo bluetooth, HC-06, Wi-Fi, ESP o Internet e pulsanti. Alcune delle schede più popolari sono Arduino Nano e ArduinoUno, E ArduinoPro Mini – dispositivo basato sul microcontrollore ATmega 328


Aspetto di Arduino Pro Mini
Aspetto di Arduino Uno
Aspetto di Arduino micro

La programmazione viene effettuata in ambiente Arduino con open codice sorgente, installato su computer normale. I programmi vengono scaricati tramite USB.

Il principio del controllo del carico tramite Arduino


Controllo Arduino

La scheda ha molte uscite, sia digitali, con due stati: acceso e spento, sia analogiche, controllate tramite un controller PWM con una frequenza di 500 Hz.

Ma le uscite sono progettate per una corrente di 20 - 40 mA con una tensione di 5 V. Ciò è sufficiente per alimentare un indicatore LED RGB o un modulo LED a matrice 32x32 mm. Per più carico potente questo non è abbastanza.

Per soluzioni problema simile in molti progetti è necessario collegare dispositivi aggiuntivi:

  • Relè. Oltre ai singoli relè con una tensione di alimentazione di 5 V, esistono interi gruppi con importi diversi contatti, nonché con avviatori integrati.
  • Amplificatori basati su transistor bipolari. La potenza di tali dispositivi è limitata dalla corrente di controllo, ma è possibile assemblare un circuito da più elementi o utilizzare un gruppo di transistor.
  • Transistor ad effetto di campo o MOSFET. Possono controllare carichi con correnti di diversi ampere e tensioni fino a 40 - 50 V. Quando si collega il mosfet a PWM e un motore elettrico o altro carico induttivo, è necessario un diodo protettivo. Quando si collega a LED o lampade a LED, ciò non è necessario.
  • Schede di espansione.

Collegamento della striscia LED ad Arduino


collegare la striscia LED ad Arduino

Opinione di un esperto

Alessio Bartosh

Specialista nella riparazione e manutenzione di apparecchiature elettriche ed elettroniche industriali.

Fai una domanda ad un esperto

Arduino Nanos può controllare molto più che semplici motori elettrici. Vengono utilizzati anche per le strisce LED. Ma poiché la corrente di uscita e la tensione della scheda non sono sufficienti connessione diretta strisce con LED collegati, è necessario installare dispositivi aggiuntivi tra il controller e la striscia LED.

Tramite relè


Collegamento tramite relè

Il relè è collegato al dispositivo tramite un'uscita digitale. La striscia controllata con esso ha solo due stati: acceso e spento. Per controllare il nastro rosso-blu-verde sono necessari tre relè. La corrente che un tale dispositivo può controllare è limitata dalla potenza della bobina (una bobina a bassa potenza non è in grado di chiudersi grandi contatti). Per connettere più potenza vengono utilizzati gruppi relè.

Utilizzando un transistor bipolare


Collegamento tramite transistor

Per amplificare la corrente e la tensione di uscita, è possibile utilizzare transistor bipolare. Viene selezionato in base alla corrente e alla tensione di carico. La corrente di controllo non deve essere superiore a 20 mA, pertanto viene fornita tramite una resistenza di limitazione della corrente da 1 a 10 kOhm.

È meglio usare un transistor n-p-n con un emettitore comune. Per un guadagno maggiore, viene utilizzato un circuito con più elementi o un gruppo transistor (microcircuito amplificatore).

Utilizzando un transistor ad effetto di campo

Oltre a quelli bipolari, servono per controllare le bande transistor ad effetto di campo. Un altro nome per questi dispositivi è MOS o transistor MOSFET.

Un tale elemento, a differenza di quello bipolare, non è controllato dalla corrente, ma dalla tensione al gate. Ciò consente alla bassa corrente di gate di pilotare grandi correnti di carico, fino a decine di ampere.

L'elemento è collegato tramite una resistenza limitatrice di corrente. Inoltre, è sensibile al rumore, quindi l'uscita del controller deve essere collegata a terra con una resistenza da 10 kOhm.

Utilizzo delle schede di espansione


Collegamento ad Arduino utilizzando schede di espansione

Oltre a relè e transistor, vengono utilizzati blocchi già pronti e schede di espansione.

Potrebbe essere Wi-Fi o Bluetooth, un driver di controllo del motore come il modulo L298N o un equalizzatore. Sono progettati per controllare i carichi potere diverso e tensione. Tali dispositivi sono a canale singolo - possono controllare solo una striscia monocromatica e multicanale - progettati per dispositivi RGB e RGBW, nonché strisce con LED WS 2812.

Programma di esempio


Arduino e striscia LED

Le schede Arduino sono in grado di controllare in anticipo le strutture LED dati programmi. Le loro librerie possono essere scaricate dal sito Web ufficiale, trovate su Internet o scritte tu stesso un nuovo schizzo (codice). Puoi assemblare un dispositivo del genere con le tue mani.

Ecco alcune opzioni per l'utilizzo di tali sistemi:

  • Controllo dell'illuminazione. Utilizzando un sensore di luminosità, la luce nella stanza si accende sia immediatamente che con un aumento graduale della luminosità al calare del sole. L'accensione può avvenire anche via wi-fi, con integrazione nel sistema" casa intelligente» o collegamento telefonico.
  • Accendere la luce sulle scale o in un lungo corridoio. L'illuminazione a LED di ogni gradino separatamente sembra molto bella. Quando un sensore di movimento è collegato alla scheda, la sua attivazione provocherà l'accensione sequenziale e ritardata dell'illuminazione dei gradini o del corridoio, mentre lo spegnimento di questo elemento porterà al processo inverso.
  • Musica a colori. Sottomettendosi a ingressi analogici segnale sonoro attraverso i filtri, il risultato è un'installazione di colori e musica.
  • Modifiche informatiche. Con l'aiuto di sensori e programmi appropriati, il colore dei LED può dipendere dalla temperatura o dal carico della CPU o memoria ad accesso casuale. Questo dispositivo funziona utilizzando il protocollo dmx 512.
  • Controllo della velocità delle luci di marcia tramite un encoder. Installazioni simili assemblato sui microcircuiti WS 2811, WS 2812 e WS 2812B.

Istruzioni video

Questo articolo discuterà i meccanismi pratici per formare e modificare i parametri del colore Lampada a LED, i problemi che si presentano e i modi per risolverli. Tutto ciò che viene descritto nell'articolo è la mia esperienza di lavoro con la luce durante la realizzazione del progetto.

Come si forma il colore utilizzando i LED.

Cominciamo dall'inizio: determiniamo come si forma il colore, in generale, nella vita (tutti lo sanno, ma per ogni evenienza...). Qualsiasi sfumatura di colore si forma utilizzando tre colori primari. Nel nostro caso, quando il colore è formato da sorgenti luminose (sintesi additiva) è:
— R rosso rosso
— Sol verde verde
— B blu

Combinando solo tre colori primari in proporzioni diverse è possibile ottenere qualsiasi sfumatura di colore. Probabilmente tutti hanno visto la seguente immagine: trasmette l'essenza di quanto sopra

Di conseguenza, affinché una lampada possa creare qualsiasi sfumatura di colore, deve avere anche almeno tre fonti di colori primari. In pratica questo è vero. Ad esempio, qualsiasi LED RGB è, in effetti, tre LED separati (cristalli che emettono) in un unico alloggiamento.

Per controllare un LED RGB, il microcontrollore deve controllare separatamente ciascuno dei tre colori primari e averne tre uscite separate per ogni colore.

Controllando i LED con segnale digitale(abilitato/disabilitato) puoi ottenere un totale di 7 colori:
— tre colori primari (quando è illuminato un solo colore primario)
— tre colori compositi (quando sono illuminati due colori primari)
— colore bianco (tutti e tre i colori primari sono illuminati)

Per ottenere una varietà di sfumature di colore, è necessario controllare l'intensità del bagliore di ciascuno dei colori primari. Per controllare l'intensità del bagliore viene utilizzato modulazione dell'ampiezza dell'impulso segnale digitale (PWM o PWM). Modificando il ciclo di lavoro del segnale, si crea per l'occhio l'illusione di cambiare la luminosità del LED. Per evitare che l'occhio si accorga della commutazione del LED, la frequenza del segnale PWM deve essere almeno 50-60Hz.

Poiché nell'apparecchio di illuminazione sono presenti tre sorgenti di radiazione, l'apparecchio di illuminazione deve essere controllato di conseguenza da tre segnali PWM R, G, B. Ciascun livello PWM (e la luminosità dell'apparecchio di illuminazione) rappresenta un determinato valore del ciclo di lavoro del segnale.

Molto spesso, il valore del ciclo di lavoro è specificato da un numero di dimensioni byte - 8 bit (e utilizzeremo un byte). Queste sono 256 gradazioni di ciascuno dei colori primari e 256*256*256=16777213 sfumature di colori in generale. In realtà, questo non è del tutto vero: di seguito ti dirò perché.

Da quanto sopra arriviamo alla conclusione che il MK deve generare tre segnali PWM per una lampada a LED con una frequenza superiore a 60 Hz e una risoluzione di 256 valori (8 bit).

Applicazione Microcontrollori AVR(come, in effetti, tutti gli altri) - questo non è un problema, poiché la maggior parte di essi dispone di un numero sufficiente di shaper PWM (timer) hardware a 8 bit, che, con un consumo minimo di risorse MK, possono fornire qualsiasi frequenza di generazione PWM, fino a decine di kHz. Nel caso di utilizzo di shaper PWM software, il numero di tali shaper può essere aumentato al numero di gambe libere del MK (la frequenza di generazione PWM, in questo caso, è possibile fino a diversi kilohertz).

Parametri di controlloLampada a LED.

Decidiamo i parametri del colore che vorremmo modificare. Poiché abbiamo tre valori del ciclo di lavoro per i colori primari R, G, B, sarebbe logico regolare questi tre parametri, ovvero l'intensità dei componenti rosso, verde e blu del colore. In pratica, questo non è molto il giusto approccio, in quanto non permette di scegliere comodamente il colore della nostra lampada. Ad esempio, per ridurre la luminosità della lampada lasciando lo stesso colore del bagliore. È necessario ruotare tre regolatori contemporaneamente e da diverse angolazioni. Infatti, ogni modifica (regolazione) della nostra lampada sembrerà come impostarla da zero. È molto più naturale regolare la luminosità (o qualche altro parametro) con un solo controllo.

In generale esistono molti sistemi di controllo (selezione del colore) per diverse applicazioni

Sistema RGBè uno di questi, con tre controlli per ciascuno dei colori primari, come descritto sopra.

SistemiXYZ, LABORATORIO e altri non sono molto adatti a noi.

Cambia (imposta) in modo molto naturale i parametri di illuminazione - Sistema HSB(e simili HSL, HSV). In HSB, la tavolozza dei colori è formata dall'impostazione significati diversi parametri di base:

Tinta(tonalità di colore). Impostato in gradi da 0 a 360. 0 – colore rosso. 120 – verde, 240 – blu. Tutto nel mezzo è una miscela di colori primari.
Useremo il valoreDimensione byte tonalità (da 0 a 255).
0 – colore rosso. 85 – verde, 170 – blu.

Saturazione(saturazione). Viene impostato come percentuale da 0 a 100. 100 è la saturazione massima del colore. Quando ridotto a zero, si tratta di una perdita di colore fino al grigio.
Utilizzeremo un valore di Saturazione di dimensioni in byte (da 0 a 255).

Luminosità(luminosità). Viene impostata in percentuale da 0 a 100. 100 è la luminosità massima del colore (ma non il bianco!). Quando ridotto a zero, si verifica una perdita di luminosità fino al nero.
Utilizzeremo un valore di luminosità di dimensioni in byte (da 0 a 255).

Se usi questo sistema quando regoli il colore, tutto risulta molto conveniente. Giriamo una manopola - cambiamo la tonalità del colore (rimanendo alla stessa luminosità), giriamo l'altra - cambiamo la luminosità (senza cambiare il colore) - fantastico! Ma il sistema presenta anche degli svantaggi. Il primo è che memorizzando valori in variabili di dimensioni byte, perdiamo alcune informazioni sul colore (ad esempio, per memorizzare tutte le possibili opzioni Per Tonalità di colore abbiamo bisogno di 768 valori e stiamo cercando di inserirli tutti in 256 valori). Il secondo - comunque, alla fine, valore finale dovrebbe essere dentro Sistema RGB per l'emissione di segnali PWM ai LED. E in terzo luogo, nel caso in cui sia necessaria qualche altra conversione, sarà molto più difficile farlo con il sistema HSB che con RGB.

Nel dispositivo AAL ho deciso di implementare varie trasformazioni nel seguente modo:
1 Le informazioni sul colore sono memorizzate in tre byte R_base,G_base,B_base(sistema RGB). Ho chiamato questo valore di base. Memorizza le informazioni sul colore senza perdite.
2 Per le trasformazioni viene utilizzato il valore del valore di trasformazione (shift). Spostare dimensione in byte.
3 Trasformazione richiesta viene eseguita nelle procedure corrispondenti, i cui dati iniziali sono il valore del colore di base R_base, R_base, R_base e il valore della corrispondente trasformazione Shift. In uscita otteniamo tre valori nel sistema RGB ( R_spostare,G_spostare,B_spostare), che vengono emessi ai LED sotto forma di segnali PWM.

Con questo schema, per noi è conveniente gestirlo vari parametri luce e salviamo nel modo più accurato possibile le informazioni sul colore iniziale (base).

Implementazione delle trasformazioni di colore in un microcontrollore.

Il problema con l'implementazione della gestione del colore su un microcontrollore è che la stragrande maggioranza delle conversioni richiede la moltiplicazione del byte per un fattore di conversione frazionario (un numero compreso tra 0 e 1).
Ad esempio, riducendo la luminosità della metà:
R_shift = R_base * 0,5
G_shift = G_base * 0,5
B_shift = B_base * 0,5

Con la moltiplicazione di numeri interi nei microcontrollori AVR tutto va bene (la moltiplicazione a 8 bit viene eseguita da un operatore in soli 2 cicli di clock - fino a 10 milioni di moltiplicazioni al secondo!), ma se passiamo a un sistema di numeri in virgola mobile, lo sarà un paio di ordini di grandezza più lento e molto macchinoso. Nei casi in cui sono necessari rapidi ricalcoli grande quantità valori, il microcontrollore semplicemente non riuscirà a tenere il passo.
Il problema con la divisione è ancora peggiore (questa è un'opzione per allontanarsi dalla moltiplicazione frazionaria): semplicemente non esiste l'hardware per questo. Implementazione del software anche la divisione è piuttosto complicata.

Idealmente, tutte le trasformazioni di colore dovrebbero essere implementate utilizzando la moltiplicazione di numeri interi, spostamenti di bit, addizione e sottrazione. Generalmente non è consigliabile utilizzare la divisione.
Questo è ciò che faremo ora!

Il problema della moltiplicazione per un coefficiente frazionario è risolto in modo molto semplice! Se utilizziamo un valore di dimensioni in byte (0 – 255) come coefficiente, prendendo valore massimo byte (255) per unità, puoi cavartela solo con la moltiplicazione di numeri interi.

0 ~ 0/255 = 0
10 ~ 10/255 = 0,04
128 ~ 128/255 = 0,5
255 ~ 255/255 = 1

Ora, l'esempio precedente sarebbe simile a questo:
R_shift = (R_base * 128) / 255
G_shift = (G_base * 128) / 255
B_shift = (B_base * 128) / 255

Dopo aver moltiplicato due valori a 8 bit (R_base*128), otteniamo un risultato a 16 bit (due byte). Scartando il byte basso e utilizzando solo il byte alto, dividiamo il valore per 256.
Dividendo per 256 , invece di quelli richiesti 255 , introduciamo un piccolo errore nel risultato. Nel nostro caso, quando il risultato viene utilizzato per generare luminosità utilizzando PWM, l'errore può essere trascurato, poiché non sarà visibile alla vista.

In assembler, l'implementazione di questo metodo di moltiplicazione per un coefficiente è elementare e non causerà alcuna difficoltà (solo un paio di operatori). Nelle lingue alto livello, è necessario fare attenzione che il compilatore non crei codice ridondante.

Passiamo alle trasformazioni stesse.

Permettetemi di ricordarvi che qualsiasi trasformazione comporta:
— colore di base specificato da tre variabili Base_R, Base_G, Base_B(dimensione in byte)
- fattore di conversione Spostare(dimensione in byte)

Risultato:
— colore “spostato”, sotto forma di tre valori R_shift, G_shift, B_shift(dimensione in byte)

Le formule seguenti possono sembrare strane, ma le ho scritte in modo tale che, in primo luogo, la sequenza delle azioni fosse visibile e, in secondo luogo, per semplificare il più possibile le azioni, riducendo tutto a moltiplicazioni, addizioni, sottrazioni e a 8 bit un po' spostato.

Luminosità (luminosità)

- la trasformazione più semplice.
A:
Shift=0 LED spento
Shift=255 Il LED si accende nel colore di base.
Tutti i valori di Shift intermedi rappresentano uno scurimento del colore di base.

R_shift = (R_base * Shift) / 256
G_shift = (G_base * Shift) / 256
B_shift = (B_base * Shift) / 256

* Ti ricordo che dividere per 256 significa semplicemente scartare il byte basso del risultato di una moltiplicazione intera di 2 byte.

Alleggerimento (Tinta)

- questo valore non è compreso nel sistema HSB, ma è comodo da utilizzare nelle regolazioni. La tinta è una sorta di continuazione della regolazione della luminosità sul bianco.
A:
Shift=0 – Il LED si accende nel colore base
Shift=255 – Il LED si illumina di bianco
Tutti i valori di Shift intermedi schiariscono il colore di base.

R_shift = (R_base*(255 - Shift)) / 256 + Shift
G_shift = (G_base*(255 - Shift)) / 256 + Shift
B_shift = (B_base *(255 - Shift)) / 256 + Shift

* il coefficiente (255 - Shift) può essere implementato con un'inversione di bit dell'operatore (ovviamente, a condizione che Shift sia Byte|Char)

Luminosità (Leggerezza)

- Anche questo valore non è compreso nel sistema HSB. La regolazione si effettua dal LED spento, passando per il colore base e fino al bianco.
A:
Shift=0 – Il LED è spento
Shift=128 – Il LED si accende nel colore base
Shift =255 – Il LED si illumina di bianco.

Implementato attraverso le due trasformazioni precedenti.
Con Shift< 128 применяем Luminosità c Maiusc(per Luminosità) = Maiusc*2
Con Shift >=128 applichiamo Tinta c Maiusc(per Tinta) = (Maiusc-128)*2

Saturazione(Saturazione)

- cromaticità - transizione dal grigio al colore
A:
Shift=0 – il LED si illumina di bianco con una luminosità pari al valore medio del colore base
Shift=255 – Il LED si accende nel colore base
Tutti i valori di Shift intermedi sono una “perdita” di colore.

Media_RGB= ((R_base + B_base)/2 + G_base) / 2

* più corretto, ovviamente, è (R_base + G_base + B_base)/3, ma devi dividere per 3, e questo non può essere fatto con uno spostamento

R_shift = (R_base * Shift) / 256 + (RGB_media * (255 - Shift)) / 256
G_shift = (G_base * Shift) / 256 + (RGB_media * (255 - Shift)) / 256
B_shift = (B_base * Shift) / 256 + (RGB_media * (255 - Shift)) / 256

Cambia tono (Tinta)

Cambiamento circolare nella tonalità del colore.
Trasformazione complessa che differisce in ciascuna delle tre zone del valore di spostamento
Ad esempio, se il colore di base è rosso, allora:
Shift=0 – Il LED si illumina di rosso
Shift=85 – Il LED si illumina di verde
Shift=170 – Il LED si illumina di blu
Shift=255 – Il LED si illumina di nuovo in rosso

Con Shift< 86:
Maiusc_a= Maiusc * 3
R_shift = (G_base * Shift_a) / 256 + (R_base * (255 - Shift_a)) / 256
G_shift = (B_base * Shift_a) / 256 + (G_base * (255 - Shift_a)) / 256
B_shift = (R_base * Shift_a) / 256 + (B_base * (255 - Shift_a)) / 256

Quando Maiusc > 85 e Maiusc< 171:
Maiusc_a= (Maiusc-85) * 3
R_shift = (B_base * Shift_a) / 256 + (G_base * (255 - Shift_a)) / 256
G_shift = (R_base * Shift_a) / 256 + (B_base * (255 - Shift_a)) / 256
B_shift = (G_base * Shift_a) / 256 + (R_base * (255 - Shift_a)) / 256

Con Maiusc > 170:
Maiusc_a= (Maiusc-170) * 3
R_shift = (R_base * Shift_a) / 256 + (B_base * (255 - Shift_a)) / 256
G_shift = (G_base * Shift_a) / 256 + (R_base * (255 - Shift_a)) / 256
B_shift = (B_base * Shift_a) / 256 + (G_base * (255 - Shift_a)) / 256

Inversione (Inversione)

- rappresenta una transizione da un colore alla sua versione inversa. Ad esempio, il colore inverso del rosso è il blu.
Shift=0 – Il LED si accende nel colore base
Shift=128 – Il LED si illumina di bianco (grigio) – punto medio dell'inversione
Shift=255 – il LED si accende di un colore inverso a quello base
Tutti i valori di Shift intermedi sono transizioni fluide tra i colori.

R_shift = ((255 - R_base) * Shift) / 256 + (R_base * (255 - Shift)) / 256
G_shift = ((255 - G_base) * Shift) / 256 + (G_base * (255 - Shift)) / 256
B_shift = ((255 - B_base) * Shift) / 256 + (B_base * (255 - Shift)) / 256

Per ora questi sono tutti i parametri che ho pensato di aggiustare. Se mi viene in mente qualcos'altro di interessante, lo aggiungerò qui più tardi.

C'è un altro problema che vorrei toccare nel contesto di questo articolo:

Nonlinearità della percezione PWM da parte dell'occhio umano

Si scopre che l'occhio umano percepisce la luminosità di un LED in modo non lineare. Questo problema è noto da tempo e i produttori lo hanno risolto con vari gradi di successo. attrezzature varie. Ci sono studi e formule sperimentali. Ecco, ad esempio, un grafico delle dipendenze da .

Dal grafico è chiaro che in aree iniziali regolamento, la luminosità ci sembra essere tre volte maggiore di quella misurata dal dispositivo.

Cioè, se questo fattore non viene preso in considerazione, ruotando la solita manopola del regolatore, otterremo tutti i cambiamenti nella prima metà della rivoluzione, e la seconda metà in realtà non cambierà sensibilmente lo stato attuale.

È proprio a causa dell'effetto di non linearità che ho scritto sopra che, infatti, il colore a 3 byte (24 bit) non dà affatto quei 16 milioni di sfumature, come piace scrivere a molti produttori. Tonalità piene, dentro scenario migliore, sarà un ordine di grandezza più piccolo.

Come risolvere il problema della non linearità della percezione PWM da parte dell'occhio umano?
Idealmente, è necessario utilizzare una delle formule derivate sperimentalmente, ma spesso sono troppo complesse per essere calcolate in un microcontrollore.
Puoi anche creare una tabella di valori per il ricalcolo PWM (riducendo il tempo di calcolo, ma sacrificando parte della memoria MK).
Nel nostro caso, quando non è necessaria una grande precisione nel trasmettere le sfumature della luminosità, possiamo applicare una formula semplificata per la cosiddetta potenza di radiazione:

R_PWM = (R_shift * R_shift) / 256
G_PWM = (G_shift * G_shift) / 256
B_PWM = (B_shift * B_shift) / 256

* moltiplicare il valore per se stesso e scartare il byte basso del risultato.

Questo è probabilmente tutto ciò che volevo dirti sul colore dei LED. Tutte le trasformazioni descritte nell'articolo sono state implementate da me nel dispositivo AAL. Inoltre, lo farò modulo separato Color in È possibile visualizzare una dimostrazione degli algoritmi su un LED RGB e un pixel WS2812.

(Visitato 10.683 volte, 1 visite oggi)

I migliori articoli sull'argomento