Tutorial: arduino, 3 led e 3 potenziometri

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.

schema led RGB potenziometri

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
Se non hai mai lavorato con i led RGB probabilmente ti sarai detto che cosa ci vuole ad avere il bianco porto a 255 tutti e tre i valori PWM, in linea teorica questo è vero, ci sono però delle considerazioni reali dovute al metodo costruttivo del led RGB, al tipo di resistenza utilizzata, al materiale con cui ogni colore vieve realizzato … tutto questo causa che collegando una sola resistenza da 470Ω in serie al catodo e inviando +5v a tutti e tre i pin RGB la risultante è rossa e non  bianco.

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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/tutorial-arduino-3-led-e-3-potenziometri.html

15 commenti

Vai al modulo dei commenti

    • Michele il 30 Novembre 2012 alle 19:58
    • Rispondi

    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ì!!

    1. 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

    • davide il 7 Agosto 2013 alle 20:03
    • Rispondi

    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

    1. Ciao Davide,
      controlla con il monitor seriale se lo 0 del potenziometro corrisponde al valore 0 inviato al transistor.

      Mauro

    • Francesco il 9 Novembre 2013 alle 20:40
    • Rispondi

    Ciao mauro. Vorrei chiederti che puoi darmi il tuo indirizzo l’email x contttarti di privato? grazie e distinti saluti

    1. 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

    • Francesco il 26 Novembre 2013 alle 16:59
    • Rispondi

    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.

    1. 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

    • Guido il 30 Maggio 2016 alle 18:08
    • Rispondi

    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

    1. 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.

        • Guido il 31 Maggio 2016 alle 16:49
        • Rispondi

        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

    • Marco il 24 Aprile 2018 alle 16:20
    • Rispondi

    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.

    1. Ciao Marco,
      si è un segnale in output di tipo PWM

    • stefano Tovani il 30 Aprile 2018 alle 22:50
    • Rispondi

    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

    1. 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à

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.