LOGGER GPS con uCHIP

Il modulo uChip è un sistema embedded poco più grande di un circuito integrato DIP a 16 pin, dotato di un microcontrollore Cortex M0 SAMD21-E18A a 32 bit (con RAM di 256 kB) e capace di gestire un display TFT, un touch controller e una scheda SD, che si presta per sviluppare numerose applicazioni che richiedono un’elaborazione di buone prestazioni, un’interfaccia utente e l’interconnessione con vari bus. L’hardware del sistema, con modeste modifiche del software, si presta anche alla gestione di segnali analogici. In questo post proponiamo un’applicazione in cui, abbinato a un modulo GPS e una batteria, uChip permetterà di realizzare la localizzazione basata sulla rete di posizionamento satellitare GPS.

Schema elettrico

Per interfacciarsi con il GPS si utilizzerà l’interfaccia seriale, mentre il touch display servirà per interagire col programma e per leggere le numerose informazioni che il ricevitore GPS fornisce e anche la distanza dal punto di partenza del percorso e la rotta che si deve seguire per ritornare. La scheda SD serve per memorizzare le posizioni, dette anche fix, che ogni secondo sono rilevate dal ricevitore. Le coordinate salvate sono convertite in gradi decimali, compatibili con Google My Maps.
Le misure acquisite sulla SD possono essere importate da Excel, usando la virgola come separatore, oppure dal programma Matlab descritto in questo stesso articolo.

uChip

I sistemi satellitari di posizionamento globale (GNSS)

Il primo prototipo di satellite GPS fu messo in orbita nel febbraio del 1978 e dal 1995 il sistema GPS ha raggiunto la piena capacità operativa per impieghi civili e militari.
Al GPS si sono aggiunti altri sistemi come il russo GLONASS, il cinese BeiDou e l’europeo GALILEO. Inoltre sono stati messi a punto dei sistemi satellitari SBAS (Satellite Based Augmentation Systems) per aumentare l’accuratezza di un ricevitore stand-alone; questi ultimi utilizzano satelliti geostazionari e una rete di stazioni a terra per eseguire correzioni differenziali a lunga base.
Per spiegare a fondo il funzionamento del GPS occorrono molte pagine, quindi in questo articolo vi forniremo solo i concetti base. Il GPS permette di ricavare la posizione dell’antenna del ricevitore, espressa come latitudine, longitudine e altezza, conoscendo la distanza tra questa ed almeno quattro satelliti o tre se si è a livello del mare.
La loro posizione in un certo istante si ricava dai parametri orbitali, detti effemeridi, e la distanza utente-satellite si ricava dal tempo di propagazione dei segnali trasmessi dai satelliti, che viaggiano alla velocità della luce nel vuoto. Come è evidente, la conoscenza del tempo è di notevole importanza, pertanto, oltre alle tre incognite costituite dalle coordinate dell’antenna, c’è anche lo scarto temporale tra gli orologi atomici dei satelliti e quello del ricevitore, molto meno preciso. Quatto equazioni per quattro incognite e, se l’utente è a livello del mare (h=0), bastano tre satelliti con una buona geometria in quanto si utilizza il modello ellissoide, che è una figura geometrica regolare che meglio approssima la Terra, in questo caso viene usato l’ellissoide WGS80.

Fig. 1

