LED RGB con Arduino: colori e dissolvenze con PWM
Impariamo a controllare un LED RGB con Arduino usando tre uscite PWM. Nel primo esercizio regoliamo gradualmente il canale verde; nel secondo creiamo una sequenza sui tre colori rosso, verde e blu.
Cosa imparerai
- come collegare un LED RGB ad Arduino;
- come usare tre pin PWM;
- come regolare la luminosità con
analogWrite(); - come usare un ciclo
for; - come creare dissolvenze e sequenze di colore;
- come gestire separatamente rosso, verde e blu.
Come funziona un LED RGB
Un LED RGB integra tre sorgenti luminose: una rossa, una verde e una blu. Controllando separatamente l’intensità di ciascun canale possiamo creare diversi colori e sfumature.
Nel progetto originale i tre canali sono collegati ai pin PWM 9, 10 e 11. Ogni canale utilizza inoltre una resistenza da 220 Ω.
analogWrite() possiamo impostare un valore compreso
tra 0 e 255, variando il duty cycle del segnale PWM e quindi
l’intensità percepita del colore.
Materiale necessario
🧰 Kit Arduino consigliato
Molti dei progetti presenti sul sito utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard. Se stai iniziando, un kit completo è il modo più semplice per avere subito tutto il necessario.
👉 Guarda il kit Arduino consigliatoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema di collegamento
| Canale LED RGB | Pin Arduino | Resistenza |
|---|---|---|
| Verde | 9 | 220 Ω |
| Blu | 10 | 220 Ω |
| Rosso | 11 | 220 Ω |
Schema originale del progetto LED RGB con Arduino.
Esercizio 1: dissolvenza del colore verde
Nel primo esercizio Arduino agisce sul solo canale verde. Un ciclo
for modifica gradualmente il valore PWM, creando una
transizione progressiva.
Codice Arduino commentato — Esercizio 1
// ==========================================================
// LED RGB CON ARDUINO - ESERCIZIO 1
// Dissolvenza graduale del canale verde
// ==========================================================
// Pin PWM collegati ai tre canali del LED RGB
const int VERDE = 9;
const int BLU = 10;
const int ROSSO = 11;
// Tempo tra un passo PWM e il successivo
// 20 millisecondi rendono visibile la transizione
const int delayTime = 20;
// Variabile utilizzata per il canale verde
int ValVerde = 255;
void setup() {
// Imposta i tre pin come uscite
pinMode(VERDE, OUTPUT);
pinMode(BLU, OUTPUT);
pinMode(ROSSO, OUTPUT);
// Stato iniziale previsto dal circuito originale:
// i tre canali vengono portati su HIGH
digitalWrite(VERDE, HIGH);
digitalWrite(BLU, HIGH);
digitalWrite(ROSSO, HIGH);
}
void loop() {
// Riparte dal valore massimo
ValVerde = 255;
// Il ciclo viene ripetuto 255 volte
for (int i = 0; i < 255; i++) {
// Riduce progressivamente ValVerde
ValVerde--;
// Nel circuito originale il valore viene invertito:
// aumentando 255 - ValVerde cambia gradualmente
// l'intensità del canale verde
analogWrite(VERDE, 255 - ValVerde);
// Pausa tra un livello PWM e il successivo
delay(delayTime);
}
}
Come funziona il ciclo for
Partenza da 255
ValVerde viene inizializzato a 255.
Ripetizione del ciclo
Il ciclo for esegue 255 passaggi.
Variazione del PWM
A ogni iterazione cambia il valore inviato al pin 9 tramite
analogWrite().
Transizione visibile
delay(20) introduce una breve pausa tra i passaggi,
rendendo percepibile la dissolvenza.
Simulazione Esercizio 1
▶️ Apri la simulazione TinkercadScarica lo sketch dell’Esercizio 1
⬇️ Scarica Sketch_1_esercizio_rgb.inoEsercizio 2: sequenza graduale RGB
Nel secondo esercizio utilizziamo lo stesso circuito, ma controlliamo in sequenza tutti e tre i canali. Il programma esegue una dissolvenza sul verde, poi sul rosso e infine sul blu.
Codice Arduino commentato — Esercizio 2
// ==========================================================
// LED RGB CON ARDUINO - ESERCIZIO 2
// Sequenza graduale dei tre canali RGB
// ==========================================================
// Pin PWM dei tre colori
const int VERDE = 9;
const int BLU = 10;
const int ROSSO = 11;
// Durata di ogni passo della transizione
const int delayTime = 20;
// Variabili per i tre canali
int ValVerde = 255;
int ValRosso = 255;
int ValBlu = 255;
void setup() {
// Imposta i pin come uscite
pinMode(VERDE, OUTPUT);
pinMode(BLU, OUTPUT);
pinMode(ROSSO, OUTPUT);
// Stato iniziale previsto dal circuito originale
digitalWrite(VERDE, HIGH);
digitalWrite(BLU, HIGH);
digitalWrite(ROSSO, HIGH);
}
void loop() {
// --------------------------------------------------------
// TRANSIZIONE DEL VERDE
// --------------------------------------------------------
ValVerde = 255;
for (int i = 0; i < 255; i++) {
ValVerde--;
// Modifica gradualmente l'intensità del verde
analogWrite(VERDE, 255 - ValVerde);
delay(delayTime);
}
// --------------------------------------------------------
// TRANSIZIONE DEL ROSSO
// --------------------------------------------------------
ValRosso = 255;
for (int i = 0; i < 255; i++) {
ValRosso--;
// Modifica gradualmente l'intensità del rosso
analogWrite(ROSSO, 255 - ValRosso);
delay(delayTime);
}
// --------------------------------------------------------
// TRANSIZIONE DEL BLU
// --------------------------------------------------------
ValBlu = 255;
for (int i = 0; i < 255; i++) {
ValBlu--;
// Modifica gradualmente l'intensità del blu
analogWrite(BLU, 255 - ValBlu);
delay(delayTime);
}
}
Simulazione Esercizio 2
▶️ Apri la simulazione TinkercadScarica lo sketch dell’Esercizio 2
⬇️ Scarica Sketch_2_esercizio_rgb.inoPerché usiamo i pin 9, 10 e 11?
Il progetto utilizza questi tre pin perché consentono di lavorare con
analogWrite() e quindi di regolare l’intensità di ciascun
canale RGB invece di limitarci al semplice acceso/spento.
Debug rapido
- controlla di avere una resistenza da 220 Ω su ciascun canale;
- verifica che verde, blu e rosso siano collegati rispettivamente ai pin 9, 10 e 11;
- se i colori non corrispondono, controlla la disposizione dei terminali del tuo LED RGB;
- se la dissolvenza funziona al contrario, verifica il tipo di collegamento del LED RGB;
- controlla che tutti i pin siano configurati come OUTPUT;
- prova ad aumentare
delayTimese la transizione è troppo veloce.
Varianti del progetto
- creare una dissolvenza continua tra più colori;
- controllare i tre canali con tre potenziometri;
- scegliere il colore tramite pulsanti;
- controllare il LED RGB dal Monitor Seriale;
- creare effetti luminosi per una lampada decorativa;
- aggiungere un sensore e cambiare colore in base a una misura.
Cosa devi ricordare
- Un LED RGB contiene tre canali: rosso, verde e blu.
- I tre canali possono essere controllati separatamente.
analogWrite()usa valori da 0 a 255.- I cicli
forsono utili per creare transizioni graduali. - Nel progetto originale i canali sono sui pin PWM 9, 10 e 11.
- Ogni canale deve avere la propria resistenza di limitazione.
Domande frequenti
Perché il LED mostra colori diversi da quelli previsti?
La disposizione dei terminali può cambiare tra diversi modelli di LED RGB. Verifica quali piedini corrispondono a rosso, verde e blu.
Perché la luminosità sembra invertita?
Il progetto originale utilizza una logica PWM invertita. Se il tuo LED RGB è cablato in modo differente, potrebbe essere necessario invertire i valori.
Posso creare colori come giallo o viola?
Sì. I colori intermedi si ottengono combinando intensità diverse dei canali rosso, verde e blu.
Posso modificare la velocità della dissolvenza?
Sì. Aumenta delayTime per rallentare la transizione oppure
riducilo per renderla più veloce.

