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.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/semaforo-per-autopista-con-arduino.html

23 comments

Skip to comment form

    • Danilo on 6 Apr 2014 at 18:17
    • Reply

    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 on 8 Apr 2014 at 20:42
    • Reply

    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 on 9 Apr 2014 at 20:03
    • Reply

    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 on 16 Apr 2014 at 20:14
    • Reply

    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 on 17 Apr 2014 at 18:31
    • Reply

    Ok appena metto in funzione il tutto ti invio il progetto

    1. Grazie Danilo

    • Danilo on 19 Apr 2014 at 14:15
    • Reply

    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 on 18 Nov 2014 at 09:57
      • Reply

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

      • mauro on 20 Ott 2015 at 15:16
      • Reply

      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 on 21 Ott 2015 at 00:13
    • Reply

    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 on 30 Nov 2015 at 13:01
    • Reply

    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 on 1 Dic 2015 at 14:16
    • Reply

    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 on 6 Mar 2016 at 00:27
    • Reply

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

    1. Grazie Demis !!!

Lascia un commento

Your email address will not be published.

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