[Projet] Arduino : Créer son propre compteur GPS

Vous avez toujours aimé bidouiller, toucher à tout ? Alors cet article est fait pour vous !

Je vais vous montrer et vous expliquer brièvement comment créer votre compteur GPS a un prix assez bas. Prenez bien en compte que cela n’a pas était fait par un professionnel, des améliorations dans le code ou dans le montage sont certainement possible, mais le tout fonctionne comme ça. Libre à vous d’améliorer et d’optimiser le tout!

I) Les composants

L’avantage d’Arduino c’est qu’il est possible de vous procurer un grand nombre de composants à un prix très bas (par contre il ne faut pas être pressé pour la livraison). Il est également possible d’acheter des cartes non officielles mais fonctionnant parfaitement bien du fait que Arduino est Open-Source, donc tout le monde peut créer sa carte.

Voici donc la liste des composants utilisés pour ce projet, ainsi que les liens d’achats (libres à vous de modifier certains composants pour avoir exactement ce que vous voulez) :

  • Une Arduino Pro Micro : Ebay –> Très utile car la taille est très réduite. Cependant si vous comptez rajouter des composants, optez pour une carte plus grande avec un plus grand nombre de pins. L’utilisation d’une Arduino Uno ou Mega 2560 est tout à fait possible également.
  • Puce GPS : GY-GPS6MV GPS AMP2.5 –> Un GPS avec antenne intégré pour un prix assez raisonnable. Pour les fans de marque, il y a la puce Adafruit qui est légèrement plus chère. Pour ce projet, j’utiliserai la librairie TinyGPS++ qui propose de nombreuses options pour gérer le GPS.
  • Une breadboard (platine d’essais): eud.dx.com –> Pour les phases de test il est utile de prendre une grande breadboard afin d’avoir de la place pour faire vos connexions. Au final une breadboard plus petite sera utilisée : ebay.fr
  • Capteur température étanche : DS18B20 –> Un capteur facile d’utilisation, peu chère et assez performant pour notre projet.
  • Ecran OLED : 0.96″ 128×64 I2C –> L’écran sera surement petit pour certains d’entre vous, n’hésitez pas à en changer.
  • Des fils : male-femelle ou male-male –> C’est incontournable afin de réaliser vos branchements.

Ensuite il vous faut télécharger l’IDE Arduino sur le site officiel. Branchez votre Arduino, sélectionner votre carte et votre port série dans l’onglet « outils ».

Sans titre

 

II) Brèves explications

Le GPS :

Le GPS fonctionne à 9600 bauds et envoie une trame du type NMEA qui ressemble à ce qui suit :

$GPRMC,194509.000,A,4042.6142,N,07400.4168,W,2.03,221.11,160412,,,A*77

    Cette trame GPRMC (Global Positioning Recommended Minimum Coordinates) indique les informations suivantes :
  • Temps
  • Date
  • Longitude
  • Latitude
  • Altitude
  • Vitesse estimée
  • Type de fix (en fonction de nombre de satellites)

Ne vous inquiétez pas si vous ne comprenez pas le fonctionnement précis de cette trame, car la librairie TinyGPS++ va s’occuper pour nous de nous traduire tout ce charabia en donnée exploitable et compréhensible. Si vous voulez plus d’informations sur l’analyse de la trame, c’est par ici !

L’écran OLED I2C :

L’avantage des écrans I2C c’est l’utilisation réduite de pins d’affichage, seulement 2 (sans compter VCC et GND), c’est considérablement réduit comparer à un écran LCD. Son fonctionnement est plutôt simple, téléchargez la librairie Adafruit et amusez vous ! Pour l’affichage de texte à l’écran, la commande est la suivante :

display.print(« Hello World »);

Capteur de température :

Le DS18B20 est un classique dans le monde du DIY (Do It Yourself) car son utilisation est très facile et sa plage d’utilisation assez intéressante (de -55°C a +125°C). La librairie OneWire est disponible sur le site Arduino.

Dans notre montage final ce sera le seul composant nécessitant une résistance de 4.7 Kohms entre la pin de data et celle de VCC (alimentation, 5V en l’occurrence).

III) Montage des composants

Ce que je vais vous dire est logique, mais mieux vaut le dire !

Tous les composants utilisés auront besoin d’être connecté au 5V (ou 3.3V) et au GND (la terre) pour fonctionner. Voilà ce qui a de commun à chaque composant, passons maintenant aux spécificités de chacun.

Le GPS :

Le GPS utilise 4 pins, les 2 VCC et GND et ensuite TX et RX. Ces deux dernières sont respectivement le signal de transmission et celui de réception. Dans notre cas seulement le TX nous intéresse. Pour que votre Arduino puisse recevoir les données, vous devez brancher le TX sur du RX. Sur une Arduino Mega (comme sur la photo ci dessous) il y a déjà des pins RX1-TX1, RX2-TX2 et RX3-TX3. Sur l’Arduino Uno (celle que j’utilise actuellement dans le projet « final) j’utilise la pin 6 en tant que RX.

20150209_213043

L’écran OLED I2C :

Pour l’écran, c’est également 4 pins. Les deux spécifiques sont SDA et SCL qui correspondent au signal de données et au signal d’horloge. Elles seront branchées sur les pins 8 et 9.

20150209_212921

Capteur de température :

Notre DS18B20 utilise seulement 3 pins. La pin de donnée utilisée dans notre cas sera la numéro 10. Pour vous y retrouvez, le fil noir est celui pour GND, le rouge pour VCC et le jaune (ou bleu ou autres cela dépend) pour les DATA.

DS18S20-hookup-400x237

Comme vous aurez pu le remarquer, il est difficile de connecter les différents composants sur la même carte en même temps. Effectivement, et c’est pour cela que nous allons utiliser une breadboard afin de déporter les connexions de la carte.

20150209_213127

Et voici un schéma de son fonctionnement avec des codes couleurs :

breadboard2

Voilà un des premiers jets avec tous les composants branchés :

20150201_164101

Je vous mets ensuite quelques photos du montage plus ou moins final, avec une Arduino Uno, une boîte de dérivation et une breadboard plus petite :

20150209_213333

20150209_213449

 10959842_10206295389609560_4150929585075539013_n

IV) Sketch Arduino

Voilà maintenant le plus intéressant, le sketch (ou code) Arduino !

Avant de vous le donner, voici une liste des fonctionnalités :

  • Compteur de vitesse
  • Affichage de l’heure avec le module RTC du GPS
  • Température extérieure
  • Vitesse moyenne
  • Vitesse maximale

Vous retrouverez le lien sur Dropbox. J’ai commenté un maximum le code, mais n’hésitez pas à laisser un commentaire si vous avez besoin d’aide. Et bon bidouillage !

Jeune développeur de 22 ans, passionné des nouvelles technologies et de tests en tout genre. Développeur PHP depuis maintenant 2 ans. J'écris principalement des articles où je teste des produits mais également quelques news pour le site ainsi que pour notre nouveau concept, le Cappuccino !

33 Comments

  1. Balmonet Reply

    Bonjour,je suis intéressé par cet article pour mon domaine sportif à savoir l’aviron.
    Ne connaissant strictement rien au monde de la programmation, j’aurais voulu savoir comment passé d’une vitesse affiché en km/heure à une vitesse estimée en temps au 500 mètres sur chaque coup rame.

    d’avance merci de vos réponses

  2. Balmonet Reply

    Bonjour,je suis intéressé par cet article pour mon domaine sportif à savoir l’aviron.
    Ne connaissant strictement rien au monde de la programmation, j’aurais voulu savoir comment passé d’une vitesse affiché en km/heure à une vitesse estimée en temps au 500 mètres sur chaque coup rame.

    d’avance merci de vos réponses

    1. Nathan Post author

      Bonjour ,

      Une vitesse et un temps ce n’est pas pareil.

      Pour répondre, en récupérant ta position à un temps donné, puis en la récupérant 500m plus loin tu devrais pouvoir faire chose

    2. alain

      Si, un temps sur une distance c’est bien une vitesse.
      Mais il faut avoir fait de l’ergomètre pour comprendre la question de Balmonet…
      Voici la transformation pour afficher (en secondes) la valeur voulue par Balmonet (qu’il restera ensuite à convertir en minutes + secondes) à partir d’une vitesse V donnée en km/h :
      18/V
      Ca vient de la formule V = D/T avec D=500m et un facteur de 3,6 pour transformer la vitesse de km/h à m/s.

  3. zapad Reply

    bonsoir
    je travaille su un projet de securité de navigation avion.
    je ne cherche pas a stocker les points d’une navigation mais
    d’afficher le cap et la distance d’un point geographique (terrain)
    C’est facile pour un point en entrant les coordonnées en ‘dur’ gans le pgm
    mais je souhaite avoir le choix entre disons 5 points differents sans manipulations excessives.
    comment peut on faire ? – ecran sensitif – recuperation sur SD ??
    merci de votre aide
    mik

    1. Nathan Post author

      Ecran sensitif, ou alors un simple bouton qui te permet de naviguer entre plusieurs points préalablement définis que tu stockes sur une carte SD dans un fichier texte. Par exemple, tu mets tous les points que tu veux dans un fichier texte (1 par ligne). Ensuite tu lis le fichier txt, tu remplis ensuite un tableau qui contiendra toutes les lignes, et avec le bouton tu pourras naviguer à travers ton tableau pour afficher les différents points. D’autres solutions peuvent être envisagées aussi 🙂

  4. Vincent Reply

    Bonjour,
    ce projet est intéressant, mais il semblerait que le sketch ne soit plus sur dropbox, y a t-il moyen d’avoir un lien qui fonctionne ? Merci d’avance ! 😉

  5. Florian Reply

    Bonjour Nathan. Ton programme est très intéressant mais je dois l’utiliser pour la navigation en voilier .
    Est il possible d’afficher la vitesse en noeuds ?
    La vitesse étant faible en voilier, la précision du shield gps que tu propose est elle suffisante à vitesse réduite ?

    1. Nathan Post author

      Alors d’abords merci 🙂
      Pour la vitesse en noeud, un petit coup d’oeil sur la doc TinyGPS++ te permet de répondre à ta question –> Oui en remplaçant tout les « gps.speed.kmph(); » par « gps.speed.knots(); » et en remplacant le « int vitesse » par un « double vitesse »

      Pour la précision je ne préfère pas te dire de bêtise car je ne m’en rappel plus du tout.. Si tu as peur de tester avec cette puce GPS, je te laisse te tourner vers une solution Adafruit (un peu plus coûteuse mais plus performante) :
      Lien pour l’achat : https://goo.gl/ci7v0D
      Lien pour la doc : http://goo.gl/Zhdvv6

      Au plaisir 🙂

    2. florian

      Bonjour nathan ,
      merci pour ces précisions. je vais commander tout ça . par contre il y a quelque chose qui me froisse dans ton tuto. tu dis pouvoir récupérer les données du GPS sans passer part le port série ( tu utilise la pin 6 en guise de TX). Cette information est importante pour moi car mon projet est évolutif et je vais avoir besoin de renvoyer le nmea a un afficheur(sondeur compatible nmea) et à mon pc (via apc 220) . ce qui implique d’avoir plusieurs pin serie disponibles( hors j’ai une carte qui ne comporte que 1 liaison serie (leonardo)). Peut on éviter de passer par le série en utilisant les autres entrées ? merci encore .

    3. Nathan Post author

      Malheureusement tu es obligé de passer par les ports séries, il n’y à aucune autre solution à ma connaissance. Je te conseille de te diriger vers une Mega du coup, qui dispose de plusieurs liaisons séries

  6. Alyssa Reply

    Bonjour 🙂
    Je suis une étudiante en Licence Fondamentale en Informatique , je suis en train de faire mon projet de fin d’étude qui a comme titre « Logiciel compteur de vitesse GPS sous Windows CE avec statistique de conduite pour ordinateur de bord » .
    DESCRIPTION DU SUJET : La fonction du compteur de vitesse classique est de permettre au conducteur de connaitre la
    vitesse instantanée de son véhicule .Il est très utile pour permettre au conducteur de maîtriser la vitesse de son véhicule par
    rapport aux limites imposées par la signalisation ou le code de la route . Le logiciel compteur de vitesse par GPS permet en plus
    d’avoir une traçabilité sur les parcours suivie par le véhicule , des informations complémentaires tel que :temps de départ ,
    durée du parcours , vitesse maximal, vitesse moyenne ….
    Il permet l’indication du lieu du véhicule sur une mappe. Il permet aussi d’afficher une boussole pour indiquer l’orientation du
    véhicule . Le logiciel permettra d’avoir différents modes d’affichage de ces informations par simples clic sur l’écran tactile.

    Mon problème 🙁 je veux faire tous ça mais je n’arrive pas à lire le port où les informations – qui sont captées par l’antenne – sont stockées .

    Aidez-moi SVP :'( C’est ma dernière chance pour avoir mon diplôme :'(
    Merci d’avance .

    1. Nathan Post author

      Sans informations plus précises : quel capteur GPS, quelle carte, quels branchements etc… Je suis dans l’incapacité de vous aider

  7. Bruno Reply

    Bonjour,
    votre code arduino m’intéresse mais malheureusement le lien DropBox ne fonctionne pas.
    D’avance merci

  8. souf Reply

    Bonjour, excellant idée,cependant je n’arrive pas à accéder à votre dossier dropbox.

    merci

  9. Robin Reply

    Bonjour

    Je trouve le sujet génial je suis un grand fan et j’ai réussi à réunir tout le matos nécessaire pour réaliser ce projet mais le problème est que je possède une carte Arduino Nano et que quand j’essaie de téléverser le programme dans la carte il me dit que ce programme n’est pas compatible avec ma carte et j’espérais que vous sauriez m’éclairer sur quelle ligne je dois modifier pour arriver à téléverser le programme ?

    Merci beaucoup

  10. Arnaud Reply

    Bonsoir, j’ai un petit soucis, mon ecrans affiche pleins de points partout au lieu d’afficher normalement. il marche tip top avec le script de test adafruit. pouriez vous m’aider? tout à l’air bien branché et correctement, pas d’erreur de compilation :/

  11. Nathan Reply

    Bonjour Nathan je souhaite réaliser un compteur de vitesse mais le problème c’est que je possède une Ecran I2C LCD grove et donc la classe display. … qui est pour ton écran convient mais ne marche pas pour l’écran I2C LCD grove (sparking) j’aimerais une réponse. Merci

  12. Nathan Reply

    Bonjour Nathan lorsque je lance le programme, il affiche dans le moniteur série : localisation INVALID plusieurs fois. je comprends pas pourquoi.Peux tu répondre a mon problème; Merci

  13. Terence Reply

    Bonjour Nathan, je reveil un peu le sujet mais je me suis lancé dans ton tuto car j’adore l’idée!
    Aujourd’hui je suis bloqué dans la boucle  » if (gps.location.isValid()) » , la led de mon gps clignote en rouge et je n’arrive pas à trouver une doc qui explique ce que ça veut dire. Est ce que tu pourrais m’aider ?

    J’utilise les même composants que toi et une adruino uno V1

  14. Hoodiefaz Reply

    Bonjour
    je voudrais telecharger ton programme mais je n’arrive pas car moi j’ai juste besoin de trouver la vitesse grace au gps merci si tu peux m’aider me renvoyer un lien avec le meme code ou bien d’en refaire un autre merci de ton aide

  15. magassa Reply

    bonjour,j’ai un project qui pour but de calculer la vitesse d’une voiture et L’envoyé au telepilote,j’ai une carte arduino uno ,un gps SIM 800 et Hrph Nouveau Module GPS GYNEO6MV2 Carte SIM NEO-6M GY-NEO6MV2 avec Antenne pour Arduino et le kit complet de l’arduino.
    j’aurai besoin que de la vitesse de la voiture.
    comme je suis debutant dans arduino j’aurai besoin d’un sketch(code)
    svp.dans mon mail si possible svp
    cordialement

  16. Ledoux Reply

    Bonjour, je suis actuellement en premiere année d’école d’ingénieur et souhaite réaliser un tel projet. Cependant je dispose d’une carte est-elle compatible avec ce code ?

    Merci

Laisser un commentaire

Votre adresse de messagerie 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.