Blog
Progetto semaforo basato su Arduino Uno
I semafori sono qualcosa che vediamo ogni giorno sulle strade. Controllano il flusso dei veicoli e mantengono il traffico in modo organizzato senza incidenti. La maggior parte delle persone non pensa mai a come funzionino effettivamente queste luci, ma l'idea alla base è piuttosto semplice una volta scomposta.
In questo articolo, costruiremo un piccolo modello di un sistema semaforico utilizzando un Arduino Uno, alcuni LED e una breadboard. Questo è uno dei progetti più comuni per principianti in elettronica e sistemi embedded perché insegna le basi del controllo dell'output digitale, della temporizzazione e della costruzione di circuiti, tutto in un unico progetto semplice.
Alla fine di questo articolo, comprenderai come funziona un vero semaforo, come collegare i componenti tra loro, come scrivere il codice per esso e come testarlo sulla tua scheda Arduino.
Perché questo progetto è un buon punto di partenza
Chiunque sia nuovo ad Arduino o all'elettronica spesso fatica a trovare un progetto abbastanza semplice da capire ma che insegni comunque qualcosa di utile. Il progetto del semaforo è perfetto per questo perché richiede solo una manciata di componenti, il cablaggio non è complicato e il codice è breve e facile da seguire. Allo stesso tempo, introduce alcuni concetti molto importanti come:
- Come collegare i LED in sicurezza con le resistenze
- Come funzionano i pin digitali su un microcontrollore
- Come controllare i tempi usando i ritardi
- Come strutturare un programma usando i cicli
Questi sono gli stessi mattoni utilizzati in progetti molto più avanzati, quindi impararli qui fornisce una solida base per qualsiasi altra cosa si possa costruire in seguito.
Componenti necessari
Per costruire questo progetto, non sono necessarie molte parti. Ecco l'elenco completo:
- Scheda Arduino Uno
- Cavo USB per collegare l'Arduino a un computer
- Breadboard
- LED rosso
- LED giallo
- LED verde
- Tre resistori (220 ohm è un buon valore per i LED)
- Cavi jumper (maschio maschio)
Tutte queste parti sono economiche e facilmente reperibili in qualsiasi negozio di elettronica o online. Se sei uno studente o un hobbista, potresti già avere la maggior parte di queste cose da altri piccoli progetti. Per futuri progetti di business, PCBCool può anche supportare approvvigionamento di componenti, aiutando i clienti a gestire la disponibilità e l'approvvigionamento delle distinte base insieme a Assemblaggio PCB.
Capire come funziona un vero semaforo
Prima di immergersi nel cablaggio, è utile capire il modello effettivo che seguono i semafori nella vita reale. Un normale segnale stradale ha tre colori e ognuno ha un significato:
- Rosso significa fermarsi. I veicoli non devono muoversi.
- Giallo significa prepararsi. La luce sta per cambiare, quindi gli automobilisti dovrebbero rallentare.
- Il verde significa vai. I veicoli sono autorizzati a muoversi.
Il ciclo normale nella maggior parte dei paesi funziona così: la luce rimane rossa per un po' di tempo, poi diventa verde, quindi, prima di tornare rossa, mostra brevemente il giallo come avvertimento. Questo ciclo si ripete continuamente. Il nostro progetto Arduino copierà questo stesso schema utilizzando i LED anziché grandi luci per il traffico.
Schema elettrico e cablaggio
Il cablaggio per questo progetto è molto semplice perché stiamo lavorando solo con tre LED. Ogni LED deve essere collegato a un pin digitale sull'Arduino tramite un resistore, e l'altro terminale di ogni LED deve essere collegato al pin di massa.
Di seguito è riportato lo schema del circuito che mostra come tutto dovrebbe essere collegato. Il LED rosso, il LED giallo e il LED verde sono posizionati sulla breadboard e ognuno di essi è collegato all'Arduino tramite cavi jumper colorati. Notare come il filo nero scorra lungo il binario inferiore della breadboard per fornire una connessione di massa comune per tutti e tre i LED.
Come mostrato nel diagramma, i collegamenti sono:
- LED rosso collegato al pin digitale 9
- LED giallo collegato al pin digitale 8
- LED verde collegato al pin digitale 7
- Tutte le zampe di massa dei LED sono collegate al pin GND di Arduino attraverso la barra di massa della breadboard
Puoi usare PIN diversi se preferisci, basta assicurarsi che i PIN nel tuo codice corrispondano ai PIN che colleghi effettivamente.
Passaggi di cablaggio
Ecco una spiegazione passo passo per costruire il circuito:
- Posiziona l'Arduino accanto alla breadboard in modo che i fili possano arrivare comodamente dall'altra parte.
- Inserisci i LED rosso, giallo e verde sulla breadboard, lasciando un po' di spazio tra loro. Ogni LED ha due piedini, uno più lungo (positivo) e uno più corto (negativo).
- Collega un resistore da 220 ohm alla gamba più lunga (positiva) di ciascun LED. Il resistore protegge il LED da una corrente eccessiva, che potrebbe bruciarlo.
- Esegui un ponticello dall'altra estremità di ciascuna resistenza ai pin digitali dell'Arduino (9, 8 e 7 nel nostro esempio).
- Collega la zampa più corta (negativa) di ciascun LED alla guida di terra sulla breadboard.
- Infine, collega il binario di massa sulla breadboard al pin GND sull'Arduino utilizzando un singolo filo jumper.
Una volta completato questo cablaggio, il tuo breadboard e Arduino dovrebbero assomigliare all'immagine sottostante, mostrando l'allestimento fisico completato con tutti e tre i LED collegati e cablati alla scheda.
In questa foto, si può vedere l'Arduino Uno alimentato tramite un cavo USB, con cavi jumper che scendono sulla breadboard dove sono posizionati i tre LED in fila. Questo corrisponde esattamente a quanto descritto nello schema del circuito, solo in forma fisica reale anziché un disegno.
Scrivere il codice
Ora che l'hardware è pronto, dobbiamo scrivere il programma che controllerà i LED. Il linguaggio di programmazione Arduino si basa su C e C++, ma per un progetto come questo, è necessario conoscere solo alcuni comandi di base.
Ecco il codice completo per il progetto del semaforo:
int redLED = 9;
int yellowLED = 8;
int greenLED = 7;
void setup() {
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
}
void loop() {
// Accensione della luce rossa
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
delay(5000);
// Accensione della luce verde
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
delay(5000);
// Accensione della luce gialla
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
delay(2000);
}
Spiegando il Codice
Analizziamo cosa fa ciascuna parte di questo codice:
- In cima, dichiariamo tre variabili (redLED, yellowLED, greenLED) e assegniamo loro i numeri dei pin che abbiamo utilizzato nel cablaggio. Questo rende il codice più facile da leggere e modificare in seguito, poiché non dovremo ricordare i numeri dei pin in tutto il programma.
- La funzione setup() viene eseguita una sola volta all'accensione o al reset dell'Arduino. Al suo interno, diciamo all'Arduino che ciascuno di questi tre pin sarà utilizzato come OUTPUT, il che significa che l'Arduino invierà corrente da questi pin anziché leggerne la corrente in ingresso.
- La funzione loop() si esegue ripetutamente, all'infinito, finché l'Arduino è alimentato. È qui che avviene la logica vera e propria del semaforo.
- digitalWrite(redLED, HIGH) accende il LED rosso inviando 5 volt a quel pin. digitalWrite(redLED, LOW) lo spegne inviando 0 volt.
- delay(5000) dice all'Arduino di attendere 5000 millisecondi, ovvero 5 secondi, prima di passare alla riga di codice successiva. Questo è ciò che crea l'intervallo di tempo tra ciascuna luce.
Poiché la funzione loop() continua a ripetersi, lo schema rosso, poi verde, poi giallo, e poi di nuovo rosso continuerà all'infinito, proprio come un vero semaforo.
Puoi cambiare i valori di ritardo per far sì che le luci rimangano accese per periodi più brevi o più lunghi, a seconda di come vuoi che si comporti il tuo modello.
Caricare il codice su Arduino
Una volta che avrai scritto o copiato il codice nel software Arduino IDE sul tuo computer, segui questi passaggi per eseguirlo sulla tua scheda:
- Collega l'Arduino al tuo computer utilizzando il cavo USB.
- Apri l'IDE di Arduino e incolla il codice in un nuovo sketch.
- Vai al menu Strumenti e seleziona il tipo di scheda corretto, che dovrebbe essere Arduino Uno.
- Inoltre, dal menu Strumenti, seleziona la porta COM corretta a cui è collegato il tuo Arduino.
- Clicca sul pulsante di caricamento, che assomiglia a una freccia che punta verso destra.
- Attendi che l'IDE mostri “Caricamento completato” in fondo allo schermo.
Una volta completato l'upload, i tuoi LED dovrebbero iniziare immediatamente a seguire lo schema del semaforo che abbiamo definito nel codice.
Testare e Osservare il Risultato
Dopo aver caricato il codice, dovresti vedere il LED rosso accendersi per primo e rimanere acceso per 5 secondi. Poi si spegnerà e il LED verde si accenderà per altri 5 secondi. Dopodiché, il LED verde si spegne e il LED giallo si accende per 2 secondi, avvisando che il ciclo sta per ricominciare. Poi l'intero schema si ripete dall'inizio con la luce rossa di nuovo.
Se si testa questa configurazione in una stanza più buia, la luce dei LED diventa molto più visibile e fornisce un bell'effetto simile a quello dei veri semafori illuminati di notte. L'immagine qui sotto mostra i LED accesi in un ambiente poco illuminato, il che evidenzia davvero come i colori risaltino una volta ridotta la luce circostante.
Questo tipo di test è utile anche per confermare che il circuito funzioni correttamente. Se uno qualsiasi dei LED non si accende, di solito significa uno dei seguenti problemi:
- Il LED potrebbe essere inserito al contrario, poiché i LED funzionano solo in una direzione
- Il filo potrebbe non essere collegato saldamente al breadboard o al pin dell'Arduino
- Il valore della resistenza potrebbe essere troppo alto, attenuando troppo il LED per notarlo
- Il PIN nel codice non corrisponde al PIN utilizzato nel cablaggio. Seguire questa checklist risolve di solito la maggior parte dei problemi di cablaggio dei principianti.
Migliorare ed Espandere il Progetto
Una volta che il tuo semaforo base è funzionante, ci sono molti modi in cui puoi espandere questo progetto per renderlo più avanzato e realistico:
- Aggiungi un semaforo pedonale utilizzando altri due LED (rosso per fermarsi, verde per camminare) che funzionano in modo opposto al semaforo principale.
- Aggiungi un pulsante a pressione in modo che i pedoni possano richiedere il cambio del segnale, proprio come i pulsanti di attraversamento reali.
- Utilizzare uno schermo LCD per visualizzare un timer contatore che mostri quanti secondi mancano prima che cambi la luce.
- Controlla più semafori a un incrocio, dove una strada deve essere rossa mentre l'altra è verde, e cambiano insieme in sincronia.
- Aggiungi un cicalino che suoni durante la fase della luce gialla come segnale di avvertimento aggiuntivo.
Questi aggiornamenti non sono troppo difficili una volta compresa la versione base, e sono un ottimo modo per continuare ad apprendere nuove abilità con Arduino, come la lettura degli input dai pulsanti, l'uso di librerie aggiuntive e la gestione di più componenti che lavorano insieme contemporaneamente.
Considerazioni finali
Il progetto del semaforo basato su Arduino Uno è uno dei modi migliori per i principianti di familiarizzare con l'elettronica e la programmazione allo stesso tempo. Utilizza componenti semplici ed economici, e il cablaggio è abbastanza facile da completare in meno di trenta minuti. Allo stesso tempo, i concetti sottostanti, come il controllo di uscita digitale e la temporizzazione con ritardi, sono utilizzati in innumerevoli altri progetti elettronici, dai sistemi di automazione domestica alla robotica.
Domande frequenti
Sì, ma devi assicurarti che i pin nel codice corrispondano ai pin effettivi utilizzati sul tuo Arduino Nano.
La resistenza limita la corrente che scorre attraverso il LED; senza di essa, il LED potrebbe assorbire troppa corrente e bruciarsi.
No, 220Ω è una scelta comune, ma 330Ω o 470Ω possono funzionare anche se non hai bisogno che il LED sia molto luminoso.
GND completa il circuito e fornisce alla corrente un percorso di ritorno all'Arduino.
No, i pin digitali normali sono sufficienti perché questo progetto si limita ad accendere e spegnere i LED.
HIGH accende il pin con l'uscita di tensione, mentre LOW spegne il pin impostandolo a 0V.
A: setup() viene eseguita una volta all'avvio dell'Arduino, mentre loop() continua a funzionare ripetutamente per proseguire il ciclo del semaforo.
delay(5000) mette in pausa il programma per 5000 millisecondi, che equivalgono a 5 secondi.
Sì, delay() è semplice e adatto a questo progetto per principianti, ma millis() è meglio per progetti più avanzati con pulsanti o sensori.
A: No, questo è solo un modello di apprendimento.
A: Sì, puoi aggiungere un altro set di LED rossi, gialli e verdi e programmare le due direzioni per funzionare in cicli opposti.
Sì, una volta che il circuito funziona su una breadboard, le stesse connessioni possono essere convertite in un layout PCB personalizzato.
Sì, PCBCool può supportare la produzione di PCB, l'approvvigionamento di componenti e l'assemblaggio di PCB per progetti prototipo basati su Arduino.
Salman Ali lavora sulla progettazione schematica, sul layout di PCB, sulla prototipazione di prodotti e sullo sviluppo di firmware. Ha esperienza pratica nel portare idee elettroniche dal concetto iniziale al prodotto funzionante e può anche supportare la modellazione 3D di PCB per la revisione del progetto.