I led RGB possono costituire un modo divertente per aggiungere originalità e divertimento al proprio progetto.
Il led RGB può essere considerato come l’unione di tre led (uno rosso, uno verde ed uno blu) in una struttura singolare. L’utilizzo e la connessione (sia a livello elettronico e sia a livello di programmazione) non è molto differente rispetto ai LED classici.
Esistono nel mercato due differenti versioni di LED RGB, la prima con Anodo in comune, e la seconda con Catodo in comune. La versione con Anodo in comune utilizza i 5V sul pin, mentre la seconda versione con catodo in comune utilizza la messa a terra GND sul pin.
Per far si che avvenga il corretto funzionamento del LED RGB vi è data la necessità di utilizzare tre resistenze in modo tale da limitare la corrente che lo attraversa.
Un LED RGB è un led che al suo interno dispone di 3 diversi semiconduttori, ognuno in gradi di emettere un differente colore e in particolare rosso, verde e blu. Come ben noto tutti i colori dello spettro possono essere realizzati da una combinazione dei colori fondamentali rosso verde e blu.
Si tratta di un semplice sistema PWM variare la luminosità dei LED, e considerando che il PWM di Arduino può avere valori da 0 a 255, possiamo associare a questo valore la quantità di colore e andare a formare gli altri colori. Ad esempio settando il PWM del rosso a 128 e il PWM del blu a 255 possiamo ottenere il viola.
Pulse Width Modulation (PWM) è una tecnica per controllare la potenza. In questo caso è utilizzato per controllare la luminosità di ogni singolo LED. La pulsazione è controllata dalla funzione analogWrite. I valori che può assumere tale funzione variano da 0 e 255,
Nel progetto in questione il LED RGB si accenderà dapprima nello stato di colore rosso, poi si dissolverà nel colore e verde, e in seguito si dissolverà nel colore blu per poi tornare nuovamente in modo ciclico al colore rosso.
I componenti richiesti per effettuare questo progetto sono i seguenti:
- (1) x Elegoo UNO R3
- (1) x Breadboard con 830 punti di aggancio
- (4) x Connettori M-M (Connettori Maschio-Maschio)
- (1) x LED RGB
- (3) x Resistenza da 220 ohm
Il diagramma di collegamento è il seguente:
Lo schema elettrico è il seguente:
Vi sono diversi modi per scrivere il codice utilizzando varie strutture iterative.
Codice con i cicli for:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
//definzione dei vari pin utilizzati dal LED RGB #define BLUE 3 #define GREEN 5 #define RED 6 void setup() { pinMode(RED, OUTPUT); //La variabile RED è impostata come variabile di output pinMode(GREEN, OUTPUT); //La variabile GREEN è impostata come variabile di output pinMode(BLUE, OUTPUT); //La variabile BLUE è impostata come variabile di output digitalWrite(RED, HIGH); //imposto il LED rosso come acceso digitalWrite(GREEN, LOW); //imposto il LED verde come spento digitalWrite(BLUE, LOW); //imposto il LED blu come spento } //dichiarazione variabili int redValue; int greenValue; int blueValue; void loop() { #define delayTime 10 //definizione dell'intervallo di tempo redValue = 255; //assegno alla variabile redValue il valore 255 greenValue = 0; //assegno alla variabile greenValue il valore 0 blueValue = 0; //assegno alla variabile blueValue il valore 0 //in questo ciclo for ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore rosso sarà sfumato verso il verde //aumenteremo il valore di una unità per quanto riguarda la variabile greenValue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile redValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore verde for(int i = 0; i < 255; i=i+1) { redValue = redValue - 1; //decremento di 1 il valore della variabile redValue greenValue = greenValue + 1; //aumento di 1 il valore della variabile greenValue analogWrite(RED, redValue); //il led rosso si accenderà e il colore dipenderà dalla variabile redValue analogWrite(GREEN, greenValue); //il led verde si accenderà e il colore dipenderà dalla variabile greenValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo } redValue = 0; //assegno alla variabile redValue il valore 0 greenValue = 255; //assegno alla variabile greenValue il valore 255 blueValue = 0; //assegno alla variabile blueValue il valore 0 //in questo ciclo for ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore verde sarà sfumato verso il blu //aumenteremo il valore di una unità per quanto riguarda la variabile blueValue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile greenValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore blu for(int i = 0; i < 255; i += 1) { greenValue = greenValue - 1; //decremento di 1 il valore della variabile greenValue blueValue = blueValue + 1; //aumento di 1 il valore della variabile blueValue analogWrite(GREEN, greenValue); //il led verde si accenderà e il colore dipenderà dalla variabile greenValue analogWrite(BLUE, blueValue); //il led blu si accenderà e il colore dipenderà dalla variabile blueValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo } redValue = 0; //assegno alla variabile redValue il valore 0 greenValue = 0; //assegno alla variabile greenValue il valore 0 blueValue = 255; //assegno alla variabile blueValue il valore 255 //in questo ciclo for ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore blu sarà sfumato verso il rosso //aumenteremo il valore di una unità per quanto riguarda la variabile redVlaue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile blueValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore blu for(int i = 0; i < 255; i += 1) { blueValue = blueValue - 1; //decremento di 1 il valore della variabile blueValue redValue = redValue + 1; //aumento di 1 il valore della variabile redValue analogWrite(BLUE, blueValue); //il led blue si accenderà e il colore dipenderà dalla variabile blueValue analogWrite(RED, redValue); //il led rosso si accenderà e il colore dipenderà dalla variabile redValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo } } |
Codice con il ciclo while:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
//definzione dei vari pin utilizzati dal LED RGB #define BLUE 3 #define GREEN 5 #define RED 6 void setup() { pinMode(RED, OUTPUT); //La variabile RED è impostata come variabile di output pinMode(GREEN, OUTPUT); //La variabile GREEN è impostata come variabile di output pinMode(BLUE, OUTPUT); //La variabile BLUE è impostata come variabile di output digitalWrite(RED, HIGH); //imposto il LED rosso come acceso digitalWrite(GREEN, LOW); //imposto il LED verde come spento digitalWrite(BLUE, LOW); //imposto il LED blu come spento } //dichiarazione variabili int redValue; int greenValue; int blueValue; void loop() { #define delayTime 10 //definizione dell'intervallo di tempo redValue = 255; //assegno alla variabile redValue il valore 255 greenValue = 0; //assegno alla variabile greenValue il valore 0 blueValue = 0; //assegno alla variabile blueValue il valore 0 int i=0; //dichiaro e assegno alla variabile i il valore 0; //in questo ciclo while ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore rosso sarà sfumato verso il verde //aumenteremo il valore di una unità per quanto riguarda la variabile greenValue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile redValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore verde while(i<255){ redValue = redValue - 1; //decremento di 1 il valore della variabile redValue greenValue = greenValue + 1; //aumento di 1 il valore della variabile greenValue analogWrite(RED, redValue); //il led rosso si accenderà e il colore dipenderà dalla variabile redValue analogWrite(GREEN, greenValue); //il led verde si accenderà e il colore dipenderà dalla variabile greenValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo i=i+1; //aumento di 1 il valore della variabile i; } redValue = 0; //assegno alla variabile redValue il valore 0 greenValue = 255; //assegno alla variabile greenValue il valore 255 blueValue = 0; //assegno alla variabile blueValue il valore 0 i=0; // assegno alla variabile i il valore 0; //in questo ciclo while ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore verde sarà sfumato verso il blu //aumenteremo il valore di una unità per quanto riguarda la variabile blueValue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile greenValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore blu while(i<255){ greenValue = greenValue - 1; //decremento di 1 il valore della variabile greenValue blueValue = blueValue + 1; //aumento di 1 il valore della variabile blueValue analogWrite(GREEN, greenValue); //il led verde si accenderà e il colore dipenderà dalla variabile greenValue analogWrite(BLUE, blueValue); //il led blu si accenderà e il colore dipenderà dalla variabile blueValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo i=i+1; //aumento di 1 il valore della variabile i; } redValue = 0; //assegno alla variabile redValue il valore 0 greenValue = 0; //assegno alla variabile greenValue il valore 0 blueValue = 255; //assegno alla variabile blueValue il valore 255 i=0; //assegno alla variabile i il valore 0 //in questo ciclo while ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore blu sarà sfumato verso il rosso //aumenteremo il valore di una unità per quanto riguarda la variabile redVlaue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile blueValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore blu while(i<255){ blueValue = blueValue - 1; //decremento di 1 il valore della variabile blueValue redValue = redValue + 1; //aumento di 1 il valore della variabile redValue analogWrite(BLUE, blueValue); //il led blue si accenderà e il colore dipenderà dalla variabile blueValue analogWrite(RED, redValue); //il led rosso si accenderà e il colore dipenderà dalla variabile redValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo i=i+1; //aumento di 1 il valore della variabile i; } } |
Codice con il ciclo do…while:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
//definzione dei vari pin utilizzati dal LED RGB #define BLUE 3 #define GREEN 5 #define RED 6 void setup() { pinMode(RED, OUTPUT); //La variabile RED è impostata come variabile di output pinMode(GREEN, OUTPUT); //La variabile GREEN è impostata come variabile di output pinMode(BLUE, OUTPUT); //La variabile BLUE è impostata come variabile di output digitalWrite(RED, HIGH); //imposto il LED rosso come acceso digitalWrite(GREEN, LOW); //imposto il LED verde come spento digitalWrite(BLUE, LOW); //imposto il LED blu come spento } //dichiarazione variabili int redValue; int greenValue; int blueValue; void loop() { #define delayTime 10 //definizione dell'intervallo di tempo redValue = 255; //assegno alla variabile redValue il valore 255 greenValue = 0; //assegno alla variabile greenValue il valore 0 blueValue = 0; //assegno alla variabile blueValue il valore 0 int i=0; //dichiaro e assegno alla variabile i il valore 0; //in questo ciclo do...while ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore rosso sarà sfumato verso il verde //aumenteremo il valore di una unità per quanto riguarda la variabile greenValue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile redValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore verde do{ redValue = redValue - 1; //decremento di 1 il valore della variabile redValue greenValue = greenValue + 1; //aumento di 1 il valore della variabile greenValue analogWrite(RED, redValue); //il led rosso si accenderà e il colore dipenderà dalla variabile redValue analogWrite(GREEN, greenValue); //il led verde si accenderà e il colore dipenderà dalla variabile greenValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo i=i+1; //aumento di 1 il valore della variabile i; }while (i>=255); redValue = 0; //assegno alla variabile redValue il valore 0 greenValue = 255; //assegno alla variabile greenValue il valore 255 blueValue = 0; //assegno alla variabile blueValue il valore 0 i=0; // assegno alla variabile i il valore 0; //in questo ciclo do...while ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore verde sarà sfumato verso il blu //aumenteremo il valore di una unità per quanto riguarda la variabile blueValue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile greenValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore blu do{ greenValue = greenValue - 1; //decremento di 1 il valore della variabile greenValue blueValue = blueValue + 1; //aumento di 1 il valore della variabile blueValue analogWrite(GREEN, greenValue); //il led verde si accenderà e il colore dipenderà dalla variabile greenValue analogWrite(BLUE, blueValue); //il led blu si accenderà e il colore dipenderà dalla variabile blueValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo i=i+1; //aumento di 1 il valore della variabile i; }while(i>=255); redValue = 0; //assegno alla variabile redValue il valore 0 greenValue = 0; //assegno alla variabile greenValue il valore 0 blueValue = 255; //assegno alla variabile blueValue il valore 255 i=0; //assegno alla variabile i il valore 0 //in questo ciclo do...while ci saranno 255 ripetizioni. In ciascuna di queste ripetizione il colore blu sarà sfumato verso il rosso //aumenteremo il valore di una unità per quanto riguarda la variabile redVlaue a ogni ripetizione //e decrementeremo il valore di una unità per quanto riguarda la variabile blueValue a ogni ripetizione //a termine del ciclo il led assumerà lo stato di colore blu do{ blueValue = blueValue - 1; //decremento di 1 il valore della variabile blueValue redValue = redValue + 1; //aumento di 1 il valore della variabile redValue analogWrite(BLUE, blueValue); //il led blue si accenderà e il colore dipenderà dalla variabile blueValue analogWrite(RED, redValue); //il led rosso si accenderà e il colore dipenderà dalla variabile redValue delay(delayTime); //ci saranno 10 millisecondi di pausa tra le due esecuzioni del ciclo i=i+1; //aumento di 1 il valore della variabile i; }while(i>=255); } |
In questo articolo si è potuto ben evincere la possibilità di utilizzare le varie strutture iterative per lo stesso scopo.
Link guida:
- Arduino IDE: ciclo for e differenze con while e do while #6
- Arduino IDE: ciclo while e do while #5
- Arduino IDE: accendere led con un bottone (if) #4.1
- Arduino IDE: la struttura condizionale IF #4
- Arduino IDE: operatori aritmetici, relazione e logici #3
- Arduino IDE: variabili, costanti e macro #2
- Arduino IDE: in che maniera si crea un programma? #1
- Arduino IDE: che cos’è e come funziona #0
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
Seguici per non perdere le prossime novità!