ATS Smart App: L’App Android per controllare i treni LEGO

A distanza di un anno esatto da quando iniziai a sviluppare la mia App Android per per controllare i treni LEGO basati sul sistema Powered Up, ho deciso di rendere pubblici i ‘sorgenti’ di ATS – AFOL Train System “Smart App” in modo da consentire, a chi ne avesse voglia/necessità, di poterla personalizzare, estendere o, più semplicemente, vedere come funziona…

Ad agosto 2019 la mia App era l’unica che permetteva di controllare più di uno smart hub contemporamente ovvero fino a 4 Hub. Solo a dicembre dello stesso anno, LEGO, rilasciò un aggiornamento dell’App ufficiale consentendo di gestire più hub (fino ad un massimo di 4).

L’App è principalmente pensate per gestire, da un unico dispositivo/interfaccia, più convogli LEGO, offrendo alcune impostazioni specifiche per gli AFOL più esigenti.

Al momento è l’unica App per Android (disponibile, tra l’altro, su Google Play Store) pensata appositamente per controllare più treni LEGO contemporaneamente.

Per realizzare tale App ho utilizzato una piattaforma di sviluppo particolare: MIT App Inventor. Un ambiente di ‘programmazione’ visuale molto simile a Scratch…

Una piattaforma molto comoda e immediata per sviluppare su dispositivi Android, senza la necessità di conoscere Java/Android Studio. Di contro, quando l’App diventa “complessa”, non è molto semplice gestirla… basta vedere in questa immagine una parte del “codice” a blocchi di ATS.

Il funzionamento dell’App è comunque molto semplice: è possibile connettere fino a 4 Smart Hub e gestire la velocità dei rispettivi motori connessi sulla Porta A (nota: su alcuni smartphone non sono riuscito a connettermi a più di 3 Smart Hub e ritengo che sia un problema dell’hardware BLE, dato che anche con l’App LEGO non sono riuscito a superare tale limite).

I singoli Hub, quando connessi, vengono identificati tramite l’assegnazione di un diverso colore del Led presente sull’Hub stesso.
Hub 1: Verde, Hub 2: Rosso, Hub 3: Blu; Hub 4: Arancione

Ci sono poi delle particolarità che rendono l’App molto versatile per chi gioca con i treni LEGO.

E’ infatti possibile:
– Controllare, con un singolo slider, fino a due motori connessi ad un singolo Hub (utile se si ha bisogno di più potenza di trazione);
– Invertire il senso di rotazione di un motore, rispetto all’altro (in modo da non preoccuparsi del posizionamento del motore rispetto alla *poca* lunghezza del cavo di collegamento);
– Unire, in modo logico, due Hub insieme (Hub 1 e 2, oppure Hub 3 e 4) controllandone i rispettivi motori con un singolo slider (utile nel caso in cui si volesse equipaggiare un treno con due Hub, posizionandone uno in testa e l’altro in coda);

L’App è in grado di riconoscere se sulla Porta B del singolo Hub è connessa una luce LED 88005, permettendo di accenderla/spegnerla a piacere.

Tramite due pulsanti è possibile controllare contemporaneamente tutti i 4 Hub avviando tutti i motori ad una potenza del 75% oppure spegnendoli tutti insieme.

Per rendere il tutto ancora più dinamico, ho implementato anche una sorta di ‘sequencer’, ovvero la possibilità di definire una lista di comandi da inviare, in modo sequenziale, ai 4 Hub. Tramite questo sequencer è quindi possibile definire un comportamento del tipo: “Avvia il treno A per 30 secondi, poi fermalo e fai partire il treno B finché il sensore di colore montato su questo treno non rileva un ostacolo. A questo punto ferma il treno B e fai partire il treno C…

I comandi, molto banalmente, sono i seguenti tenendo presente che gli Hub devono essere configurati con il motore del treno connesso alla Porta A e l’eventuale sensore di colore connesso alla Porta B:
GF[Hub][Power]: Avvia il motore connesso all’Hub indicato alla potenza specificata;
GR[Hub][Power]: Avvia il motore (in senso inverso) connesso all’Hub indicato alla potenza specificata;
WAIT[seconds]: aspetta tot secondi prima di eseguire il comando successivo
STOP[hub]: Ferma il motore connesso all’Hub indicato;
SENS[hub]: Ferma l’esecuzione del sequencer fintanto che il sensore di Colore/Distanza (connesso alla porta B dell’Hub indicato) non rileva un ostacolo;

Ecco un esempio dei comandi con il relativi parametri:

– GF150: Go Forward Hub 1 al 50% della potenza.
– GR275: Go Reverse Hub 2 al 75% della potenza.
– WAIT5: Aspetta 5 secondi prima di eseguire il successivo comando
– STOP1: Ferma il motore dell’Hub 1
– SENS1: Attendi finché il sensore connesso alla porta B dell’Hub 1 non rileva un ostacolo… quando accade, prosegui con l’istruzione successiva.

Il sequencer è molto spartano ma svolge discretamente il suo lavoro e, soprattutto, non ferma l’esecuzione dei comandi qualora lo smartphone entrasse in modalità “stand by” (al contrario di quanto accade con l’App LEGO).

L’editor del sequencer non è il massimo dell’usabilità rispetto a quello che ci si aspetterebbe da una applicazione di questo genere… sicuramente è una di quelle parti dell’App che può essere migliorata. In realtà, in passato, mi era anche passata per la testa l’idea di fare un’App specifica solo per il sequencer ma è rimasta, appunto, solo un’idea 😉

L’App, infine, implementa una scheda ‘Device’ tramite la quale è possibile visualizzare i singoli dispositivi connessi ad un Hub ed avere un riscontro dei dati rilevati dai sensori di colore. ‘Tappando’ 3 volte sul testo ‘Log disabled’ è possibile abilitare un log di tutti i messaggi (in notazione decimale) ricevuti/trasmessi da e verso i vari Hub.

I ‘sorgenti’ dell’App (progetto in formato .aia di MIT App Inventor) sono disponibili nel mio repository GitHub, al sequente indirizzo: https://github.com/GianCann/ATS/tree/master/AndroidApp

Resto a disposizione per qualsiasi chiarimento in merito all’App e al codice sorgente 😉

Lascia una risposta

L'indirizzo email non verrà pubblicato.I campi obbligatori sono contrassegnati *