Ciao a tutti, vorrei iniziare a raccontarvi la storia di un progetto, un mio progetto che è diventato a tutti gli effetti un progetto di TangoDev.
Iniziamo da… dall’inizio!

1 – Che cosa è OpenLapTimer e come è nata l’idea del progetto?

OpenLapTimer è un timer, un cronometro per misurare le prestazioni sui giri in circuito. Sono appassionato di moto e adoro girare in pista (anche se con scarsi risultati xD). L’idea di avere sulla mia DUCATI un cronometro per misurare il tempo sul giro mi allettava molto ma, come spesso accade, i prezzi erano proibitivi (dai 300€ in su) o quantomeno ingiustificabili per le poche volte che scendevo in pista.
Nello stesso periodo nell’ufficio dove lavoravo all’epoca (era il Gennaio 2015) si iniziava a parlare di Arduino.. Ma perché non lo proviamo, cosa costruiamo e via dicendo.
Così facendo ecco l’idea:

costruisco il mio cronometro per la moto!

2 – Obiettivi

L’obiettivo del progetto era quello di realizzare in casa un cronometro per misurare le prestazioni in pista basato su tecnologia GPS.
La scelta del GPS come tecnologia di rilevazione del tempo porta 2 vantaggi:

  • si hanno a disposizione le posizioni rilevate (per poter vedere le traiettorie)
  • non è necessario nessun altro strumento da lasciare sul muretto dei box, come avviene per i cronometri infrarossi commerciali

Il tutto doveva essere quanto più possibile economico, mostrare i tempi su di un display touchscreen e salvare il percorso GPS su di un file per poter essere esportato e analizzare le traiettorie.

3 – Analisi degli strumenti

IMG_1849Una volta chiaro l’obiettivo, serviva scegliere gli strumenti adatti a raggiungerlo: quale scheda scegliere? Al momento era in forte ascesa Arduino, perciò la scelta è stata una scheda Arduino2, molto più potente della UNO, una capacità di elaborazione in grado di gestire la quantità di informazione proveniente dal sensore GPS.
Non è finita qui, alla dotazione del dispositivo si aggiunge un display touch resistivo.
Perché resistivo e non il più nuovo touch capacitivo? Semplice, perché era la tecnologia adatta per essere usata con i grandi guanti Racing in pelle.

3 – Progettazione

Board scelta, tecnologia GPS scelta: questo punto era il momento di iniziare a studiare.
Studiare la tecnologia GPS, il tracciato che emette il sensore (protocollo NMEA), studiare il linguaggio C e C++, ma soprattutto le librerie di Arduino che sono basate su C e C++, aggiungono uno strato più elevato che spesso semplifica il lavoro.
Imparare a gestire a basso livello i dati provenienti dalla seriale, gestire i dati in uscita verso il display su interfaccia SPI (una connessione a BUS seriale dei dispositivi fisici), gestire gli input provenienti dal touchscreen o dai pulsanti fisici.

Una volta fatte le dovute prove su ogni aspetto tecnico era il momento di assemblare il tutto e progettare la struttura del software.

  • I “componenti” grafici da una parte
  • La gestione del tempo (timer) e dei giri dall’altra
  • E infine la lettura e il parsing dei dati del GPS
olt-gui-run

Durante la marcia, la precisione del tempo è al decimo di secondo.

Ma non di solo software si compone il LapTimer, anche l’interfaccia grafica era da progettare! Considerando i pochi mezzi a disposizione per renderizzarla doveva essere il più semplice possibile e quindi.

olt-gui-lap

Al terminde del giro, il tempo è visualizzato con la precisione del centesimo di secondo.

L’ispirazione è stata presa dal cockpit della DUCATI 1199 Panigale, che quando è in modalità Track mostra un cronometro con i tempi al posto di velocità e livello dell’olio.
Nella prima foto si vede la configurazione di marcia, in cui la precisione è ad una sola cifra dei decimi di secondo, una volta concluso il giro, il tempo ottenuto verrà mostrato per alcuni secondi, ma a precisione del centesimo di secondo.

5 – Implementazione

La prima versione del Timer è stata realizzata simulando con un pulsante il completamento di un giro. In questo modo era possibile provare il tutto stando comodamente a casa.
IMG_1793

 

Le prestazioni lasciavano molto a desiderare, così dopo diverse ricerche (davvero molte) sono riuscito a scovare una libreria per gestire il display, realizzata da un ragazzo, che agisce a basso livello e che scrive i bit direttamente nella memoria del display, rendendo tutto più veloce.

 

Così riscrivo completamente lo strato grafico del progetto e il risultato è questo:

 

6 – Test, non resta che provarlo in pista

old-ducati-749

I test eseguiti a casa erano perfetti, le prove live in strada (rispettando il codice della strada, mi raccomando!) hanno dato esito positivo, quindi si scende in pista!
Magicamente non va più niente 🙁
Dopo la delusione si ritorna a casa a ricomporre i pezzi e a capire cosa c’era di errato.
Dopo qualche tempo e sistemato qualche BUG qua e là, ma che onestamente non potevano giustificare il primo flop, si riprova a casa e per strada: esito positivo! Si scende ancora in pista!
Al giorno scelto si entra in circuito e… ci risiamo, niente segnale GPS.
Sapete come mai? Non lo so nemmeno io! Nemmeno ora!

Conclusioni

Questa è solo la breve storia di un anno e mezzo circa di progetto.
La grande difficoltà di riuscire a scovare gli errori sulla piattaforma Arduino mi hanno portato ad abbandonare il progetto… e… crearne una nuova versione!
Nuova scheda, nuovo linguaggio di sviluppo, una ventata di aria fresca.
Si, perché OpenLapTimer non è fermo. Al momento è un progetto rinato, che prosegue, ma oggi si basa su tecnologie più affidabili e soprattutto testabili!

Ma lascio i racconti ai prossimi articoli..

P.S. il nome “OpenLapTimer” deriva dal fatto che è un lap timer, ovvero dall’inglese cronometro per misurare i giri realizzato con materiale OpenHardware e codice OpenSource.

Trovate tutti i riferimenti del progetto qui:
Pagina web: http://tongo.github.io/OpenLapTimer/
Progetto GitHub: https://github.com/tongo/OpenLapTimer
Wiki progetto: https://github.com/tongo/OpenLapTimer/wiki

Che ne pensate di OpenLapTimer?
Se avete domande, saremo lieti di rispondere.