Ciao a tutti! Dopo il precedente articolo, oggi vi spiegherò come costruire un semaforo con Arduino. Se siete alle prime armi e ancora non avete ben chiaro cosa sia Arduino e come utilizzarlo allora potete consultare questo mio apposito articolo.

Come costruire un semaforo con Arduino – Componenti

Ecco sottostante un elenco di tutti i componenti e strumenti necessari per la realizzazione del nostro progetto:

  • Una scheda Arduino (nel mio esempio ho utilizzato un Arduino Uno);
  • Un cavo USB da USB-A a USB-B, lo stesso che utilizziamo per il collegamento delle stampanti al PC;
  • Compilatore Arduino IDE (qualora non fosse installato sul vostro PC potete consultare questo articolo per il download);
  • Una bread board;
  • 6 resistori da 330 Ohm;
  • 6 diodi LED (2 rossi, 2 gialli e 2 verdi);
  • Cavetti di collegamento per bread board;
  • Conoscenze basilari di elettronica;

Sketch

Il programma per la realizzazione del nostro semaforo “in miniatura” sarà un leggermente più lavorato, ma assolutamente nulla di difficoltoso! Niente paura, basterà qualche minuto e un po’ di pazienza per completare il nostro sketch e renderlo operativo. Di seguito vi metto a disposizione il codice già pronto per l’utilizzo e una spiegazione dettagliata di ogni funzione in esso inclusa.

//simulazione del funzionamento di un semaforo

#define LEDROSSO1 13
#define LEDGIALLO1 12
#define LEDVERDE1 11
#define LEDROSSO2 10
#define LEDGIALLO2 9
#define LEDVERDE2 8
void setup()
{
pinMode(LEDROSSO1,OUTPUT);//imposta LEDROSSO1 come output
pinMode(LEDGIALLO1,OUTPUT);//imposta LEDGIALLO1 come output
pinMode(LEDVERDE1,OUTPUT);//imposta LEDVERDE1 come output
pinMode(LEDROSSO2,OUTPUT);//imposta LEDROSSO2 come output
pinMode(LEDGIALLO2,OUTPUT);//imposta LEDGIALLO2 come output
pinMode(LEDVERDE2,OUTPUT);//imposta LEDVERDE2 come output
}
void loop()
{
digitalWrite(LEDROSSO1,HIGH);//LEDROSSO1 acceso
digitalWrite(LEDVERDE2,HIGH);//LEDVERDE2 acceso
delay(8000);//aspetta 8 secondi
digitalWrite(LEDROSSO1,LOW);//LEDROSSO1 spento
digitalWrite(LEDVERDE2,LOW);//LEDVERDE2 spento
digitalWrite(LEDGIALLO1,HIGH);//LEDGIALLO1 acceso
digitalWrite(LEDGIALLO2,HIGH);//LEDGIALLO2 acceso
delay(3000);//aspetta 3 secondi
digitalWrite(LEDGIALLO1,LOW);//LEDGIALLO1 spento
digitalWrite(LEDGIALLO2,LOW);//LEDGIALLO2 spento
digitalWrite(LEDVERDE1,HIGH);//LEDVERDE1 acceso
digitalWrite(LEDROSSO2,HIGH);//LEDROSSO2 acceso
delay(8000);//aspetta 8 secondi
digitalWrite(LEDVERDE1,LOW);//LEDVERDE1 spento
digitalWrite(LEDROSSO2,LOW);//LEDROSSO2 spento
digitalWrite(LEDGIALLO1,HIGH);//LEDGIALLO1 acceso
digitalWrite(LEDGIALLO2,HIGH);//LEDGIALLO2 acceso
delay(3000);//aspetta 3 secondi
digitalWrite(LEDGIALLO1,LOW);//LEDGIALLO1 spento
digitalWrite(LEDGIALLO2,LOW);//LEDGIALLO2 spento
}

Spiegazione Sketch

Dinnanzi tutto, dalla riga 2 alla riga 7, troviamo le istruzioni “#define”; Utilizziamo questa funzione ogni qual volta abbiamo la necessità di indicare dei dati fissi, ovvero che non dovranno subire variazioni durante l’esecuzione del programma; nel nostro caso, quindi, con “#define” abbiamo creato 6 etichette LEDROSSO(1/2), LEDGIALLO(1/2) e LEDVERDE(1/2) che, precedentemente alla compilazione del programma, verranno sostituite sostituite con il loro numero corrispondendo (es. LEDROSSO1 verrà sostituito con 13).

