Accueil > ARDUINO > Capteurs > Arduino & GPS Ublox Neo-6M
dimanche 27 novembre 2016, par
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.
Schéma :
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
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 :
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 :
char data; void setup() { //Initialize serial and wait for port to open: Serial1.begin(9600); Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } } void loop() { while (Serial1.available()) { data = Serial1.read(); Serial.print(data); } }
Lorsque l’on ouvre le moniteur série (loupe en haut à droite), on voit apparaître des trames de type NMEA.
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.
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.
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 |
#include <TinyGPS++.h> char data; double latitude; double longitude; double alt; //altitude double vitesse; unsigned long nbre_sat; TinyGPSPlus gps; void setup() { //Initialize serial and wait for port to open: Serial1.begin(9600); Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } } void loop() { while (Serial1.available()) { data = Serial1.read(); // Serial.print(data); gps.encode(data); if (gps.location.isUpdated()) { latitude = gps.location.lat(); longitude = gps.location.lng(); alt = gps.altitude.meters(); vitesse = gps.speed.kmph(); nbre_sat = gps.satellites.value(); Serial.println("-------- FIX GPS ------------"); Serial.print("LATITUDE="); Serial.println(latitude); Serial.print("LONGITUDE="); Serial.println(longitude); Serial.print("ALTITUDE (m) ="); Serial.println(alt); Serial.print("VITESSE (km/h)="); Serial.println(vitesse); Serial.print("NOMBRE SATTELLITES="); Serial.println(nbre_sat); } } }
En ouvrant le moniteur série, on obtient :