18

Come usare un GPS con Arduino a basso costo

Vorresti integrare il rilevamento di latitudine e longitudine in qualche tuo progetto con Arduino senza spendere troppo?

Nessun problema, io ho trovato una valida soluzione dal mercato cinese. In particolare ho acquistato un prodotto che mi sembra davvero buono su Banggood, noto sito di e-commerce.

Il prodotto in questione si trova facilmente su Banggood e sul web in generale digitando “VK16U6 TTL Ublox GPS” oppure “u-blox”.

Se vuoi acquistare quello acquistato da me clicca qui.

Il modulo è un ricevitore GNSS. tale acronimo si riferisce ad un sistema satellitare globale di navigazione (Global Navigation Satellite System) con riferimento ai sistemi di geo-radiolocalizzazione e navigazione terrestre, marittima o aerea, che utilizzano una rete di satelliti artificiali in orbita e pseudoliti.

come si presenta il sensore

come si presenta il sensore

 

Il sensore avrà 6 fili di collegamento.

 

gps2

 

Può succedere che, come nel mio caso, i collegamenti di TX e RX siano invertiti, quindi se nello sketch che vedremo non funzionerà correttamente sarà sufficiente invertirli.

 

GPS con Arduino

Lo sketch che vi presento permetterà ad Arduino di salvare i dati provenienti dal sensore GPS in una scheda SD oltre che a mostrarli a schermo tramite comunicazione seriale.

Nella scheda SD saranno salvati, su un file di testo “coord.txt”, i seguenti dati (una riga diversa ogni rilevazione):

  • Data e ora (nel formato DDMMYY e HHMMSSCC);
  • Latitudine;
  • Longitudine;
  • Il numero di satelliti visibili;
  • Precisione;
  • Velocità (km/h);
  • Altitudine (m s.l.m.).

 

Ovviamente a seconda del tipo di sensore (vi sono più tipologie) queste unità di misura potrebbe cambiare. Sarà semplice adattarle.

 

I dati vengono rilevati e salvati circa ogni secondo.

Il salvataggio avviene solo dopo che il sensore GPS ha ottenuto la propria posizione (questo si vedrà tramite il lampeggiamento del led verde).

 

Lo sketch è piuttosto semplice, ho usato come base lo sketch di esempio nella libreria TinyGPS “Simply TinyGPS” di Mikal Hart, l’ho modificato aggiungendo alcuni dati e il salvataggio su scheda SD.

 

Collegamenti

I collegamenti da effettuare non sono molti.

Per quanto riguarda il GPS non si devono collegare i 6 fili ma solo:

  • Vcc: o a 3.3V o a 5V;
  • Gnd a Gnd;
  • TX al pin 3;
  • RX al pin 4.

Se lo sketch non dovesse funzionare provare a cambiare baund rate di ss.begin(9600) e provando 4800 o altri, solitamente è o 9600 o 4800. Altrimenti provare a scambiare TX e RX.

 

Per quanto riguarda la SD, avevamo già visto i collegamenti in un vecchio articolo, qui dovremo semplicemrnte collegare il CS della SD al pin 7 invece che al 4, come era invece indicato in questo articolo appena citato.

  • MOSI = Pin 11 (Nella versione Arduino MEGA il 50);
  • MISO = Pin 12 (Nel MEGA 51);
  • CLK (a volte troverete SCK) = Pin 13 (Nel MEGA 52);
  • CS = Pin 7 (Se doveste avere errori provate il 10, modificandolo anche nello sketch, oppure nel MEGA il 53);
  • GND = GND;
  • VCC = 5V (se non indicato diversamente dal venditore).

 

Download

Tramite questo link è possibile scaricare lo sketch da inserire in Arduino, la libreria TinyGPS da inserire nella cartella libraries di Arduino e anche un documento con le istruzioni e le caratteristiche del sensore GPS.

Gps Arduino
Gps Arduino
gps-arduino.zip
244.0 KiB
1198 Downloads
Dettagli

 

Per aver maggior precisione nell’output

Nello sketch che si può scaricare dal link soprastante l’output di latitudine e longitudine non è preciso poichè è un float arrotondato a 2 cifre dopo la virgola.

Per aver maggior precisione si può usare la funzione:

void get_position(long *latitude, long *longitude, unsigned long *fix_age = 0);

invece di:

void f_get_position(float *latitude, float *longitude, unsigned long *fix_age = 0);

