problemi coordinate gps NEO-M8N

buongiorno ragazzi,
ho acquistato questo. modulo gps per un mio progetto.
dopo varie peripezie con le librerie che non funzionavano ho deciso di rimboccarmi le maniche e di scrivere il codice di elaborazione dei dati di mia mano (nonostante le mie poche conoscenze), e a grandi linee sono riuscito a ottenere ciò che mi serviva.
tutti i dati del gps mi vengono salvati su una sd in un formato txt e successivamente li converto in un file csv (so che potrei scrivere direttamente un file csv ma ho bisogno al momento. di avere un file txt).
il file viene caricato su Google Earth Pro per la visualizzazione.
ora il grande problema è che le coordinate che mi manda il gps a regime (in mezzo al mare, quindi cielo perfettamente libero) sono sbagliate sempre di circa 50KM!!
come posso risolvere? mi sembra troppo strano che siano sempre sbagliate di così tanto, e poi sapete se c'è un modo per creare direttamente dall'arcuino un file invece che txt gpx?
vi do il codice del mio progetto (ancora a uno stato preliminare, devo sostituire la classe string con gli array)

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>

//pin 6 RX e pin 7 TX
SoftwareSerial mySerial(6, 7);
String NMEA;
String Lat,lon;
float Lat1,lon1,ora1,vel1,velmax=0;
const int chipSelect = 4;
String ora, vel;

void setup() {
  // put your setup code here, to run once:
 while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  //init seriale hardware
  Serial.begin(9600);
  //init seriale software
  mySerial.begin(9600);
  
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
 File dataFile = SD.open("datalog.txt", FILE_WRITE);
              if (dataFile) {
    dataFile.println("lat,lon,ora,vel,angolo");
    dataFile.close(); 
  }

}


  void loop() {

if (mySerial.available()) {
  int c= mySerial.read();
   //Serial.println('1');
    NMEA += (char)c;
    
  if(c == '\n') {
    //Serial.println(NMEA);
    if(NMEA.substring(0, 6) == "$GNRMC"){
      ora= NMEA.substring(7,14);
      Lat= NMEA.substring(19,29);
      lon= NMEA.substring(34,43);
      vel=NMEA.substring(46,51);
      lon1= lon.toFloat()/100;
      Lat1= Lat.toFloat()/100;
      ora1= ora.toFloat();
      vel1= vel.toFloat();
      Serial.println(vel);
      Serial.println(NMEA);
      
      if(vel1>velmax){
        velmax=vel1;
      }


        File dataFile = SD.open("datalog.txt", FILE_WRITE);
     if (dataFile) {
      dataFile.print(Lat1,15);
      dataFile.print(",");
      dataFile.print(lon1,15);
      dataFile.print(",");
      dataFile.print(ora);
      dataFile.print(",");
      dataFile.print(vel);
      dataFile.print(",");
      dataFile.println(velmax);
      
      dataFile.close();
   
      }
     }
    NMEA = ""; 
   
    }
//Serial.println('3');
  
  // put your main code here, to run repeatedly:

   }
}

grazie mille in anticipo.

Ti assicuro che quel modulo è di una precisione e sensibilità eccezionale ... lo uso su vari apparati :slight_smile:

Probabilmente sbagli qualche calcolo tu o non hai fatto le dovute impostazioni del modulo con l'apposito programma della Ublox u-center.

Guglielmo

ciao Guglielmo,

so delle incredibili prestazioni di questo modulo, sotto tuo consiglio l'ho scelto per questo.
l'unico parametro che ho cambiato è la frequenza di aggiornamento del modulo (impostata a 2Hz).
anche leggendo direttamente da seriale le stringhe NMEA che invia il modulo senza nessuna elaborazione le coordinate sono errate di tanto.
sapresti dirmi se c'è qualche settaggio particolare?

ho anche un'altro modulo gps preso su Amazon che funziona, ma da lo stesso errore di posizionamento.
ho letto e riletto. il datasheet ma senza successo.

grazie in anticipo

Secondo me sbagli a verificare le coordinate ...
... cosa usi? Google?

Perché, per Google, occorre fare una conversione, quelle che escono dal GPS NON vanno bene con Google Maps ... ::slight_smile:

Guglielmo

