Automatismo per passaggio a livello

Print Friendly, PDF & Email

In questo articolo vedremo come realizzare un automatismo in grado di gestire un passaggio a livello tramite uno smartphone e Arduino usando il protocollo Bluetooth. Per questa applicazione sono necessarie 2 schede: Arduino Nano ed il modulo bluetooth HC05.

foto_plArduino Nano è la versione in miniatura di Arduino Uno, mentre la scheda HC05 è una interfaccia seriale Bluetooth in grado di comunicare con  Arduino per attivare le sue porte di I/O. L’applicazione usata per questo progetto è basata sul sistema Android e può essere scaricata gratuitamente da Google Play

In calce all’articolo vi sono i link per lo scaricamento dei file necessari alla realizzazione di questo progetto.

Hardware:

Layout_Arduino_Nano

Circuito stampato

In questa immagine è possibile vedere come vengono incorporate le schede Arduino Nano e il modulo HC05 sul circuito stampato:

HC05 ha 2 piedini per il trasferimento dei dati chiamati TX e RX che vanno collegati alle porte 10 e 11 di Arduino per la comunicazione seriale degli eventi e i pedini +5V e GND per l’alimentazione che verrà prelevata direttamente da Arduino. In questo modo colleghiamo fisicamente il modulo HC05 ad Arduino. Il progetto prevede l’uso di 2 schede aggiuntive per la gestione dei servi. Nonostante Arduino sia perfettamente in grado di gestirli senza interfacce, ho preferito adottare questa soluzione per comodità nella taratura di velocità e corsa dei servi stessi. Lo schema elettrico ed il progetto della scheda di gestione dei servi è possibile vederla a questo link..

A sinistra è possibile vedere i collegamenti provenienti da Arduino Nano e a destra quelli verso le schede di controllo dei servi ed il passaggio a livello. DIGITAL OUT, ricevono un segnale elettrico in uscita da Arduino a 5 Volt e comandano i 2 servi attraverso le schede di controllo e 2 semafori stradali a luce rossa realizzati con dei led che andranno posizionati sul plastico. +5 VCC e GND forniscono l’alimentazione elettrica dal circuito proveniente da Arduino verso i controller dei servi.

Schema elettrico:

Schema_pl

Schema alettrico

In questo schema sono utilizzati 2 transistor NPN tipo BC547 e una manciata di resistenze. Le uscite CONTROL SERVO 1 e 2 vanno collegate al posto dei pulsanti dei controller per l’azionamento dei servi; le uscite LIGHT STOP 1 e 2 comandano i led dei semafori stradali.

foto_circuito

Qui sopra una foto delle schede assemblate con i vari componenti. Il software di controllo è al momento in cui scrivo ancora in fase di sviluppo.

Software:

/*2014-09-15 GAS TT
Comando Bluetooth per la gestione di un passaggio a livello.
Programma originale di Ivan Scordato modificato da Edgardo Rosatti, grazie Ivan.
*/
 
#include <SoftwareSerial.h>; // includo la libreria per la comunicazione seriale
 
SoftwareSerial mySerial(10, 11); // imposto i pin per la comunicazione seriale
// Collegare i pin nel seguente modo: RX=11 TX=10
 
void setup() // setup porte e variabili
{
  pinMode(2, OUTPUT); // comando sbarra pari
  pinMode(3, OUTPUT); // comando sbarra dispari
  pinMode(4, OUTPUT); // semaforo pari
  pinMode(5, OUTPUT); // semaforo dispari
  // pinMode(6, OUTPUT); // inibito
  // pinMode(7, OUTPUT); // inibito
  // pinMode(8, OUTPUT); // inibito
  // pinMode(9, OUTPUT); // inibito
  pinMode(13, OUTPUT); // led monitor di banco presente di default sulla scheda Arduino
  
  digitalWrite(4, HIGH); // semaforo pari acceso
  digitalWrite(5, HIGH); // semaforo dispari acceso
  digitalWrite(13, HIGH); // monitor acceso
 
  mySerial.begin(9600); // setto la comunicazione
  Serial.println("GAS TT");
  delay(1000);
}
 
 
void loop() // ciclo di lettura dei comandi bluetooth
{
   while (mySerial.available())
   {
       char dato= mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
       switch(dato)
       {
         case 'A': // Se ricevo la lettera "A" alzo le sbarre
         {
           digitalWrite(2, HIGH); // alzo la sbarra pari
           delay (200);
           digitalWrite(2, LOW);
           digitalWrite(3, HIGH); // alzo la sbarra dispari
           delay(200);
           digitalWrite(3, LOW);
           delay(8000); // attendo 8 secondi
           digitalWrite(4, LOW); // spengo il led collegato al pin 4
           digitalWrite(5, LOW); // spengo il led collegato al pin 5
           delay(2000); // attendo 2 secondi
           digitalWrite(13, LOW); // eseguo 3 lampeggi e spengo il led collegato al pin 13
           delay(200);
           digitalWrite(13, HIGH);
           delay(600);
           digitalWrite(13, LOW);
           delay(200);
           digitalWrite(13, HIGH);
           delay(600);
           digitalWrite(13, LOW);
           delay(200);
           digitalWrite(13, HIGH);
           delay(600);
           digitalWrite(13, LOW);
           mySerial.println("Semafori spenti");
           break;
         }
         case 'a': // Se ricevo la lettera "a" abbasso le sbarre
         {
           digitalWrite(4, HIGH); // accendo il led collegato al pin 4
           digitalWrite(5, HIGH); // accendo il led collegato al pin 5
           delay(3000); // attendo 3 secondi
           digitalWrite(2, HIGH); // abbasso la sbarra pari
           delay (200);
           digitalWrite(2, LOW);
           digitalWrite(3, HIGH); // abbasso la sbarra dispari
           delay(200);
           digitalWrite(3, LOW);
           digitalWrite(13, HIGH); // accendo il led collegato al pin 13
           delay(8000); // attendo 8 secondi
           digitalWrite(13, LOW); // ed eseguo 6 lampeggi veloci
           delay(100);
           digitalWrite(13, HIGH);
           delay(300);
           digitalWrite(13, LOW);
           delay(100);
           digitalWrite(13, HIGH);
           delay(300);
           digitalWrite(13, LOW);
           delay(100);
           digitalWrite(13, HIGH);
           delay(300);
           digitalWrite(13, LOW);
           delay(100);
           digitalWrite(13, HIGH);
           delay(300);
           digitalWrite(13, LOW);
           delay(100);
           digitalWrite(13, HIGH);
           delay(300);
           digitalWrite(13, LOW);
           delay(100);
           digitalWrite(13, HIGH);           
           mySerial.println("Semafori accesi");
           break;
         }    
       }       
   } 
}

Per il montaggio del passaggio a livello di tipo FS in scala TT (1:120), è disponibile una lastra in alpacca fotoincisa come da foto seguente. Tuttavia, è possibile usare qualsiasi tipo di passaggio a livello anche di tipo commerciale adattandolo all’utilizzo con servocomandi.

lastra_alpacca

Links correlati all’articolo:

6 thoughts on “Automatismo per passaggio a livello

Comments are closed.