Table des matières:

Trouver votre chemin avec le GPS : 9 étapes
Trouver votre chemin avec le GPS : 9 étapes

Vidéo: Trouver votre chemin avec le GPS : 9 étapes

Vidéo: Trouver votre chemin avec le GPS : 9 étapes
Vidéo: Comment entrer des coordonnées GPS dans Google Maps (entrer longitude latitude) 2024, Novembre
Anonim
Trouver votre chemin avec le GPS
Trouver votre chemin avec le GPS

Un exercice rapide pour comprendre et appliquer les données GPS

  • Temps requis: 2 heures
  • Coût: 75 $ à 150 $

Pour les fabricants, il est devenu assez bon marché d'intégrer des données géospatiales de haute qualité dans des projets électroniques. Et au cours des dernières années, les modules récepteurs GPS (Global Positioning System) sont devenus beaucoup plus diversifiés, puissants et faciles à intégrer avec des cartes de développement comme Arduino, PIC, Teensy et Raspberry Pi. Si vous avez pensé à construire autour du GPS, vous avez choisi un bon moment pour commencer.

Étape 1: Comment ça marche

Un module GPS est un minuscule récepteur radio qui traite les signaux diffusés sur des fréquences connues par une flotte de satellites. Ces satellites tournent autour de la Terre sur des orbites à peu près circulaires, transmettant des données de position et d'horloge extrêmement précises au sol en dessous. Si le récepteur terrestre peut « voir » suffisamment de ces satellites, il peut les utiliser pour calculer sa propre position et son altitude.

Lorsqu'un message GPS arrive, le récepteur inspecte d'abord son horodatage de diffusion pour voir quand il a été envoyé. Comme la vitesse d'une onde radio dans l'espace est une constante connue (c), le récepteur peut comparer les temps de diffusion et de réception pour déterminer la distance parcourue par le signal. Une fois qu'il a établi sa distance par rapport à quatre satellites connus ou plus, le calcul de sa propre position est un problème assez simple de triangulation 3D. Mais pour le faire rapidement et avec précision, le récepteur doit être capable d'analyser avec agilité jusqu'à 20 flux de données à la fois. Étant donné que le système GPS a pour objectif publié d'être utilisable partout sur Terre, le système doit s'assurer qu'au moins quatre satellites - de préférence plus - sont visibles à tout moment depuis n'importe quel point du globe. Il y a actuellement 32 satellites GPS exécutant une danse méticuleusement chorégraphiée dans un nuage clairsemé de 20 000 kilomètres de haut.

Étape 2: Fait sur les fans

Le GPS ne pourrait pas fonctionner sans la théorie de la relativité d'Einstein, car une compensation doit être faite pour les 38 microsecondes que les horloges atomiques en orbite gagnent chaque jour grâce à la dilatation du temps dans le champ gravitationnel de la Terre.

Étape 3: Commencer

Commencer
Commencer

Quel que soit votre projet, le GPS est simple à intégrer. La plupart des modules récepteurs communiquent avec un protocole série simple, donc si vous pouvez trouver un port série de rechange sur votre carte contrôleur, cela ne devrait prendre qu'une poignée de fils pour établir la connexion physique. Et même si ce n'est pas le cas, la plupart des contrôleurs prennent en charge un mode série « logiciel » émulé que vous pouvez utiliser pour vous connecter à des broches arbitraires.

Pour les débutants, le module Ultimate GPS Breakout d'Adafruit est un bon choix. Il existe de nombreux produits concurrents sur le marché, mais l'Ultimate est un produit solide à un prix raisonnable, avec de grands trous traversants faciles à souder ou à connecter à une planche à pain.

Tout d'abord, connectez la terre et l'alimentation. En termes Arduino, cela signifie connecter l'une des broches GND du microcontrôleur au GND du module et la broche +5V au VIN du module. Pour gérer le transfert de données, vous devez également connecter les broches TX et RX du module à l'Arduino. Je vais sélectionner arbitrairement les broches Arduino 2 (TX) et 3 (RX) à cette fin, même si les broches 0 et 1 sont spécifiquement conçues pour être utilisées comme « port série matériel » ou UART. Pourquoi ? Parce que je ne veux pas gaspiller le seul UART dont disposent ces processeurs AVR bas de gamme. L'UART d'Arduino est câblé au connecteur USB intégré et j'aime le garder connecté à mon ordinateur pour le débogage.

