Adafruit GPS ULTIMATE

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Introduction

GPS-Ultimate.jpg

http://ladyada.net/products/ultimategps/

Raccorder au PC

Les modules GPS sont vraiment merveilleux, dès qu'ils sont allumés ils essayent de se synchroniser (FIX) et produisent des données. Comme presques tous les GPS existants, Le GPS Ultimate d'Adafruit utilise une logique TTL sur sa sortie série pour envoyer ses données.

La meilleure façon de commencer à tester un GPS est de le brancher directement sur un ordinateur par l'intermédiaire du convertisseur Série TTL vers USB d'un Arduino.

Vous pouvez aussi utiliser un adaptateur FTDI ou tout autre adaptateur TTL mais dans cette démonstration nous allons utiliser un simple Arduino.

Le code

Pour commencer, charger un sketch "blanc" dans votre Arduino:

// Ce sketch vous permet de by-passer l'Atmega
// et de connecter des senseurs (comme un GPS ou lecteur d'empreinte) 
// directement sur le convertisseur USB/Série de votre carte
// Arduino.
 
// Connecter VIN au +5V
// Connecter GND à la masse/ground
// Connecter GPS RX (réception donnée dans le GPS) vers Arduino Pin 0 (digitiale)
// Connecter GPS TX (sortie de donnée du GPS) vers Arduino Pin 1 (digitiale)
 
void setup() {}
void loop() {}

Voici comment contourner la puce ATMega, vous vous raccordez directement sur le convertisseur USB/Serial.

Une fois que vous avez chargé le scketch, raccordez le GPS comme suit:

Le montage

GpsUltimatedirectwire.jpg

Messages GPS

Branchez ensuite le cable USB et ouvrez le moniteur Serie d'Arduino IDE. Veillez à sélectionner 9600 baud dans la liste déroulante.

Vous verrez alors apparaître un texte fort semblable à ce qui suit:

GpsUltimateFetch.jpg

Ce que vous voyez sont les "messages NMEA" brutes que le module produit.

Il y a différents types de messages NMEA, les messages les plus couramment utilisés sont:

  1. $GPRMC - Global Positioning Recommended Minimum Coordinates
  2. $GPGGA

Ces deux messages produisent les informations suivantes:

  • temps,
  • date,
  • latitude,
  • longitude,
  • altitude,
  • Vitesse estimé (au sol),
  • Type de FIX (synchronisation).

Le type de Fix indique si le GPS est synchronisé sur des satellites et s'il reçoit assez de données pour déterminer la position (2D fix) ou la position+altitude (3D fix).

Pour plus d'information sur les messages NMEA et ce qu'ils contiennent, vous pouvez vous documenter sur le site suivant www.gpsinformation.org/dale/nmea.htm

Si vous prenez attention au contenu de la capture présentée ci-dessus, vous pouvez constater qu'il y a beaucoup de virgules (sans données en elles).
C'est parce que le module est sur un bureau, à l'intérieur, et qu'il n'est pas synchronisé (pas de FIX).
Pour que le module se synchronise, il faut qu'il soit à l'extérieur.

Interprétation des résultats - Coordonnées

Regardez la ligne mentionnant $GPRMC,194509.000,A,4042.6142,N,07400.4168,W,2.03,221.11,160412,,,A*77

Cette ligne est appelée une phrase RMC (Recommended Minimum) contenant les information minimale et contient déjà plein d'information utiles. Chaque donnée est séparée des autre par une virgule (comma en anglais).

La première partie 194509.000 est une indication de temps GMT. Les deux premiers chiffres 19 indique l'heure (19:00h, aussi connu comme 7pm ou 7 heures du soir) et les deux suivants indique les minutes, ensuite deux autres chiffres pour les secondes et finallement les millisecondes. Donc, cette capture a eu lieu à 7:45 pm (après midi) et 9 secondes (ou encore à 19:45:09 en notation 24h au format européen).

La seconde partie est un 'code statut' (status code), à savoir:

  • V pour "Void" indique que les données sont invalides.
  • A pour "Active" indique que le GPS peut obtenir un e synchronisation (lock/fix)

Les 4 données suivantes contiennent des données de géolocalisation.

  • La Latitude (première série d'information) correspond à l'axe Sud -> Nord (Truc pour Google Map: le Sud vers le bas est négatif, le nord vers le Haut est positif)
  • La Longitude (deuxième série d'information) correspond à l'axe Ouest -> Est (Truc pour Google Map: De gauche droite vers l'écriture... on ajoute des lettres sur la lignes. Ouest est négatif, Est est positif)

Dans cet exemple, la position est 4042.6142,N (Latitude 40 degrés, 42.3932 minutes North [Nord]) et 07400.4168,W (Longitude 74 degrés, 0.4680 minutes West [ouest]).

Localisation sur Google Maps

Pour identifier cette localisation sur Google Maps, tapez +40° 42.6142', -74° 00.4168' dans la zone de recherche de Google Maps.
Malheureusement, Google Maps n'accepte pas directement la notation ENMA, vous devez donc utiliser +/- à la place de la notation NSWE. N (Nord) et E (Est) sont positifs, S (Sud) et W (Ouest=West) sont négatif.

Interprétation des résultats - Vitesse

En reprenant notre exemple $GPRMC,194509.000,A,4042.6142,N,07400.4168,W,2.03,221.11,160412,,,A*77 déjà mentionné ci-dessus:

Après les données de localisation viennent la vitesse exprimée en knots. Un knot correspond à la vitesse du Mile Nautique, soit 1.852 km/h.

Suivant l'exemple, nous nous déplaçons donc de 2.03 knots (3.76 km/h)

Vient ensuite l'angle de tracking, cela correspond approximativement à la direction indiquée par une boussole. Cette direction est calculée sur base de la direction de notre déplacement déjà effectué (donnée nécessaire pour pouvoir indiquer le Nord avec cette boussole virtuelle).

L'information suivante 160412 est la date courante soit le 16 Avril 2012 (jour mois année_en_2_positions).

Finalement, les données la ligne est terminée avec un *XX qui est checksum des données transférée.

Une fois que vous avez obtenu une synchronisation avec votre module GPS, vérifiez votre position à l'aide de Google Maps (ou autre logiciel de géolocalisation). Souvenez-vous qu'un GPS dispose d'une précision de seulement 5 à 10 mètres (la plus grande précision étant réservée aux militaires). Cette précision peut se dégrade si vous êtes à l'intérieur ou entouré de haut building/bâtiments.

Raccordement Arduino

Une fois que vous avez testé le module GPS en lien direct, vous pouvez alors raccorder le module sur votre microcontrôleur. Nous utilisons un Arduino mais vous pouvez adapter le code sur tout autre microcontroleur supportant une communication série TTL à 9600 bauds.

Connectez:

  • VIN sur +5V,
  • GND vers la masse (GND),
  • RX sur la broche digitale 2
  • TX sur la broche digitale 3

GpsUltimateArduinowire.jpg

Le prochaine étape est de télécharger la librairie GPS d'Adafruit. Cette librairie effectue de nombreuses tâches permettant de recevoir des données depuis un module GPS. Parmis ces tâches, la librairie réceptionne le flux d'information en tâche de fond (traitement via interruption) et décode automatiquement les informations qu'elle contient (parsing).

Visitez le repository GitHub pour télécharger la librairie (cliquez sur le bouton DOWNLOADS dans le coin en haut à droite), Une fois le répertoire décompressé, renommez le Adafruit_GPS. Vérifiez que le répertoire Adafruit_GPS contient bien les fichiers Adafruit_GPS.cpp et Adafruit_GPS.h.

Placez le répertoire Adafruit_GPS (la librarie) dans votre répertoire <votre_répertoire_pour_les_sketch_arduino>/libraries/ . Vous pourriez avoir besoin de créer le répertoire "libraries" si c'est la première librairie que vous installez.

Redémarrez votre IDE Arduino.

Ouvrez le sketch d'exemple File→Examples→Adafruit_GPS→echo et chargez le sur votre Arduino. Ouvrez ensuite votre moniteur série.

Ce sketch lit les données depuis le port série logiciel (software serial port) constitué des broches 2 & 3 pour ensuite les renvoyer vers le port série matériel (hardware serial port) raccordé au connecteur USB.

Vous pouvez configurer la production de données GPS en plaçant/retirant les marques de commentaires sur les lignes de la procédure setup(). Par exemple, nous pouvons demander au GPS d'envoyer des syntaxes (format de données) différentes, et changer la fréquence d'envoi de ces données.

10 Hz (10 fois par secondes) est la vitesse maximale, et cela représente beaucoup de données. Vous ne devriez pas être capable de sortir "toutes les données" à cette vitesse parce que le débit de 9600 bauds n'est pas assez rapide.

 // Ci-dessous, vous pouvez sélectionner la syntaxe que le module émet.
 
  // dé-commentez cette ligne pour activer RMC (recommended minimum) et GGA (fix data) incluant l'altitude
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  // dé-commentez cette ligne pour activer seulement le "minimum recommended" (données minimale recommandée) pour les mises-à-jour haut débit!
  //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
  // dé-commentez cette ligne pour activer  toutes les données disponibles - à 9600 bauds vous devez adapter la fréquence de mise-à-jour à 1 Hz
  //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_ALLDATA);
 
  // Initialise la fréquence de mise-à-jour des données
  // 1 Hz 
  //GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
  // 5 Hz - à 9600 bauds vous pouvez seulement sélectionner une syntaxe de sortie RMC ou RMCGGA 
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_5HZ);
  // 10 Hz - pour 9600 bauds vous pouvez seulement sélectionner la syntaxe de sortie RMC  //GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ);

D'une façon général, nous avons constaté que la plupart des projets ont seulement besoin d'un syntaxe NMEA de type RMC et GGA. D'une façon générale, vous n'auriez pas besoin de réceptionner toutes les données ALLDATA à moins que vous ne vouliez aussi connaître la position des satellites.

Analyse (parsing)

Puisque tous les GPS produisent des séquences (syntaxes) NMEA et que les projets ont souvent besoin d'extraire les données qu'elles contiennent (position,vitesse,etc), AdaFruit à développé la libraire Adafruit GPS pour grandement simplifier la tâche d'extraction des informations.

En ayant une librairie qui lit, stocke et analyse (parse) les données reçue en tâche de fond (via interruption), il devient trivial d'interroger la librairie pour connaître la dernière position GPS sans devoir s'atteler à un long travail d'analyse de séquences NMEA à l'état brut.

Ouvrez le sketch File→Examples→Adafruit_GPS→parsing et chargez le sur votre Arduino. Ouvrez ensuite votre moniteur Série dans Arduino IDE.

GpsUltimateParse.jpg

Dans ce sketch nous appelons GPS.read() dans le timer once-a-millisecond (c'est le timer qui exécute la commande millis()). Ensuite, nous pouvons utiliser la fonctio GPS.newNMEAreceived() afin de vérifier si un nouveau paquet d'information est disponible. Si la fonction GPS.newNMEAreceived() retourne true (vrai) alors nous pouvons demander à la librairie d'analyser le paquet de donnée à l'aide de GPS.parse(GPS.lastNMEA()).

Il est nécessaire de maintenir les processus d'interrogation et d'analyse dans la boucle principale (loop) du programme. En effet, si ces opérations étaient prisent en charge par une intérruption, nous perdrions (effacerions) des données GPS par accident.

Une fois que les données sont analysées (parsed), nous pouvons obtenir les informations depuis la librairie en appelant des fonctions telles que GPS.day (le jour), GPS.month (le mois) et GPS.year (l'année) fournissant les détails de la date courante. GPS.fix sera à 1 s'il y a une synchronisation (fix), 0 s'il n'y a pas de synchronisation. Si nous avons une synchronisation, nous pouvons obtenir la latitude via GPS.latitude, la longitude via GPS.longitude, la vitesse via GPS.speed (en knots, pas en mph ou km/h!), l'angle via GPS.angle, l'altitude via GPS.altitude (en centimetres) et le nombres de satellites avec GPS.satellites.

Note: 1 knot = 1.852 Km/H (précisément)

Cela devrait permettre de créer beaucoup plus facilement des projets nécessitant un outil de localisation. Nous suggérons de laisser la fréquence de mise-à-jour fixée sur 1Hz et de configurer le GPS afin d'obtenir les syntaxes RMC et GGA (puisque le parseur ignore et ne mémorise pas les autres données).

Batterie de secours

Le GPS intègre Horloge Temps réelle (RTC) qui permet de maintenir la date et l'heure même quand le module n'est pas alimenté et qu'il ne dispose pas encore d'une synchronisation (FIX). Cela permet aussi de réduire le temps de synchronisation, par conséquent, maintenir cette horloge sous tension peut être utile. Cette information est importante si votre projet peut être privé de sa source d'alimentation (par exemple un montage alimenté par un panneau solaire ou équivalent). Pour utiliser la RTC, il faut connecter une pile. Il y a un pastille à l'arrière du Breakout board pour y placer une pile CR1220 (et son support). Le support est fournit mais la pile n'est pas incluse. Vous pouvez utiliser n'importe quelle pile de 12mm - elles sont assez répandues.

GpsUltimatePile1.jpg

Avant d'insérer la pile, vous devez d'abord couper/rompre la piste entre les pastilles de soudure à l'arrière du breakout board (voir "RTC" sur la sérigraphie). Cela déconnecte la broche VIN de l'alimentation de la pile. Utilisez un multimètre pour vérifier la discontinuité du circuit (les deux pastilles ne doivent plus être connectées ensembles).

GpsUltimatePile2.jpg

Câblage avancé

Jusque maintenant nous avons utilisé les broches VIN GND TX et RX de notre GPS - mais il nous reste d'autres broches.

Mais que font ces autres broches et en aurez vous jamais besoin? Dans plus de 90% des cas, vous n'aurez probablement pas besoin de ces autres broches dans vos projets GPS. AdaFruit les a cependant rendues disponibles en cas de besoin spécifiques.

  • FIX est une broche en sortie - c'est la même que celle qui commande la LED rouge. XXXXXXXXXXit is the same pin as the one that drives the red LED. When there is no fix, the FIX pin is going to pulse up and down once every second. When there is a fix, the pin is low (0V) for most of the time, once every 15 seconds it will pulse high for 200 milliseconds

VBAT is an input pin - it is connected to the GPS real time clock battery backup. We suggest using the battery spot on the back but if you have a project with a coin cell or other kind of battery that you want to use (and its under 3.3V) you can connect it to the VBAT pin. If you do this, be sure to cut the trace on the back between the RTC solder pads

EN is the Enable pin, it is pulled high with a 10K resistor. When this pin is pulled to ground, it will turn off the GPS module. This can be handy for very low power projects where you want to easily turn the module off for long periods. You will lose your fix if you disable the GPS so keep that in mind.

3.3V is the output from the onboard 3.3V regulator. If you have a need for a clean 3.3V output, you can use this! It can provide at least 100mA output.

Data-Logger intégré

Une fonctionnalité intéressante du MTK3339 est sa capacité de faire un enregistrement de données directement dans la mémoire flash du module (data-logger). Elle permet de stocker la date, l'heure, la latitude, la longitude et l'altitude dans la mémoire flash de 64 Kb disponible dans le module. Il ne s'agit pas d'un enregistreur haute résolution - un enregistrement toutes les 15 secondes lorsqu'il y a une synchro (fix) - mais cela devrait convenir pour 99% des projets voilant traquer des déplacements et positions. Cela peut devenir un moyen vraiment puissant (et très peu gourmand en énergie) pour enregistrer des données, pas besoin de carte SD ou d'EEPROM! La mémoire flash peut stocker jusqu'à 16 heures de données.

Le module GSP nécessite un microcontrolleur pour démarrer le data-logger (en introduisant une requête de démarrage "kick start"). S'il y a une perte d'alimentation il faudra une autre "impulsion" pour redémarrer. Si vous avez déjà des données stockées dans la mémoire FLASH, une nouvelle trace sera créé (sans perte des anciennes données). L'enregistrement s'arrêtera lorsqu'il n'y a plus de mémoire disponible sans écrasement des anciennes données. Hormis cet inconvénient, il s'agit d'un joli plus et AdaFruit propose une librairie vous permettant de supporter et d'utiliser cette fonctionnalité.

Dans un premier temps, nous allons mettre le data-logger en marche.

Ouvrez le sketch File→Examples→Adafruit_GPS→locus_start, ce dernier montre comment démarrer le logger (appelé LOCUS)

The key part is here:

  Serial.print("STARTING LOGGING....");
  if (GPS.LOCUS_StartLogger())
    Serial.println(" STARTED!");
  else
    Serial.println(" no response :(");
  delay(1000);

You should start the logger and then check the response

GpsUltimateLocus1.jpg

Once you've seen that the GPS is OK with logging, you can load up the status sketch which will also give you more data. Upload File→Examples→Adafruit_GPS→locus_status

GpsUltimateLocus2.jpg

This output gives you some more information. the first entry is the Log #. This is how many log traces are in the memory. Every time you start and save data, a new log is made. Full Stop means that once the logger has run out of memory it will stop. Next the output indicates that we are logging only during fix data and at set intervals, with an interval delay of 15 seconds. We are not logging based on distance or speed. The current status is LOGGING (active), there's also the number of records we've stored. Each record is a timestamped location. We log once every 15 seconds, you can see the records increment from 344 to 345 here. Lastly, we can see how much of the internal flash storage is used, only 4% at this point

In real use, you'll probably want to start the loggging and then have your microcontroller go to sleep to reserve power, waking up once in a while to check up on the logging status.

Finally, once we're done logging we need to extract the data. To do this we need to first get the raw data out of the FLASH and then decode the sentences. Upload File→Examples→Adafruit_GPS→locus_dump to the Arduino and open up the serial monitor

GpsUltimateLocus3.jpg

Copy and paste all the text after the —-'s (starting with $PMTKLOX,0,86*67 and ending with $PMTK001,622,3*36) then paste it into the following box:

http://ladyada.net/products/ultimategps/


Outils

Où Acheter

Le module GPS Ultimate d'AdaFruit est disponible chez MC Hobby.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.