Ovviamente si dovrà cambiare il tipo dei 2 argomenti da float a long. Infine il risultato non avrà la virgola per quanto riguarda latitudine e longitudine. Si dovrà inserire successivamente dopo 2 cifre.

 

Sviluppi futuri

Per il momento i dati vengono salvati solo su SD. Per recuperare i dati si dovrà inserire la scheda SD in un pc ad esempio, dal quale leggere i dati rilevati. In un futuro penso di realizzare un modo più semplice per leggere i dati, magari con internet tramite Wi-Fi oppure inviando degli sms ogni tot tempo, ecc.

 

Tracciatore GPS e software u-center

Vai all’articolo per vedere come usare il software u-center.

 

Acquista il modulo GPS

Clicca qui.

Share This:

Simone

Studente Data di nascita: 12/07/1990 - Parma, IT Hobbies: Informatica, acquariofilia, viaggi, tecnologia, aria aperta, sport, web.

18 Comments

  1. Buongiorno, posso trasmettere i dati presi dal gps tramite bluetooth al pc o a uno smartphone android tramite un’app creata da me?

    • Buongiorno Francesco,
      non ho studiato a fondo il sistema se non per fare questo articolo e per vedere quanto fosse preciso il segnale per un progetto futuro.
      Secondo me è possibile ma non saprei dirti di più.

      Penso comunque che con un modulo bluetooth tu possa mandare ciò che vuoi. Ad esempio con l’HC-06

      • ok, grazie per la risposta perchè mi serve per una macchina radiocomandata che comando da smartphone o pc

  2. ciao, ho un problema con questo modulo ricevo correttamente dati relati a latitudine e longitudine ma non ricevo il numero di satelliti e l’altitudine è fissa a 1000000 m.
    ho provato ha cambiare baund e per un secondo sono riuscito a vedere i valori ma poi sono spariti.
    cosa potrebbe essere

  3. l’alimentazione è a 5 volt e sono all’aperto potrebbe essere che ho un sensore leggermente diverso dal tuo?
    il mio è VK2828U7G5LF GPS.

    • Mi sembra strano, anche perchè, cercando su Google il tuo modulo, mi salta fuori come primo risultato Banggood. Anche io ho acquistato il modulo da lì. E leggendo nella descrizione del prodotto e cliccando su MANUALE, il risultato è lo stesso manuale che ho usato io (non troppo utile a dirla tutta). In ogni caso nel manuale c’è il modulo che ho io. Questo mi porta a pensare che il prodotto sia lo stesso.
      Perciò non capisco perchè non ti funzioni. Quando avevo provato il mio funzionava (l’altitudine imprecisa ma di poco). Quindi purtroppo non saprei.
      Se hai la possibilità e se ne hai voglia prova a vedere se il modulo funziona correttamente realizzando il tracciatore GPS (ti lascio il link http://www.dallaf.it/simo/wp/2016/01/13/software-u-center-arduino-gps-tracker-con-vista-google-earth/ ). A me qui funzionava perfettamente, se a te dà problemi allora potrebbe avere qualche problema il tuo modulo oppure la spiegazione è un’altra che purtroppo non so.

  4. Buongiorno mi chiamo Piero ho tanto a cuore la mia auto e vorrei seguirla via gps e salvare il tragitto in più vorrei che fosse possibile creare una funzione blocco con un rele tipo blocco pompa benzina vorrei usare arduino e se fosse possibile salvare i dati su sd o su Google maps ti ringrazio

    • Buongiorno Piero, per quanto riguarda seguire il tragitto dell’auto si potrebbe fare in modo semplice. La mia idea è quella di usare pochi componenti:
      – Arduino
      – GSM Shield
      – Modulo GPS (come quello usato da me ad esempio)

      L’idea sarebbe quella di fare in modo che, quando la macchina è accesa, Arduino funziona e semplicemente ogni tot tempo (30min, 1h, ecc), ovviamente anche appena acceso (per evitare che il tutto non funzioni per viaggi brevi) invia la propria posizione tramite SMS. Non ho mai provato a sviluppare nulla di simile, anche se un’idea di progetto ce l’ho ma manca il tempo per realizzarla, però il progetto in questione consiste anche nel tracciare il percorso di un oggetto e tra le varie idee c’è stata quella di utilizzare l’invio di SMS per far caricare qualcosa su internet. Non ricordo se Twitter permettesse questa funzionalità, nel caso si potrebbe poi recuperare il posto in qualche modo. Però è tutto solo in fase di studio.
      Altra idea sarebbe quella di usare un secondo Arduino con anche qui una GSM shield. Semplicemente il primo Arduino in macchina invia al secondo Arduino (da mettere ad esempio in casa) un SMS. Questo lo riceve e carica quanto ricevuto su internet (si può sfruttare ad esempio il Wi-Fi di casa).
      Il modo per caricare la posizione su internet non è troppo complicato. Si può usare una pagina PHP che attende 2 campi (relativi a posizione) e li carica in un database MySQL tramite query. Tutto questo si può ottenere gratis grazie ad Altervista (se non si ha a disposizione un proprio sito Web). Dopo aver ottenuto e salvato i dati su Database li si può recuperare e visualizzare su una mappa di Google. Sempre nel corso dello studio del progetto di cui parlavo (e di uno passato completamente slegato dall’elettronica) ho scoperto alcuni grafici offerti da Google comprendenti anche le mappe. In questo modo si potrebbe recuperare certi dati dal database (ad esempio gli ultimi) e si può vedere il tragitto dell’auto con data relativa.
      Esiste altrimenti la GPRS Shield ma secondo me viene a diventare molto più costoso dell’invio degli SMS.

      Sono purtroppo solo idee, nulla di più dettagliato. Spero possano essere comunque utili. Per quanto riguarda la seconda richiesta, quella di interruzione di benzina, non ho mai fatto nè pensato nulla del genere e, sinceramente, non saprei nemmeno da dove iniziare poichè mi mancano totalmente tali conoscenze.

      Lascio qualche link:
      – Mappe/grafici google con istruzioni: https://developers.google.com/chart/interactive/docs/gallery/map
      – Spazio web e database gratis con Altervista: http://www.dallaf.it/simo/wp/2015/10/24/spazio-web-database-mysql-gratis-con-altervista/

      Simone

  5. Ciao Simone
    Inanzitutto complimenti
    Avevo alcune delucidazioni da chiederti.
    E’ possibile rilevare un singolo punto?
    Se si quando viene salvato sulla SD il singolo punto ha anche un identificativo progressivo?
    Il sistema è molto complicato da realizzare per uno non esperto come te?
    Che precisione si può raggiungere?
    Possono essere mediate multi acquisizioni del medesimo punto?

    Grazie
    Cristian

    • Ciao Cristian,
      Non mi è chiaro cosa intendi con “rilevare un singolo punto” e con “multi acquisizioni del medesimo punto”.
      Per il resto invece ti posso rispondere subito: se si salvano i dati su SD aggiungendo semplicemente una riga allora l’ultimo dato rilevato è l’ultima riga scritta. Se invece intendi proprio di voler ricercare una riga in base all’indice allora si potrebbe usare un campo aggiuntivo (un numero che si incrementa ogni volta). Il problema viene quando si riavvia Arduino, per riprendere la numerazione si potrebbe leggere il file dalla SD e, una volta arrivati all’ultima riga, si può riprendere a contare da quel numero. Se è questo ciò che intendevi.

      Per quanto riguarda la precisione invece ti posso mostrare un altro articolo dove ho provato a seguire il segnale GPS e plottando i punti sulle mappe di Google, come vedi la precisione è buona. Però non saprei darti una stima numerica di tale precisione. http://www.dallaf.it/simo/wp/2016/01/13/software-u-center-arduino-gps-tracker-con-vista-google-earth/

  6. Io ho un problema, alimentazione 5V da arduino, al chiuso o all’aperto non riesce ad “agganciare” nulla, ad ogni “refresh” sale il numero degli errore (la voce ERR=) da cosa può dipendere?
    Grazie mille di tutto

    • Non so rispondere con esattezza. Cercando online e su un pdf che avevo stampato trovo dati differenti. In uno 18mila e nell’altro 50mila metri (mi sembra comunque eccessivo che una roba simile misuri anche nella stratosfera). Questi sono i dati che ho trovato però

  7. Caio Simone, complimenti per il bellissimo Tutorial, la cosa si potrebbe fare, inviando i dati via wifi sempre tramite Arduino mediante un Router facendo così in modo di avere una localizzazione in tempo reale?
    Volevo, se fattibile, applicarlo ad una pettorina per cani facendo così in modo di tenerne tracciata la posizione.
    Hai per caso sviluppato qualcosa?

    • Ciao Davide, non ho sviluppato nulla del genere però penso sia fattibile. Ad esempio con un modulo con Sim si può inviare sms. O con gprs shield si potrebbe caricare online. Non so però quanto possa durare la batteria

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *