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:
}
}
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.
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.
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!
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 ... :
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)

>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?
... 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.