Tutorial: semaforo per autopista con arduino

Oggi ho ripreso le strisce di led acquistate nell’ultima fiera dell’elettronica di Busto Arsizio per realizzare un’altro tipo di semaforo, quello che darà il via alle tue competizioni automobilistiche.

semaforo

Potrai simulare le vere gare di formula 1 con questo semaforo, e potresti ampliare l’uso di arduino per controllare le false partenze o il miglior giro, questi sono solo alcune delle idee che potresti sviluppare per la tua pista di automobili.

Occorrente

  • 1 arduino ( Duemilanove/uno/mega/mini )
  • 3 led rossi
  • 1 led verde
  • 1 resistenza da 470Ω
  • 1 resistenza da 330Ω
  • 1 pulsante

Assembla la parte elettronica

Segui questo schema per collegare la parte elettronica:

schema elettrico

tutti i led hanno il catodo comune che attraversa la resistenza di protezione da 470Ω prima di congiungersi al polo negativo (GND) di arduino.

Il pulsante ga un polo connesso al positivo (+5v) di arduino e l’altro al polo negativo attraverso una resistenza di 330Ω, a quest’ultimo polo è anche collegato il pin A5, ingresso analogico 5 di arduino, che utilizzerai per dare lo start al semaforo.

collegamento del pulsante

Lo sketch

ecco cosa devi caricare su Arduino:

/*
 * Semaforo per autopiste F1
 *
 * Autore: Mauro Alfieri
 * Tw:  @mauroalfieri
 * Web: www.mauroalfieri.it
 */

int pinLed[] = {5,4,3,2};

int time_between_led = 1000;
int time_all_on = 2000;

int pulsante = A5;

void setup() {
  for ( int i=0; i<4; i++) {
    pinMode( pinLed[i],OUTPUT);
    digitalWrite( pinLed[i],LOW );
  }
  pinMode( pulsante,INPUT);
}

void loop() {
  if ( analogRead( pulsante ) > 1000) {
    for ( int i=0; i<4; i++) {
      digitalWrite( pinLed[i],HIGH );
      delay( time_between_led );
    }
    delay( time_all_on );
  }
  for ( int i=0; i<4; i++) {
    digitalWrite( pinLed[i],LOW );
  }
}

non è complesso, te lo spiego linea per linea come in tutti i miei tutorial perchè tu possa comprenderlo facilmente ed eseguire tutte le modifiche che ritieni opportune:

linea 09: definisci un array di tipo integer con i pin a cui hai collegato i led, se invece di 4 pin ne usi 5 ricordati di aggiungerlo a questo array;

linea 11: imposta il tempo ( in millisecondi ) che deve trascorrere tra l’accensione di un led ed il successivo;

linea 12: imposta il tempo ( in millisecondi )  che deve trascorrere dal momanto che tutti i led sono accesi ed il momento in cui tutti si spengono;

linea 14: definisci a quale pin analogico hai collegato il pulsante, in questo esempio A5;

linea 17: esegui un ciclo di tipo for all’interno del quale inizializzi le attività previste per i 4 pin a cui sono connessi i led nella fase di setup();

linea 18: imposta la modalità di funzionamento di ciascun pin, pinMode( pin,mode ), ad OUTPUT, indiche ad arduino di utilizzare come output i pin 2,3,4,5;

linea 19: imposta l’uscita di ciascun pin a LOW ( 0v ) in modo che tutti i pin siano spenti in questa fase;

linea 21: imposta il pin A5 come INPUT ossia indica ad arduino di attendersi su questo pin un segnale in input;

linea 25: ci sono due istruzioni annidate, partendo dal centro la funzione analogRead( pin ), legge il valore dal pin analogico A5, l’istruzione if confronta questo valore con 1000, in pratica l’ingresso A5, come tutti gli ingressi di Arduino varia da 0 a 1023, 0 quando è collegato a massa (GND) e 1023 quando è collegato ai +5v, in questa configurazione quando premi il pulsante porti il pin arduino A5 ad essere connesso al positivo (+5v) e quindi leggi il valore 1023, quindi la condizione if restituisce vero, si dice che è verificata, quando premi il pulsante.

linea 26: esegui un ciclo for come quello presentato alla linea 17, questa volta il ciclo viene eseguito solo se hai premuto il pulsante, vedi riga 25;

linea 27: accendi il led corrispndente alla posizione i della patrice pinLed inviando HIGH ( 255 ) sul pin corrispondente;

linea 28: attendi il tempo impostato alla linea 11, quello di attesa tra l’accensione di un led ed il successivo;

linea 30: attendi il tempo impostato alla linea 12, in questa fase sei fuori dal ciclo for per cui tutti i led sono stati accesi e devi attendere il tempo impostato prima di spegnerli tutti, tempo che ti occorre per la partenza delle auto;

linee 32-34: sono linee oltre il controllo if sul pulsante, arduino le esegue ad ongi loop() e la loro funzione ha il solo scopo di mantenere i led spenti, in fondo la gara si sta svolgendo 🙂

Ed ecco il video:

Pronti, in posizione, rombo dei motori ……. e………VIA !!!

Buona competizione.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/semaforo-per-autopista-con-arduino.html

23 commenti

