Come usare un LED RGB: mescolare i colori con Arduino, anodo o catodo comune
Come funziona un LED RGB e come si distingue il catodo comune dall'anodo comune? Collegamento ad Arduino, resistenza per ogni colore, miscelazione con analogWrite, effetto arcobaleno, codice per ESP32 e Pico.
Un LED RGB è formato da tre LED distinti in un unico involucro: rosso (Red), verde (Green) e blu (Blue). Regolando la luminosità di ciascuno separatamente puoi ottenere quasi qualsiasi colore, dal giallo al turchese e dal viola all'arancione. Ogni pixel di uno schermo funziona allo stesso modo. È uno dei componenti Arduino più divertenti per luci di stato, lampade d'atmosfera e indicatori di notifica colorati.

Come funziona un LED RGB?
I colori della luce si mescolano sommandosi: rosso e verde insieme appaiono gialli, verde e blu danno il turchese (ciano), rosso e blu il viola (magenta), e tutti e tre insieme il bianco. Arduino regola la luminosità di ogni canale da 0 a 255 con il PWM. In teoria si ottengono così 256 × 256 × 256 ≈ 16,7 milioni di combinazioni. Il PWM accende e spegne il LED centinaia di volte al secondo; l'occhio non vede lo sfarfallio e percepisce solo la luminosità media.
| Colore | Rosso | Verde | Blu |
|---|---|---|---|
| Rosso | 255 | 0 | 0 |
| Verde | 0 | 255 | 0 |
| Blu | 0 | 0 | 255 |
| Giallo | 255 | 255 | 0 |
| Turchese (ciano) | 0 | 255 | 255 |
| Viola (magenta) | 255 | 0 | 255 |
| Arancione | 255 | 80 | 0 |
| Bianco | 255 | 255 | 255 |
Catodo comune o anodo comune?
Il più lungo dei quattro piedini è il terminale comune condiviso dai tre LED. Se collega i loro catodi, il LED è a catodo comune; se collega i loro anodi, è ad anodo comune. Dall'esterno sono identici, ma collegamento e codice sono opposti:
| Caratteristica | Catodo comune (CC) | Anodo comune (CA) |
|---|---|---|
| Il piedino lungo va a | GND | 5V |
| Per accendere un colore | Pin a HIGH (255) | Pin a LOW (0) |
| Valore nel codice | analogWrite(pin, valore) | analogWrite(pin, 255 - valore) |
| Completamente spento | 0 | 255 |
Ordine dei piedini e collegamento ad Arduino
Nei comuni LED RGB da 5 mm l'ordine è rosso, comune (il più lungo), verde, blu, ma può cambiare a seconda del produttore, quindi la cosa più sicura è provare ogni piedino. Ogni colore si collega con la propria resistenza a un pin PWM. Su Arduino Uno sono i pin contrassegnati con ~: 3, 5, 6, 9, 10 e 11.
| Piedino | Collegamento | Pin di Arduino Uno |
|---|---|---|
| Rosso (R) | Tramite una resistenza | D9 |
| Comune (il più lungo) | GND per catodo comune, 5V per anodo comune | — |
| Verde (G) | Tramite una resistenza | D10 |
| Blu (B) | Tramite una resistenza | D11 |
Calcolo delle resistenze: una per ogni colore
Ogni colore ha bisogno di una tensione diversa per accendersi (tensione diretta): circa 2,0 V il rosso e 3,0–3,2 V il verde e il blu. Puntando a 20 mA a 5 V, il rosso richiede (5 − 2,0) / 0,020 = 150 Ω, il verde e il blu (5 − 3,2) / 0,020 ≈ 100 Ω. In pratica mettere 220 Ω su tutti e tre è sicuro e abbastanza luminoso; il bilanciamento dei colori si regola nel codice. Per calcolare i tuoi valori usa il calcolatore Resistenza per LED, e per la tensione diretta di ogni colore la tabella Tensioni dei LED.
Mescolare i colori con Arduino
Il codice qui sotto raccoglie i tre canali in un'unica funzione setColor() e mostra sette colori uno dopo l'altro. Se il tuo LED è ad anodo comune, basta impostare COMMON_ANODE a true; la funzione inverte i valori da sola.
1const int R_PIN = 9;
2const int G_PIN = 10;
3const int B_PIN = 11;
4const bool COMMON_ANODE = false; // ortak anotsa true yap / set true for common anode
5
6void setColor(int r, int g, int b) {
7 if (COMMON_ANODE) { r = 255 - r; g = 255 - g; b = 255 - b; }
8 analogWrite(R_PIN, r);
9 analogWrite(G_PIN, g);
10 analogWrite(B_PIN, b);
11}
12
13void setup() {
14 pinMode(R_PIN, OUTPUT);
15 pinMode(G_PIN, OUTPUT);
16 pinMode(B_PIN, OUTPUT);
17}
18
19void loop() {
20 setColor(255, 0, 0); delay(1000); // kırmızı / red
21 setColor(0, 255, 0); delay(1000); // yeşil / green
22 setColor(0, 0, 255); delay(1000); // mavi / blue
23 setColor(255, 255, 0); delay(1000); // sarı / yellow
24 setColor(0, 255, 255); delay(1000); // turkuaz / cyan
25 setColor(255, 0, 255); delay(1000); // mor / magenta
26 setColor(255, 255, 255); delay(1000); // beyaz / white
27}Transizione morbida dei colori: effetto arcobaleno
Invece di saltare da un colore all'altro, se abbassi un canale mentre ne alzi un altro, la luce scorre dolcemente dal rosso al verde, dal verde al blu e di nuovo al rosso. Il ciclo qui sotto usa la stessa funzione setColor(); cambia il valore di delay per regolare la velocità.
1// setColor() ve pin tanımları yukarıdaki gibi / setColor() and pins as above
2void loop() {
3 for (int i = 0; i < 256; i++) { setColor(255 - i, i, 0); delay(8); } // kırmızı → yeşil / red → green
4 for (int i = 0; i < 256; i++) { setColor(0, 255 - i, i); delay(8); } // yeşil → mavi / green → blue
5 for (int i = 0; i < 256; i++) { setColor(i, 0, 255 - i); delay(8); } // mavi → kırmızı / blue → red
6}Scegliere il colore con i potenziometri
Se colleghi tre potenziometri ad A0, A1 e A2, ognuno diventa la manopola di un canale di colore. analogRead() restituisce un valore da 0 a 1023; dividendolo per 4 ottieni l'intervallo 0–255 che il PWM si aspetta. Il collegamento di un potenziometro è spiegato in Cos'è un potenziometro?
1// A0, A1, A2'de üç potansiyometre; setColor() yukarıdaki gibi
2// three pots on A0, A1, A2; setColor() as above
3void loop() {
4 int r = analogRead(A0) / 4; // 0–1023 → 0–255
5 int g = analogRead(A1) / 4;
6 int b = analogRead(A2) / 4;
7 setColor(r, g, b);
8}LED RGB con ESP32 e Raspberry Pi Pico
Sull'ESP32, con il core Arduino attuale (3.x), analogWrite() funziona su qualsiasi pin di uscita, quindi il codice sopra funziona così com'è cambiando i numeri dei pin. L'unica cosa a cui fare attenzione è la tensione: i pin danno 3,3 V, perciò il verde e il blu, con una tensione diretta vicina ai 3 V, sono più deboli. A 3,3 V usa resistenze piccole, da 47–100 Ω, oppure pilota il LED a 5 V tramite un transistor se vuoi molta luce. Sul Pico la classe PWM di MicroPython accetta valori da 0 a 65535:
1from machine import Pin, PWM
2import time
3
4pins = [PWM(Pin(n)) for n in (11, 12, 13)] # GP11 R, GP12 G, GP13 B
5for p in pins:
6 p.freq(1000)
7
8def set_color(r, g, b): # 0–255
9 for p, v in zip(pins, (r, g, b)):
10 p.duty_u16(v * 257) # 0–65535 (ortak anotta 65535 - v * 257)
11
12while True:
13 set_color(255, 0, 0); time.sleep(1) # kırmızı / red
14 set_color(0, 255, 0); time.sleep(1) # yeşil / green
15 set_color(0, 0, 255); time.sleep(1) # mavi / blueLED RGB normale o LED indirizzabile (WS2812B)?
| Caratteristica | LED RGB normale | WS2812B (NeoPixel) |
|---|---|---|
| Pin necessari | 3 pin PWM per ogni LED | 1 pin dati per tutta la striscia |
| Controllo del colore | Con le uscite PWM di Arduino | Con un minuscolo chip dentro ogni LED |
| Libreria | Non serve | Adafruit NeoPixel o FastLED |
| Ideale per | 1–2 LED, indicatori di stato | Strisce, anelli, matrici, luci d'atmosfera |
Per una o due luci colorate, il LED RGB normale è la soluzione più semplice ed economica. Se vuoi colorare decine di LED singolarmente, i 6 pin PWM dell'Uno non bastano; a quel punto conviene passare alle strisce WS2812B, che controllano centinaia di LED con un solo filo.
Idee di progetti con il LED RGB
- Lampada d'atmosfera: metti l'effetto arcobaleno dentro un barattolo smerigliato per una luce notturna morbida.
- Indicatore di temperatura: abbinalo a un DHT11 per una lampada blu quando fa freddo, verde quando è mite e rossa quando fa caldo.
- Miscelatore di colori: crea qualsiasi colore a mano con tre potenziometri.
- Scegliere il colore dal telefono: cambia il colore della lampada da un selettore su una pagina web servita da un ESP32.
- Luce di notifica: fai lampeggiare il LED di un certo colore quando arriva una nuova email o un messaggio.
- Colori da tastierino: mostra un colore diverso in base al numero digitato su un tastierino.
Errori comuni e come risolverli
- I colori funzionano al contrario: stai pilotando un LED ad anodo comune come se fosse a catodo comune; imposta COMMON_ANODE a true.
- Un colore non si accende mai: l'ordine dei piedini potrebbe essere diverso da quello previsto; prova ogni piedino con una resistenza.
- Le transizioni vanno a scatti, senza sfumature: il LED è su un pin senza PWM; sull'Uno quei pin possono solo essere accesi o spenti.
- I colori impazziscono mentre suona un buzzer: sull'Uno tone() usa il Timer2 e disturba il PWM dei pin 3 e 11; sposta il LED RGB su pin come 5, 6, 9 e 10.
- Non usare resistenze: troppa corrente col tempo danneggia sia il LED sia il pin di Arduino.
- Molto debole sull'ESP32: a 3,3 V il verde e il blu sono al limite; usa resistenze più piccole o un transistor.
Se vuoi capire le basi dei LED e perché servono le resistenze, dai un'occhiata a Cos'è un LED? e Cos'è una resistenza? Nell'app BlueGrays trovi progetti di sfumatura colori con LED RGB, lampada comandata da tastierino e miscelatore di colori, con schemi e codice.
Domande frequenti
Come capisco se il mio LED RGB è ad anodo comune o a catodo comune?
Collega il piedino lungo a GND e tocca il 5V con un altro piedino tramite 220 Ω; se si accende, è a catodo comune. Se no, collega il piedino lungo al 5V e l'altro piedino a GND tramite la resistenza; se ora si accende, è ad anodo comune. Anche la prova diodi di un multimetro funziona.
Che resistenza serve per un LED RGB?
A 5 V l'ideale è circa 150 Ω per il rosso e circa 100 Ω per il verde e il blu. Per semplicità, 220 Ω su tutti e tre è sicuro e dà comunque abbastanza luce. Una resistenza per ogni colore è obbligatoria.
Quanti colori può produrre un LED RGB?
Ogni canale ha 256 livelli di luminosità, da 0 a 255, quindi in teoria ci sono 16,7 milioni di combinazioni. In pratica l'occhio distingue meno colori e le differenze di luminosità tra i LED avvicinano alcune tonalità.
Perché il mio LED RGB sembra azzurrino invece che bianco?
I tre LED hanno luminosità diverse e l'occhio non è ugualmente sensibile a tutti i colori; di solito prevalgono il blu e il verde. Abbassa un po' questi due canali nel codice, o usa resistenze più grandi su di essi, per un bianco più neutro.
Cosa succede se collego un LED RGB a un pin senza PWM?
Quel canale funzionerà solo tutto acceso o tutto spento; analogWrite considera acceso da 128 in su e spento sotto. Se tutti e tre i canali sono così, avrai solo 8 colori base e nessuna transizione morbida.
Quanti LED RGB può controllare un Arduino Uno?
L'Uno ha 6 pin PWM, quindi puoi pilotare al massimo 2 LED RGB con colori indipendenti. Per averne di più usa un driver PWM a 16 canali come il PCA9685, oppure strisce WS2812B che controllano centinaia di LED con un solo pin.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Utilizzo dei LED RGB
Progetto di base che fa lampeggiare in sequenza i colori rosso, verde e blu del LED RGB. Insegna il controllo dei LED RGB a catodo comune.

Transizione cromatica omogenea con LED RGB
Progetto che crea un morbido effetto arcobaleno commutando gradualmente i colori del LED RGB con analogWrite. Insegna la logica della miscelazione dei colori e l'animazione di transizione con PWM.

Controllo LED RGB con tastierino
Questo progetto consente di gestire il LED RGB tra modalità e colori tramite la tastiera 4x4. Grazie alla struttura millis(), i comandi vengono elaborati senza ritardi. 🎮 Guida all'uso: Tasto A: Velocità fissa Effetto dissolvenza. Tasto B: transizione graduale con velocità regolabile. C / D: Aumenta / Diminuisce la velocità dell'effetto. 1 - 9: Selezione rapida del colore master. * / #: Colori intermedi speciali (rosa, verde chiaro, ecc.). Tasto 0: spegne il sistema.

Controllo LED RGB ESP32
Generazione illimitata di colori con un singolo LED RGB invece di 3 LED separati. La transizione arcobaleno avviene impostando i valori R/G/B con analogWrite() come in Arduino. La teoria dei colori (come rosso+verde=giallo) viene vista in pratica.

Lampada con miscelatore di colori ESP32 (3 potenziometri + LED RGB + OLED)
Una lampada mista colori intelligente che, ruotando i 3 potenziometri con l'ESP32, permette di miscelare il colore desiderato! Man mano che si ruotano i potenziometri rosso, verde e blu, il LED RGB a catodo comune cambia colore istantaneamente. Sul display OLED SSD1306 vengono visualizzati in tempo reale i valori compresi tra 0 e 255 per ogni colore, le barre di riempimento visive e il codice colore HEX (#FF8040, ad esempio). Un mini studio di colore professionale: insegna la teoria dei colori R