Étape 4: Un orteil dans le flux de données

Un orteil dans le flux de données
Un orteil dans le flux de données

Dès que vous mettez sous tension, un module GPS commence à envoyer des morceaux de données texte sur sa ligne TX. Il ne voit peut-être pas encore un seul satellite, et encore moins un "correctif", mais le robinet de données s'allume tout de suite, et il est intéressant de voir ce qui en sort. Notre premier croquis simple (ci-dessous) ne fait qu'afficher ces données non traitées.

#include #define RXPin 2

#define TXPin 3#define GPSBaud 4800

#define ConsoleBaud 115200

// La connexion série au périphérique GPSSoftwareSerial ss(RXPin, TXPin);

void setup(){

Serial.begin(ConsoleBaud);

ss.begin(GPSBaud);

Serial.println("GPS Exemple 1");

Serial.println ("Affichage des données NMEA brutes transmises par le module GPS.");

Serial.println("par Mikal Hart"); Serial.println();

}

boucle vide()

{ if (ss.available() > 0) // Au fur et à mesure que chaque caractère arrive…

Serial.write(ss.read()); // … écrivez-le dans la console

}

REMARQUE: le croquis définit la broche de réception (RXPin) comme 2, même si nous avons dit plus tôt que la broche de transmission (TX) serait connectée à la broche 2. C'est une source courante de confusion. RXPin est la broche de réception (RX) du point de vue de l'Arduino. Naturellement, il doit être connecté à la broche de transmission (TX) du module, et vice versa.

Téléchargez ce croquis et ouvrez Serial Monitor à 115, 200 bauds. Si tout fonctionne, vous devriez voir un flux dense et sans fin de chaînes de texte séparées par des virgules. Chacun ressemblera à la deuxième image au début du paragraphe.

Ces chaînes distinctives sont connues sous le nom de phrases NMEA, ainsi appelées parce que le format a été inventé par la National Maritime Electronics Association. NMEA définit un certain nombre de ces phrases pour les données de navigation allant de l'essentiel (lieu et heure), à l'ésotérique (rapport signal/bruit satellite, variance magnétique, etc.). Les fabricants sont incohérents quant aux types de phrases utilisés par leurs récepteurs, mais GPRMC est essentiel. Une fois que votre module a été corrigé, vous devriez voir un bon nombre de ces phrases GPRMC.

Étape 5: se trouver

Il n'est pas anodin de convertir la sortie brute du module en informations que votre programme peut réellement utiliser. Heureusement, il existe déjà d'excellentes bibliothèques pour le faire pour vous. La populaire bibliothèque GPS Adafruit de Limor Fried est un choix pratique si vous utilisez leur évasion ultime. Il est écrit pour activer des fonctionnalités uniques à l'Ultimate (comme l'enregistrement de données interne) et ajoute ses propres cloches et sifflets. Ma bibliothèque d'analyse préférée, cependant - et je suis bien sûr totalement impartial - est celle que j'ai écrite et qui s'appelle TinyGPS++. Je l'ai conçu pour qu'il soit complet, puissant, concis et facile à utiliser. Prenons-le pour un tour.

Étape 6: Codage avec TinyGPS++

Du point de vue du programmeur, utiliser TinyGPS++ est très simple:

1) Créer un objet gps.

2) Routez chaque caractère qui arrive du module vers l'objet en utilisant gps.encode().

3) Lorsque vous avez besoin de connaître votre position, votre altitude, votre heure ou votre date, interrogez simplement l'objet GPS.

#include #include

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// La connexion série au périphérique GPSSoftwareSerial ss(RXPin, TXPin);

// L'objet TinyGPS++

GPS TinyGPSPlus;

