LED RGB con potenziometro e Arduino
Usa un potenziometro per trasformare un ingresso analogico in un controllo PWM della luminosità del canale rosso di un LED RGB.
🚀 Introduzione
In questo progetto utilizzeremo un potenziometro da 10 kΩ per controllare la luminosità di uno dei canali di un LED RGB. Arduino legge la posizione della manopola sull’ingresso analogico A0 e converte il valore ottenuto nel range utilizzato dal PWM.
Lo sketch originale controlla soltanto il canale rosso del LED RGB. I pin verde e blu vengono configurati come uscite, ma non vengono ancora modulati nel loop().
🎯 Cosa imparerai
- leggere un potenziometro con analogRead();
- comprendere l’intervallo ADC 0–1023 di Arduino UNO;
- ridimensionare un valore con map();
- controllare la luminosità con analogWrite();
- usare un LED RGB a catodo comune;
- capire la differenza tra ingresso analogico e uscita PWM;
- preparare le basi per un vero mixer RGB a tre controlli.
🧰 Materiale necessario
🛒 Non hai ancora i componenti?
Un kit Arduino per principianti contiene molti dei componenti elettronici utilizzati nei progetti del sito.
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?
Nei miei libri trovi spiegazioni progressive, schemi chiari e numerosi progetti pratici.
Scopri i miei libri 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
| Componente | Collegamento |
|---|---|
| LED RGB — Rosso | D9 tramite resistenza 220 Ω |
| LED RGB — Verde | D10 tramite resistenza 220 Ω |
| LED RGB — Blu | D11 tramite resistenza 220 Ω |
| LED RGB — Catodo comune | GND |
| Potenziometro — estremo 1 | 5 V |
| Potenziometro — cursore centrale | A0 |
| Potenziometro — estremo 2 | GND |

⚖️ Perché servono tre resistenze?
Il LED RGB contiene tre LED indipendenti, quindi ogni canale deve avere la propria resistenza di limitazione della corrente. Anche se in questo sketch viene modulato soltanto il rosso, è corretto predisporre una resistenza per ciascun colore.
💻 Codice Arduino
// ============================================
// Progetto 18 - LED RGB con potenziometro
// Il potenziometro controlla il colore
// ============================================
// Pin RGB
int redPin = 9;
int greenPin = 10;
int bluePin = 11;
// Pin potenziometro
int potPin = A0;
// Variabile lettura
int potValue = 0;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// Legge il valore del potenziometro
potValue = analogRead(potPin);
// Converte il valore da 0-1023 a 0-255
int brightness = map(potValue, 0, 1023, 0, 255);
// Controlla il colore rosso
analogWrite(redPin, brightness);
}⚙️ Come funziona il programma
Il funzionamento è molto lineare:
analogRead(A0) restituisce un valore da 0 a 1023.
map() trasforma 0–1023 in 0–255.
analogWrite(redPin, brightness) applica il nuovo duty cycle al canale rosso.
Il loop continua rapidamente e segue la posizione della manopola.
📊 Cosa legge analogRead()
Arduino UNO dispone di un convertitore analogico-digitale a 10 bit. Per questo analogRead() restituisce valori da 0 a 1023.
| Posizione indicativa | Valore ADC |
|---|---|
| Minimo | circa 0 |
| Metà corsa | circa 512 |
| Massimo | circa 1023 |
🔄 Perché usiamo map()
Il range dell’ADC e quello usato da analogWrite() non coincidono. Lo sketch usa quindi:
int brightness = map(potValue, 0, 1023, 0, 255);In questo modo una lettura bassa produce un valore PWM basso, mentre una lettura alta produce un valore vicino a 255.
💡 analogWrite() non genera una vera tensione analogica
Su Arduino UNO, analogWrite() sui pin PWM non produce una tensione continua variabile come farebbe un vero DAC. Genera invece un segnale digitale che passa rapidamente tra LOW e HIGH variando il duty cycle.
🎚️ Cosa significa 0–255 nel PWM
| Valore | Effetto indicativo |
|---|---|
| 0 | Canale spento |
| 64 | Luminosità bassa |
| 128 | Duty cycle circa 50% |
| 192 | Luminosità elevata |
| 255 | Canale sempre attivo |
🌈 Perché il progetto non cambia davvero colore?
Il titolo originale parla di controllo del colore, ma lo sketch attuale modifica solamente la luminosità del rosso. I canali verde e blu sono configurati come uscite ma non ricevono alcun analogWrite().
💡 Catodo comune e anodo comune
Lo schema è pensato per un LED RGB a catodo comune: il terminale comune è collegato a GND e un duty cycle maggiore aumenta la luminosità del canale.
🔧 Problemi comuni
Controlla che il cursore centrale del potenziometro sia realmente collegato ad A0.
Verifica catodo comune, pin rosso e resistenza.
Scambia i due terminali laterali del potenziometro.
L’ordine fisico dei pin RGB del tuo LED potrebbe essere differente.
Le letture analogiche possono oscillare di qualche unità; è normale entro certi limiti.
Potresti avere un LED RGB ad anodo comune.
🧠 Cosa devi ricordare
- analogRead() restituisce 0–1023 su Arduino UNO;
- map() converte il range in 0–255;
- analogWrite() usa PWM, non una vera uscita analogica continua;
- il potenziometro controlla soltanto il canale rosso nello sketch originale;
- ogni canale RGB deve avere la propria resistenza;
- il LED utilizzato è a catodo comune;
- tre controlli indipendenti permetteranno di realizzare un vero mixer RGB.
🔄 Varianti possibili
Uno per rosso, uno per verde e uno per blu.
Combina i tre canali per creare moltissimi colori.
Genera transizioni senza usare la manopola.
Mostra il valore ADC e il livello PWM.
Usa il colore o la luminosità per rappresentare una misura.
Regola RGB tramite Bluetooth o Wi-Fi.

