Guide du module GPS NEO-6M Arduino

Guide du module GPS NEO-6M Arduino

Ce guide montre comment utiliser le module GPS NEO-6M avec l’Arduino pour obtenir des données GPS. GPS signifie Système de positionnement global et peut être utilisé pour déterminer la position, l’heure et la vitesse si vous voyagez.

Guide du module GPS NEO 6M Arduino

Vous apprendrez à :

  • Câblez le module GPS NEO-6M à l’Arduino UNO
  • Obtenez des données GPS brutes
  • Analyser les données brutes pour obtenir des informations GPS sélectionnées et lisibles
  • Obtenir l’emplacement

Présentation du module GPS NEO-6M

Le module GPS NEO-6M est illustré dans la figure ci-dessous. Il est livré avec une antenne externe et n’est pas livré avec des broches d’en-tête. Donc, vous devrez en obtenir et en souder.

1642077366 157 Guide du module GPS NEO 6M Arduino
  • Ce module a une antenne externe et une EEPROM intégrée.
  • Interface : RS232 TTL
  • Alimentation : 3V à 5V
  • Débit en bauds par défaut : 9600 bps
  • Fonctionne avec des phrases NMEA standard

Le module GPS NEO-6M est également compatible avec d’autres cartes de microcontrôleur. Pour apprendre à utiliser le module GPS NEO-6M avec le Raspberry Pi, vous pouvez lire : Système d’alerte par e-mail en cas de changement d’emplacement avec Raspberry Pi et module GPS.

Où acheter?

Vous pouvez obtenir le module GPS NEO-6M pour un prix compris entre 5 $ et 20 $. Nous vous recommandons de vérifier le Page du module GPS NEO-6M sur Maker Advisor pour comparer les prix dans différents magasins et trouver le meilleur.

Câblage des broches

Le module GPS NEO-6M possède quatre broches : VCC, Réception, Émission, et GND. Le module communique avec l’Arduino via une communication série en utilisant les broches TX et RX, donc le câblage ne pourrait pas être plus simple :

Module GPS NEO-6M Câblage à Arduino UNO
VCC 5V
Réception Broche TX définie dans le logiciel série
Émission Broche RX définie dans le logiciel série
GND GND

Obtenir des données GPS brutes

Pour obtenir des données GPS brutes, il vous suffit de démarrer une communication série avec le module GPS à l’aide du logiciel Serial. Continuez à lire pour voir comment faire cela.

Pièces requises

Pour tester cet exemple, vous aurez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Guide du module GPS NEO 6M Arduino

Schémas

Câblez le module GPS NEO-6M à votre Arduino en suivant le schéma ci-dessous.

1642077366 304 Guide du module GPS NEO 6M Arduino
  • La broche GND du module est connectée à Arduino GND épingler
  • La broche RX du module est connectée à Arduino broche 3
  • La broche TX du module est connectée à Arduino broche 4
  • La broche VCC du module est connectée à Arduino 5V épingler

Code

Copiez le code suivant sur votre IDE Arduino et téléchargez-le sur votre carte Arduino.

/*
 * Rui Santos 
 * Complete Project Details https://www.raspberryme.com
 */
 
#include <SoftwareSerial.h>

// The serial connection to the GPS module
SoftwareSerial ss(4, 3);

void setup(){
  Serial.begin(9600);
  ss.begin(9600);
}

void loop(){
  while (ss.available() > 0){
    // get the byte data from the GPS
    byte gpsData = ss.read();
    Serial.write(gpsData);
  }
}

Afficher le code brut

Ce croquis suppose que vous utilisez broche 4 et broche 3 en tant que broches série RX et TX pour établir une communication série avec le module GPS. Si vous utilisez d’autres épingles, vous devez les modifier sur la ligne suivante :

SoftwareSerial ss(4, 3);

De plus, si votre module utilise un débit en bauds par défaut différent de 9600 bps, vous devez modifier le code sur la ligne suivante :

ss.begin(9600);

Cette esquisse écoute le port série GPS et lorsque les données sont reçues du module, elles sont envoyées au moniteur série.

while (ss.available() > 0){
  // get the byte data from the GPS
  byte gpsData = ss.read();
  Serial.write(gpsData);
}

Ouvrez le moniteur série à un débit en bauds de 9600.

1642077366 445 Guide du module GPS NEO 6M Arduino

Vous devriez obtenir un tas d’informations dans la langue standard GPS, NMEA. Chaque ligne que vous obtenez dans le moniteur série est une phrase NMEA.

NMEA signifie National Marine Electronics Association, et dans le monde du GPS, il s’agit d’un format de données standard pris en charge par les fabricants de GPS.

Comprendre les phrases NMEA

Les phrases NMEA commencent par le caractère $ et chaque champ de données est séparé par une virgule.

$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
$GPGSA,A,3,06,09,30,07,23,,,,,,,,4.43,2.68,3.53*02
$GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30*7C
$GPGSV,3,2,11,07,47,138,33,09,64,044,28,17,01,199,,19,13,214,*7C
$GPGSV,3,3,11,23,29,054,29,29,01,335,,30,29,167,33*4E
$GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A*70
$GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,,030118,,,A*6A 
$GPVTG,,T,,M,0.043,N,0.080,K,A*2C

Il existe différents types de phrases NMEA. Le type de message est indiqué par les caractères avant la première virgule.

Le GP après le $ indique qu’il s’agit d’une position GPS. Le $GPGGA est le message GPS NMEA de base, qui fournit des données de localisation et de précision en 3D. Dans la phrase suivante :

$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
  • 110617 – représente l’heure à laquelle l’emplacement fixe a été pris, 11:06:17 UTC
  • 41XX.XXXXX,N – latitude 41 deg XX.XXXXX’ N
  • 00831.54761,W – Longitude 008 deg 31,54761′ W
  • 1 – qualité de la correction (0 = invalide ; 1= correction GPS ; 2 = correction DGPS ; 3 = correction PPS ; 4 = cinématique en temps réel ; 5 = RTK flottant ; 6 = estimée (navigation à l’estime); 7 = mode de saisie manuelle ; 8 = mode simulation)
  • 05 – nombre de satellites suivis
  • 2,68 – Dilution horizontale de position
  • 129,0, M – Altitude, en mètres au dessus du niveau de la mer
  • 50,1, M – Hauteur du géoïde (niveau moyen de la mer) au-dessus de l’ellipsoïde WGS84
  • champ vide – temps en secondes depuis la dernière mise à jour DGPS
  • champ vide – numéro d’identification de la station DGPS
  • *42 – les données de la somme de contrôle, commencent toujours par *

Les autres phrases NMEA fournissent des informations supplémentaires :

  • $GPGSA – GPS DOP et satellites actifs
  • $GPGSV – Informations détaillées sur les satellites GPS
  • $GPGLL – Latitude et longitude géographiques
  • $GPRMC – Données GPS pvt (position, vitesse, temps) essentielles
  • $GPVTG – Vitesse rendue bonne

Pour savoir ce que signifie chaque champ de données dans chacune de ces phrases, vous pouvez consulter Données NMEA ici.

Analyser les phrases NMEA avec la bibliothèque TinyGPS++

Vous pouvez travailler avec les données brutes du GPS, ou vous pouvez convertir ces messages NMEA dans un format lisible et utile, en enregistrant les séquences de caractères dans des variables. Pour ce faire, nous allons utiliser le Bibliothèque TinyGPS++.

Cette bibliothèque permet d’obtenir facilement des informations sur l’emplacement dans un format utile et facile à comprendre. Vous pouvez cliquer ici pour plus d’informations sur la bibliothèque TinyGPS++.

Installation de la bibliothèque TinyGPS++

Suivez les étapes suivantes pour installer la bibliothèque TinyGPS++ dans votre IDE Arduino :

  1. Cliquez sur ici pour télécharger la bibliothèque TinyGPSPlus. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
  2. Décompressez le dossier .zip et vous devriez obtenir le dossier TinyGPSPlus-master
  3. Renommez votre dossier de TinyGPSPlus-master vers TinyGPSPlus
  4. Déplacez le dossier TinyGPSPlus vers votre dossier de bibliothèques d’installation Arduino IDE
  5. Enfin, rouvrez votre IDE Arduino

La bibliothèque fournit plusieurs exemples sur la façon de l’utiliser. Dans votre IDE Arduino, il vous suffit d’aller sur Déposer > Exemples > Petit GPS++, et choisissez parmi les exemples fournis.

Noter: les exemples fournis dans la bibliothèque supposent un débit en bauds de 4800 pour le module GPS. Vous devez le remplacer par 9600 si vous utilisez le module GPS NEO-6M.

Obtenir la localisation à l’aide du module GPS NEO-6M et de la bibliothèque TinyGPS++

Vous pouvez obtenir l’emplacement dans un format pratique et utile en utilisant la bibliothèque TinyGPS++. Ci-dessous, nous fournissons un code pour obtenir l’emplacement du GPS. Ceci est une version simplifiée de l’un des exemples de bibliothèque.

/*
 * Rui Santos 
 * Complete Project Details https://www.raspberryme.com
 */
 
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

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

void setup(){
  Serial.begin(9600);
  ss.begin(GPSBaud);
}

void loop(){
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0){
    gps.encode(ss.read());
    if (gps.location.isUpdated()){
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
    }
  }
}

Afficher le code brut

Vous commencez par importer les bibliothèques nécessaires : TinyGPSPlus et LogicielSérie

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

Ensuite, vous définissez les broches série RX et TX du logiciel, ainsi que le débit en bauds GPS. Si vous utilisez d’autres broches pour la série logicielle, vous devez les modifier ici. De plus, si votre module GPS utilise un débit en bauds par défaut différent, vous devez également le modifier.

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

Ensuite, vous créez un Petit GPS++ objet:

TinyGPSPlus gps;

Et démarrez une connexion série sur les broches que vous avez définies précédemment

SoftwareSerial ss(RXPin, TXPin);

Dans le mettre en place(), vous initialisez la communication série, à la fois pour voir les lectures sur le moniteur série et pour communiquer avec le module GPS.

void setup() {
  Serial.begin(9600);
  ss.begin(GPSBaud);
}

C’est dans la boucle que vous demandez les informations. Pour que TinyGPS++ fonctionne, vous devez à plusieurs reprises canaliser les caractères vers celui-ci à partir du module GPS en utilisant le encoder() méthode.

while (ss.available() > 0){
 gps.encode(ss.read());

Ensuite, vous pouvez interroger le GPS objet pour voir si des champs de données ont été mis à jour :

if (gps.location.isUpdated()){
  Serial.print("Latitude="); Serial.print(gps.location.lat(), 6);
  Serial.print("Longitude="); Serial.println(gps.location.lng(), 6);
}

Obtenir la latitude et la longitude est simple a utiliser gps.location.lat(), et gps.location.lng(), respectivement.

Téléchargez le code sur votre Arduino et vous devriez voir l’emplacement affiché sur le moniteur série. Après avoir téléchargé le code, attendez quelques minutes pendant que le module ajuste la position pour obtenir des données plus précises.

1642077366 96 Guide du module GPS NEO 6M Arduino

Obtenir plus d’informations GPS à l’aide de la bibliothèque TinyGPS++

La bibliothèque TinyGPS++ vous permet d’obtenir bien plus d’informations que l’emplacement, et de manière simple. Outre l’emplacement, vous pouvez obtenir :

  • Date
  • temps
  • vitesse
  • cours
  • altitude
  • satellites
  • hdop

Le code ci-dessous illustre comment vous pouvez obtenir toutes ces informations de manière simple.

/*
 * Rui Santos 
 * Complete Project Details https://www.raspberryme.com
 *
 * Based on the example TinyGPS++ from arduiniana.org
 *
 */
 
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

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

void setup(){
  Serial.begin(9600);
  ss.begin(GPSBaud);
}

void loop(){
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0){
    gps.encode(ss.read());
    if (gps.location.isUpdated()){
      // Latitude in degrees (double)
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);      
      // Longitude in degrees (double)
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6); 
       
      // Raw latitude in whole degrees
      Serial.print("Raw latitude = "); 
      Serial.print(gps.location.rawLat().negative ? "-" : "+");
      Serial.println(gps.location.rawLat().deg); 
      // ... and billionths (u16/u32)
      Serial.println(gps.location.rawLat().billionths);
      
      // Raw longitude in whole degrees
      Serial.print("Raw longitude = "); 
      Serial.print(gps.location.rawLng().negative ? "-" : "+");
      Serial.println(gps.location.rawLng().deg); 
      // ... and billionths (u16/u32)
      Serial.println(gps.location.rawLng().billionths);

      // Raw date in DDMMYY format (u32)
      Serial.print("Raw date DDMMYY = ");
      Serial.println(gps.date.value()); 

      // Year (2000+) (u16)
      Serial.print("Year = "); 
      Serial.println(gps.date.year()); 
      // Month (1-12) (u8)
      Serial.print("Month = "); 
      Serial.println(gps.date.month()); 
      // Day (1-31) (u8)
      Serial.print("Day = "); 
      Serial.println(gps.date.day()); 

      // Raw time in HHMMSSCC format (u32)
      Serial.print("Raw time in HHMMSSCC = "); 
      Serial.println(gps.time.value()); 

      // Hour (0-23) (u8)
      Serial.print("Hour = "); 
      Serial.println(gps.time.hour()); 
      // Minute (0-59) (u8)
      Serial.print("Minute = "); 
      Serial.println(gps.time.minute()); 
      // Second (0-59) (u8)
      Serial.print("Second = "); 
      Serial.println(gps.time.second()); 
      // 100ths of a second (0-99) (u8)
      Serial.print("Centisecond = "); 
      Serial.println(gps.time.centisecond()); 

      // Raw speed in 100ths of a knot (i32)
      Serial.print("Raw speed in 100ths/knot = ");
      Serial.println(gps.speed.value()); 
      // Speed in knots (double)
      Serial.print("Speed in knots/h = ");
      Serial.println(gps.speed.knots()); 
      // Speed in miles per hour (double)
      Serial.print("Speed in miles/h = ");
      Serial.println(gps.speed.mph()); 
      // Speed in meters per second (double)
      Serial.print("Speed in m/s = ");
      Serial.println(gps.speed.mps()); 
      // Speed in kilometers per hour (double)
      Serial.print("Speed in km/h = "); 
      Serial.println(gps.speed.kmph()); 

      // Raw course in 100ths of a degree (i32)
      Serial.print("Raw course in degrees = "); 
      Serial.println(gps.course.value()); 
      // Course in degrees (double)
      Serial.print("Course in degrees = "); 
      Serial.println(gps.course.deg()); 

      // Raw altitude in centimeters (i32)
      Serial.print("Raw altitude in centimeters = "); 
      Serial.println(gps.altitude.value()); 
      // Altitude in meters (double)
      Serial.print("Altitude in meters = "); 
      Serial.println(gps.altitude.meters()); 
      // Altitude in miles (double)
      Serial.print("Altitude in miles = "); 
      Serial.println(gps.altitude.miles()); 
      // Altitude in kilometers (double)
      Serial.print("Altitude in kilometers = "); 
      Serial.println(gps.altitude.kilometers()); 
      // Altitude in feet (double)
      Serial.print("Altitude in feet = "); 
      Serial.println(gps.altitude.feet()); 

      // Number of satellites in use (u32)
      Serial.print("Number os satellites in use = "); 
      Serial.println(gps.satellites.value()); 

      // Horizontal Dim. of Precision (100ths-i32)
      Serial.print("HDOP = "); 
      Serial.println(gps.hdop.value()); 
    }
  }
}

Afficher le code brut

Le tout petit GPS++ bibliothèque est bien commenté sur la façon d’utiliser toutes ses fonctionnalités.

Conclusion

Nous espérons que vous avez trouvé ce guide utile. Nous avons l’intention de faire un enregistreur de données GPS avec le Module GPS NEO-6M et le module de carte SD, alors restez à l’écoute.

Si vous avez aimé ce projet, vous aimerez aussi :

Merci d’avoir lu.

  • ICQUANZX GY-NEO6MV2 NEO-6M Module de commande de vol GPS 3 V-5 V avec antenne en céramique super puissante pour Arduino EEPROM APM 2.5
    Module avec une antenne en céramique, un signal supérieur Sauvegardez les données des paramètres de configuration EEPROM Down Avec batterie de sauvegarde des données; avec indicateur de signal LED Débit en bauds par défaut: 9600, Interface: RS232 TTL Compatible avec une variété de modules de commande de vol
  • ARCELI GT-U7 Module GPS, Petit récepteur GPS Faible, Consommation Haute Sensibilité avec antenne IPEX Compatible avec NEO-6M pour 51 microcontrôleurs STM32 Arduino
    Le module GT-U7 offre une haute sensibilité, une faible consommation d'énergie, une miniaturisation et une sensibilité de suivi extrêmement élevée, ce qui permet d'étendre considérablement la portée du positionnement. Avec interface IPX, antenne active libre pour interface IPX. GPSBaud doit être réglé sur 9600 au lieu de 4800 ; la broche PPS n'est pas nécessaire, sauf si le GPS est utilisé pour contrôler une horloge matérielle de haute précision. Une interface USB permet d'utiliser le câble de données du téléphone directement pour le positionnement du point de vue de l'ordinateur. L'interface d'antenne IPEX permet un positionnement rapide avec la distribution standard de l'antenne active. Remarque : veuillez utiliser le module GPS GT-U7 dans une zone ouverte. La LED clignote dès que le signal satellite est trouvé.
  • Aideepen Lot de 2 modules de positionnement GPS avec antenne, contrôleur de vol, carte GPS pour MWC IMU APM2
    Module GPS NEO-6M avec EEPROM et antenne active intégrée APM2.5 APM2.0 est compatible avec Arduin0, Raspberry Pi et autres microcontrôleurs Ce module GPS NEO-6M a une antenne active intégrée, qui fournit un signal fort Le module GPS NEO-6M est livré avec une antenne en céramique externe avec une précision de suivi jusqu'à 2,50 m. Le modèle de batterie est MS621FE, besoin de souder Les dimensions de ce module GPS Aideepen NEO-6M sont approximativement: (LxlxH) - Module GPS: 36 mm x 26 mm x 4 mm; Antenne: 27 mm x 27 mm x 6,5 mm (câble d'antenne 45 mm)