Lego, Nordic e App Android BLE = mini rover

update 23 Jun 2022: project translated into English and copied to: https://hackaday.io/project/186007-mini-rover-driven-by-ble-android-app

Ecco qui il frutto del mio lavoro nel weekend: un piccolo rover a tre ruote che posso pilotare con una App sul mio telefono Android con BLE.

Notate che il rover “porta a spasso” un altro smartphone (del 2011 !) che serve oggi come contrappeso, ma in futuro servirà per “altre cose”… i più curiosi potranno tornare sul sito per scoprire quali saranno queste novità. Con calma e senza spingere!

Per muovere il rover ho usato due piccoli servomotori SG90 modificati. Per i dettagli relativi alla modifica dei servo, vi rimando a questo articolo sul mio sito: “Pedrone” Part #1 – Trimming stop point on modified servo.

Ora scriverò tre parole che faranno rabbrividire i “puristi” del Lego Technic: viti, colla e biadesivo. Sì, per mettere insieme il rover (con i pezzi del “Pedrone”) ho usato questi sporchi trucchi, ma solo dove era strettamente necessario! Non so se esistano dei pezzi “fatti apposta”, ma comunque, essendo il Lego ormai un ricordo di quando i miei figli erano piccoli, mi sono preso la libertà di fare come  mi pareva… Ecco le foto incriminate:

Per alimentare il dispositivo, ho usato un vecchio circuito costruito per fare il power back-up di una scheda Raspberry Pi. Eccolo qui:

Se siete interessati a questa unità di backup con uscita a 5V, leggete il mio vecchio articolo: Single 3.7V Li-ion cell battery back-up for Raspberry Pi.

Vediamo lo schema elettrico del circuito:

Ho usato il “dongle” USB con il SoC Nordic nRF52840 descritto qui. Sullo schema notiamo un connettore per una interfaccia USB-Serial (a 3.3V) che serve solo nel caso in cui vogliate leggere i messaggi inviati dal firmware (formato 115200,N,8,1) nelle varie fasi operative. Questo connettore serve solo per debug e non funziona se usate un modulino Nordic come quello descritto qui, perché i pin usati per la seriale non sono disponibili (se non scrivendo una versione di firmware modificata, cosa che questa volta non faccio, essendo questo progetto solo una preparazione verso qualcosa di più complesso). Il firmware dovrebbe comunque “girare” su entrambi i moduli, purché il cablaggio venga modificato adeguatamente! Notate che sul mio alimentatore ho regolato l’uscita per 5.5Volt, dato che lo step-up me lo permette. Questa tensione arriva direttamente ai motori e invece passa attraverso un diodo per arrivare al modulino, quindi c’è una piccola caduta di tensione, irrilevante in questo caso.

Il firmware da programmare sul modulo, seguendo le istruzioni fornite in questo mio precedente articolo, è compreso nel file .zip allegato. Anche in questo caso, ho usato l’ambiente di sviluppo Zephyr RTOS per realizzare il programma.

Veniamo ora all’App per Android, che ho scritto usando B4A di Anywhere Software. Anche questa è compresa nel file .zip che viene fornito qui. L’App non è pubblicata sul “market” e quindi per installarla bisogna dare il consenso a gestire App provenienti da “fonti sconosciute”. Vediamo che succede quando la si esegue:

Dalla versione Android 6 in poi, compare l’avviso per l’utente che lo informa dei “permessi” richiesti dall’App. Per usare il Bluetooth BLE bisogna per forza abilitare anche la geolocalizzazione. A sinistra nell’immagine c’è appunto questa richiesta. Bisogna inoltre ricordarsi di accendere sia il Bluetooth che il servizio di localizzazione e quindi, lanciando l’App, si vedrà la schermata a destra. Cliccando su Connect, andremo alla fase successiva, la scansione dei dispositivi BT raggiungibili:

A sinistra vediamo la lista dei dispositivi, che potrà essere anche lunghetta, in funzione del numero dei dispositivi disponibili. Cerchiamo quello che si chiama ROVERone_xxxx e premiamo a lungo sull’elemento della lista. Finalmente entreremo in contatto con il circuito e apparirà la schermata a destra. Ora, premendo sulle varie frecce, il rover si muoverà come voluto. Nel riquadrino in alto, comparirà il comando inviato dallo smartphone al circuito (nella figura sotto, a destra, ho messo l’icona dell’App):

In questo caso, leggiamo 1515. I dati trasmessi sono i valori di pulse del motore destro e sinistro. I valori possibili sono: 10 (1mS), 15 (1.5mS) e 20 (2mS). Il servo utilizzato, modificato per ruotare continuamente, si comporta così: con impulso 1.5mS si ferma, con 1mS gira in una direzione e con 2mS gira nella direzione opposta. La cosa seccante è che con questo circuito non è possibile modulare la velocità, per cui in un futuro prossimo modificherò i servomotori, lasciando all’interno di essi solo la meccanica ed eliminando l’elettronica (ormai l’adattatore meccanico per il Lego l’ho fatto e lo voglio tenere) e quindi farò un aggiornamento del firmware e del circuito di controllo, che diventerà un doppio H-bridge modulato in PWM.

Questo è tutto. Nella pagina dei downloads troverete il file con il firmware da programmare sul modulino USB rover1.hex e l’App per Android rover1.apk. A presto…