Esercitazione di Sistemi Elettronici – Arduino – impianto semaforico ad 1 via

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().

1/*
2   Prof. Maffucci Michele
3   Ver.1 - 22.12.21
4   Impianto semaforico con attraversamento
5   pedonale a richiesta
6*/
7 
8// pin a cui sono connessi i LED
9byte rossoAuto = 13;
10byte gialloAuto = 12;
11byte verdeAuto = 11;
12byte rossoPedone = 10;
13byte verdePedone = 9;
14 
15// pin a cui è connesso il pulsante di richiesta
16byte pulsante = 8;
17 
18// tempo massimo di attraversamento del pedone
19int tempoAttraversamento = 10000;
20 
21// definizione della variabile per l'impostazione
22// del cambio stato del semaforo auto
23unsigned long tempoCambio;
24 
25void setup() {
26  // inizializzazione timer
27  tempoCambio = millis();
28 
29  // inizializzazione dei pin come OUTPUT
30 
31  pinMode(rossoAuto, OUTPUT);
32  pinMode(gialloAuto, OUTPUT);
33  pinMode(verdeAuto, OUTPUT);
34  pinMode(rossoPedone, OUTPUT);
35  pinMode(verdePedone, OUTPUT);
36 
37  // inizializzazione pin come INPUT
38  pinMode(pulsante, INPUT);
39 
40  // accensione luci verdi
41  // all'avvio le auto hanno il verde e i pedoni il rosso
42  digitalWrite(verdeAuto, HIGH);
43  digitalWrite(rossoPedone, HIGH);
44  digitalWrite(rossoAuto, LOW);
45  digitalWrite(gialloAuto, LOW);
46  digitalWrite(verdePedone, LOW);
47 
48  // inizializzazione della Serial Monitor
49  Serial.begin(9600);
50}
51 
52void loop() {
53  // la variabile state viene utilizzata per sapere se il
54  // pulsante di attraversamento viene premuto
55  int stato = digitalRead(pulsante);
56 
57  // lo stato del pulsante viene visualizzato sulla Serial Monitor
58  Serial.println(stato);
59 
60  // Se viene premuto il pulsante e se sono
61  // passati 5 secondi dall'ultima pressione del pulsante
62 
63  if (stato == HIGH && (millis() - tempoCambio) > 5000) {
64    // chiama la funzione per il cambio luci
65    cambioLuci();
66  }
67}
68 
69void cambioLuci() {
70  digitalWrite(verdeAuto, LOW);      // il LED verde viene spento
71  digitalWrite(gialloAuto, HIGH);    // il LED giallo viene acceso per 2 secondi
72  delay(2000);
73 
74  digitalWrite(gialloAuto, LOW);    // il LED giallo viene spento
75  digitalWrite(rossoAuto, HIGH);    // il LED rosso viene acceso per 5 secondi
76 
77  digitalWrite(rossoPedone, LOW);   // il LED rosso del pedone viene spento
78  digitalWrite(verdePedone, HIGH);  // il LED verde del pedone viene acceso
79  delay(tempoAttraversamento);
80 
81  // lampeggio del LED verde dei pedoni
82  for (int x = 0; x < 10; x++) {
83    digitalWrite(verdePedone, LOW);
84    delay(100);
85    digitalWrite(verdePedone, HIGH);
86    delay(100);
87  }
88  digitalWrite(verdePedone, LOW);
89  digitalWrite(rossoAuto, LOW);
90  digitalWrite(rossoPedone, HIGH);
91  digitalWrite(verdeAuto, HIGH);
92 
93  tempoCambio = millis();
94}

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.