void setup(){

Serial.begin(ConsoleBaud);

ss.begin(GPSBaud);

Serial.println("Exemple GPS 2");

Serial.println("Un traqueur simple utilisant TinyGPS++.");

Serial.println("par Mikal Hart");

Serial.println();

}

boucle vide(){

// Si des caractères sont arrivés du GPS, /

/ les envoyer à l'objet TinyGPS++

tandis que (ss.available() > 0)

gps.encode(ss.read());

// Montrons le nouvel emplacement et l'altitude

// chaque fois que l'un d'eux a été mis à jour

if (gps.location.isUpdated() || gps.altitude.isUpdated())

{

Serial.print("Emplacement: ");

Serial.print(gps.location.lat(), 6);

Serial.print(", ");

Serial.print(gps.location.lng(), 6);

Serial.print(" Altitude: ");

Serial.println(gps.altitude.meters());

}

}

Notre deuxième application affiche en permanence l'emplacement et l'altitude du récepteur, en utilisant TinyGPS++ pour faciliter l'analyse. Dans un appareil réel, vous pouvez enregistrer ces données sur une carte SD ou les afficher sur un écran LCD. Prenez la bibliothèque et dessinez FindingYourself.ino (ci-dessus). Installez la bibliothèque, comme d'habitude, dans le dossier des bibliothèques Arduino. Téléchargez le croquis sur votre Arduino et ouvrez Serial Monitor à 115 200 bauds. Vous devriez voir votre position et votre altitude se mettre à jour en temps réel. Pour voir exactement où vous vous situez, collez certaines des coordonnées de latitude/longitude obtenues dans Google Maps. Maintenant, branchez votre ordinateur portable et partez en balade ou en voiture. (Mais n'oubliez pas de garder les yeux sur la route !)

Étape 7: La « QUATRIÈME DIMENSION »

Même si nous associons le GPS à la localisation dans l'espace, n'oubliez pas que ces satellites transmettent également l'heure et la date. L'horloge GPS moyenne est précise au dix-millionième de seconde, et la limite théorique est encore plus élevée. Même si vous n'avez besoin que de votre projet pour garder une trace du temps, un module GPS peut toujours être la solution la moins chère et la plus simple.

Pour transformer FindingYourself.ino en une horloge super précise, changez simplement les dernières lignes comme ceci:

if (gps.time.isUpdated()) {

char buf[80];

sprintf(buf, "L'heure est %02d:%02d:%02d", gps.time.hour(), gps.time.minute(), gps.time.second()); Serial.println(buf);

}

Étape 8: Trouver votre chemin

Trouver ton chemin
Trouver ton chemin

Notre troisième et dernière application est le résultat d'un défi personnel consistant à écrire un croquis TinyGPS++ lisible, en moins de 100 lignes de code, qui guiderait un utilisateur vers une destination à l'aide d'instructions textuelles simples telles que « rester droit » ou « virer à gauche ».

#include #include

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// La connexion série au périphérique GPSSoftwareSerial ss(RXPin, TXPin);

// L'objet TinyGPS++ TinyGPSPlus gps;

non signé long lastUpdateTime = 0;

#définir EIFFEL_LAT 48.85823#définir EIFFEL_LNG 2.29438

/* Cet exemple montre un cadre de base sur la façon dont vous pouvez utiliser le cap et la distance pour guider une personne (ou un drone) vers une destination. Cette destination est la Tour Eiffel. Modifiez-le au besoin

Le moyen le plus simple d'obtenir les coordonnées lat/long est de cliquer avec le bouton droit de la souris sur la destination dans Google Maps (maps.google.com) et de choisir "Qu'est-ce qu'il y a ici ?". Cela met les valeurs exactes dans la zone de recherche

*/

void setup(){

Serial.begin(ConsoleBaud);

ss.begin(GPSBaud);

Serial.println("Exemple GPS 3");

Serial.println ("Un système de guidage pas si complet");

Serial.println("par Mikal Hart");

Serial.println();

}

boucle vide(){

// Si des caractères sont arrivés du GPS, // envoyez-les à l'objet TinyGPS++ while (ss.available() > 0) gps.encode(ss.read());

// Toutes les 5 secondes, effectuez une mise à jour

if (millis() - lastUpdateTime >= 5000)

{

lastUpdateTime = millis();

Serial.println();

// Établir notre statut actuel

double distanceToDestination = TinyGPSPlus::distanceBetween

gps.location.lat(), gps.location.lng(), EIFFEL_LAT, EIFFEL_LNG);

double courseToDestination = TinyGPSPlus::courseTo

gps.location.lat(), gps.location.lng(), EIFFEL_LAT, EIFFEL_LNG);

const char *directionToDestination = TinyGPSPlus::cardinal(courseToDestination);

int courseChangeNeeded = (int)(360 + courseVersDestination - gps.course.deg()) % 360;

// déboguer Serial.print("DEBUG: Course2Dest: ");

Serial.print(courseToDestination);

Serial.print(" CurCourse: ");

Serial.print(gps.course.deg());

Serial.print(" Dir2Dest: ");

Serial.print(directionToDestination);

Serial.print(" RelCourse: ");

Serial.print(courseChangeNeeded);

Serial.print(" CurSpd: ");

Serial.println(gps.speed.kmph());

// À moins de 20 mètres de la destination ? Nous sommes ici

si (distanceVersDestination <= 20,0)

{ Serial.println("FÉLICITATIONS: Vous êtes arrivé !");

sortie(1);

}

Serial.print("DISTANCE: "); Serial.print(distanceToDestination);

Serial.println(" mètres à parcourir.");

Serial.print("INSTRUCTION: ");

// Rester immobile ? Indiquez simplement dans quelle direction aller

si (gps.speed.kmph() < 2.0)

{

Serial.print("Tête ");

Serial.print(directionToDestination);

Serial.println(".");

revenir;

}

if (courseChangeNeeded >= 345 || courseChangeNeeded < 15) Serial.println("Continuez tout droit !");

else if (courseChangeNeeded >= 315 && courseChangeNeeded < 345)

Serial.println("Tournez légèrement vers la gauche.");

else if (courseChangeNeeded >= 15 && courseChangeNeeded < 45)

Serial.println("Vir légèrement à droite.");

else if (courseChangeNeeded >= 255 && courseChangeNeeded < 315)

Serial.println("Tourner vers la gauche.");

else if (courseChangeNeeded >= 45 && courseChangeNeeded < 105)

Serial.println("Tourner vers la droite.");

autre

Serial.println("Retourner complètement.");

}

}

Toutes les 5 secondes, le code capture l'emplacement et le cap de l'utilisateur (direction de déplacement) et calcule le relèvement (direction vers la destination), à l'aide de la méthode TinyGPS++ courseTo(). La comparaison des deux vecteurs génère une suggestion pour continuer tout droit ou tourner, comme indiqué ci-dessous.

Copiez le croquis FindingYourWay.ino (ci-dessus) et collez-le dans l'IDE Arduino. Définissez une destination à 1 km ou 2 km, téléchargez le croquis sur votre Arduino, exécutez-le sur votre ordinateur portable et voyez s'il vous y guidera. Mais plus important encore, étudiez le code et comprenez son fonctionnement.

Étape 9: Aller plus loin

Le potentiel créatif du GPS est vaste. L'une des choses les plus satisfaisantes que j'ai jamais faites était une boîte de puzzle compatible GPS qui ne s'ouvre qu'à un emplacement préprogrammé. Si votre victime veut que le trésor soit enfermé à l'intérieur, elle doit découvrir où se trouve cet emplacement secret et y apporter physiquement la boîte. Une première idée de projet populaire est une sorte de dispositif de journalisation qui enregistre la position et l'altitude minute par minute, par exemple, d'un randonneur marchant sur le sentier Trans-Pennine. Ou qu'en est-il de l'un de ces traqueurs magnétiques sournois que les agents de la DEA dans Breaking Bad collent sur les voitures des méchants ? Les deux sont tout à fait réalisables et seraient probablement amusants à construire, mais je vous encourage à réfléchir de manière plus large, au-delà de ce que vous pouvez déjà acheter sur Amazon. C'est un grand monde là-bas. Déplacez-vous le plus loin possible.

Conseillé: