Bonjour, j'ai un petit problème avec mon module GPS.
J'utilise celui-ci : Module GPS TEL0094 DFRobot - GPS - 2G - 3G - 4G | GO TRONIC
Bref mon capteur marche, j'ai des données, longitude, latitude, l'heure, cependant il y a 2 heures de moins que la France. Et je pense que cela fait bugger la réception de la positions. En effet j'ai mis la longitude et la latitude et je me retrouve à plusieurs kilomètre de chez moi. J'ai essayer de bouger, changer de positions mais cela me met encore loin. Cependant j'ai remarquer que c'est assez proportionnel, si je bouge de 20m cela me fera bouger de 20m mais à l'autre position.
Autrement dis je suis à Lyon, et on me localise a Saint-Chamond (vers StEtienne), donc si je bouge de 20m à Lyon je bougerai de 20m a Saint-Chamond.
J'ai supposer que c'était à cause du décalage d'horaire.
Voilà j'espère que vous pourrez m'aider.
Cordialement
Les GPS retourne l'heure UTC donc le décalage de 2h me semble normal.
Le problème ne viendrais pas plutôt d'une mauvaise interprétation des données de latitude et longitude qui sont exprimés en degrés décimaux et non en degrés/minutes/secondes?
Savez-vous comment je pourrais régler ce problème.
Parce que en effet la valeur donnée n'est pas la même que celle que je dois entrée dans google maps ou autre appli.
Valeur donnée par le GPS :
$GPGGA,091115.00,4544.20066,N,00452.29497,E,1,05,2.70,201.5,M,47.4,M,,*51
avec latitude : 4544.20066
et longitude : 00452.29497
Mais sur google maps je dois entrer : 45.4420066, 4.5229497
donc c'est peut-être d'ici que le problème viens.
Ce serait sans doute plus facile si tu publiais ton code et que tu donnais des informations sur les librairies que tu utilises
Bonjour
Pour ce qui est du 'problème' du message #3 , si je le comprend bien, en divisant par 100 les valeurs fournies par le GPS on n'est pas loin de celles à introduire dans GoogleMaps... l'adaptation ne parait pas insurmontable.....
Bonjour
du code de conversion NMEA to KML
, on en trouve pour toute les plateformes
exemple
ici en python
biggil
May 26, 2021, 12:47pm
7
2 h de décalage, ça fait pas Lyon-St Etienne, ça fait la moitié de l'Europe.
J-M-L
May 26, 2021, 1:16pm
8
Tiens voici le code : j'utilise la librairie tinygps++
#ifndef __TinyGPSPlus_h
#define __TinyGPSPlus_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <limits.h>
#define _GPS_VERSION "1.0.2" // software version of this library
#define _GPS_MPH_PER_KNOT 1.15077945
#define _GPS_MPS_PER_KNOT 0.51444444
#define _GPS_KMPH_PER_KNOT 1.852
#define _GPS_MILES_PER_METER 0.00062137112
#define _GPS_KM_PER_METER 0.001
#define _GPS_FEET_PER_METER 3.2808399
#define _GPS_MAX_FIELD_SIZE 15
struct RawDegrees
{
uint16_t deg;
uint32_t billionths;
bool negative;
public:
RawDegrees() : deg(0), billionths(0), negative(false)
{}
};
struct TinyGPSLocation
{
friend class TinyGPSPlus;
public:
bool isValid() const { return valid; }
bool isUpdated() const { return updated; }
uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }
const RawDegrees &rawLat() { updated = false; return rawLatData; }
const RawDegrees &rawLng() { updated = false; return rawLngData; }
double lat();
double lng();
TinyGPSLocation() : valid(false), updated(false)
{}
private:
bool valid, updated;
RawDegrees rawLatData, rawLngData, rawNewLatData, rawNewLngData;
uint32_t lastCommitTime;
void commit();
void setLatitude(const char *term);
void setLongitude(const char *term);
};
struct TinyGPSDate
{
friend class TinyGPSPlus;
public:
bool isValid() const { return valid; }
bool isUpdated() const { return updated; }
uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }
uint32_t value() { updated = false; return date; }
uint16_t year();
uint8_t month();
uint8_t day();
TinyGPSDate() : valid(false), updated(false), date(0)
{}
private:
bool valid, updated;
uint32_t date, newDate;
uint32_t lastCommitTime;
void commit();
void setDate(const char *term);
};
struct TinyGPSTime
{
friend class TinyGPSPlus;
public:
bool isValid() const { return valid; }
bool isUpdated() const { return updated; }
uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }
uint32_t value() { updated = false; return time; }
uint8_t hour();
uint8_t minute();
uint8_t second();
uint8_t centisecond();
TinyGPSTime() : valid(false), updated(false), time(0)
{}
private:
bool valid, updated;
uint32_t time, newTime;
uint32_t lastCommitTime;
void commit();
void setTime(const char *term);
};
struct TinyGPSDecimal
{
friend class TinyGPSPlus;
public:
bool isValid() const { return valid; }
bool isUpdated() const { return updated; }
uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }
int32_t value() { updated = false; return val; }
TinyGPSDecimal() : valid(false), updated(false), val(0)
{}
private:
bool valid, updated;
uint32_t lastCommitTime;
int32_t val, newval;
void commit();
void set(const char *term);
};
struct TinyGPSInteger
{
friend class TinyGPSPlus;
public:
bool isValid() const { return valid; }
bool isUpdated() const { return updated; }
uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }
uint32_t value() { updated = false; return val; }
TinyGPSInteger() : valid(false), updated(false), val(0)
{}
private:
bool valid, updated;
uint32_t lastCommitTime;
uint32_t val, newval;
void commit();
void set(const char *term);
};
struct TinyGPSSpeed : TinyGPSDecimal
{
double knots() { return value() / 100.0; }
double mph() { return _GPS_MPH_PER_KNOT * value() / 100.0; }
double mps() { return _GPS_MPS_PER_KNOT * value() / 100.0; }
double kmph() { return _GPS_KMPH_PER_KNOT * value() / 100.0; }
};
struct TinyGPSCourse : public TinyGPSDecimal
{
double deg() { return value() / 100.0; }
};
struct TinyGPSAltitude : TinyGPSDecimal
{
double meters() { return value() / 100.0; }
double miles() { return _GPS_MILES_PER_METER * value() / 100.0; }
double kilometers() { return _GPS_KM_PER_METER * value() / 100.0; }
double feet() { return _GPS_FEET_PER_METER * value() / 100.0; }
};
struct TinyGPSHDOP : TinyGPSDecimal
{
double hdop() { return value() / 100.0; }
};
class TinyGPSPlus;
class TinyGPSCustom
{
public:
TinyGPSCustom() {};
TinyGPSCustom(TinyGPSPlus &gps, const char *sentenceName, int termNumber);
void begin(TinyGPSPlus &gps, const char *_sentenceName, int _termNumber);
bool isUpdated() const { return updated; }
bool isValid() const { return valid; }
uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }
const char *value() { updated = false; return buffer; }
private:
void commit();
void set(const char *term);
char stagingBuffer[_GPS_MAX_FIELD_SIZE + 1];
char buffer[_GPS_MAX_FIELD_SIZE + 1];
unsigned long lastCommitTime;
bool valid, updated;
const char *sentenceName;
int termNumber;
friend class TinyGPSPlus;
TinyGPSCustom *next;
};
class TinyGPSPlus
{
public:
TinyGPSPlus();
bool encode(char c); // process one character received from GPS
TinyGPSPlus &operator << (char c) {encode(c); return *this;}
TinyGPSLocation location;
TinyGPSDate date;
TinyGPSTime time;
TinyGPSSpeed speed;
TinyGPSCourse course;
TinyGPSAltitude altitude;
TinyGPSInteger satellites;
TinyGPSHDOP hdop;
static const char *libraryVersion() { return _GPS_VERSION; }
static double distanceBetween(double lat1, double long1, double lat2, double long2);
static double courseTo(double lat1, double long1, double lat2, double long2);
static const char *cardinal(double course);
static int32_t parseDecimal(const char *term);
static void parseDegrees(const char *term, RawDegrees °);
uint32_t charsProcessed() const { return encodedCharCount; }
uint32_t sentencesWithFix() const { return sentencesWithFixCount; }
uint32_t failedChecksum() const { return failedChecksumCount; }
uint32_t passedChecksum() const { return passedChecksumCount; }
private:
enum {GPS_SENTENCE_GPGGA, GPS_SENTENCE_GPRMC, GPS_SENTENCE_OTHER};
// parsing state variables
uint8_t parity;
bool isChecksumTerm;
char term[_GPS_MAX_FIELD_SIZE];
uint8_t curSentenceType;
uint8_t curTermNumber;
uint8_t curTermOffset;
bool sentenceHasFix;
// custom element support
friend class TinyGPSCustom;
TinyGPSCustom *customElts;
TinyGPSCustom *customCandidates;
void insertCustom(TinyGPSCustom *pElt, const char *sentenceName, int index);
// statistics
uint32_t encodedCharCount;
uint32_t sentencesWithFixCount;
uint32_t failedChecksumCount;
uint32_t passedChecksumCount;
// internal utilities
int fromHex(char a);
bool endOfTermHandler();
};
#endif // def(__TinyGPSPlus_h)
void setup() {}
void loop() {}
Oui c'est ca mais ce n'est pas le position exact, en effet cela me localise à Saint Chamond et non à Lyon
C'est à dire que je fois convertir comment les données que j'ai ?
J-M-L
May 27, 2021, 4:09pm
12
regardez ce que dit la doc sur le type de position que vous obtenez et regardez ce qu'attend Google Maps si c'est ça que vous utilisez pour voir où vous êtes... il faut que les 2 correspondent
Je crois que c'est de la forme NMEA 0183.
lesept
May 27, 2021, 6:04pm
16
Je n'ai pas l'impression que c'est un code valide. C'est plutôt le contenu de la bibliothèque, avec un setup et une loop vides...
system
Closed
September 24, 2021, 6:04pm
17
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.