Table des matières

Sommaire Matériels

Capteurs - Géolocalisation

[Mise à jour le 30/7/2024]


1. Généralités

1.1 Géolocalisation

Quel GPS ?

Consulter le guide de sélection d'un GPS sur seeedstudio.com

1.2 Trame NMEA 0183

Structure

  • Les trames NMEA sont codées au format ASCII et sont de la forme : $ <talker ID> <Trame type> [ , <données> , <données>] * <checksum>
    Exemple : $GPRMC,160906.308,A,4704.425,N,00224.374,E,,,040624,000.0,W*7D
  • Expérimenter
    • Générer des trames GPGGA, GPGSA et GPRMC à partir d'une position sur une carte avec ce générateur de trames NMEA en ligne.
    • Décoder la trame GPRMC avec ce décodeur de trames NMEA en ligne (informations de géolocalisation et affichage de la position sur une carte).

GNGGA

L’identifiant $GNGGA est utilisé par certains récepteurs GNSS (souvent d’origine chinoise comme le GPS Air530 ci-dessous) pour transmettre les données de position. Voir la description des champs.


2. GPS

2.1 Grove (Air530)

2.1.1 Présentation
Module GPS économique basé sur un Air530 compatible Grove permettant de connaître sa position en temps réel. Ce module communique avec un microcontrôleur type Arduino ou compatible via une liaison série. Il comporte un circuit RTC permettant la sauvegarde de l'heure et de la date. L'utilisation de ce circuit nécessite une pile CR1220.


2.1.2 Bibliothèques
  • A partir du gestionnaire de bibliothèques de l'IDE Arduino, installer :

A venir


2.1.3 Exemples de code

  • Exemple 1 pour visualiser les trames délivrée par le GPS

*.cpp
// Testé avec une carte Arduino Uno (2:RXD, 3:TXD)
// Interface série logicielle (asynchrone)
// 9600baud, 8, N, 1
 
#include <SoftwareSerial.h>
 
SoftwareSerial SoftSerial(2,3); // (2:RXD, 3:TXD) Arduino Uno 
unsigned char buffer[64];  // tableau pour la réception de données via le port série
int count = 0;             // compteur
void setup() {
  SoftSerial.begin(9600);  // Réglage du débit de l'interface série logicielle
  Serial.begin(9600);      // Réglage du débit de l'interface série matérielle (moniteur série)
}
 
void loop() {
  if (SoftSerial.available())  // si disponible
  {
    while (SoftSerial.available())  // lire les données
    {
      buffer[count++] = SoftSerial.read();  // et les écrire dans le tableau
      if (count == 64) break;               // tant qu'il n'est pas plein
    }
    Serial.write(buffer, count);  // écrire le tableau dans la console
    //Serial.write("\n");
    clearBufferArray();  // vider le tableau et
    count = 0;           // raz compteur
  }
  if (Serial.available())             // si les données sont disponibles sur le port série matériel ==> les données proviennent d'un PC ou d'un ordinateur portable
    SoftSerial.write(Serial.read());  // les écrire sur le port série logiciel
}
 
 
void clearBufferArray()  // fonction pour effacer le tableau
{
  for (int i = 0; i < count; i++) {
    buffer[i] = NULL;
  }  // On efface le tableau avec la commande NULL
}
  • Exemple 2 de l'IDE Arduino pour obtenir la latitude et la longitude à partir des trames NMEA
    Dans l'IDE Arduino, sélectionner : Fichier → Exemples → TinyGPSPlus → DeviceExample

    Remarque

    Effectuer les modifications suivantes dans le code de l'exemple
    - Sur une Arduino UNO : RXPin = 2, TXPin = 3; GPSBaud = 9600;
A venir


2.2 Sparkfun Neo M9N (ublox)