GPS / horamètre à base d’Arduino

Voici donc la 1ère étape, déjà assez compliquée pour débuter :
Réaliser à partir d’un Arduino, un récepteur GPS avec affichage sur écran LCD et déclenchement d’un relais lorsqu’il y a déplacement.

Tout d’abord, vous devrez réaliser un prototype chez vous : Vos composants vont être en “vrac” reliés par des fils volants le tout relié à votre PC. Il s’agit d’un passage obligé.

Hormis la taille et un port en moins, il n’y a pas grande différence entre un Arduino nano et un Arduino Uno.
Si le nano se prête bien à une intégration dans un boitier définitif, à cause de sa taille et de son prix, la version Uno est je trouve plus pratique pour réaliser le prototype.

Voici donc la liste des éléments nécessaires :

  • Une carte Arduino Uno (Environ 12€ TTC)
  • Un afficheur LCD 2 lignes de 16 colonnes HD44780 (sans le contrôleur I2C, on ne s’en servira pas) : environ 2€ TTC
  • Un récepteur GPS NEO-7M (environ 20€ TTC)
  • Un potentiomètre 1000 Ohms pour le réglage de l’éclairage de l’écran (moins de 1 TTC)
  • Une Antenne GPS externe pour NEO-8M / NEO-7M / NEO-7P / NEO-6M (environ 8€)
  • Un relais basique pour Arduino (on trouve des lots de 5 relais pour 8 € TTC)
  • Des câbles dupont (mâles femelles et mâles mâles) pour relier tout ça
  • Un fer à souder et de l’étain (les pins ne sont en général pas soudés sur les composants)
  • Des câbles dupont (mâles femelles et mâles mâles) pour relier tout ça
  • Une table de prototypage (ou breadboard) c’est pratique, avec ou sans alimentation (entre 4 et 8 € TTC)
  • Du calme et de la patience.

La liste de course en images

Arduino UnoLCD1602 avec un contrôleur I2C
Câbles dupontBeadboard + alim
GPS NEO 7MRelais

Si vous disposez de tous les éléments, passons au montage. Un petit conseil : prenez votre temps, et vérifiez puis revérifiez encore une fois. Il n’y a rien de pire que chez dans un programme une erreur qui n’existe pas mais dont l’origine est un mauvais câblage.

Petites remarques :
Comme je l’ai dit, nous n’utiliserons pas le contrôleur I2C de l’écran LCD. A quoi sert-il ?
En fait, toutes ces cartes (Arduino, Raspberry) ont un nombre d’entrées sorties limitées. Hors un écran LCD en prend 6 ! En utilisant un contrôleur I2C, on peut se contenter de 2 fils pour transmettre les données au lieu de 6.

Prenez l’antenne GPS externe ! Car vous allez faire la mise au point chez vous et sans cette antenne, à moins d’être dehors loin de tout immeuble, vous n’aurez aucune réception GPS. Avec ces antennes externes et leur long câble, vous pouvez mettre l’antenne à l’extérieur sur l’appui de fenêtre tout en travaillant à l’abris chez vous.
Cela vous permettra aussi de simuler facilement un déplacement en déplaçant juste l’extrémité de l’antenne.

Le montage

Connexion deConnexion àConnexion deConnexion à
LCD VSSArduino GND (alim)LCD VDDArduino +5V (alim)
LCD V0Potentiomètre 1000 Ohms éclairage LCD (patte du milieu)Potentiomètre éclairage GNDArduino GND (alim)
Potentiomètre éclairage +Arduino +5V (alim)LCD RSArduino D8
LCD RWArduino GND (alim)LCD EArduino D9
LCD D0InutiliséLCD D1Inutilisé
LCD D2InutiliséLCD D3Inutilisé
LCD D4Arduino D4LCD D5Arduino D5
LCD D6Arduino D6LCD D7Arduino D7
LCD AArduino +5V (alim)LCD KInutilisé
GPS VCC+5V (Alim)GPS GND GND (Alim)
GPS TXArduino D10 (Port série par software)Relais ++5V (Alim)
Relais -GND (Alim)Relais SArduino D3

L’environnement de développement :

Derrière cette expression se cache l’ensemble des éléments nécessaires à écrire le programme et à le transmettre à votre carte Arduino.

Lorsque vous achetez une telle carte, est fourni un lien de téléchargement vers le logiciel Arduino IDE .
Une fois téléchargé et installé, vous allez pouvoir connecter votre carte Arduino à votre PC à l’aide du câble USB.
Le module USB présent sur la carte Arduino est en fait un port série. Votre carte sera donc vu comme un port série sur votre PC. et à l’installation, un numéro de port lui sera attribué (COM2 ou COM3… etc…).
Voici un exemple de la représentation par Windows d’une carte Arduino Uno dans le gestionnaire de périphérique.

Paramétrage de l’environnement de développement :

    Vous allez devoir vérifier que le logiciel Arduino sélectionne le bon port de communication pour dialoguer avec votre carte.

    et que la carte que vous possédez est bien celle sélectionnée :

 

 

Ensuite, on va préparer l’IDE a exploiter le code source. Tous les développeurs ne réinventent pas la roue : De nombreuses bibliothèques sont à dispositions pour exploiter les composants “complexes”. Le code que je vous propose utilise plusieurs de ces bibliothèques qu’il va falloir ‘installer sur le logiciel Arduino IDE.
Pour cela, rendez-vous dans le menu “Outils, Gérer les bibliothèques”

Vous aurez besoin d’installer sur votre logiciel “Arduino IDE” les bibliothèques suivantes :

  1. AltSoftSerial : pour exploiter un 2ième port série, là où on a connecté le GPS
  2. TinyGPS : pour la récupération des données GPS
  3. LiquidCrystal : pour l’affichage sur l’écran LCD

 

 

