Projet 7 - Traceur GPS
Présentation
La géolocalisation fait partie de notre quotidien, elle s’est démocratisée au début des années 2000 avec des appareils spécialisés. Aujourd’hui, chaque smartphone est équipé d’un système GPS et peu de personnes circulent sans cette précieuse aide. Il est même possible de géolocaliser son téléphone, son chat, sa voiture, sa moto, etc.
Que diriez-vous de fabriquer un traceur GPS (Global Positioning System) afin de pouvoir, entre autres exemples, visualiser les pérégrinations nocturnes de votre animal, tracer l’utilisation du véhicule de votre entreprise, ou tout simplement obtenir le chemin de votre dernier footing ?
1. Principe de fonctionnement
Comme souvent, le GPS est à l’origine une technologie développée à des fins militaires qui a ensuite été élargie à une utilisation grand public. C’est un système de positionnement comprenant une vingtaine de satellites, mis en place par les États-Unis à partir de 1973. Sa démocratisation au début des années 2000, l’amélioration de sa précision (5 mètres environ), ainsi que l’intégration de puces GPS dans les smartphones a révolutionné de nombreux domaines liés à la navigation...
Matériel nécessaire
Le montage s’articule autour de plusieurs éléments :
-
Une plaque de prototypage (ou breadboard).
-
Un lecteur de carte micro SD, ce type de lecteurs permet de lire et d’enregistrer des données sur une carte micro SD. Quelques précautions, que nous allons détailler plus loin, sont à prendre avant tout achat. Il est possible de trouver ce lecteur pour environ 1 euro sur le Web.
Lecteur de carte SD
-
Un récepteur GPS de type NEO-6M avec son antenne (environ 5 euros).
Récepteur GPS NEO-6M
-
Des fils « Dupont ».
Pour la partie programmation, nous utilisons une carte Arduino Uno afin de capter les signaux GPS et de les enregistrer sur la carte SD.
Schéma et montage
Avant de voir le schéma de montage proprement dit, nous nous attarderons dans un premier temps sur le fonctionnement du récepteur GPS, puis nous décrirons le lecteur de carte SD et l’interface de communication SPI.
1. Le récepteur GPS NEO-6M
Le GPS est un système de navigation composé de vingt-quatre satellites en orbite, chacun effectuant deux tours autour de la Terre toutes les vingt-quatre heures. Ces satellites transmettent trois informations : le numéro du satellite, sa position dans l’espace et l’heure à laquelle l’information est envoyée. Captées par le récepteur GPS, ces informations lui permettent de calculer la distance qui le sépare des satellites. Avec les signaux provenant de trois satellites au moins, un récepteur GPS peut trianguler sa position au sol (c’est-à-dire la longitude et la latitude). Avec quatre satellites, il est possible d’obtenir également l’altitude, c’est-à-dire un positionnement dans les trois dimensions. De plus, les récepteurs GPS peuvent fournir des données sur la vitesse et la direction de déplacement.
Le module GPS NEO-6M est un récepteur GPS avancé car capable de suivre environ vingt-deux satellites. Son architecture compacte ainsi que sa faible consommation d’énergie en font un bon choix pour les projets Arduino.
Il dispose d’une LED indiquant l’état de la recherche de satellites. Si la LED clignote toutes les secondes, les satellites ont été fixés et le positionnement est calculé. Si la LED ne clignote pas, le module est toujours en cours de recherche des satellites.
Le module est également équipé d’un régulateur de tension 3,3 V à faible consommation. Il est donc possible de l’alimenter en 5 V à partir de l’Arduino.
Broches du GPS
Il dispose de quatre broches :
-
GND : à connecter à une broche GND de l’Arduino.
-
VCC : broche d’alimentation 5 V.
-
TX : broche de transmission série vers l’Arduino.
-
RX : broche de réception série en provenance de l’Arduino.
Le module utilise une communication sérielle avec l’Arduino, il nous faudra donc choisir deux broches numériques...
Programmation de l’Arduino
Le programme nécessite plusieurs librairies pour communiquer en SPI et en série, pour gérer des fichiers sur carte SD, et pour récupérer des données GPS.
1. Les déclarations préliminaires
Déclarons dans un premier temps l’ensemble des librairies nécessaires :
#include <SD.h>
#include <SPI.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
-
SPI et SoftwareSerial permettent d’utiliser les protocoles mentionnés précédemment.
-
SD donne accès à la gestion de fichiers sur carte SD.
-
TinyGPS+ (installez la bibliothèque si ce n’est pas déjà fait) va nous donner accès à toutes les fonctions de gestion du GPS. Attention, ne pas confondre avec TinyGPS (sans « + ») qui est la version précédente de la librairie, et qui est bien différente en termes de possibilités.
Comme à l’habitude, déclarons l’ensemble des pins utilisées :
-
les deux pins servant aux transmissions série avec le GPS (TX et RX) ;
-
la pin de sélection « esclave » du lecteur SD.
Et ajoutons notre délai d’attente en secondes entre deux relevés GPS (dans l’exemple 5 minutes), ainsi que le décalage lié à notre fuseau horaire car le GPS fonctionne en heure UTC. Nous devons donc ajouter 1 heure (pour simplifier, basons-nous sur l’heure d’été).
#define PIN_TX_GPS 6
#define PIN_RX_GPS 7
#define PIN_CS_SD 10
#define DELAI_GPS 5*60
#define FUSEAU_HORAIRE 1
Il nous faut ensuite instancier l’objet TinyGPSPlus qui nous permettra de récupérer toutes les informations du GPS, ainsi que l’instance de SoftwareSerial permettant de créer une liaison série entre le module GPS et les deux pins numériques choisies de l’Arduino (les modes de ces deux broches seront configurés automatiquement par la même occasion).
SoftwareSerial serialGPS(PIN_TX_GPS, PIN_RX_GPS);
TinyGPSPlus gps;
Enfin, déclarons différentes variables globales servant à la gestion des fichiers sur la carte SD, ainsi qu’au stockage des dates provenant du GPS.
char nomfic[20];
char nomfic_abs[20]; ...
Améliorations possibles
1. Rendre le traceur autonome
Pour le moment, le traceur GPS fonctionne grâce à l’alimentation USB de votre PC, mais cela n’est pas très pratique, surtout pour un GPS qui est censé être un accessoire de mobilité. L’objectif est donc de fournir une alimentation par batterie à l’Arduino Uno. Les modules GPS et lecteur de carte SD sont, quant à eux, alimentés directement par la carte Uno.
Plusieurs solutions sont possibles :
-
Alimenter la Uno par sa broche VCC +5 V . Cela nécessite de construire une alimentation régulée 5 V à partir d’une batterie. Ce n’est pas la solution la plus simple.
-
Alimenter la Uno par sa broche Vin. Cette broche accepte des tensions plus élevées jusqu’à 15-20 V et fournit une tension stable de 5 V à la carte Uno. Il est donc possible d’y brancher une pile 9 V (ou plusieurs en parallèle), mais leur durée de vie sera relativement courte. Le mieux est encore d’y brancher une batterie lithium-ion comprise entre 7 et 18 V et d’une capacité de plusieurs ampères/heure.
2. Pouvoir démarrer/arrêter l’enregistrement GPS
En l’état actuel, le traceur GPS débute l’enregistrement de coordonnées dès sa mise sous tension, et le seul...
Ressources supplémentaires
La fonction F() et d’autres astuces pour optimiser la mémoire de l’Arduino :
https://www.aranacorp.com/fr/ameliorez-votre-programme-arduino/
Les différentes mémoires des Arduino :
https://quai-lab.com/arduino-ses-memoires/
Shield USB pour brancher un disque dur sur l’Arduino et pouvoir faire de longs enregistrements de positionnements GPS :
https://www.lextronic.fr/arduino-usb-host-shield-a000004-26410.html