Obsah:

Nájdenie cesty s GPS: 9 krokov
Nájdenie cesty s GPS: 9 krokov

Video: Nájdenie cesty s GPS: 9 krokov

Video: Nájdenie cesty s GPS: 9 krokov
Video: Обзор Navitel RE900 - Навигатор с функцией видеорегистратора 2024, Júl
Anonim
Nájdenie cesty s GPS
Nájdenie cesty s GPS

Rýchle cvičenie na pochopenie a aplikáciu údajov GPS

  • Požadovaný čas: 2 hodiny
  • Cena: 75 - 150 dolárov

Začlenenie vysokokvalitných geopriestorových údajov do projektov elektroniky pre výrobcov je pomerne lacné. A za posledných niekoľko rokov sa moduly prijímača GPS (Global Positioning System) stali oveľa rozmanitejšími, výkonnejšími a ľahko integrovateľnými s vývojovými doskami ako Arduino, PIC, Teensy a Raspberry Pi. Ak ste uvažovali o stavaní na GPS, vybrali ste si vhodný čas, aby ste mohli začať.

Krok 1: Ako to funguje

Modul GPS je malý rádiový prijímač, ktorý spracováva signály vysielané na známych frekvenciách flotilou satelitov. Tieto satelity obiehajú okolo Zeme na zhruba kruhových dráhach a prenášajú extrémne presné údaje o polohe a hodinách do zeme nižšie. Ak pozemský prijímač dokáže „vidieť“dostatok týchto satelitov, môže ich použiť na výpočet vlastnej polohy a nadmorskej výšky.

Keď príde správa GPS, prijímač najskôr skontroluje časovú pečiatku vysielania, aby zistil, kedy bola odoslaná. Pretože rýchlosť rádiovej vlny vo vesmíre je známa konštanta (c), prijímač môže porovnať vysielacie a prijímacie časy a určiť vzdialenosť, ktorú signál prešiel. Potom, čo zistí svoju vzdialenosť od štyroch alebo viacerých známych satelitov, je výpočet vlastnej polohy pomerne jednoduchým problémom 3D triangulácie. Aby to však bolo možné vykonať rýchlo a presne, prijímač musí byť schopný svižne skracovať čísla až z 20 dátových tokov naraz. Pretože systém GPS má zverejnený cieľ byť použiteľný kdekoľvek na Zemi, systém musí zabezpečiť, aby boli najmenej štyri satelity - pokiaľ možno viac - sú vždy viditeľné z každého bodu na zemeguli. V súčasnosti existuje 32 satelitov GPS, ktoré predvádzajú starostlivo choreografický tanec v riedkom oblaku vysokom 20 000 kilometrov.

Krok 2: Fakt o fanúšikovi

GPS by nemohlo fungovať bez Einsteinovej teórie relativity, pretože je potrebné vykonať kompenzáciu za 38 mikrosekúnd, ktoré obiehajúce atómové hodiny získavajú každý deň z dilatácie času v gravitačnom poli Zeme.

Krok 3: Začíname

Začíname
Začíname

Bez ohľadu na váš projekt, integrácia GPS je jednoduchá. Väčšina modulov prijímača komunikuje jednoduchým sériovým protokolom, takže ak nájdete na doske ovládača náhradný sériový port, na fyzické spojenie by malo stačiť niekoľko káblov. A aj keď nie, väčšina radičov podporuje emulovaný „softvérový“sériový režim, ktorý môžete použiť na pripojenie k ľubovoľným pinom.

Pre začiatočníkov je modul Adafruit Ultimate GPS Breakout dobrou voľbou. Na trhu je veľa konkurenčných produktov, ale Ultimate je solídny umelec za rozumnú cenu s veľkými priechodnými otvormi, ktoré sa dajú ľahko spájkovať alebo spájať s doskou.

Najprv pripojte uzemnenie a napájanie. V pojmoch Arduino to znamená pripojenie jedného z pinov GND mikrokontroléra k GND modulu a +5V kolíka k VIN modulu. Aby ste mohli spravovať prenos dát, musíte tiež pripojiť piny TX a RX modulu k Arduinu. Na tento účel svojvoľne vyberiem piny Arduino 2 (TX) a 3 (RX), aj keď piny 0 a 1 sú navrhnuté špeciálne na použitie ako „hardvérový sériový port“alebo UART. Prečo? Pretože nechcem plytvať jediným UARTom, ktorý tieto low-endové procesory AVR majú. Arduino UART je pevne zapojený do vstavaného konektora USB a rád ho nechávam pripojený k počítaču na ladenie.

Krok 4: Prst v dátovom toku

Prst v dátovom toku
Prst v dátovom toku

V okamihu, keď použijete napájanie, modul GPS začne odosielať kusy textových údajov na svoju linku TX. Možno ešte nevidí ani jeden satelit, nieto ešte „opravu“, ale dátový faucet sa spustí okamžite a je zaujímavé sledovať, čo sa objaví. Náš prvý jednoduchý náčrt (nižšie) nerobí nič iné, ako zobrazovať tieto nespracované údaje.

#include #define RXPin 2

#define TXPin 3#definujte GPSBaud 4800

#define ConsoleBaud 115200

// Sériové pripojenie k zariadeniu GPS deviceSoftwareSerial ss (RXPin, TXPin);

neplatné nastavenie () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Príklad GPS 1");

Serial.println ("Zobrazenie nespracovaných údajov NMEA prenášaných modulom GPS.");

Serial.println ("od Mikala Harta"); Serial.println ();

}

prázdna slučka ()

{if (ss.available ()> 0) // As each character comes…

Serial.write (ss.read ()); // … napíšte to do konzoly

}

POZNÁMKA: Náčrt definuje prijímací kolík (RXPin) ako 2, aj keď sme predtým povedali, že vysielací (TX) kolík bude pripojený k kolíku 2. Toto je bežný zdroj zmätku. RXPin je prijímací kolík (RX) z pohľadu Arduina. Prirodzene musí byť pripojený k vysielaciemu (TX) kolíku modulu a naopak.

Odovzdajte tento náčrt a otvorte sériový monitor pri 115 200 baudoch. Ak všetko funguje, mali by ste vidieť hustý, nekonečný prúd textových reťazcov oddelených čiarkami. Každý bude vyzerať podobne ako druhý obrázok na začiatku odseku.

Tieto charakteristické reťazce sú známe ako vety NMEA, takzvane preto, že formát bol vynájdený Národnou asociáciou námornej elektroniky. NMEA definuje niekoľko týchto viet pre navigačné údaje od základných (miesto a čas) po ezoterické (pomer satelitného signálu k šumu, magnetická odchýlka atď.). Výrobcovia nesúhlasia s tým, aké typy viet ich prijímače používajú, ale GPRMC je zásadný. Akonáhle váš modul dostane opravu, mali by ste vidieť slušný počet týchto viet GPRMC.

Krok 5: Nájdenie seba samého

Nie je triviálne prevádzať výstup nespracovaného modulu na informácie, ktoré môže váš program skutočne použiť. Našťastie už je k dispozícii niekoľko skvelých knižníc, ktoré to urobia za vás. Obľúbená knižnica GPS Adafruit spoločnosti Limor Fried je vhodnou voľbou, ak využívate ich ultimátny odpočinok. Je napísaný tak, aby umožňoval funkcie jedinečné pre Ultimate (ako je interné protokolovanie údajov) a pridáva niekoľko vlastných zábavných zvončekov a píšťal. Moja obľúbená knižnica syntaktickej analýzy - a tu som, samozrejme, úplne nezaujatá - je tá, ktorú som napísal, s názvom TinyGPS ++. Navrhol som ho tak, aby bol komplexný, výkonný, stručný a ľahko použiteľný. Zoberme si to na otočku.

Krok 6: Kódovanie pomocou TinyGPS ++

Z pohľadu programátora je používanie TinyGPS ++ veľmi jednoduché:

1) Vytvorte objekt gps.

2) Každý znak, ktorý príde z modulu, nasmerujte na objekt pomocou gps.encode ().

3) Keď potrebujete poznať svoju polohu alebo nadmorskú výšku alebo čas alebo dátum, jednoducho sa opýtajte objektu GPS.

#include #include

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Sériové pripojenie k zariadeniu GPS deviceSoftwareSerial ss (RXPin, TXPin);

// Objekt TinyGPS ++

GPS TinyGPSPlus;

neplatné nastavenie () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Príklad GPS 2");

Serial.println („Jednoduchý sledovač používajúci TinyGPS ++.“);

Serial.println ("od Mikala Harta");

Serial.println ();

}

prázdna slučka () {

// Ak nejaké znaky prišli z GPS, /

/ pošlite ich do objektu TinyGPS ++

while (ss.available ()> 0)

gps.encode (ss.read ());

// Zobrazme novú polohu a nadmorskú výšku

// vždy, keď bol aktualizovaný jeden z nich

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

{

Serial.print („Miesto:“);

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

Serial.print (",");

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

Serial.print ("Nadmorská výška:");

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

}

}

Naša druhá aplikácia neustále zobrazuje polohu a nadmorskú výšku prijímača pomocou TinyGPS ++, ktorá vám pomôže s analýzou. V skutočnom zariadení môžete tieto údaje zaznamenať na kartu SD alebo ich zobraziť na LCD displeji. Vezmite si knižnicu a načrtnite FindingYourself.ino (vyššie). Nainštalujte knižnicu ako obvykle do priečinka Knižnice Arduino. Nahrajte skicu do svojho Arduina a otvorte sériový monitor pri 115 200 baudoch. Mali by ste vidieť aktualizáciu vašej polohy a nadmorskej výšky v reálnom čase. Ak chcete presne vidieť, kde sa nachádzate, prilepte niektoré z výsledných súradníc zemepisnej šírky/dĺžky do Máp Google. Teraz pripojte prenosný počítač a choďte na prechádzku alebo na jazdu. (Nezabudnite však dávať pozor na cestu!)

Krok 7: „ŠTVRTÝ ROZMER“

Aj keď spájame GPS s polohou vo vesmíre, nezabudnite, že tieto satelity vysielajú aj časové a dátové značky. Priemerné hodiny GPS sú presné s presnosťou na jednu desaťmilióntinu sekundy a teoretický limit je ešte vyšší. Aj keď váš projekt potrebuje iba sledovanie času, modul GPS môže byť stále najlacnejším a najľahším riešením.

Ak chcete z FindingYourself.ino urobiť super presné hodiny, zmeňte posledných niekoľko riadkov takto:

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, „Čas je%02d:%02d:%02d“, gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Krok 8: Nájdenie cesty

Nájdenie cesty
Nájdenie cesty

Naša tretia a posledná aplikácia je výsledkom osobnej výzvy napísať čitateľný náčrt TinyGPS ++ v menej ako 100 riadkoch kódu, ktorý by užívateľa naviedol na miesto určenia pomocou jednoduchých textových pokynov, ako napríklad „držať krok“alebo „vykloniť doľava“.

#include #include

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Sériové pripojenie k zariadeniu GPS deviceSoftwareSerial ss (RXPin, TXPin);

// Objekt TinyGPS ++ TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438

/* Tento príklad ukazuje základný rámec toho, ako by ste mohli použiť kurz a vzdialenosť na navedenie osoby (alebo drona) na miesto určenia. Táto destinácia je Eiffelova veža. Zmeňte to podľa potreby

Zemepisnú šírku/dĺžku získate najľahšie tak, že kliknete pravým tlačidlom myši na cieľ v Mapách Google (maps.google.com) a zvolíte „Čo je tu?“. Do vyhľadávacieho poľa sa tým zadajú presné hodnoty

*/

neplatné nastavenie () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Príklad GPS 3");

Serial.println („Nie príliš komplexný poradenský systém“);

Serial.println ("od Mikala Harta");

Serial.println ();

}

prázdna slučka () {

// Ak nejaké znaky prišli z GPS, // pošlite ich do objektu TinyGPS ++ while (ss.available ()> 0) gps.encode (ss.read ());

// Každých 5 sekúnd vykonajte aktualizáciu

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Stanovte náš aktuálny stav

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 + courseToDestination - gps.course.deg ()) % 360;

// ladenie 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 ());

// Do 20 metrov od cieľa? Boli tu

if (distanceToDestination <= 20,0)

{Serial.println ("GRATULUJEME: Prišli ste!");

výstup (1);

}

Serial.print ("VZDIALENOSŤ:"); Serial.print (distanceToDestination);

Serial.println („metre do konca.“);

Serial.print ("NÁVOD:");

// stojíš na mieste? Stačí naznačiť, ktorým smerom sa vydať

ak (gps.speed.kmph () <2,0)

{

Serial.print ("Hlava");

Serial.print (directionToDestination);

Serial.println (".");

návrat;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println („Pokračujte rovno!“);

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

Serial.println („Odbočte mierne doľava.“);

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

Serial.println („Odbočte mierne doprava.“);

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

Serial.println ("Odbočte doľava.");

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

Serial.println („Odbočte doprava.“);

inak

Serial.println („Úplne sa otočte.“);

}

}

Každých 5 sekúnd kód zachytí polohu a kurz používateľa (smer jazdy) a vypočíta smer (smer k cieľu) pomocou metódy TinyGPS ++ courseTo (). Porovnanie týchto dvoch vektorov generuje návrh, či ísť rovno alebo odbočiť, ako je uvedené nižšie.

Skopírujte skicu FindingYourWay.ino (vyššie) a prilepte ju do Arduino IDE. Nastavte cieľ 1 km alebo 2 km, nahrajte náčrt do svojho Arduina, spustite ho na prenosnom počítači a zistite, či vás tam dovedie. Čo je však dôležitejšie, naštudujte si kód a porozumejte, ako funguje.

Krok 9: Choďte ďalej

Kreatívny potenciál GPS je obrovský. Jednou z najuspokojivejších vecí, ktoré som kedy urobil, bol logický box s podporou GPS, ktorý sa otvára iba na jednom vopred naprogramovanom mieste. Ak chce vaša obeť zamknúť poklad vo svojom vnútri, musí zistiť, kde sa toto tajné miesto nachádza, a fyzicky tam box priniesť. Populárnym nápadom prvého projektu je nejaký druh protokolovacieho zariadenia, ktoré zaznamenáva polohu za minútu a nadmorskú výšku, povedzme, turistu, ktorý kráča po Transpennine Trail. Alebo čo jeden z tých záludných magnetických sledovačov, ktorí agenti DEA v hre Breaking Bad držia na autách tých zlých? Oba sú úplne uskutočniteľné a pravdepodobne by bolo zábavné ich stavať, ale povzbudzujem vás, aby ste uvažovali expanzívnejšie nad rámec vecí, ktoré si už môžete kúpiť na Amazone. Je tam veľký svet. Túlajte sa tak široko, ako len môžete.

Odporúča: