🎄 Arduino • 6 LED • Sequenze

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.

DifficoltàPrincipiante / Intermedia
LED6 canali
Concettifor + funzioni
In poche parole: Arduino controlla sei LED indipendenti e richiama più funzioni per creare diversi giochi di luce, simili alle sequenze decorative di una catena natalizia.

Cosa imparerai

  • come pilotare più LED con Arduino;
  • come usare un ciclo for per 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.

Sicurezza: questo tutorial è pensato per LED a bassa tensione collegati ad Arduino. Non collegare Arduino, breadboard o LED direttamente alla rete elettrica a 230 V. Per carichi di rete servono isolamento, dispositivi certificati e competenze specifiche.

Materiale necessario

🔌 Arduino Uno
💡 6 LED
〰️ 6 resistenze da 220 Ω
🧩 Breadboard
🔗 Cavetti jumper

🧰 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 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 del circuito

Schema Arduino luci di Natale con 6 LED

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 è:

PinColore suggerito
D1Rosso
D2Verde
D3Giallo
D4Giallo
D5Verde
D6Rosso
Nota sul pin D1: su Arduino Uno il pin 1 è anche TX della porta seriale. Il circuito funziona senza usare Serial, ma se vuoi mantenere libera la comunicazione seriale è preferibile usare, per esempio, D2–D7.

Come sono organizzati gli effetti

FunzioneEffetto
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 Arduino – 6 LED
// ==========================================================
// 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.

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

Concetto chiave: funzioni come stile1(), stile2() e stile3() sono blocchi di codice riutilizzabili. Nel loop() basta richiamarle nell’ordine desiderato.

Simulazione Tinkercad

▶️ Apri la simulazione Tinkercad

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

Esempio moderno con array
// 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 Arduino

Debug 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() usando millis();
  • 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 for evitano 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().