#11 Arduino: Semaforo

In questo tutorial vedremo come creare un semaforo con Arduino da poter usare nei diorami.

Il tutorial è stato pensato per gestire due semafori sincronizzati fra loro, quindi potrebbe essere usato sia per la gestione di un incrocio, che per la gestione del traffico pedonale e veicolare.

In un successivo tutorial, vedremo come creare un semaforo pedonale su chiamata, dove avremo sempre il segnale verde per le auto, ma alla pressione di un pulsante si attiverà il giallo ed il rosso per le auto ed il verde per i pedoni, per poi tornare allo stato iniziale.

Materiale Necessario

Se siete interessati al materiale, cliccate su questo e sarete indirizzati alla pagina Amazon

Iniziamo a montare la nostra basetta di prova con i led, due per colore e le resistenze per evitare che si brucino.

Ogni led lo colleghiamo ad un pin di Arduino.

semaforo con if

Una volta montata la basetta, iniziamo a lavorare sullo sketch, per semplicità creerò due loop, uno per semaforo, Arduino deciderà quale usare in base al valore di una variabile, questa cambierà alla fine del loop per permettere ad Arduino di switchare tra id ue loop secondari così da sincronizzare i semafori, ogni semaforo avrà tempi di funzionamento programmabili tramite delle variabili.

Come sempre iniziamo ad analizzare lo sketch, sorvolo sulla prima parte, dove do solo dei nomi ai pin e passo alla descrizione delle variabili.

La variabile “stato” è strettamente collegata ai led dei semafori, infatti ad ogni cambio del suo valore, ottengo un cambio luci dei semafori.

Con la variabile “cambio_semaforo”, gestisco il passaggio tra un semaforo all’altro, questa variabile cambierà il suo valore alla fine di ogni loop secondario.

Passo quindi ad aggiungere delle variabili per calcolare il tempo tra un passaggio e l’altro delle luci, su “verdeS1”, “gialloS1” …. fino a “rossoS2”, memorizzo il tempo trascorso dall’ultimo passaggio di quel colore e quel semaforo, questo valore verrà sarà il dato da millis(), vedremo più in fondo come, le variabili sono di tipo unsigned long, valore consigliato quando si usa millis, perché le variabili di tipo long hanno un range più ampio rispetto ad int e con la dicitura unsigned useremo solo valori positivi.

Le ultime quattro variabili di tipo int, hanno un valore di partenza che verrà usato nello sketch come valore di confronto con millis(), questi serviranno per stabilire la durata del verde, del giallo e del rosso.

La parte seutup, contiene solo la configurazione dei 6 pin usati, tutti impostati come uscite.

Passiamo alla parte loop, che in realtà contiene 3 loop, uno principale e due secondari che verrano eseguiti in base alla condizione del principale.
Analizziamo il loop principale, molto breve ma fondamentale per lo sketch:

Il loop contiene semplicemente un if ed else, che legge la variabile “cambio_semaforo”, che potrà avere due valori, 0 ed 1, questi saranno dati dai due loop secondari, in base al valore di questa variabile, Arduino leggere il primo o il secondo loop secondario.

Passiamo alla spiegazione dei loop secondari, essendo identici ne analizzerò soltanto uno, spiegare anche il secondo sarebbe una ripetizione del primo, cambiando solo in nome delle variabili.

Come prima cosa, inserisco all’interno del loop tre variabili di tipo unsigned loop, questi sono strettamente collegare al valore di millis().

Una volta inserite le variabili iniziano le serie di “if”, queste sono collegate alla variabile “stato”.

Se questa avrà valore 0, otterremo il segnale di verde sulla strada 1 ed il rosso sulla strada 2, alla fine dell’if la variabile passa dal valore 0 a valore 1.

Con “stato” uguale ad 1, si passa dal verde al giallo sulla strada 1.
Da questo if, avremo anche la memorizzazione del tempo di durata del colore, in questo caso “verdeS1”, assumerà un valore pari a “ultimo_verde1” , così da memorizzare i millis, in cui il pin era in stato HIGH.

Il successivo if, che si attiva quando “stato” ha valore 2, fa accedere il segnale di rosso, anche qui memorizziamo il valore di millis(), in cui il giallo era acceso ed aumentiamo il valore di stato.

Con “stato” uguale a 3 avremo un momento di pausa, in cui entrambi i semafori sono con segnale rosso.
La variabile “stato” passa da 3 a 0, così da riprendere il loop dal primo if.

Mentre la variabile “cambio_semaforo” passa da 0 a 1 così da permettere ad Arduino di passare al secondo loop secondario che gestisce il secondo semaforo.

Una volta arrivati alla fine del secondo loop, questo cambierà la variabile “cambio semaforo” da 1 a 0 così da tornare al primo loop.

Il tutorial è finito, come sempre se avete domande o consigli vi invito a scrivere qui sotto.

/ 5
Grazie per aver votato!

Allegati

Lascia un commento

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