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.
