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.
Arduino 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:
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:
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.
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.
Ottimo lavoro !!!
Grazie Carlo!
Andate alla grande, complimenti ragazzi!
Grazie anche a te Andrea
Complimenti!
Grazie Ivan