Ogni satellite GPS genera un proprio codice pseudo-casuale PRN (Pseudo-Random Noise) di 1.023 bit a una frequenza di 1,023 MHz, cui corrisponde una lunghezza d’onda l= 293,1 m, che è la lunghezza spaziale di ogni bit.
I normali ricevitori GPS sono in grado di operare solo sulla frequenza portante L1=1575,42 MHz mentre quelli più sofisticati operano anche sulla seconda portante L2=1227,60 MHz e hanno una maggiore precisione.
Il tempo di propagazione si ricava dal processo di aggancio del codice, necessario per la rivelazione del segnale stesso, consistente nel misurare lo scarto tra il segnale PRN, generato localmente dal ricevitore, con quello che viene ricevuto dal satellite. Questo processo si chiama correlazione ed in pratica consiste nel fare scorrere la stringa dei bit del PRN, generato dal ricevitore, fino a farla coincidere con quella del satellite.
L’errore orizzontale di posizione è intorno ai 2-5 m, e dipende da vari fattori, come la geometria dei satelliti, la rifrazione troposferica e ionosferica il rumore del ricevitore e dalla misura di allineamento dei codici. Quello verticale è maggiore e può valere circa il doppio.
Durante la fase della correlazione del codice, il ricevitore varia anche la frequenza MF locale in modo da renderla perfettamente coincidente con quella del satellite; tale processo (carrier tracking) porta alla misura della frequenza Doppler che permette di ricavare la velocità del ricevitore.
Accuratezze anche inferiori al centimetro si possono raggiungere, sempre in differenziale, con particolari ricevitori che utilizzano anche la fase della portante, oltre ai codici, per cui la lunghezza d’onda passa da 293 metri (dei codici RPN) a 19 cm per la portante L1 del GPS.
Di notevole importanza nella determinazione dell’errore è la geometria dei satelliti visti dall’antenna; le loro posizioni ideali sarebbero: uno sulla verticale e gli altri tre equi-spaziati di 120° e bassi sull’orizzonte da potere essere ricevuti dall’antenna e senza troppi ritardi dovuti alla rifrazione iono-troposferica (intorno ai 10÷15°).
Un ricevitore in grado di elaborare più costellazioni si chiama GNSS, vedendo più satelliti in un certo istante essi possono utilizzare quelli con la geometria migliore il che porta a una maggiore accuratezza del fix.
Il ricevitore, oltre alla posizione fornisce anche la velocità dell’utente e il tempo UTC (Universal Time Coordinated) che ha la precisione degli orologi atomici usati sui satelliti e del segmento di controllo delle stazioni terrestri.

Fig. 2

Piano di montaggio

Il ricevitore GPS utilizzato

Per questa applicazione va bene un modulo GNSS con alimentazione e segnali a 3,3V. Quello utilizzato è il ricevitore Quectel modello L80-R, molto compatto ed economico, visibile in Fig. 1.
Questo ricevitore GPS è in grado di elaborare fino a 66 canali di cui 22 tracciabili simultaneamente e ha montata anche un’antenna patch passiva.
L’interfaccia seriale può essere programmata con baud rate da 4800 a 115.200 bps (il default è 9600). Le sentenze NMEA 0183 trasmesse sono: GGA, RMC, GSA, GSV, VTG, GLL e TXT. L’alimentazione va da 3 a 4,3 Vcc (quella consigliata è 3,3 V) con un consumo di circa 25 mA.
Esso è un modulo adatto per montaggio superficiale ma le piazzole hanno 2,54 mm di passo e si può facilmente saldare, con sottili fili flessibili, al connettore femmina JST da 4 pin, compatibile con quello del sistema uChip24, come si vede in Fig. 2, dove si vede anche la corretta numerazione dei pin. Date le esigue dimensioni dell’antenna passiva (15×15 mm) il modulo si può anche montare su una piastra metallica: una piastrina di circa 70×60 mm per circuiti stampati è la soluzione ideale. Essa funge da ground plane, aumentando sensibilmente il guadagno e le prestazioni dell’antenna.
Il modulino può essere fissato alla piastra con colla epossidica usando una piastrina di qualche millimetro di spessore per evitare che le saldature, sul lato inferiore, tocchino la piastra metallica.
È bene anche saldare un filo tra lo schermo del modulo e la piastra per metterla a massa.
Combinando l’AGPS (Assisted GPS) avanzato, chiamato EASY (Embedded Assist System), e la collaudata tecnologia AlwaysLocate, L80-R raggiunge le massime prestazioni e soddisfa pienamente le aspettative. Le numerose prove a punto fisso, ottenute collocando il sistema, in registrazione su SD-Card per qualche decina di minuti, su una posizione fissa, favorevole e sgombra da ostacoli hanno dato risultati notevoli, anche considerando che esso utilizza soltanto i satelliti GPS e quelli SBAS (EGNOS per l’Europa). In queste condizioni statiche, si è misurato un CEP R95 di soli 50 cm nelle condizioni migliori. Questo test di accuratezza orizzontale rileva il raggio del cerchio contenente il 95% delle misure. Con la dinamica del movimento le cose peggiorano, ma basta fermarsi un poco per avere misure di distanza e angolo più accurate.

