Luci di Natale con Arduino: sequenza di 6 LED
Realizziamo diversi effetti luminosi con sei LED: accensione progressiva, lampeggio simultaneo e sequenze simmetriche, imparando a usare cicli for e funzioni.
Cosa imparerai
- come pilotare più LED con Arduino;
- come usare un ciclo
forper evitare codice ripetitivo; - come creare e richiamare funzioni dedicate agli effetti;
- come accendere LED in sequenza e a coppie;
- come organizzare un programma con più animazioni;
- perché è meglio evitare i pin seriali quando non servono.
Come funziona il progetto
Il progetto utilizza sei LED — due rossi, due verdi e due gialli — per realizzare una serie di effetti luminosi. Il programma alterna tre stili principali con un lampeggio di tutti i LED tra una sequenza e l’altra.
Materiale necessario
🧰 Kit Arduino consigliato
Molti progetti del sito utilizzano LED, resistenze, breadboard e cavetti. Un kit completo può essere comodo per iniziare.
👉 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 del circuito
Schema di collegamento delle luci di Natale con 6 LED.
Collegamento dei LED
Nello sketch i sei LED sono collegati ai pin da D1 a D6. L’ordine suggerito è:
| Pin | Colore suggerito |
|---|---|
| D1 | Rosso |
| D2 | Verde |
| D3 | Giallo |
| D4 | Giallo |
| D5 | Verde |
| D6 | Rosso |
Serial, ma se vuoi mantenere libera la comunicazione seriale è preferibile usare, per esempio, D2–D7.Come sono organizzati gli effetti
| Funzione | Effetto |
|---|---|
stile1() | Accensione progressiva 1→6 e spegnimento 6→1 |
lampo() | Tutti i LED lampeggiano insieme due volte |
stile2() | Accensione e spegnimento simmetrico dal centro verso l’esterno |
stile3() | Accensione a coppie simmetriche |
Codice Arduino commentato
// ==========================================================
// LUCI DI NATALE CON ARDUINO - 6 LED
// Sequenze con cicli for e funzioni
// ==========================================================
// Lo sketch usa i pin da 1 a 6.
// Il pin 1 è anche TX della seriale: non usiamo Serial.
const int primoLed = 1;
const int ultimoLed = 6;
// ----------------------------------------------------------
// EFFETTO 1
// Accende i LED da 1 a 6 e poi li spegne da 6 a 1.
// ----------------------------------------------------------
void stile1() {
// Accensione progressiva
for (int pin = primoLed; pin <= ultimoLed; pin++) {
digitalWrite(pin, HIGH);
delay(200);
}
// Spegnimento progressivo in senso inverso
for (int pin = ultimoLed; pin >= primoLed; pin--) {
digitalWrite(pin, LOW);
delay(200);
}
}
// ----------------------------------------------------------
// LAMPEGGIO
// Accende e spegne contemporaneamente tutti i LED
// per due volte.
// ----------------------------------------------------------
void lampo() {
for (int ripetizione = 0; ripetizione < 2; ripetizione++) {
// Accende tutti i LED
for (int pin = primoLed; pin <= ultimoLed; pin++) {
digitalWrite(pin, HIGH);
}
delay(200);
// Spegne tutti i LED
for (int pin = primoLed; pin <= ultimoLed; pin++) {
digitalWrite(pin, LOW);
}
delay(200);
}
}
// ----------------------------------------------------------
// EFFETTO 2
// Accensione simmetrica partendo dalla coppia centrale:
// 3-4, poi 2-5, poi 1-6.
// Successivamente spegne le coppie.
// ----------------------------------------------------------
void stile2() {
// Distanza iniziale tra i due pin della coppia
int offset = 1;
// Accensione dal centro verso l'esterno
for (int pin = 3; pin >= 1; pin--) {
digitalWrite(pin, HIGH);
digitalWrite(pin + offset, HIGH);
delay(400);
// 1, 3, 5
offset += 2;
}
// Riparte dall'esterno per lo spegnimento
offset = 5;
for (int pin = 1; pin <= 3; pin++) {
digitalWrite(pin, LOW);
digitalWrite(pin + offset, LOW);
delay(400);
offset -= 2;
}
}
// ----------------------------------------------------------
// EFFETTO 3
// Fa lampeggiare le coppie simmetriche:
// 1-6, 2-5, 3-4 e poi torna indietro.
// ----------------------------------------------------------
void stile3() {
int offset = 5;
// Dall'esterno verso il centro
for (int pin = 1; pin <= 3; pin++) {
digitalWrite(pin, HIGH);
digitalWrite(pin + offset, HIGH);
delay(400);
digitalWrite(pin, LOW);
digitalWrite(pin + offset, LOW);
offset -= 2;
}
// Dal centro verso l'esterno
offset = 3;
for (int pin = 2; pin >= 1; pin--) {
digitalWrite(pin, HIGH);
digitalWrite(pin + offset, HIGH);
delay(400);
digitalWrite(pin, LOW);
digitalWrite(pin + offset, LOW);
offset += 2;
}
}
void setup() {
// Configura i pin da 1 a 6 come uscite.
for (int pin = primoLed; pin <= ultimoLed; pin++) {
pinMode(pin, OUTPUT);
}
}
void loop() {
// Sequenza completa degli effetti
stile1();
lampo();
stile2();
lampo();
stile3();
lampo();
}
Perché usare il ciclo for
Quando dobbiamo eseguire la stessa operazione su più pin consecutivi, il ciclo for evita di scrivere sei volte le stesse istruzioni.
for (int pin = 1; pin <= 6; pin++) {
digitalWrite(pin, HIGH);
}
In poche righe Arduino accende tutti i pin da 1 a 6.
Perché dividere il programma in funzioni
Invece di inserire l’intera sequenza dentro loop(), ogni effetto è contenuto in una funzione separata. Questo rende il programma più leggibile e permette di cambiare facilmente l’ordine degli effetti.
stile1(), stile2() e stile3() sono blocchi di codice riutilizzabili. Nel loop() basta richiamarle nell’ordine desiderato.Simulazione Tinkercad
▶️ Apri la simulazione TinkercadVersione consigliata con pin D2–D7
Per evitare il pin TX puoi usare D2–D7. In tal caso basta cambiare la numerazione e adattare la logica delle coppie oppure, ancora meglio, usare un array di pin.
// Sei LED collegati ai pin D2...D7
const int led[] = {2, 3, 4, 5, 6, 7};
const int numeroLed = 6;
void setup() {
for (int i = 0; i < numeroLed; i++) {
pinMode(led[i], OUTPUT);
}
}
void loop() {
// Accensione progressiva
for (int i = 0; i < numeroLed; i++) {
digitalWrite(led[i], HIGH);
delay(200);
}
// Spegnimento progressivo inverso
for (int i = numeroLed - 1; i >= 0; i--) {
digitalWrite(led[i], LOW);
delay(200);
}
}
Scarica lo sketch
⬇️ Scarica lo sketch ArduinoDebug rapido
- controlla la polarità di ogni LED;
- usa una resistenza da circa 220 Ω per ciascun LED;
- verifica che ogni LED sia collegato al pin previsto dallo sketch;
- se usi D1, evita di usare contemporaneamente la comunicazione seriale;
- se una coppia si accende in ordine sbagliato, controlla la disposizione fisica dei LED;
- se vuoi rallentare gli effetti, aumenta i valori di
delay().
Varianti del progetto
- usare 8 o 10 LED;
- aggiungere effetti casuali con
random(); - controllare la velocità con un potenziometro;
- eliminare i
delay()usandomillis(); - usare un registro a scorrimento 74HC595 per aumentare il numero di uscite;
- realizzare una vera decorazione natalizia a bassa tensione.
Cosa devi ricordare
- Il progetto controlla sei LED indipendenti.
- I cicli
forevitano codice ripetitivo. - Ogni effetto è organizzato in una funzione separata.
- Il progetto usa i pin D1–D6.
- D1 è anche TX: per nuovi circuiti è preferibile usare altri pin.
- Arduino e breadboard non devono essere collegati direttamente alla rete 230 V.
Domande frequenti
Perché il progetto usa il pin 1?
È una scelta dello sketch. Su Arduino Uno D1 è anche TX della seriale, quindi oggi è generalmente più comodo usare pin come D2–D7.
Posso aggiungere altri LED?
Sì, entro i limiti elettrici della scheda. Per molti LED è meglio usare driver, transistor o registri a scorrimento invece di caricare direttamente numerosi pin.
Posso collegare una catena di luci a 230 V?
Non direttamente. Questo progetto riguarda LED a bassa tensione. La rete elettrica richiede isolamento, componenti adatti e competenze specifiche.
Posso cambiare l’ordine degli effetti?
Sì. Basta modificare l’ordine delle chiamate stile1(), lampo(), stile2() e stile3() dentro loop().