Alla riga 8 troviamo invece il “void setup()“; con quest’ultimo forniamo alla scheda Arduino tutte le istruzioni fondamentali per l’esecuzione del programma, come l’individuazione degli input e degli output; a differenza del “void loop()“, che andremo ad analizzare tra poco, il “void setup()” esegue i comandi una sola volta, appena viene fornita alimentazione alla scheda.

Proprio nel “void setup()” viene contenuta un altro tipo d’istruzione, il “pinMode“; nel nostro sketch possiamo individuarlo dalla riga 10 alla riga 15. Questo comando è utile appunto per indicare al programma se intendiamo utilizzare un determinato pin come input o come output; nel nostro caso, abbiamo specificato al programma che vogliamo utilizzare i digital pin 8,9,10,11,12,13 come output (lì dove andremo a collegare i nostri diodi LED).

Eccoci quindi alla riga 17 dello sketch dove troviamo il “void loop()“; ad esso seguono quindi tutte le info utili all’esecuzione del programma; questi codici vengono quindi ripetuti in ordine e, quando la programmazione termina, il processo ricomincia da capo. Questo ciclo andrà avanti finchè le scheda Arduino sarà collegata ad una fonte di alimentazione

Subito dopo quindi, dalla 19 alla riga 38, troviamo l’alternarsi di due istruzioni:

  • digitalWrite” stante ad indicare quale stato vogliamo far assumere all’output (quando esso sarà HIGH sull’uscita verrà fornita una tensione di 5V, quando sarà LOW la tensione in uscita sarà pari a 0V)
  • delay“, parametro che può essere modificato a nostro piacimento e utile ad intervallare l’accensione dei diodi LED dallo spegnimento e viceversa.

Nel corso della programmazione prestate particolare attenzione all’apertura e chiusura delle parentesi graffe nonchè all’inserimento dei punti e virgola; soprattutto per i meno esperti questi particolari potrebbero sfuggire. Ciononostante, mediante il processo di verifica, il compilatore vi segnalerà questi eventuali problemi o altri errori di programmazione che potrete correggere.

Qualora lo sketch non presentasse errori vi apparirà, in fondo alla pagina, questo messaggio;

quindi potrete procedere all’installazione del porgramma sulla scheda Arduino.

Circuito

Anche in questo caso la realizzazione del circuito è molto semplice; colleghiamo i pin digitali ai vari diodi LED; tuttavia, prima di svolgere questa operazione ricordate di inserire per ogni LED un resistore da 330 Ohm per scongiurare eventuali danneggiamenti. Nel nostro caso l’ordine di collegamento è stato disposto nel seguente modo:

LEDROSSO1: PIN 13

LEDGIALLO1: PIN 12

LEDVERDE1: PIN 11

LEDROSSO2: PIN 10

LEDGIALLO2: PIN 9

LEDVERDE2: PIN 8

Dopo aver opportunamente collegato uno dei due pin GND di Arduino sul negativo della bread board, collegate il catodo di ciascun diodo LED a massa per chiudere il circuito.

 

 

N.B: il catodo potete distinguerlo essendo la “zampetta” più corta del diodo LED; qualora le “zampette” siano state tagliate, potete comunque individuare il catodo osservando l’involucro esteriorore del LED; la gambina più vicina al bordo piatto dell’involucro stesso è il catodo.

Funzionamento

Se tutto avete svolto correttamente tutti i passaggi precedentementi elencati, il nostro “semaforo” svolgerà le seguenti funzioni:

  • appena alimentato il LEDROSSO1 sarà acceso assieme al LEDVERDE2;

 

  • dopo 8 secondi (intervallo che potete tranquillamente modificare andando a mutare i valori di delay) entrambi i LED gialli saranno accesi, mentre il LEDROSSO1  e il LEDVERDE2 si spegneranno;

 

  • passati ulteriori 3 secondi avverrà un’ulteriore commutazione, con l’accensione del LEDVERDE1 e del LEDROSSO2; entrambi i LEDGIALLI accesi in precedenza si spegneranno;

 

  • dopo 8 secondi il ciclo riprenderà da capo e si ripeterà finchè verrà tolta l’alimentazione.