L’articolo di oggi potresti catalogarlo tra quelli destinati ai primi passi con Arduino, il suo funzionamento è semplice ma il risultato empirico che ne deriva è molto utile e ti servirà in molti progetti con i led RGB.
Lo scopo di questo esperimento è individuare il bianco composto dalla combinazione dei 3 colori RGB (Red, Green, Bleu), potresti procedere per tentativi successivi modificando i valori PWM che invii ad arduino ma ogni cambio comporterebbe un nuovo upload, riducendo il numero complessivi di esperimenti possibili con arduino in futuro e costringendoti a lunghe attese tra una prova e l’altra.
Ecco perché trovandomi in questa condizione ho preferito scrivermi uno sketch ad-hoc e testare così tutti i 50 led RGB acquistati su ebuy.
Occorrente:
- 1 arduino 2009 o UNO
- 1 led RGB a catodo ( – ) comune
- 1 resistenza da 470Ω
- 3 potenziometri da 10KΩ
- 1 breadboard
- 14 cavetti per realizzare il circuito
Lo schema dei collegamenti lo hai visto in alto, prima figura, lo sketch è il seguente:
void setup() { Serial.begin( 9600 ); pinMode( A0, INPUT ); pinMode( A1, INPUT ); pinMode( A2, INPUT ); pinMode( 3, OUTPUT ); pinMode( 5, OUTPUT ); pinMode( 6, OUTPUT ); } void loop() { int R = map( analogRead( A0 ),0,1023,0,255 ); int G = map( analogRead( A1 ),0,1023,0,255 ); int B = map( analogRead( A2 ),0,1023,0,255 ); Serial.print( "R: " ); Serial.print( R ); Serial.print( " G: " ); Serial.print( G ); Serial.print( " B: " ); Serial.println( B ); analogWrite( 3, R ); analogWrite( 5, G ); analogWrite( 6, B ); delay( 500 ); }
avai già notato come visualizzerai il valore di ciascun colore una volta raggiunto il bianco: il monitor seriale;
infatti alla linea 03: inizializzi il monitor seriale con una velocità di comunicazione di 9600 baud;
linee 05-07: imposti i pin analogici ( A0, A1 e A2 ) in modalità INPUT;
linee 09-11: imposti i pin PWM ( 3,5 e 6 ) in modalità OUTPUT, ossia invio dei segnali PWM;
linee 16-18: leggi per ciascun pin in INPUT il valore del potenziometro che varia da 0 a 1023, questo valore deve essere convertito in scala 0-255 per le uscite PWM e per farlo puoi utilizzare la funzione map( inputValue, minInput, maxInput, minOutput, maxOutput ) in cui il minInput e minOutput sono uguali e valgono 0, maxInput è 1023 ossia il valore massimo in input e maxOutput è 255 ossia il valore massimo in output per il PWM di arduino;
linee 20-25: queste linee inviano al monitor seriale il valore letto per ciascun potenziometro già mappato sull’output, quindi 0 – 255;
linee 27-29: inviano lo stesso valore che vedi sul monitor seriale per ciascun colore al rispettivo pin PWM;
linea 31: imposta un tempo di attesa di 1/2 secondo circa tra un loop ed il successivo, questo tempo ti da modo e tempo di verificare che il colore raggiunto sia quello desiderato e di leggerlo sul monitor seriale.
Nelle mie prove con differenti led RGB provenienti da uno stesso acquisto ho verificato che il colore bianco si raggiunge con i seguenti valori: Red = 100; Green=255; Bleu=255; e che proporzionalmente è possibile ottenere un effetto dissolvenza del bianco riducendo proporzionalmente i tre valori fino allo 0;
Ho approfittato anche di questo esperimento per realizzare altri colori come ad esempio il giallo con le componenti rosso e verde o il viola con rosso e bleu, ecc…
Insomma è un gioco semplice ma molto divertente ed utile per comprendere la dinamica dei led RGB e delle loro componenti.
Buon divertimento.
15 commenti
Vai al modulo dei commenti
Ciao e complimenti per la chiarezza con cui descriv un argomento fino a poco tempo sconosciuto per me!
Sto studiando tutte le tue lezioni ed ho notato che dalla riga 5 alla 7 hai impostato gli ingressi analogici come ingresso…
E’ obbligatorio anche per questi o solo per quelli digitali?
Grazie e continua così!!
Autore
Ciao Michele,
non é fondamentale per gli ingressi analogici dichiarare la modalità.
Tuttavia trattandosi di lezioni é buona regola abituarti a dichiarare la modalità in cui intendi utilizzare i pin della scheda indipendentemente dal tipo di pin.
Mauro
ciao mauro, io ho provato a fare questo sketch con una striscia led e transistor. il mio problema è che quando il potenziometro è a 0 i led non si spengono. il problema è il transistor o è un errore di scrittura?
grazie ciao
Autore
Ciao Davide,
controlla con il monitor seriale se lo 0 del potenziometro corrisponde al valore 0 inviato al transistor.
Mauro
Ciao mauro. Vorrei chiederti che puoi darmi il tuo indirizzo l’email x contttarti di privato? grazie e distinti saluti
Autore
Ciao Francesco,
puoi utilizzare l’indirizzo che trovi nella pagina contatti, è scritto nella notazione anti spam con at per la chiocciola e dot per il punto.
Mauro
Ciao Mauro. Sono Francesco.
Vorreì aggiungere al sistema anche i pulsanti e i potenziometri. Esempio: premendo il 1° pulsante si accende led con l’intermittenza (30 ms) per un tempo di almeno 30 secondi. Premendo un altro pulsante si accende led con l’intermittenza (60 ms) per un tempo di almeno 30 secondi, e cosi via per gli altri pulsanti. Vorrei chiedere se si può mettere uno potenziometroche regola solo il tempo.
La ringrazio anticipatamente e le porgo. Distinti saluti.
Autore
Ciao Francesco,
certo che puoi mettere un potenziometro da cui leggere il delay() di lampeggio.
Per quelloc he vuoi realizzare tu dovrai usare sia il comando delay() sia il comando millis() in quanto hai 2 tempi che si incrociano.
Leggi i tutorial dedicati al comando millis() se non lo conosci.
Mauro
Ciao Mauro,sono Guido
ho provato a fare questo sketch,sono riuscito a realizzarlo e vedo sul monitor seriale le variazioni dei potenziometri , però non ottengo la miscelazione dei colori. Mi spiego,accendo il rosso poi il verde e guardando il led di fronte vedo i due colori distinti e separati e non miscelati,accendo il blu e ottengo solo una attenuazione dei colori.Il led che utilizzo è posizionato su una basetta 15 mm x 15 mm , su ogni pin R G B c’è collegata una resistenza di 980 ohm , il quarto pin è il negativo , purtroppo sulla basetta non c’è scritto nessun codice .Spero di essermi spiegato .
La ringrazio anticipatamente.
Guido
Autore
Ciao Guido,
non ho presente come sia fatta la basetta e quale sia il circuito, dovresti chiedere al produttore, tuttavia dalla tua descrizione sembra che ci sia un errore nei collegamenti. L’attenuazione di solito si verifica se comandi il pin negativo invece di un pin positivo del colore.
Inoltre non dovresti avere lo stesso valore di resistenza per tutti i led in quanto il led rosso, solitamente, ha necessità di una resistenza superiore rispetto agli altri in quanto ha un voltaggio di funzionamento inferiore.
Ciao Mauro
ho verificato i valori delle resistenze ed è come dici tu,ogni pin ha un valore diverso.cerco di rintracciare il costruttore per saperne di più sulla basetta, ti ringrazio ancora.
Guido
Salve,
ho una domanda sula parte di codice 27-29. Le uscite sono digitali ma il comando che viene dato è analogWrite, perché? Forse perché è un segnale PWM?
Grazie.
Autore
Ciao Marco,
si è un segnale in output di tipo PWM
Buonasera, da questo sito (levo il www per non inserire link) si passa ad una app molto carina per la visualizzazione dello schema di montaggio dei vari componenti (circuito.io).
potresti approfondire la parte dell’ Rfid? in particolare per l’utilizzo con credito a scalare.
sono stato indirizzato a lei da Damiano G. (non scrivo il cognome ma ti conosce bene).
non posso fare altro che accodarmi a tutti quelli che apprezzano questo blog.
Un saluto
Tovani Stefano
Autore
Ciao Stefano,
grazie per il rispetto delle regole del blog. Saluta da parte mia Damiano 🙂
Non ti ssicuro di riuscirci a breve, ma se dovessi dimenticarlo puoi scrivermi sulla casella info per ricordarmelo 🙂
Nelle prossime settimane sono impegnato per l’Arduino Day 2018 in cui vorrei proporre un mio progetto che poi pubblicherò sul blog e non so quanto tempo ancora mi impegnerà