Tinkercad RGB led e potenziometro è anche conosciuto con il nome di lampada RGB con Arduino.
In ogni mio corso questo esperimento è un cavallo di battaglia con cui puoi affrontare alcune tematiche specifiche non solo del controllo del led RGB con Arduino ma sopratutto sulla valutazione dei dati provenienti da un sensore.
In questo esperimento utilizzi il sensore analogico, un potenziometro, per acquisire un segnale e convertirlo in valori validi per l’output sui pin PWM di arduino.
Il video del Tinkercad RGB led e potenziometro
La serie di articoli dedicati al corso base con tinkercad, a cui appartiene anche il presente Tinkercad RGB led e potenziometro, sono accompagnati da un video:
il cui scopo è mostrarti passo dopo passo come realizzare il circuito ed il codice.
Come per i precedenti progetti trovi il link diretto qui.
Il codice del tinkercad RGB led e potenziometro
In merito al codice del tutorial puoi leggere il codice sia sul progetto condiviso sia di seguito:
#define pinR 9 #define pinG 10 #define pinB 11 #define pinPot A0 void setup() { pinMode( pinR,OUTPUT ); pinMode( pinG,OUTPUT ); pinMode( pinB,OUTPUT ); pinMode( pinPot,INPUT ); } void loop() { int sensorVal = analogRead(pinPot); if( 0 <= sensorVal && sensorVal <= 341 ) { byte red = map(sensorVal,0,341,0,255); analogWrite( pinR,red ); analogWrite( pinG,0 ); analogWrite( pinB,0 ); } else if ( 342 <= sensorVal && sensorVal <= 682 ) { byte green = map(sensorVal,342,682,0,255); analogWrite( pinR,255 ); analogWrite( pinG,green ); analogWrite( pinB,0 ); } else { byte blue = map(sensorVal,683,1023,0,255); analogWrite( pinR,255 ); analogWrite( pinG,255 ); analogWrite( pinB,blue ); } }
Descrizione dello sketch
Analizzandolo linea per linea:
linee 01-04: definisci le variabili relative ai pin di arduino a cui hai collegato il led RGB, i tre led in parallelo ed il potenziometro;
linea 06: crei la funzione setup();
linee 07-11: per ciascuna definizione di pin imposti la modalità INPUT od OUTPUT in funzione del relativo pin, per esempio i pin a cui sono connessi i led sono degli output mentre il pin a cui è collegato il potenziometro è un pin di input;
linea 15: usa il comando analogRead per leggere il segnale del potenziometro e memorizzarne il valore nella variabile sensorVal;
linea 17: usando l’espressione condizionale if valuta de il valore acquisito sia nell’intervallo 0-341 ( 1/3 di 1023 )
Notice
Trattandosi di un esperimento con 3 led ho deciso di dedicare a ciascun led 1/3 del valore analogico che potrei leggere sul pin analogico in INPUT; siccome il convertitore ADC di Arduino Uno è 210 ossia 1024 valori da 0 a 1023 il primo terzo è 0-341, il secondo 342-682, e l’ultimo 683-1023.
linee 18-22: usando il comando map() ricalcola il valore della variabile red partendo dal valore sensorVal e trasformando il range 0-341 in 0-255 in questo modo red varierà tra 0 e 255 e potrai passarlo al pinR mediante analogWrite alla linea 20. Le linee 21 e 22 manterranno a 0 il valore PWM dei pinG e pinB;
linea 23: come la linea 17 valuti il range di sensorVal solo se rientra nel range 342-682;
linee 24-28: sono simili alle linee 18-22 con la sola differenza per la linea 26 che porta pinR a 255 e linea 27 che imposta il valore di pinG in modo proporzionale al range 342-682 mappato su 0-255;
linee 32-36: esegui la medesima operazione già vista per i precedenti due range applicandola al pinB.
Al termine della realizzazione dello sketch puoi eseguire la simulazione del circuito e del progetto con tinkercad ed otterrai il comportamento riportato nel video:
Il progetto tinkercad RGB led e potenziometro è un valido esempio didattico sia per la semplice realizzazione del circuito e dello sketch sia per approfondire alcuni concetti come l’IF ed il MAP.