Raspberry Pi Pico LED RGB Ciclo di Colori (PWM a 3 Canali, GP11-13)
Un LED, milioni di colori! 🌈 Un LED RGB contiene 3 LED: rosso, verde e blu. Con un canale PWM del Pico per ciascuno, i colori si mescolano: rosso + verde = giallo, verde + blu = ciano, tutti e tre = bianco. Il LED scorre 8 colori. Impara più canali PWM, funzioni (def), miscelazione RGB, conversione da 8 a 16 bit (x257) e catodo comune vs anodo comune.

Controllo della striscia LED NeoPixel WS2812B con ESP32
I LED indirizzabili WS2812B (NeoPixel) sono LED RGB intelligenti che possono essere controllati in cascata tramite un unico pin dati. In questo progetto controlleremo una striscia WS2812B da 8 LED utilizzando la libreria Adafruit_NeoPixel per creare un'animazione fluida dell'arcobaleno. Sebbene il livello logico a 3,3 V dell'ESP32 funzioni senza problemi con la maggior parte dei componenti WS2812B, in caso di instabilità mostreremo la soluzione con una resistenza in serie da 470 Ω e un condensat

Utilizzo di WS2812B
Progetto che dimostra l'uso di base della striscia LED indirizzabile WS2812B regolando il colore di ciascun LED in modo indipendente. Insegna il controllo del colore basato su pixel con la libreria Fa
Altri articoli
Impara come un LED RGB crea milioni di colori con tre LED in un unico involucro, come distinguere anodo e catodo comune, scegliere le resistenze giuste e sfumare i colori con Arduino.

