Localisation GPS

Bonjour,

Je travail en ce moment sur un projet dans lequel j’aimerais avoir une localisation GPS, le matériel que j’utilise est le suivant :

  • Arduino Uno
  • MKR GPS Shield Arduino
  • Carte Shield de chez Seeed Studio.

Je suis bloqué car le programme ne me donne aucune valeur, il reconnait le module GPS, cependant je passe toujours sur le message “INVALID” du programme et je n’arrive pas a localiser l’origine du problème.
J’ai essayé de changer les PIN TX et RX dans le programme et dans le montage et ça n’a pas aidé.
En attendant vos conseils.

Voici le code :

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
   This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 4800;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

void setup()
{
  Serial.begin(115200);
  ss.begin(GPSBaud);

  Serial.println(F("DeviceExample.ino"));
  Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
  Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();
}

void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

void displayInfo()
{
  Serial.print(F("Location: ")); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}

Ca peut venir du débit de la comm série. As-tu essayé avec 9600 bauds?

static const uint32_t GPSBaud = 9600;

Sinon, regarde ici si ça t'aide.

Le Uno est en 5V et le MKR GPS Shield en 3.3V.... vous avez une adaptation de tension sur le Tx arduino vers Rx MKR GPS Shield ?

C'est vrai ça, c'est écrit ici :

Remarques:
Ce module est uniquement compatible avec le niveau logique 3,3 Vcc. L'utilisation d'une tension supérieure endommagerait immédiatement le module.
L'utilisation de ce shield nécessite l'ajout d'une pile 3 Vcc CR1220 permettant le bon fonctionnement du module GPS.

Il faudrait savoir ce qu'est exactement cette "Carte Shield de chez Seeed Studio" et comment elle est connectée.

Merci pour vos conseils !
En passant a 9600 bauds, le système a l’air d’être plus rapide déjà ce qui est mieux.
Pour ce qui est de la pile, mon tuteur ne comprend pas pourquoi il en faudrait une car le module GPS fonctionne mais il n’arrive pas a se connecter au satellite (selon lui). Alors que justement non, il ne fonctionne pas.

L’utilisation de ce shield nécessite l’ajout d’une pile 3 Vcc CR1220 permettant le bon fonctionnement du module GPS.

Et donc malgré cette phrase qui spécifie bien l’utilisation d’une pile, bah on met pas :confused:

Ça coûte quoi d’en rajouter une pour tester....

Et Si vous avez balancé du 5V le module est peut être grillé

le module GPS fonctionne mais il n'arrive pas a se connecter au satellite

il ne faut pas hésiter à demander à votre tuteur sur quels facteurs pertinents il s’appuie pour dire que le GPS fonctionne et que la pile ne sert à rien... un avis scientifique se doit d’être étayé par du concret.

Vous avez testé en extérieur bien sûr ?

La pile sert à mémoriser les informations sur la constellation GPS quand on coupe l’alimentation. Ça permet de retrouver les satellites plus vite quand on rallume le récepteur.

J'ai laissé tourner le programme avec la carte et au bout de 2h ça a en effet fonctionné. Je ne pensais pas que le temps de recherche serait aussi long.
Cependant qu'elle est l'utilité du TX ? Même débranché la localisation fonctionne.

Cependant qu'elle est l'utilité du TX ? Même débranché la localisation fonctionne.

le GPS va "cracher" par défaut sa position automatiquement en fonction de sa configuration d'usine.

Le Tx est utile si vous voulez envoyer des commandes au GPS (cf le protocole)

La pile sert de sauvegarde aussi dans ce cas: comme le module GPS peut être configuré via des commandes spéciales, il faut pouvoir s'en souvenir si on éteint l'Arduino associé.

Certain changement sont courant comme pour un GPS utilisé sur un engin en vol (accélérations verticales plus grande que 1g par exemple), où des paramètres spécifiques différents de ceux par défaut sont nécessaires pour l'appareil comme l'utilisation de l'option de localisation de Galileo, qui est désactivée par défaut.

D'accord merci et une dernière petite question : que signifie 5V input et 3.3V operating ? Je vois pas bien la différence entre les deux.
Pourquoi la carte dispose d'une entrée 5V alors que le fait d'y mettre 5V peut la griller ?

Ça veut dire qu’on peut l’alimenter en 5v mais que la puce fonctionne en 3.3V (les pins sont à 3.3V en HIGH et ne peuvent recevoir que 3.3V en entrée)