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: https://www.mauroalfieri.it/elettronica/semaforo-per-autopista-con-arduino.html

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.