si uso google, di che tipo di conversione si tratta? cercando su internet. mi è sembrato che fossero giuste.

Metti qui la stringa completa che usi (RMC mi pare) vediamo ...

Guglielmo

44.092247009277343,9.551249504089355,120241.,0.164,1.59
$GNRMC,120242.00,A,4409.22460,N,00955.12487,E,0.207,,101219,,,A*6C

la prima è la stringa elaborata da me, anche se gli ultimi decimali differiscono di poco dai dati grezzi i punti si trovano nello stesso identico posto.

Ok, dato 4409.22460 N, 00955.12487 E devi convertire questo formato che rappresenta le coordinate in nnnd nn.nnnnn' nel formato voluto da Google ...

 44 + (09.22460 / 60) = 44.153743 N
009 + (55.12487 / 60) = 09.918747 E

... le due coordinate ottenute dovrebbero essere quelle giuste per Google Maps ... verifica.

Guglielmo

posizione precisa al metro! ora è perfetta.

grazie mille :slight_smile:

nocentini:
posizione precisa al metro! ora è perfetta.

Bene ... e ricorda di verificare sempre il "formato" delle coordinate perché ... spesso si usano differenti formati ... ::slight_smile:

Guglielmo

per il problema di creare un file .gpx sapresti aiutarmi? oppure non c'è soluzione?

La risposta si chiama GPSBabel :wink: ... converte tutto in tutto :smiley: :smiley: :smiley:

Guglielmo

grazie mille, forse non è quello che sto cercando, non mi crea nessuno spider temporale con la quale possa vedere i punti in sequenza.. ogni tanto mentre il mio progetto è in funzione capita di passare più volte nello stesso punto, questo fa si che ci sia un ammasso di punti che passano e vanno in parti diverse e viene un macello! :confused:

Guarda, io la uso con un registratore GPS che mi salva i recornd NMEA su SD. Al rientro prendo il file, lo do in pasto a GPSBabel e gli dico in che formato lo voglio (se mi serve per Google maps, gli dico di generare il .gpx) e fa tutto lui.

Poi non so se tu devi/vuoi prima fare una pulizia del file o cosa ... ::slight_smile:

Guglielmo

ti spiego bene il problema allegando un immagine.
il mio progetto si posiziona su una barca a vela durante. sessioni allenamento, quindi mi è difficile filtrare i dati al momento.
so che è possibile avere un file .gpx che caricato su Google Earth (ho uno smart Watch che mi crea un file .gpx in questo modo, ma non ha abbastanza dati) che ogni punto è collegato da una linea, posso scorrere i vari punti con uno slider, in modo che dia la successione scandita in modo temporale, altrimenti ho un ammasso di punti (come nella prima immagine)
![](https://forum.arduino.cc/Users/andreanocentini/Desktop/Schermata 2019-12-10 alle 17.49.38.png)

nella seconda immagine invece ho questo file diviso temporalmente
![](https://forum.arduino.cc/Users/andreanocentini/Desktop/Schermata 2019-12-10 alle 17.59.11.png)
non so, magari c'è un impostazione che sto sbagliando?

Ciao, prova a dare un'occhiata al mio gpx datalogger, trovi il link in firma. Forse ti può essere d'aiuto :slight_smile:

edit: non vedo le immagini nel post precedente

>nocentini: ... scusa, ma se converti i punti registrati dal quello che hai fatto, li converti con GPSbabel in .gpx e carichi su Google Maps, cosa è che non va? Hai provato almeno a vedere?

Guglielmo

P.S.: NON hai allegato le immagini al tuo post.

si ho provato a vedere, adesso vi allego.

questi sono i dati senza conversione in .gpx, un ammasso di punti che non si Sto arrivando! dove cominci e dove finisca.

questo è il file convertito con gpsbabel

questo è quello che mi servirebbe

in alto a sinistra è presente questo regolatore che spostandosi manda avanti la traccia, questo è quello che non riesco a fare :frowning:

... continui a NON allegare le immagini ai tuoi post. Ti ricordo che NON puoi allegare immagini che sono solo sul tuo harddisk, ma devono essere pubbliche su un server di rete.

Guglielmo

ma se faccio tasto destro e "apri in un nuovo pannello" si vedono, non sapendo dove caricarle. le. ho messe su Facebook.