Cerca codice

Lezione 98-10: Semaforo con Arduino

Lezione 98-10: Semaforo con Arduino

I semafori sono uno di quei sistemi quotidiani a cui raramente pensiamo — finché non ne costruiamo uno. In questo progetto, userai un Arduino per simulare una vera sequenza di semaforo: verde acceso, poi giallo, poi rosso, ciascuno per la sua durata configurabile, ripetendosi all'infinito. È un progetto perfetto per principianti perché insegna la logica della temporizzazione sequenziale, il controllo di più uscite e la relazione tra ciò che scrivi nel codice e ciò che vedi nel mondo fisico.

Semaforo nella vita reale con tre colori

Oltre alla dimostrazione in aula, la logica di temporizzazione che impari qui si ritrova ovunque:

  • Costruire un modello realistico di semaforo per un plastico ferroviario o un diorama
  • Creare un sistema di indicatori temporizzati per un'officina o un garage (ad es. segnali "via libera" / "attendi")
  • Imparare le basi per i semafori pedonali con fasi attivate da pulsante
  • Prototipare una sequenza di relè temporizzata per attività industriali o di domotica
  • Insegnare ai bambini il sequenziamento, la temporizzazione e l'elettronica con un oggetto familiare e riconoscibile

La parte migliore: tutto funziona in modo autonomo una volta caricato. Programmi l'Arduino una volta dal computer, poi lo alimenti con una batteria o un adattatore e funziona per sempre — nessun PC necessario (nel video a 12:27).

red, green and yellow leds on bread board for traffic light project
LED rossi, verdi e gialli sulla breadboard per il progetto del semaforo

Come funziona il semaforo

Un semaforo in realtà è solo una sequenza temporizzata di tre uscite. L'Arduino accende un LED alla volta, attende un numero prestabilito di secondi, lo spegne e passa al successivo. Il ciclo poi si ripete. Nella temporizzazione di esempio del video, il verde resta acceso per 3 secondi, il giallo per 1 secondo e il rosso per 3 secondi — ma tutti questi valori sono regolabili nel codice (nel video a 49:44).

traffic light timing: red light
temporizzazione del semaforo: luce rossa
traffic light timing: yellow light
temporizzazione del semaforo: luce gialla
traffic light timing: green light
temporizzazione del semaforo: luce verde

Il motivo per cui la sequenza sembra realistica è che le durate rispecchiano il flusso del traffico reale: verde e rosso sono più lunghi perché i veicoli hanno bisogno di tempo per attraversare l'incrocio, mentre il giallo è breve perché è solo un avviso di transizione. Puoi regolarli per adattarli a qualsiasi scenario desideri.

Hardware e componenti

La lista dei componenti per questo progetto è minima:

  • 1 × scheda Arduino (Uno, Nano o Mega — qualsiasi cosa con almeno 3 pin digitali)
  • 3 × LED (rosso, giallo/arancione e verde — colori diversi rendono l'effetto evidente)
  • 3 × resistori (da 300 Ω a 1 kΩ funzionano bene; il video usa 1 kΩ)
  • 1 × breadboard
  • Cavi jumper
  • Opzionale: una batteria agli ioni di litio o un adattatore di alimentazione da 5 V per farlo funzionare in modo autonomo

Il video consiglia di usare tre LED di colori distinti in modo che l'effetto semaforo sia immediatamente visibile — altrimenti dovresti etichettarli (nel video a 02:04).

Comprendere la limitazione di corrente dei LED

Ogni LED necessita di un resistore limitatore di corrente in serie. Ecco perché: un LED ha una tensione diretta quasi fissa (tipicamente intorno a 2 V per i LED standard da 5 mm), e se lo colleghi direttamente a 5 V, la corrente aumenterà bruscamente e lo distruggerà. Il resistore assorbe la tensione in eccesso.

Usando la legge di Ohm, se il LED cade di 2 V e l'alimentazione è 5 V, allora 3 V devono cadere ai capi del resistore. Con una corrente target di circa 10 mA, il valore del resistore risulta essere circa 300 Ω (nel video a 04:41). In pratica, qualsiasi valore da 300 Ω fino a 1 kΩ funzionerà — valori più alti rendono semplicemente il LED più fioco.

Guida al cablaggio

Schematic of Arduino traffic light
Schema del semaforo con Arduino
Arduino LED traffic lights wiring
Cablaggio del semaforo a LED con Arduino

Ogni LED è cablato in modo identico: l'anodo (gamba più lunga) si collega a un pin digitale dell'Arduino, e il catodo (gamba più corta, lato piatto del corpo del LED) si collega attraverso un resistore a massa.

Nel cablaggio del video, il LED rosso si collega al pin 2, il LED giallo/arancione al pin 3 e il LED verde al pin 4 (nel video a 50:50). Tutti e tre i resistori condividono una barra di massa comune sulla breadboard. L'ordine dei colori sulla breadboard non ha importanza — ciò che conta è che i numeri dei pin nel tuo codice corrispondano ai pin che hai effettivamente usato.

Un consiglio utile dal video: la resistenza può essere posizionata su entrambi i lati del LED. Puoi metterla tra il pin di Arduino e l'anodo del LED, oppure tra il catodo del LED e la massa — elettricamente è lo stesso (nel video a 51:52).

Spiegazione del codice

Il programma completo è disponibile sotto l'articolo. Qui ci concentreremo sulle parti che vorrai personalizzare.

All'inizio dello sketch, tre definizioni di pin mappano ciascun LED a un pin digitale. Se hai collegato i tuoi LED a pin diversi, modifica questi valori:

const int greenLED = 4;
const int yellowLED = 3;
const int redLED = 2;

Poi vengono le costanti di temporizzazione. Queste controllano per quanto tempo ogni luce rimane accesa, in millisecondi. Il video utilizza 5000 ms per il verde, 1000 ms per il giallo e 5000 ms per il rosso come impostazione predefinita — ma durante la dimostrazione questi sono stati modificati in 3 s / 1 s / 3 s, e successivamente in 10 s / 3 s / 10 s (nel video a 56:27):

const int greenOnTime = 5000;
const int yellowOnTime = 1000;
const int redOnTime = 5000;

Per cambiare il ritmo del tuo semaforo, modifica semplicemente questi tre valori. Vuoi un incrocio lento e realistico? Prova 10000, 3000, 10000. Vuoi una demo veloce? Prova 1000, 300, 1000.

All'interno di loop(), la sequenza è semplice: accendi il verde, attendi, spegni il verde; accendi il giallo, attendi, spegni il giallo; accendi il rosso, attendi, spegni il rosso; poi torna al verde. Il monitor seriale stampa ogni cambio di stato così puoi verificare che la temporizzazione corrisponda a ciò che ti aspetti.

Dimostrazione dal vivo

Una volta caricato il codice, l'Arduino esegue il ciclo da solo. Nel video, il LED verde si accende per primo, poi dopo la sua durata il giallo si accende brevemente, poi il rosso, e il ciclo ricomincia immediatamente (nel video a 55:20).

Il monitor seriale rispecchia questo in testo — "green LED on", "green off", "yellow on", e così via — il che è un ottimo modo per confermare che i tuoi valori di temporizzazione funzionano come previsto. Quando sei pronto a farlo funzionare senza fili, scollega l'USB e collega una batteria agli ioni di litio o un adattatore da 5 V; l'Arduino continuerà a ciclare senza un computer (nel video a 56:11).

Progetti correlati da questo video

Capitoli

  • [00:00] Panoramica dei 10 progetti LED con Arduino
  • [01:22] Introduzione al corso passo passo su Arduino
  • [02:29] Cos'è un LED: simbolo, anodo e catodo
  • [03:49] Calcolo della resistenza limitatrice di corrente del LED
  • [49:25] Introduzione al progetto del semaforo
  • [49:44] Spiegazione della temporizzazione del semaforo
  • [50:34] Schema di collegamento per il semaforo
  • [52:13] Spiegazione del codice per il semaforo
  • [54:32] Dimostrazione dal vivo con monitor seriale
  • [55:30] Modifica dei valori di temporizzazione
  • [56:11] Esecuzione del semaforo a batteria

Immagini

traffic light timing: green light
traffic light timing: green light
traffic light timing: yellow light
traffic light timing: yellow light
traffic light timing: red light
traffic light timing: red light
Schematic of Arduino traffic light
Schematic of Arduino traffic light
traffic_lights
traffic_lights
Arduino LED traffic lights wiring
Arduino LED traffic lights wiring
red, green and yellow leds on bread board for traffic light project
red, green and yellow leds on bread board for traffic light project
942-Lessson 98-LED-10: Arduino code traffic light
Lingua: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

File📁

Librerie Arduino (zip)

Manuale dell'utente