Questa esercitazione è dedicata ai miei studenti di 3′ (Automazione ed Elettronica Biomedicale) che come compito per le vacanze natalizie dovranno, partendo dall’esempio svolto, realizzare le 4 varianti richieste al fondo di questa lezione.
Introduzione
- In questo progetto bisognerà realizzare l’impianto semaforico per automobili e modificarlo secondo le specifiche indicate al fondo di questo post
- vengono utilizzati 3 LED: verde, giallo e rosso per simulare un semaforo reale
- vengono utilizzati 2 LED : verde e rosso per simulare il semaforo per i pedoni
- è presente un pulsante di richiesta attraversamento per i pedoni
Lista componenti
- 1 Breadboard
- 1 Arduino UNO
- 3 LED da 5mm (rosso, giallo, verde)
- 2 LEd da 5mm LED (rosso, verde)
- 5 resistori da 220 Ohm
- 1 resistore da 10 kOhm
- 1 pulsante normalmente aperto
- jumper
Collegamenti

Sketch
Per la realizzazione di questo progetto non avrete necessità di nessuna libreria da aggiungere all’IDE di Arduino.
L’automazione del semaforo sarà la seguente:
- Il semaforo per le automobili è sempre verde e la luce pedonale risulta sempre rossa a meno che qualcuno preme il pulsante.
- Quando viene premuto il pulsante dal pedone:
- il semaforo auto cambia da giallo e successivamente si spegne il giallo e si accende il rosso;
- sul semaforo pedonale si spegne il rosso e si accende il verde;
- le luci del semaforo pedonale rimangono in questo stato per un tempo pari a tempoAttraversamento
- successivamente il verde del semaforo pedonale lampeggia, terminata la sequenza di lampeggio si spegne e si accende il rosso;
- il semaforo delle auto passa da rosso a verde
Tutte queste funzioni sono svolte dalla funzione cambiabentoLuci().
/*
Prof. Maffucci Michele
Ver.1 - 22.12.21
Impianto semaforico con attraversamento
pedonale a richiesta
*/
// pin a cui sono connessi i LED
byte rossoAuto = 13;
byte gialloAuto = 12;
byte verdeAuto = 11;
byte rossoPedone = 10;
byte verdePedone = 9;
// pin a cui è connesso il pulsante di richiesta
byte pulsante = 8;
// tempo massimo di attraversamento del pedone
int tempoAttraversamento = 10000;
// definizione della variabile per l'impostazione
// del cambio stato del semaforo auto
unsigned long tempoCambio;
void setup() {
// inizializzazione timer
tempoCambio = millis();
// inizializzazione dei pin come OUTPUT
pinMode(rossoAuto, OUTPUT);
pinMode(gialloAuto, OUTPUT);
pinMode(verdeAuto, OUTPUT);
pinMode(rossoPedone, OUTPUT);
pinMode(verdePedone, OUTPUT);
// inizializzazione pin come INPUT
pinMode(pulsante, INPUT);
// accensione luci verdi
// all'avvio le auto hanno il verde e i pedoni il rosso
digitalWrite(verdeAuto, HIGH);
digitalWrite(rossoPedone, HIGH);
digitalWrite(rossoAuto, LOW);
digitalWrite(gialloAuto, LOW);
digitalWrite(verdePedone, LOW);
// inizializzazione della Serial Monitor
Serial.begin(9600);
}
void loop() {
// la variabile state viene utilizzata per sapere se il
// pulsante di attraversamento viene premuto
int stato = digitalRead(pulsante);
// lo stato del pulsante viene visualizzato sulla Serial Monitor
Serial.println(stato);
// Se viene premuto il pulsante e se sono
// passati 5 secondi dall'ultima pressione del pulsante
if (stato == HIGH && (millis() - tempoCambio) > 5000) {
// chiama la funzione per il cambio luci
cambioLuci();
}
}
void cambioLuci() {
digitalWrite(verdeAuto, LOW); // il LED verde viene spento
digitalWrite(gialloAuto, HIGH); // il LED giallo viene acceso per 2 secondi
delay(2000);
digitalWrite(gialloAuto, LOW); // il LED giallo viene spento
digitalWrite(rossoAuto, HIGH); // il LED rosso viene acceso per 5 secondi
digitalWrite(rossoPedone, LOW); // il LED rosso del pedone viene spento
digitalWrite(verdePedone, HIGH); // il LED verde del pedone viene acceso
delay(tempoAttraversamento);
// lampeggio del LED verde dei pedoni
for (int x = 0; x < 10; x++) {
digitalWrite(verdePedone, LOW);
delay(100);
digitalWrite(verdePedone, HIGH);
delay(100);
}
digitalWrite(verdePedone, LOW);
digitalWrite(rossoAuto, LOW);
digitalWrite(rossoPedone, HIGH);
digitalWrite(verdeAuto, HIGH);
tempoCambio = millis();
}
Esercizio 1
Aggiungere un sensore ad ultrasuoni che rileva la presenza del pedone in fase di attraversamento, fino a quando viene rilevato il pedone viene mantenuto il verde per il pedone ed il rosso per le auto. E’ presente sempre il pulsante di richiesta attraversamento.
Esercizio 2
Ampliare l’esercizio 1 aggiungendo un display a 7 segmenti utilizzato come conto alla rovescia (da 9 a 0) per i pedoni quando attraversano.
Esercizio 3
Ampliare l’esercizio 1 aggiungendo un buzzer che con un segnale pulsante variabile, indica l’approssimarsi del rosso.
Esercizio 4
Ampliare l’esercizio proposto in questa lezione trasformando l’impianto semaforico da 1 via a 4 vie con rispettivi attraversamenti pedonali sulle 4 strade.
Per coloro che non sono miei studenti, sul mio Patreon nei prossimi giorni verrà proposta:
- La soluzione a tutti gli esercizi proposti con schemi di collegamento e codice
- Video di spiegazione
- Sorgenti STL per la stampa 3D di un semaforo da poter essere inseriti all’interno di un plastico
- Proposta progettuale per la realizzazione di un kit didattico per lo sviluppo di questa tipologia di esercizi.
Buon Making a tutti.



Il corso guida a sviluppare in autonomia un percorso laboratoriale con attività Steam di Coding basato su Scratch 3 secondo modalità attive e inclusive attraverso la realizzazione di giochi interattivi, esperimenti scientifici sfruttando le nuove funzionalità di interfacciamento con dispositivi elettronici specificatamente pensati per la didattica, di facile utilizzo, che possono essere inseriti nelle discipline STEAM (Scienze, Tecnologia, Ingegneria, Arte e Design, Matematica).