Indice |
Applicazioni
Dopo i due "mattoni" precedenti vorrei concludere con qualcosa di un po' più pratico, qualcosa che possa stimolare idee ed applicazioni del GPS. Come vedremo infatti è piuttosto semplice interfacciare un ricevitore -acquistabile anche piuttosto economicamente- con PC o microcontrollori.
Come accennato prima adesso abbiamo il "motore", un trasduttore che ci indica la nostra posizione e velocità, e dobbiamo "costruirci l'auto intorno" cioè trovare la maniera di rendere le informazioni fornite usabili, magari in modo semplice ed intuitivo...
Apparati commerciali
Farò solo una brevissima carrellata sui "tipi" di apparati sia perchè questo è un forum tecnico e non ho intenzione di sostituirmi al libretto di istruzioni sia perchè mi risulta difficile includere immagini senza pubblicizzare una marca piuttosto che un'altra.
Fondamentalmente farei una divisione in due categorie:
Gli apparati, mediamente più economici, sprovvisti di funzione cartografica forniscono la nostra posizione semplicemente in forma numerica
questa può poi essere riportata su di una carta geografica -piuttosto scomodo- oppure memorizzata in modo da permettere al GPS di calcolarmi -in seguito- un percorso per ritornare al punto di partenza.
Naturalmente il GPS non ha idea di che cosa ci sia intorno e questo genere di percorsi non può che essere "il segmento che unisce i due punti" senza contare che magari devo "attraversare" muri, palazzi o isole! Altre funzioni generalmente realizzate riguardano la memorizzazione del percorso effettuato, semplicemente memorizzo una posizione ad intervalli regolari, e mostro questi punti su un piano, una carta geografica in bianco. Poi anche i modelli più economici permettono di gestire un database di punti, "catturati" in movimento o anche inseriti numericamente con latitudine e longitudine lette su una carta geografica e di utilizzarli come "destinazioni" o come punti di una linea spezzata da seguire.
Certo la cartografia sovraimpressa semplifica molto la vita..
ma appesantisce molto il lavoro per il processore host. Nel caso di applicazioni nautiche o avioniche, a parte l'aspetto grafico c'è poco di più di quanto detto; nel caso di applicazioni automotive invece si devono implementare gli algoritmi per calcolare il percorso alla destinazione con le varie restrizioni del caso, tipo -ovviamente- mi posso muovere solo sulle strade, e poi "percorso più veloce" oppure "più breve" etc. etc. Ulteriore "finezza" necessaria nel caso di cartografia stradale riguarda la correzione delle inaccuratezze, 10-20m di errore sono comuni, il che significa trovarsi "dalla parte sbagliata dell'autostrada" degli algoritmi correlano allora direzione di movimento con le restrizioni stradali per aggiustare la cosa.
Vorrei solo notare che queste cartografie non sono generalmente memorizzate come immagini, il range di zoom possibile è troppo ampio ed otterrei comunque file di dimensioni assurde e poca qualità grafica negli zoom molto "profondi". Allora si memorizzano in forma vettoriale con gli oggetti individuati dalle loro coordinate e dimensione mentre il processore si occupa della loro resa -rendering- grafica in base allo zoom selezionato.
Infine tutti i tipi di apparecchi hanno delle pagine di "manutenzione" dove è possibile verificare dove si trovino i satelliti, quali siano ricevuti, quali usati e con che qualità di segnale.
Usiamo un GPS
Vediamo ora come utilizzare un modulo GPS in qualche applicazione, per PC, oppure anche semplicente per microcontrollore.
Questi moduli sono disponibili principalmente con due tipi di interfaccia, USB e seriale.
GPS USB
Il primo tipo-forse più adatta per PC- si presenta generalmente come una "saponettina" con un cavetto USB. Una volta installato il driver -di solito il classico FT232- ci troviamo sul PC una porta seriale su cui riceveremo i dati dal GPS.
GPS seriale
L'aspetto fisico sarà simile al tipo USB a meno di non avere un modulino OEM senza contenitore, solo i collegamenti saranno diversi, è necessario alimentare il modulo e prelevare i dati seriali, tipicamente ci si può rifare a questo schema
Per i dettagli è indispensabile vedere il manuale, ma tipicamente
- L'alimentazione può essere 5V oppure 10-32V
- I dati trasmessi sono a livello TTL, 0V=space, 5V=mark
- I dati ricevuti servono per inviare comandi di configurazione/inizializzazione ma il più delle volte non è necessario e si può lasciare aperto.
- La massa è comune a tutti i segnali elencati
Protocollo di comunicazione
Generalmente tutte e due i tipi di interfaccia usano il protocollo NMEA0183 / IEC-61162, in pratica il modulo trasmette stringhe di dati ASCII terminate CR/LF, la velocità è 4800 8N1. La trasmissione è tipo "broadcast" stringhe inviate senza nessun handshaking, tipicamente la cadenza è una volta al secondo per ciascuna stringa.
Il primo esperimento si può fare tranquillamente con Hyperterminal o qualcosa di equivalente e ci possiamo aspettare di veder "scorrere" qualcosa del genere
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F $GPGGA,002454,3553.5295,N,13938.6570,E,1,05,2.2,18.3,M,39.0,M,,*7F $GPGSA,A,3,01,04,07,16,20,,,,,,,,3.6,2.2,2.7*35 $GPGSV,3,1,09,01,38,103,37,02,23,215,00,04,38,297,37,05,00,328,00*70 $GPGSV,3,2,09,07,77,299,47,11,07,087,00,16,74,041,47,20,38,044,43*73 $GPGSV,3,3,09,24,12,282,00*4D $GPGLL,3553.5295,N,13938.6570,E,002454,A,A*4F
Struttura delle sentenze
In rete si trovano centinaia di siti dedicati alla decodifica dei dati NMEA183, farò solo una brevissima carrellata sulla struttura di queste stringhe. Partiamo con un header formato dal carattere $ e cinque caratteri ASCII, poi abbiamo un numero variabile di campi separati da virgole ed infine (opzionalmente) un campo di checksum separato dall'ultimo campo dati da un asterisco.
- $ delimitatore "start of message"
- due caratteri GP "talker id" identifica il tipo di dispositivo che ha generato questa stringa, un GPS in questo caso, questo protocollo è più generico e altri dispositivi potrebbero essere la fonte di questi dati.
- tre caratteri "sentence ID" RMC, GGA, GLL, GSA, GSV etc. etc. che identificano che cosa viene trasmesso e il numero di campi da attendersi successivamente. Si nota che l'unico modo per separare i vari campi deve essere la virgola, considerare la lunghezza invece è fonte di sicuri problemi, il numero di cifre decimali -nei campi numerici- non è fisso ed inoltre c'è la possibilità che alcuni campi siano "vuoti" in certe condizioni o "con valore" in altre.
- l'ultimo campo -può esserci o nò- è una rudimentale checksum calcolata tramite un EXOR su 8 bit di tutti i caratteri della stringa a partire da -ma escludendo- $ e fino a -escluso anch'esso- *. Il risultato viene poi accodato come numero esadecimale di due cifre codificato ASCII.
- Infine gli invisibili <CR> 0x13 e <LF> 0x0A terminano la sentenza.
RMC
Descriverò ora -a titolo di esempio- i campi di questa sentenza
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
- Ora UTC
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
questi dati si riferiscono alle 00:24:54 UTC, cioè ora al meridiano zero, senza tener conto dell'ora legale. In Italia si deve aggiungere 1 ora per ottenere l'ora solare, 2 ore per la legale.
- Stato del GPS
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
A significa dati validi, invece V significa dati non validi, satelliti non ancora aquisiti
- Latitudine
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
Questi sono ovviamente due campi, il primo indica la latitudine, normalmente il formato è due cifre per i gradi (35), due cifre per i primi di grado (53) , poi il punto decimale e la frazione decimale di primo (0.5295), non i secondi di grado! Ed infine nel secondo campo l'emisfero N=nord, S=sud. In questo caso il GPS si trova 35°53.5295' N. Tuttavia esistono ricevitori che trasmettono i gradi in formati diversi, è indispensabile consultare il manuale!
- Longitudine
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
Valgono le stesse considerazioni della latitudine per la misura dei gradi, solo i flag di emisfero stavolta possono essere E=est o W=ovest. In questo caso abbiamo 139°38.6570' E. Nel caso di valori minori di 100° viene spesso lasciato lo zero iniziale (e.g. 01032.3456) tuttavia -come detto prima- basarsi sulle lunghezze per la decodifica è fonte di problemi, si devono invece usare i delimitatori, virgole e punti decimali.
- Velocità
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
Velocità rispetto alla terra, espressa in nodi, cioè miglia nautiche/ora, un nodo equivale a circa 1.852 km/h
- Direzione
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
Secondo elemento del vettore velocità, la direzione di moto espressa -secondo l'uso dei naviganti- in gradi e decimali di grado rispetto al nord geografico, misurati in senso orario (e.g 0=nord, 90=est, 180=sud, 270=ovest). Solo da notare che questo dato è significativo solo se il modulo della velocità è diverso da zero, se siamo fermi il valore salterà casualmente da un valore all'altro a causa delle incertezze di misura.
- Data
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
data nel formato GGMMAA, nell'esempio 18 luglio 2000
- Variazione magnetica
$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W*3F
Questo campo indica la variazione magnetica, cioè la differenza in gradi tra nord geografico e nord magnetico. Questo dato -se trasmesso- viene caricato da una tabella memorizzata nel ricevitore GPS in base alla posizione attuale.
Altre sentenze
Nell'esempio si notano anche GLL e GGA, entrambe contengono sostanzialmente gli stessi dati gia visti, posizione, velocità, data e ora.
GSA e GSV invece contengono dati relativi a quali satellti siano utilizzati per la soluzione e la loro posizione nel cielo e permettono sostanzialmente di generare schermate tipo questa
Dettagli su queste e molte altre sentenze si trovano ad esempio nel gia citato link, molti sono anche i programmi freeware per visualizzare in chiaro tutte queste informazioni su PC o smart phone, ad esempio Visual GPS ma ce ne sono decine. Così come è possibile scaricare routine gia pronte per la decodifica in svariate piattaforme da PC a molti micro.
Conclusioni
Sì vabbè ma ora che ci faccio?? Molte sono le applicazioni professionali dei GPS, dalle più ovvie come navigazione o guida fino ad altre più "strane" come sincronizzare reti di telecomunicazione o di distribuzione di energia.
Ma anche a livello più hobbistico si potrebbe ad esempio sincronizzare l'orologio di un PC che non abbia accesso ai server di tempo in Internet o interfacciarsi con un micro e "giocare" un po' con i dati. O anche magari studiare statisticamente gli errori e la possibiltà di corregerli o chissà che altro.
In fondo lo "spirito" di questi articoli è stato quello di dare qualche informazione su di uno strumento e dare la possibiltà di scovarne una qualche applicazione.
Per tornare all'inzio della serie non si potrà ora che sorridere quando in qualche telefilm vedremo GPS che funzionano allegramente all'interno di abitazioni o improbabili investigatori che tracciano sospettati con fantascientifiche apparecchiature noncuranti del fatto che -a meno di avere un collegamento GSM o che altro- nessun GPS può comunicare la posizione a "terzi".