GUIDA 7: Arduino, costruiamo un semaforo!

Qualche giorno fa ho costruito un semaforo con pulsante con Arduino e oggi ho deciso di condividere con te il progetto. Questo progetto utilizza tutte le conoscenze acquisite nelle precedenti guide.

Come sempre analizziamo lo schema elettronico. Sono presenti due semafori: uno per i pedoni e un altro per i veicoli. In realtà dovrebbero essere doppi: i pedoni possono attraversare la strada sia in un senso che nell’altro e le macchine, a meno che la strada non sia a senso unico, si muovono in entrambe le direzioni. I LED, nel disegno, non sono stati messi due volte, per ragioni di velocità e di risparmio di spazio. Per i due semafori è sufficiente collegare tre coppie di LED: verde, giallo e rosso a dei pin digitali di Arduino (con resistenza da 220 ohm). Colleghiamo infine due pulsanti che rappresentano i due pulsanti (uno per ogni lato della strada) tramite i quali i pedoni “chiamano” il verde. I pulsanti sono collegati come visto nelle due precedenti guide: tra positivo e negativo con resistenza da 10k e con un cavo collegato a un pin digitale di Arduino. Nelle Ecco l’immagine che rende la spiegazione più chiara:

semaforo

Ora ti mostro il codice nel completo, che commenterò sotto.

int vm = 2;   //sono delle abbreviazioni: vm=verde macchine
int gm = 3;
int rm = 4;
int vp = 5;
int gp = 6;
int rp = 7;
int pulsante1 = 8;
int stato_pulsante1 = 0;
int pulsante2 = 9;
int stato_pulsante2 = 0;

void setup() {
pinMode(vm, OUTPUT);
pinMode(gm, OUTPUT);
pinMode(rm, OUTPUT);
pinMode(vp, OUTPUT);
pinMode(gp, OUTPUT);
pinMode(rp, OUTPUT);
pinMode(pulsante1, INPUT);
pinMode(pulsante2, INPUT);
}

void loop() {
digitalWrite (vm, HIGH);
digitalWrite (rp, HIGH);
stato_pulsante1=digitalRead(pulsante1;
stato_pulsante2 = digitalRead(pulsante2);
if (stato_pulsante1 == 1) {
delay (3500);
digitalWrite (gm, HIGH);
digitalWrite (vm, LOW);
delay (1500);
digitalWrite (gm, LOW);
digitalWrite (rm, HIGH);
digitalWrite (rp, LOW);
digitalWrite (vp, HIGH);
delay (4000);
digitalWrite (gp, HIGH);
digitalWrite (vp, LOW);
delay (1500);
digitalWrite (gp, LOW);
digitalWrite (rp, HIGH);
digitalWrite (rm, LOW);
digitalWrite (vm, HIGH);
}
if (stato_pulsante2 == 1) {
delay (3500);
digitalWrite (gm, HIGH);
digitalWrite (vm, LOW);
delay (1500);
digitalWrite (gm, LOW);
digitalWrite (rm, HIGH);
digitalWrite (rp, LOW);
digitalWrite (vp, HIGH);
delay (4000);
digitalWrite (gp, HIGH);
digitalWrite (vp, LOW);
delay (1500);
digitalWrite (gp, LOW);
digitalWrite (rp, HIGH);
digitalWrite (rm, LOW);
digitalWrite (vm, HIGH);
}
}

All’inizio dichiara alcune variabili: servono a:

  • riconoscere i 6 LED dei due semafori e i due pulsanti senza dover scrivere il pin a cui il led è collegato;
  • le altre due, che hanno il valore “0”, sono solo dichiarate e capirai successivamente la loro funzione.

Nel setup inizializza i pin a cui i LED sono collegati come OUTPUT, mentre i due dei pulsanti come INPUT.

Nel loop (1-2 riga) accendiamo il rosso ai pedoni e il verde alle macchine. Questa situazione rimarrà invariata fino a quando uno dei due pulsanti verrò premuto. Ora devi far leggere ad Arduino lo stato dei due pulsanti (righe 3-4). Scrivi poi due if. Le operazioni tra le graffe dei due if sono le stesse, cambia però la condizione da verificare. Una è lo stato logico del pulsante1 alto, l’altra è lo stato logico del pulsante2 alto. Le operazioni eseguite sono quindi le stesse per entrambi i pulsanti. Sono le stesse operazioni che un normale semaforo esegue:

  • attesa di 3,5 sec
  • accensione del giallo alle macchine e spegnimento del verde
  • attesa di 1,5 sec (i pedoni hanno ancora rosso)
  • Accensione del rosso e spegnimento del giallo alle macchine
  • accensione del verde e spegnimento del rosso ai pedoni
  • attesa di 4 sec: i pedoni hanno il verde e le macchine il rosso
  • Il giallo ai pedoni si accende e si spegne il vered
  • attesa di 1,5 sec
  • Ritorno allo stato iniziale: spegnimento del giallo dei pedoni e del rosso delle macchine e accensione del rosso dei pedoni e verde macchine.

Spero che questo articolo ti sia d’aiuto e che anche tu riesca a creare e personalizzare questo progetto!

 

Una risposta a “GUIDA 7: Arduino, costruiamo un semaforo!”

  1. Molto bello il progetto!
    Non ne ho trovati altri con la funzione del pulsante di chiamata. Una cosa però gli manca: quando passa dal led arancione al rosso delle auto quello dei pedoni diventa subito verde. Io ho modificato il codice in modo che ci sia qualche secondo in cui sia il rosso delle auto che quello dei pedoni sono accesi contemporaneamente.
    Comunque è stato molto utile il tuo codice.

I commenti sono chiusi.