I messaggi GPS NMEA

I ricevitori satellitari trasmettono su porta seriale messaggi in formato NMEA (National Marine Electronics Association), dette anche sentenze.
Ecco un esempio delle sentenze trasmesse dal ricevitore Quectel:

$GPGGA,105309.000,4429.2666,N,00907.4267,E,1,6,1.35,666.1,M,48.0,M,,*5E
$GPGLL,4429.2666,N,00907.4267,E,105309.000,A,A*51
$GPGSA,A,3,30,05,07,28,14,13,,,,,,,1.66,1.35,0.97*06
$GPGSV,2,1,07,30,65,054,47,05,64,245,46,13,50,299,46,14,47,135,47*7C
$GPGSV,2,2,07,28,42,143,46,07,32,057,39,08,,,15*74
$GPRMC,105309.000,A,4429.2666,N,00907.4267,E,0.03,180.62,080121,,,A*62
$GPVTG,180.62,T,,M,0.03,N,0.05,K,A*36

Il ricevitore L80-R trasmette le sentenze $GPGGA, $GPGLL, $GPGSA, $GPGSV, $GPRMC e $GPVTG le cui caratteristiche principali sono:
$GPGGA: orario, posizione 3D e qualità dei dati ricevuti.
$GPGLL: posizione, orario e stato del fix.
$GPGSA: modalità operativa del ricevitore GPS, satelliti utilizzati nella soluzione di navigazione riportati dalla frase GGA o GNS e valori DOP.
$GPGSV: Numero di satelliti (SV) in vista, ID satellite, elevazione, azimut e valore SNR. Massimo quattro satelliti per trasmissione.
$GPRMC: ora , data, posizione, rotta e velocità.
$GPVTG: rotta e velocità relative alla terra.

Le sentenze utili al programma sono la $GPGGA e la $GPRMC. La seconda serve per ricavare la data che è impiegata, insieme all’ora, per generare il nome del file che sarà di questo tipo: ddmmyyhh.csv. Se la registrazione dovesse durare più di quell’ora, è creato un nuovo file con l’ora seguente. Il campionamento è eseguito ogni secondo.

Tabella 1

GGA – Global Positioning System Fix Data

In questa applicazione sono state utilizzate le sentenze $GPGGA, che si appoggiano ai satelliti del sistema di localizzazione americano Navstar/GPS. Di seguito il formato e in Tabella 1 tutte le informazioni relative a questa sentenza.

$GPGGA,hhmmss.ss,llll.lll,a,yyyyy.yyy,a,x,uu,v.v,w.w,M,x.x,M,,zzzz*hh<CR><LF>

Un parametro molto significativo sull’accuratezza della posizione è HDOP, la diluizione geometrica orizzontale, esso dipende dalla geometria spaziale dei satelliti usati per il calcolo della posizione (fix). Se HDOP<1 si ha un’ottima misura di posizione, aumentando questo valore si ha un degrado dell’accuratezza della posizione. Ecco perché occorrono molti satelliti in vista per poter scegliere quelli con la migliore geometria.
RMC – Recommended
Minimum Specific GNSS Data
Contiene l’ora, la data, la posizione, la rotta e la velocità, con il formato:

$GPRMC,hhmmss.sss,x,llll.lll,a,yyyyy.yyy,a,x.x,u.u,xxxxxx,,,v*hh<CR><LF>

I parametri corrispondenti sono dettagliati nella Tabella 2.

Tabella 2

Calcolo distanza tra due punti