Le code source
Sur Arduino, tout est basé sur 2 fonctions principales :
La fonction “setup” (initialisation des paramètres)
Et la fonction “loop” (une suite d’instructions qui va tourner en boucle).

Vous verrez d’autres fonctions destinées à formater l’affichage de données sur l’écran LCD.
Certaines valeurs sont volontairement arrondies (Latitude, Longitude, Vitesse, altitude) : en effet, même san bouger, le GPS ne fournis pas des données tout à fait exact : il récupère des données au millionième de degré prêt qui changent sans cesse comme s’il se déplaçait de quelques mètres. De même, la vitesse en dessous de 1kts n’est pas fiable).
La variable speedmini est une valeur qui permet de dire : si la vitesse mesurée est inférieur à speedmini alors, c’est qu’on est immobile (sans quoi, immobile chez vous, vous aurez en permanence des vitesses de 0,1 à 4km/h)
En dépassant la vitesse speedmini, on se considère en déplacement. Donc on peut déclencher le relais qui mettrait votre horamètre en route.
J’ai ajouté une ligne “serial.print” pour afficher sur l’écran de votre PC, via le moniteur série, les valeurs mesurées. Ceci dans le but de préparer l’écriture sur la SDCARD d’un fichier de trace GPS.
J’ai prévu le cas où le GPS ne fournis pas de données valides (pas de réception ou câble d’antenne débranché etc..) , cette situation provoque l’affichage sur l’écran LCD d’un message clair.
Comme il y a beaucoup de données à afficher et seulement 2 lignes sur l’écran, j’ai choisis d’afficher successivement des ensembles de 2 données et le programme passe de l’un à lautre (Latitude + Longitude, ensuite Date/Heure du GPS + nombre de satellite et enfin Vitesse + Altitude)
La vitesse est affichées en noeuds (kts ou knots) mais vous pouvez l’afficher en km/h.
L’altitude est en mètres car le GPS ne propose pas de la fournir en pieds (ft) et on pourra faire la conversion plus tard.
 

 

Une fois téléchargé, il ne vous reste plus qu’à l’ouvrir avec Arduino IDE et à le vérifier puis le téléverser via les 2 boutons situés en haut à gauche du menu. Une fois fait, votre carte Arduino doit redémarrer en lançant automatiquement le programme.
 
Si vous le souhaitez, vous pouvez dans “Outils – moniteur série” voir les données calculées (le port côté PC est paramétré à 115200 bauds), elles sont rafraïchies tous les cycles de 3 affichages à l’écran.
 
 
Fonctionnement
 
En mode développement, toute la carte est alimentée par le port USB de votre PC. Une fois le montage au point, vous pourrez prévoir une alimentation 5V pour rendre autonome votre carte.
 
Après un 1er écran de bienvenu, voici les différents affichages possibles :
 

En cas de non réception de données GPS :
Puis un affichage des coordonnées GPS (Latitude et Longitude) exprimés en degrés décimaux limité à la 4ième décimale (le GPS fournis jusque 6 décimales mais la position n’est pas assez précise pour les utiliser : c’est comme si le GPS bougeait tout le temps.
Puis un affichage de la date, et heure reçue par le GPS (la carte Arduino n’a aucun module lui fournissant la date et l’heure), ainsi que le nombre de satellites en vue :
Enfin, l’affichage de la vitesse et de l’altitude (vous noterez aussi des imprécisions).

A ce moment là, le programme envoie par le port série (via USB), vers le PC, ces informations sous la forme d’une ligne de données sous la forme suivante, chacune d’entre elle est séparée par un point-virgule :

  • La date et l’heure (format DD/MM/SSAA HH:MM:SS)
  • la latitude (format N-XXX.YYYY ou S-XXX.YYYY), les coordonnées étant toujours positives
  • la longitude (format E-XXX.YYYY ou W-XXX.YYYY), les coordonnées étant toujours positives
  • la vitesse (en noeuds (kts) avec une seule décimale)
  • l’unité de mesure de la vitesse (kts)
  • l’altitude en mètre (avec une seule décimale)
  • l’unité d emesure d’altitude (m)
  • le nombre de satelites en vue
  • le terme “nbsat”
  • Est-ce que le relais est activé ou non ? (0 = non activé, 1 = activé)
  • Exemple :
    20/07/2021 18:19:19;N-49.1764;E-2.2807;0.0;kts;41.0;m;7.0;nbsat;0

 
 
Et le cycle reprend à l’affichage des coordonnées.

Dans le programme j’ai mis speedmini=3 pour que toute vitesse inférieure à 2 kts soient considérées comme nulles, sans quoi, le relais se déclenche trop tôt lorsqu’une imprécision se produit. Plus vous aurez de satellites en vue et plus la précision sera bonne et c’est pour cela qu’en plus de la condition currentspeed>speedmini, j’ai aussi ajouté nbsat>3 (au moins 4 satellitesen vues).
 
 
A noter :
En situation normale (en dehors d’un hangar, en vol ou en mer), vous serez loin de toute construction haute et vous recevrez 8, 12 , 14, 18 satellites.
 
 
Si des internautes montrent un intérêt à ce sujet, je mettrais en ligne la suite (enregistrement des traces sur carte SD, récupération des traces via bluetooth, intégration d’un horamètre virtuel pour recoupement avec les vols saisis sur votre logiciel de gestion d’Aéroclub, transformation du fichier de trace en fichier kml pour visualisation sur Google Earth et pourquoi pas la version finale sous Raspberry avec serveur web de paramétrage intégré et envoi automatique des traces vers le serveur de votre choix. Ou celle qui envoie en temps réel les position via GSM pour visualisation en directe !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.