🌈 Arduino • LED RGB • PWM

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.

Difficoltà Principiante
Uscite PWM Pin 9, 10 e 11
Concetti PWM e cicli for
In poche parole: un LED RGB contiene tre canali luminosi, rosso, verde e blu. Variando l’intensità dei tre canali possiamo ottenere molti colori e creare transizioni graduali.

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

Concetto chiave: con 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

🔌 Arduino Uno
🌈 1 LED RGB
〰️ 3 resistenze da 220 Ω
🧩 Breadboard
🔗 Cavetti jumper

🧰 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 consigliato

Link 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 Arduino

Link 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 Arduino con LED RGB e tre resistenze da 220 ohm

Schema originale del progetto LED RGB con Arduino.

Nota: il codice originale porta inizialmente i tre pin su HIGH e utilizza valori PWM invertiti. Questo comportamento è coerente con il cablaggio previsto dal progetto originale. Se utilizzi un LED RGB con collegamento differente, la logica dei valori PWM potrebbe dover essere invertita.

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 — dissolvenza verde
// ==========================================================
// 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

1

Partenza da 255

ValVerde viene inizializzato a 255.

2

Ripetizione del ciclo

Il ciclo for esegue 255 passaggi.

3

Variazione del PWM

A ogni iterazione cambia il valore inviato al pin 9 tramite analogWrite().

4

Transizione visibile

delay(20) introduce una breve pausa tra i passaggi, rendendo percepibile la dissolvenza.

Simulazione Esercizio 1

▶️ Apri la simulazione Tinkercad

Scarica lo sketch dell’Esercizio 1

⬇️ Scarica Sketch_1_esercizio_rgb.ino

Esercizio 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 — sequenza verde, rosso e blu
// ==========================================================
// 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 Tinkercad

Scarica lo sketch dell’Esercizio 2

⬇️ Scarica Sketch_2_esercizio_rgb.ino

Perché 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 delayTime se 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 for sono 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.