Se le misure di posizione riguardano una zona abbastanza limitata del nostro pianeta, si può passare dal modello ellissoide della Terra a quello sferico. La distanza più breve tra due punti su una sfera, conosciuta con il termine di ortodromia, è il segmento di un circolo massimo. Sono circoli massimi quei cerchi giacenti in piani che passano per il centro della Terra.
Si sono confrontati due algoritmi per calcolare l’ortrodomia, uno è la formula dell’emisenoverso o haversine, e l’altro è la legge dei coseni sferici, più semplice ma meno accurata per distanze sub-metriche. In Fig. 3 si vede la formula haversine per calcolare la distanza tra due punti.

Fig. 3

La libreria TinyGPSPlus usa proprio questa formula, con la seguente funzione:

Dist = gps.distanceBetween(Latm,Longm,Latd,Longd);

Tutti i calcoli che elaborano le coordinate devono essere fatti in doppia precisione (8 byte in virgola mobile) e non possono essere fatti da MCU a 8 bit come quelle usate da Arduino Uno, Mega o simili. Per cui occorre una MCU a 32 bit come Arduino Due, Arduino Zero, ESP8266 (meglio ESP32) o uChip che usa un SAMD21 come Arduino Zero.
Da simulazioni si è verificato che in singola precisione gli errori si sono verificati soprattutto per il calcolo dell’angolo. La libreria TinyGPSPlus utilizza la doppia precisione.

Calcolo dell’angolo di rotta tra due punti

La rotta, è l’angolo che la retta che congiunge i due punti forma con il meridiano. Essa è espressa in gradi crescenti in senso orario da 0° a 360°, come si vede nell’esempio in Fig. 4.

Fig. 4

Le coordinate dei due punti sono state convertite in coordinate UTM (Universal Transverse Mercator) per realizzare il grafico, con assi in metri relativi alla posizione P1, ma l’angolo è stato calcolato con la formula proposta. Se il punto P2 giacesse sul meridiano, sopra P1, la rotta sarebbe di 0° o di 360° gradi, se fosse sotto P1, la rotta sarebbe di 180°.
La formula per calcolare la rotta iniziale che, se seguita in linea retta lungo un circolo massimo, porterà dal punto P1(φ1, λ1) al punto P2(φ2, λ2) è:

θ = atan2( sin Δλ . cos φ2 , cos φ1  . sin φ2 − sin φ1  . cos φ2  . cos Δλ )*180/ᴫ

Dove Δλ = λ2 – λ1 . Queste formulazioni non tengono in considerazione gli ostacoli, quindi la rotta iniziale si modificherà man mano che si aggirano gli ostacoli.
La formula fornisce angoli compresi tra 0° e *180°, per avere l’angolo di rotta compreso tra 0° e 360° basta sommare 360° ai soli valori negativi.
La libreria TinyGPSPlus ha questa funzione per calcolare la rotta:

Course = gps.courseTo(Latd,Longd,Latm,Longm);

Usare il sistema per orientarsi

Appena acceso lo strumento, occorre posare il sistema o tenerlo fisso per almeno un paio di minuti, in modo che possa iniziare ad agganciare i satelliti e calcolare le coordinate medie del punto di partenza con un certo numero di misure a punto fisso (60).
Quindi inizia a calcolare la distanza e la rotta. Tutte queste fasi sono ben identificate sul display.
Oltre a questo sistema è necessaria una bussola con ghiera graduata tipo quella visibile nella Fig. 5.
Occorre ruotare la ghiera fino a fare coincidere il suo Nord (0°= 360°) con la lancetta rossa che indica il Nord magnetico.

Fig. 5

