«

»

Mag 16

Stampa Articolo

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.

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

11 comments

Vai al modulo dei commenti

  1. Michele

    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. Mauro Alfieri

      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

  2. davide

    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. Mauro Alfieri

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

      Mauro

  3. Francesco

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

    1. Mauro Alfieri

      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

  4. Francesco

    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. Mauro Alfieri

      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

  5. Guido

    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. Mauro Alfieri

      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.

      1. Guido

        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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>