Vai al modulo dei commenti

    • Danilo il 6 Aprile 2014 alle 18:17
    • Rispondi

    Salve

    Volendo fare lo stesso circuito ma con dei relè a 220V ?

    1. Ciao Danilo, dovrai modificare la parte elettronica e qualche riga nello sketch, io ti consiglio la relè shield venduta da robot-domestici che io uso nella centralina di irrigazione ha già i 4 relè a 220v di cui hai bisogno.

    • Danilo il 8 Aprile 2014 alle 20:42
    • Rispondi

    Ciao Mauro
    Avevo pensato anche io alla relè shield con 4 relè.
    Perdonami l’ignoranza …..ma come faccio a far funzionare il tutto ?Devo alimentare un semaforo per un kartodromo vicino casa con la stessa tempistica di quello postato nel filmato solo che a 220 v .
    Ti sarei infinitamente grato se tu potessi aiutarmi a realizzare questa automazione.
    Grazie

    1. Ciao Danilo,
      io posso fornirti suggerimenti se qualcosa non ti è chiaro e fornisco corsi on-line e articoli gratuiti su arduino che puoi leggere e dai quali puoi prendere mille spunti e idee.
      Cosa differente sono i progetti su commissione, in cui sono io a realizzare quello che ti occorre.

    • Danilo il 9 Aprile 2014 alle 20:03
    • Rispondi

    Hai ragione Mauro …questo è un impegno che ho preso io ed è giusto che ci dia la testa io. Sarà la scusa buona per imparare una cosa nuova . Intanto aspetto che mi arrivi il kit e cerco di mettere in piedi il sistema anche con l’aiuto dei tuoi tutorial e vediamo che ne esce fuori.
    Grazie per la disponibilità

    1. Ottimo approccio Danilo, ribadisco che se qualcosa dei tutorial non ti é chiaro io sono a disposizione.

    • Danilo il 16 Aprile 2014 alle 20:14
    • Rispondi

    Ho risolto …un piccola modifica allo sketch ed ho collegato il modulo a 4 relè sull’arduino uno .

    Funziona alla perfezione , l'unica cosa non cosa inventarmi per il pulsante visto che non posso lasciare quello piccino da basetta. Te cosa mi consigli ?

    1. Ciao Danilo,
      benissimo. Se ti va di condividere il progetto puoi inviarmi alla casella info del blog le foto, la descrizione e lo sketch che hai realizzato.
      Per il pulsante ti basta un qualsiasi pulsante N/A ( normalmente aperto ) puoi scegliere tra i migliaia di pulsanti di questo tipo tipo disponibili sui siti di materiale elettronico ed elettrico.

    • Danilo il 17 Aprile 2014 alle 18:31
    • Rispondi

    Ok appena metto in funzione il tutto ti invio il progetto

    1. Grazie Danilo

    • Danilo il 19 Aprile 2014 alle 14:15
    • Rispondi

    Intanto ecco lo sketch

    :: codice rimosso in automatico ::

    1. Ciao Danilo,
      se desideri condividere il tuo codice ed il tuo lavoro ti invito a inviarmi foto, video, descrizione e codice alla casella info del blog.
      Grazie per la voglia di condividere

      • roberto il 18 Novembre 2014 alle 09:57
      • Rispondi

      salve Danilo volevo sapere se hai ultimato il progetto dovrei realizzare anche io un semaforo per kartodromo

      • mauro il 20 Ottobre 2015 alle 15:16
      • Rispondi

      salve
      anchio sarei interessato allo schema o sketch per comandare un semafoto usando i relè

      grazie

      1. Ciao Mauro,
        puoi utilizzare schema e sketch presentato in questo articolo sostituendo al posto dei led degli optoisolatori che a loro volta controllino dei relay.

    • mauro il 21 Ottobre 2015 alle 00:13
    • Rispondi

    ciao Mauro e grazie per la risposta
    ho appena provato a sostituire i led con un modulo da 4 relay
    diciamo che funziona, ma al contrario
    mi spiego, appena lo alimento tutti i relay ti attivano e nel momento che premo il pulsante, uno ad uno si spengono (in pratica l’uscita dei relay devo invertire da NO a NC) ma credo che si rovinano restando sempre attivati

    cosa devo cambiare per fare si che si attivano slo mentre premo il pulsante

    grazie ancora

    1. Ciao Mauro,
      dovrai invertire il comando impartito ai led, se leggi lo sketch è spiegato ogni riga cosa fa e puoi imparare rapidamente a fare le modifiche che ti occorrono.

    • mauro il 30 Novembre 2015 alle 13:01
    • Rispondi

    ciao Mauro
    sono ritornato ora dopo mesi sul progetto del semaforo con i relay.
    non ho capito bene cosa devo cambiare, sicuramente una cavolata, ma non trovo l’inghippo.

    grazie

    1. Ciao Mauro,
      hai letto lo sketch ? lo hai capito ?

    • mauro il 1 Dicembre 2015 alle 14:16
    • Rispondi

    mi può aiutare grazie

    1. Ciao Mauro,
      non comprendo come poterti aiutare oltre a quello che ti ho scritto più volte.
      Ddevi solo invertire il comando che impartisci ai relay, se non ricordo male, dopo mesi.

    • Demis il 6 Marzo 2016 alle 00:27
    • Rispondi

    Finalmente un bel sito per chi come me è alle prime armi con Arduino !!
    Grazie Davvero !!

    1. Grazie Demis !!!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.