Quindi basta leggere la rotta indicata dallo strumento (bearing) e seguire la direzione indicata dalla ghiera. Le misure di posizione hanno un errore orizzontale che, nelle condizioni migliori, è dell’ordine di 2,5 m, anche se nelle prove a punto fisso questo GPS ha dato ottimi risultati.
Questo vuol dire che la misura della distanza e dell’angolo di rotta possono avere errori notevoli se si è nelle immediate vicinanze.
Volendo, con qualche modifica al programma si possono impostare le coordinate del punto di arrivo per poterne calcolare la distanza e la direzione da prendere, esattamente come si fa a bordo per determinare la rotta da prendere per arrivare a destinazione. A differenza del mare aperto, in terraferma le cose sono più problematiche per via dei numerosi ostacoli, quale l’orografia del territorio, gli edifici, gli alberi e le persone stesse.
Questi sono ostacoli sia per la ricezione diretta dei satelliti sia per l’utente che non può prendere una direzione qualsiasi. Se ci troviamo in un fitto bosco occorre aspettare e fare la misura in una radura o in una posizione più elevata che permetta di vedere un’ampia porzione di cielo. La distanza non tiene conto della quota e non è la lunghezza del cammino che si deve compiere ma è quella in linea d’aria.
Naturalmente questi concetti servono per tutti i tipi di ricevitori GNSS e quelli più precisi, come quelli che operano anche sulla fase della portante, richiedono ancora maggiori precauzioni.

Realizzazione pratica

Per la realizzazione del prototipo, visibile nelle Fig. 6 e Fig. 7 e in quella introduttiva, abbiamo realizzato un apposito guscio con stampante 3D, dove alloggiare il PCB, il ricevitore GPS, la batteria tipo 18650 competa di porta-batteria e l’interruttore.
Riportiamo il piano di montaggio della scheda madre cui saranno applicati la uChip e il display, della quale è possibile scaricare nella sezione Download di questa pagina i file per la realizzazione del circuito stampato.
Inciso e forato il PCB, saldati i suoi componenti, si possono innestare il modulo uChip e il display grafico. Si collega quindi il modulo ricevitore GPS.

Fig. 6

Fig. 7

La batteria ai polimeri di litio da 3,7 V potrebbe essere piatta da (1100 mAh, cod: 7893-PLIB1100) oppure tonda tipo 18650 da 2200 mAh (Cod: 8240-18650) con porta-batteria (Cod: 1606-1X18650) in entrambi casi si deve saldare un connettore femmina JST da 3 pin e un interruttore.
In Fig. 8 è visibile la versione con porta-batteria per batteria in formato 18650, si noti la corretta numerazione del connettore JST.
Per questa applicazione, l’alimentazione è sul pin 16 (Vext) di uChip, che è anche collegato al pin 2 del connettore. Al fine di evitare danni irreparabili, occorre fare molta attenzione a come si montano i connettori sul circuito stampato. La Fig. 9 ne mostra i corretti orientamenti.
Si rimanda all’articolo citato per la realizzazione del circuito stampato, per il montaggio dei componenti sulla scheda e per l’upload dell’attuale programma su uChip.
La cosa migliore è quella di realizzare un involucro ad hoc con l’uso di una stampante 3D, ma in assenza di essa, si può facilmente realizzare con pannelli di plastica Forex da 5 mm di spessore, incollati con colla per PVC, come si è fatto per il prototipo.

Fig. 8

Fig. 9

La libreria TinyGPSPlus

Esistono in rete diverse librerie per estrarre le informazioni dalle sentenze NMEA, una delle più note è TinyGPS di Mikal Hart. Questa libreria era nata per funzionare su una Arduino UNO, che è basata su una MCU a 8 bit, inadeguata per fare calcoli in doppia precisione, e che fornisce le coordinate con la risoluzione di un milionesimo di grado, in formato long. Si è scelta la versione TinyGPSPlus la cui interfaccia di programmazione è più intuitiva e le coordinate sono fornite anche in doppia precisione. Nel nostro caso, la MCU di uChip è a 32 bit ed elabora in “double” senza problemi di velocità di accuratezza. Entrambe le librerie estraggono la posizione di base, l’altitudine, la rotta, l’ora e la data, ecc. dalle due sentenze NMEA GGA e RMC.
Il cuore della libreria consiste nel leggere le due sentenze NMEA ed estrarre e decodificare le informazioni principali come la posizione, la data e l’ora, ecc. La latitudine e la longitudine, originalmente espresse in gradi e primi, sono convertite in gradi decimali e, per il calcolo della distanza e dell’angolo di rotta sono ulteriormente convertite in radianti, che sono gli argomenti delle funzioni trigonometriche.
Unico neo è che la libreria ignora il quality index, presente nelle sentenze GGA, indispensabile per vedere che tipo di fix si ha, esso deve essere pari a 1 o superiore (per altri tipi di ricevitori).
Ma esiste un modo per estrarre un qualsiasi parametro contenuto nelle sentenze. In questo caso l’indicatore di qualità è nel campo 6 delle sentenze GGA, per cui:

TinyGPSCustom Qind(gps,”GPGGA”,6); 

La data e l’ora che in NMEA sono stringhe, sono trasformate dalla libreria in numeri, cosa alquanto curiosa in quanto sono grandezze non decimali, per cui risultano illegibili. Ad esempio il tempo (time) è espresso in GGA come hhmmss.cc: se l’ora è 000100.00 la libreria restituisce il numero 10000, che è di difficile interpretazione anche perché sono stampati sul display e sul file come stringhe.
Per cui si sono aggiunte le due istruzioni:

TinyGPSCustom Times(gps,”GPGGA”,1);
// extract time (char array)
TinyGPSCustom Dates(gps,”GPRMC”,9);
// extract date (char array)

Queste restituiscono le stringhe come char array.
In qualsiasi momento si può esaminare se un oggetto è valido o aggiornato. La funzione isValid()dirà se l’oggetto contiene dati validi ed è sicuro da interrogare. Allo stesso modo, isUpdated()indica se il valore dell’oggetto è stato aggiornato (non necessariamente cambiato) dall’ultima volta che è stato interrogato. Infine, se si vuole sapere quanto sono obsoleti i dati di un oggetto, si chiama la funzione age(), che restituisce il numero di millisecondi dall’ultimo aggiornamento. Se questo restituisce un valore maggiore di 1500 circa, potrebbero esserci problemi di perdita di dati.

Il programma

All’avvio, il programma controlla che sia presente la scheda SD, se essa è presente è abilitata l’eventuale acquisizione (SDok=true) delle misure su file, altrimenti esse sono solo visualizzate sul display. Se la SD non è inserita o se è guasta, stampa sul display “SD card failed!”.
La MCU di uChip ha una seriale hardware (Serial1) oltre a quella USB, per cui non si è usata quella software. Il baud-rate del nostro GPS, come quello della maggior parte dei moderni moduli in commercio, è di 9600 baud.
Se si ha un modulo GPS a 4800 o altro, basta modificare la variabile BaudRate.
L’unica cosa da controllare con cura è il livello dei segnali seriali che devono essere di 3,3V e anche l’alimentazione.
Il setup() termina con la stampa della scritta “Waiting for valid GPS data …….” per indicare che è in attesa di dati validi (vedi Listato 1).

La libreria funziona carattere-per-carattere ricevuto dal GPS e letto dalla funzione encode:

while (Serial1.available() > 0){
gps.encode(Serial1.read());

Per sincronizzare le misure si deve verificare che siano tutte aggiornate le variabili che ci servono:

if (gps.location.isUpdated() && Qind.isUpdated() && gps.altitude.isUpdated() && gps.satellites.isUpdated()
&& gps.hdop.isUpdated() && Times.isUpdated() && Dates.isUpdated())
{
GetData();
}

La funzione GetData() estrae ed elabora tutte le informazioni utili al programma (vedi Listato 2).

Le coordinate sono contenute in gps.location, e sono lette in gradi decimali, in formato double.
Il programma attende che l’indicatore di qualità Qi sia maggiore di zero, per questo ricevitore esso vale uno quando ci sono almeno tre satelliti, altrimenti vale zero.
All’accensione il ricevitore impiega alcune decine di secondi per iniziare a identificare i satelliti in vista.
Dopo aver ricevuto i primi dati validi, il programma esegue la media di NuAv fix, questo è necessario per avere una buona stima delle coordinate del punto di partenza.

if (nm < NuAv && fixok){
// calculates the average of the initial fix
Latm += Latd; 
Longm += Longd;
nm++;
if (nm == NuAv){
fixmean= true;
Latm /= NuAv;
Longm /= NuAv;
}
}
Durante questa fase si deve lasciare ferma l’antenna e assicurarsi che non ci siano ostacoli nelle vicinanze. Sul display comparirà la scritta “N means = xx”, dove xx è il numero campioni mediati fino a quel momento. Nel programma si è posto NuAv=60 pari a un minuto.
Quindi, fixmean= true e sul display compariranno altre due righe con le coordinate medie del punto di partenza. Se presente la SD e se i dati sono validi, è generato il nome del file in base alla data e l’ora:

if (SDok && fixok) {
// generate the file name based on date and hour
String hhs = hhmmss.substring(0,2); //only hours
String ddmmdd = Dates.value();
filename = ddmmdd+hhs+”.CSV”;
// the csv file name is the date and hour
}

Le misure sono stampate sul display ogni secondo dalla funzione DisplayData().
Se la scheda SD è inserita ed è valida, sullo schermo è presente il tasto (blu) per avviare (da blu a rosso) o fermare (da rosso a verde e poi blu) l’acquisizione. Quando acquisisce, sul display viene stampato anche il numero di campioni.
Se è presente la SD e il fix è valido e se è stata avviata l’acquisizione salva i dati su un file CSV. Il file CSV (Comma-Separated Values) è un file ASCII con i dati separati da virgole. I dati memorizzati dal sistema uChipGPS hanno il seguente formato:
latitudine, longitudine, ora UTC, nsat, HDOP, altitudine

Un esempio è questo:

44.7350017,8.8303500,101535,6,1.5,229.9

con latitudine e longitudine in gradi decimali; l’ora UTC ha il formato hhmmss e l’altitudine è espressa in metri. Questo formato è perfettamente compatibile con il programma My Maps di Google, in questo modo si possono vedere i punti del percorso sovrapposti alla mappa.
Per importare le infomazioni nella mappa Fig. 10 occorre seguire questi semplici passaggi:
sul computer, accedere a My Maps
(https://mymaps.google.com/);
aprire o creare una mappa;
nella legenda della mappa, fai clic su “Aggiungi livello”;
date un nome al nuovo livello;
nel nuovo livello, fai clic su “Importa”;
scegliere o caricare il file hhmmss.csv e fare clic su “Seleziona”;
selezionare la colonna contenente le latitudini (la prima), le longitudini (la seconda) e le etichette per ogni punto (per esempio l’ora, la terza colonna).

Il programma Matlab
Questo programma è in grado di elencare tutti i file presenti nella cartella di lavoro, quindi legge il file corrispondente al numero che è immesso. I dati sono messi nella cell array D dalla funzione:

[D] = textscan(fid,’%f %f %s %d8 %f %f’,’delimiter’,’,’);

Quindi sono estratte tutte le informazioni e sono eseguiti i grafici delle coordinate, del numero di satelliti elaborato e della diluizione geometrica orizzontale HDOP. Per motivi grafici la latitudine e longitudine sono riferite al minimo valore misurato. Il programma è riportato nel Listato 3. Ecco un esempio di uscite per un’acquisizione a punto fisso.

Elaborazioni misure uChipGPS a punto fisso
Nome file elaborato = 07052110.CSV
UTC time iniziale = 101505 e finale = 101741
Medie elaborate su = 157 epoche
HDOP media = 1.50
Numero medio satelliti = 6.0

Come si vede in Fig. 11, la latitudine è variata di circa 1,7 milionesimi di grado, la longitudine di circa 7 milionesimi e l’altitudine di soli 20 centimetri. Sono misure estremamente precise, quasi anomale, ma che si sono avute anche in diverse altre acquisizioni fatte con questo ricevitore.
Infatti, un incremento di un milionesimo di grado di latitudine, per quella zona, corrisponde a circa 11 cm verso Nord e a circa 9 cm verso Est per la longitudine. Questo non significa che il ricevitore ha un’accuratezza sub-metrica, ma che implementa un particolare algoritmo che migliora notevolmente le prestazioni a punto fisso. Bene, con questo abbiamo concluso: termina qui la descrizione di un progetto che mostra la versatilità e la potenza dell’hardware uChip abbinato alla nostra scheda madre e a periferiche come un display grafico e un comune ricevitore GPS.

Download

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu