ARDUINO: le module GPS

voyons l’utilisation d’un module type GPS NEO-6M pour récuperer les données GPS via un ARDUINO UNO

Le MODULE GPS NEO-6M:

on trouve ce petit module GPS sur AMAZONE , ALIEXPRESS , Ebay pour une fourchette de prix (2022) de 5 à 10 € piece. il en existe différentes version avec PCB rouge ou bleu et une antenne rectangulaire ou carrée.

ci dessous photo recto verso du module utilisé pour ce tuto.

une fois branché sur un arduino UNO via les broche serie Tx et Rx , il est capable de fournir une multitude de données de géolocalisation dont les principales sont:

  • latitude et longitude
  • altitude
  • vitesse
  • nombre de satellites vus
  • date et heure UTC

EXEMPLE BASIQUE d’UTILISATION

premier exemple simple d’utilisation, nous allons lire les données reçues du GPS et les afficher dans le moniteur Serie.

le montage

on raccorde les broches Rx et Tx du module aux broches 3 et 4 de l’arduino UNO la broche GND du module au GND de l’UNO et la broche Vcc du module au 3,3V de l’UNO.

le programme

ouvrir le programme ci dessous dans l’IDE arduino et le televerser dans l’arduino.

#include <SoftwareSerial.h>
SoftwareSerial ss(3, 4);
void setup(){
  Serial.begin(9600);
  ss.begin(9600);
}

void loop(){
  while (ss.available() > 0){
    byte gpsData = ss.read();
    Serial.write(gpsData);
  }
}

ouvrir le moniteur serie et configurer a 9600 bauds puis se positionner pres d’une fenetre ou dehors puis attendre un petit moment que le module GPS établisse le contact avec les satellites ( la LED sous le modules est allumée fixe puis se met a clignoter une fois le signal GPS recu).

le moniteur serie affiche en temps réel les trame NMEA reçues du GPS.

ci dessous , un document PDF qui explique ce que sont les Trames NMEA reçues par un GPS.

AFFICHAGE DES DONNES SUR ECRAN I2C LCD

dans ce deuxieme exemple, nous allons voir comment afficher les données sur un ecran LCD I2C de 4 lignes de 20 caracteres. le montage sera alimenté par une pile 9V et sera ainsi autonome et utilisable dans une voiture par exemple pour tester ses fonctionnalités.

le montage

.

le programme

ouvrir le programme ci dessous dans l’IDE arduino et le televerser dans l’arduino.

le programme utilise la librairie “TinyGPSPlus.h” disponible ici :

https://github.com/mikalhart/TinyGPSPlus

#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <TinyGPSPlus.h>
#include <LiquidCrystal_I2C.h>

TinyGPSPlus GPS;
LiquidCrystal_I2C lcd(0x27, 20, 4); // LCD address to 0x20 (20 chars on 4 line)
SoftwareSerial ss(3, 4);            //serial connection to GPS (Rxpin,Txpin)

void setup() {
  ss.begin(9600);
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0); 
  lcd.print("GPS Neo 6M");
  lcd.setCursor(0, 1);
  lcd.print("attente signal");
}

void loop() {
  while (ss.available() > 0)   {
    if (GPS.encode(ss.read()))    {
      if (GPS.location.isUpdated() && GPS.altitude.isUpdated()) {
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("LT");
          lcd.setCursor(3, 0);
          lcd.print(GPS.location.lat(), 3);
          lcd.setCursor(11, 0);
          lcd.print("LG");
          lcd.setCursor(14, 0);
          lcd.print(GPS.location.lng(), 3);
          lcd.setCursor(0, 1);
          lcd.print("AL");
          lcd.setCursor(3, 1);
          lcd.print(GPS.altitude.meters());
          lcd.setCursor(11, 1);
          lcd.print("VI");
          lcd.setCursor(14, 1);
          lcd.print(GPS.speed.kmph(), 2);
          lcd.setCursor(7, 2);
          lcd.print("SA");
          lcd.setCursor(10, 2);
          lcd.print(GPS.satellites.value());
          lcd.setCursor(0, 3);
          lcd.print(GPS.date.day());
          lcd.setCursor(2, 3);
          lcd.print("/");
          lcd.setCursor(3, 3);
          lcd.print(GPS.date.month());
          lcd.setCursor(5, 3);
          lcd.print("/");
          lcd.setCursor(6, 3);
          lcd.print(GPS.date.year());
          lcd.setCursor(11, 3);
          lcd.print(GPS.time.hour());
          lcd.setCursor(13, 3);
          lcd.print(":");
          lcd.setCursor(14, 3);
          lcd.print(GPS.time.minute());
          lcd.setCursor(16, 3);
          lcd.print(":");
          lcd.setCursor(17, 3);
          lcd.print(GPS.time.second());
          delay(2000);
        }
      }
    }
  }

petite photo du montage en fonctionnement:

il est possible de compacter l’ensemble en remplaçant l’ecran LCD par un ecran I2C OLED 128×32 et en montant l’ensemble sur un shield (ici un shield SD pour enregistrer les données en temps réel sur une carte SD.

;