Accueil > ARDUINO > Capteurs > Arduino & GPS Ublox Neo-6M

Arduino & GPS Ublox Neo-6M

dimanche 27 novembre 2016, par thebault

Les modules de type GY-GPS6MV2 que l’on trouve sur ebay sont équipés d’un GPS Ublox NEO-6M. Ils communiquent via liaison série à 9600 bauds par défaut (broches Rx, Tx). Ils sont équipés d’un régulateur, ce qui permet de les alimenter en 5V.

JPEG - 22.5 ko

Schéma :

JPEG - 130.5 ko

Branchements

Si on se limite à lire les datas qui viennent du GPS, les branchements sont les suivants :

5V (Arduino) <—> Vcc (GPS)

GND (Arduino) <—> GND (GPS)

Rx (Arduino) <—> Tx (GPS)

Remarque : le circuit intégré GPS fonctionne en 3.3V. Si on veut lui envoyer des commandes de configuration et donc relier Tx(arduino) ---> Rx(GPS), il faudra abaisser la tension de 5V vers 3.3V à l’aide d’un pont diviseur de tension

Arduino

Le circuit imprimé est équipé d’une led qui clignote lorsque le point est fait avec différents satellite. On peut être amené à attendre quelques dizaine de secondes avant que la localisation ne soit faite.

Acquérir les données bruts

Avec une carte Arduino Leonardo nous pouvons utiliser les 2 ports série :

  • le port série "Serial" va permettre de transmettre les données lues sur le GPS vers le moniteur série de l’IDE Arduino (via l’USB),
  • le port série "Serial1" va communiquer avec le GPS (avec une carte UNO, il suffit d’utiliser la bibliothèque SoftwareSerial pour utiliser d’autres broches).

Par défaut, le module communique en 9600 bauds et envoie les informations de localisation toutes les 1s.

Le programme suivant permet de récupérer les données bruts sur le port série Serial1 et les transmettre sur le port Serial :

  1. char data;
  2.  
  3. void setup() {
  4. //Initialize serial and wait for port to open:
  5. Serial1.begin(9600);
  6. Serial.begin(9600);
  7. while (!Serial) {
  8. ; // wait for serial port to connect. Needed for Leonardo only
  9. }
  10. }
  11.  
  12. void loop() {
  13. while (Serial1.available()) {
  14. data = Serial1.read();
  15. Serial.print(data);
  16. }
  17. }

Télécharger

Lorsque l’on ouvre le moniteur série (loupe en haut à droite), on voit apparaître des trames de type NMEA.

  • toutes les trames commencent par le signe $,
  • toutes les trames finissent par le symbole * + checksum sur 2 chiffres en hexadécimal. Le checksum permet de vérifier l’intégrité des données transmises,
  • Les trames qui nous intéressent pour la localisation sont les trames qui commencent par $GPGGA.(GP =GPS et GGA=localisation)

Pour analyser les trames, on peut les copier dans le site suivant : http://freenmea.net/decoder pour les décoder et obtenir la localisation par exemple.

JPEG - 105.3 ko

Analyser les trames.

Pour cela, nous allons utiliser la bibliothèque TinyGPS++ sous licence GPL qui va permettre l’analyse des trames NMEA. Source : http://arduiniana.org/libraries/tinygpsplus/.
On trouve la liste des fonctions disponibles sur la page du site.

  • installation : il faut décompresser l’archive téléchargée depuis le site dans le répertoire ..Arduino/libraries
  • usage dans le programme suivant :
commande rôle
#include "TinyGPS++.h" appel de la bibliothèque
TinyGPSPlus gps création de l’instance de l’objet "gps"
gps.encode(data) transmet les caractères reçus à la bibliothèque pour analyse
gps.location.isUpdated() localisation mise à jour
gps.location.lat() renvoie la latitude sous la forme d’un nombre de type double
gps.location.lng() renvoie la longitude sous la forme d’un nombre de type double
gps.altitude.meters() renvoie l’altitude en mètres sous la forme d’un nombre de type double
gps.speed.kmph() renvoie la vitesse en km/h sous la forme d’un nombre de type double
gps.satellites.value() renvoie le nombre de satellites utilisés sous la forme d’un nombre de type unsigned long
  1. #include <TinyGPS++.h>
  2. char data;
  3.  
  4. double latitude;
  5. double longitude;
  6. double alt; //altitude
  7. double vitesse;
  8. unsigned long nbre_sat;
  9.  
  10. TinyGPSPlus gps;
  11.  
  12. void setup() {
  13. //Initialize serial and wait for port to open:
  14. Serial1.begin(9600);
  15. Serial.begin(9600);
  16. while (!Serial) {
  17. ; // wait for serial port to connect. Needed for Leonardo only
  18. }
  19. }
  20.  
  21. void loop() {
  22. while (Serial1.available()) {
  23. data = Serial1.read();
  24. // Serial.print(data);
  25. gps.encode(data);
  26. if (gps.location.isUpdated())
  27. {
  28. latitude = gps.location.lat();
  29. longitude = gps.location.lng();
  30. alt = gps.altitude.meters();
  31. vitesse = gps.speed.kmph();
  32. nbre_sat = gps.satellites.value();
  33.  
  34. Serial.println("-------- FIX GPS ------------");
  35. Serial.print("LATITUDE="); Serial.println(latitude);
  36. Serial.print("LONGITUDE="); Serial.println(longitude);
  37. Serial.print("ALTITUDE (m) ="); Serial.println(alt);
  38. Serial.print("VITESSE (km/h)="); Serial.println(vitesse);
  39. Serial.print("NOMBRE SATTELLITES="); Serial.println(nbre_sat);
  40. }
  41. }
  42. }

Télécharger

En ouvrant le moniteur série, on obtient :

JPEG - 124.5 ko
SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL