Module GPS avec Arduino

In: ELECTRONIQUE PRATIQUE AVEC L'ARDUINO On: Comment: 0 Hit: 2183

L'objectif de ce tuto est d'apprendre à récupérer les données GPS: longitude, latitude, altitude, vitesse de déplacement, date et heure notamment.

Ce dernier point à lui seul peut être intéressant quand on cherche à créer un automatisme dépendant de l'heure; nous avions vu dans un autre tutoriel comment utiliser un module horloge, mais l'inconvénient est qu'il faut, au moins lors de la mise en place de sa pile de sauvegarde, lui transmettre la date et l'heure, par exemple en le connectant à un ordinateur.

Avec le module GPS, sauf à se retrouver dans des cavernes à l'abri des satellites, la date et l'heure sont à notre disposition permanente. Il faudra simplement faire un ajustement en fonction de l'heure d'été ou d'hiver (+ 1 et + 2 heures).

Nous allons utiliser le module GY-GPS6MV2 doté du processeur NEO-8M, avec comme toujours la carte Arduino MEGA 2560.

Le fonctionnement de l'ensemble est assez simple, le câblage se limite à 4 fils de liaison entre le module GPS et la carte MEGA 2560:

Matériel utilisé:

Le module GPS fournit les données brutes sur un port série (vitesse 9600 bauds). Nous le relions au port SERIAL2 (TX du module GPS à relier à RX2 broche 17 et RX à relier à TX2 broche 16) de notre carte Arduino.

Le module doit aussi être alimenté en 0 et +5V.

Quelques secondes plus tard (sauf à être dans une caverne ou probablement dans les profondeurs de l'océan), la LED bleue du module GPS se met à clignoter, chaque fois qu'elle a de nouvelles informations à communiquer.

Il faut les récupérer (lecture du port série) et, pour les interpréter correctement et facilement, les transmettre à la bibliothèque TinyGPS++ que nous utilisons. Les sous-programmes de cette bibliothèque nous permettront ensuite de récupérer les données souhaitées. Nous pouvons aussi connaître le précision des coordonnées horizontales, qui dépendent évidemment du nombre de satellites visibles par notre module GPS (il en faut a moins 3 pour que triangulation soit envisageable).

La bibliothèque TinyGPS++ n'est pas installée par défaut dans votre logiciel Arduino; vous la trouverez facilement sur internet (téléchargez le fichier .zip puis chargez ce fichier à partir de votre logiciel Arduino).

Pour visualiser les données GPS, nous utilisons comme souvent le Moniteur série du logiciel Arduino (menu Outils).

Voici notre programme:

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

// https://www.1ou2clics.com/forum-alarme/electronique-pratique-avec-l-arduino-c8.html
TinyGPSPlus gps;

void setup()
{
  Serial.begin(115200);  // on affiche les résiltats sur le Moniteur série du logiciel Arduino (via le port Usb)
  Serial2.begin(9600);   // le GPS est connecté sur Serial2 de la carte Arduino Mega 2560 R3
}

void loop()
{

  Attente(1000); // on appelle un sous-programme qui va attendre pendant 1000 millisecondes et être à l'écoute du module GPS

 
  // puis on va vérifier que nous avons bien récupéré une trame GPS complète
  if (gps.charsProcessed() < 10) {
  Serial.println(F("Aucune donnée GPS reçue. Vérifiez la couverture GPS et vos connexions"));
  }
  else if ((gps.charsProcessed() > 10) && (gps.altitude.isUpdated())){

  Serial.print("Latitude : "); Serial.print(gps.location.lat(), 6);Serial.println("°");
  Serial.print("Longitude : "); Serial.print(gps.location.lng(), 6);Serial.println("°");

  Serial.print("Le jour : ");Serial.println(gps.date.day()); // (de type Int)
  Serial.print("Le mois : ");Serial.println(gps.date.month()); // (de type Int)

  Serial.print("La date : ");Serial.println(gps.date.value());
  Serial.print("L'année : ");Serial.println(gps.date.year());
  Serial.print("HeuresMinutesSecondesCentièmes : ");Serial.println(gps.time.value());
  Serial.print("Heure : ");Serial.println(gps.time.hour());
  Serial.print("Minutes : ");Serial.println(gps.time.minute());
  Serial.print("Secondes : ");Serial.println(gps.time.second());
 

  Serial.print("Vitesse : ");Serial.print(gps.speed.mps());Serial.println(" m/s");
  Serial.print("Vitesse : ");Serial.print(gps.speed.kmph());Serial.println(" km/h");
  Serial.print("Vitesse : ");Serial.print(gps.speed.knots());Serial.println(" noeuds");
  Serial.print("Vitesse : ");Serial.print(gps.speed.mph());Serial.println(" miles/h");
  Serial.print("Altitude : ");Serial.print(gps.altitude.value()); Serial.println(" cm");
  Serial.print("Altitude : ");Serial.print(gps.altitude.meters()); Serial.println(" m");
  Serial.print("Nombre de satellites utilisés : ");Serial.println(gps.satellites.value());
  Serial.print("Précision horiontale : ");Serial.println(gps.hdop.value());

  Serial.println();
  Serial.println();
  }
}

static void Attente(unsigned long ms)
{
  unsigned long TempsDepart = millis();
  do
  {
    while (Serial2.available())
      gps.encode(Serial2.read());  //on transmet à la biblothèque TinyGPS++ les données envoyées par le modume GPS sur le port série 2
  } while (millis() - TempsDepart < ms);
}


Commentaires

Leave your comment