Obsah:

Hledání cesty s GPS: 9 kroků
Hledání cesty s GPS: 9 kroků

Video: Hledání cesty s GPS: 9 kroků

Video: Hledání cesty s GPS: 9 kroků
Video: Jak odemknout fabii bez klíčů rukama za 2 vteřiny 2024, Listopad
Anonim
Hledání cesty s GPS
Hledání cesty s GPS

Rychlé cvičení v porozumění a aplikaci dat GPS

  • Požadovaný čas: 2 hodiny
  • Cena: 75 - 150 $

Začlenění vysoce kvalitních geoprostorových dat do elektronických projektů pro výrobce bylo docela levné. A v posledních několika letech se moduly přijímače GPS (Global Positioning System) staly mnohem rozmanitějšími, výkonnějšími a snadno integrovatelnými s vývojovými deskami jako Arduino, PIC, Teensy a Raspberry Pi. Pokud jste přemýšleli o stavění kolem GPS, vybrali jste si vhodný čas, abyste mohli začít.

Krok 1: Jak to funguje

GPS modul je malý rádiový přijímač, který zpracovává signály vysílané na známých frekvencích flotilou satelitů. Tyto satelity víří kolem Země po zhruba kruhových drahách a vysílají extrémně přesné údaje o poloze a hodinách do země pod nimi. Pokud pozemský přijímač dokáže „vidět“dostatek těchto satelitů, může je použít k výpočtu vlastní polohy a nadmořské výšky.

Když přijde zpráva GPS, přijímač nejprve zkontroluje časové razítko vysílání, aby zjistil, kdy byla odeslána. Protože rychlost rádiové vlny v prostoru je známá konstanta (c), může přijímač porovnat časy vysílání a příjmu, aby určil vzdálenost, kterou signál urazil. Jakmile zjistí svoji vzdálenost od čtyř nebo více známých satelitů, je výpočet vlastní polohy poměrně jednoduchým problémem 3D triangulace. Aby to však bylo možné rychle a přesně, přijímač musí být schopen hbitě rozdrtit čísla až z 20 datových toků najednou. Protože systém GPS má zveřejněný cíl být použitelný všude na Zemi, musí systém zajistit, aby byly alespoň čtyři satelity - nejlépe více - jsou viditelné po celou dobu z každého bodu na zeměkouli. V současné době existuje 32 satelitů GPS, které předvádějí pečlivě choreografický tanec v řídkém oblaku vysokém 20 000 kilometrů.

Krok 2: Faktor ventilátoru

GPS by nemohlo fungovat bez Einsteinovy teorie relativity, protože je třeba provést kompenzaci za 38 mikrosekund, které obíhající atomové hodiny získávají každý den z dilatace času v gravitačním poli Země.

Krok 3: Začínáme

Začínáme
Začínáme

Ať už je váš projekt jakýkoli, GPS lze snadno integrovat. Většina modulů přijímače komunikuje přímým sériovým protokolem, takže pokud najdete na desce řadiče náhradní sériový port, mělo by k fyzickému připojení stačit několik vodičů. A i když ne, většina řadičů podporuje emulovaný „softwarový“sériový režim, který můžete použít k připojení k libovolným pinům.

Pro začátečníky je modul Adafruit Ultimate GPS Breakout dobrou volbou. Na trhu je spousta konkurenčních produktů, ale Ultimate je solidní umělec za rozumnou cenu, s velkými průchozími otvory, které lze snadno pájet nebo připojit k prkénku.

Nejprve připojte zem a napájení. Z hlediska Arduina to znamená připojení jednoho z pinů mikrokontroléru GND k GND modulu a kolíku +5V k VIN modulu. Abyste mohli spravovat přenos dat, musíte také připojit piny modulu TX a RX k Arduinu. Za tímto účelem zvolím libovolně piny Arduino 2 (TX) a 3 (RX), přestože piny 0 a 1 jsou speciálně navrženy pro použití jako „hardwarový sériový port“nebo UART. Proč? Protože nechci plýtvat jediným UART, který tyto low-endové procesory AVR mají. Arduino UART je pevně připojen k integrovanému konektoru USB a já ho rád nechávám připojený k počítači pro ladění.

Krok 4: Špička v datovém proudu

Špička v datovém proudu
Špička v datovém proudu

V okamžiku, kdy připojíte napájení, začne modul GPS odesílat kusy textových dat na svou linku TX. Možná ještě nevidí ani jeden satelit, tím méně má „opravu“, ale datový faucet se spustí okamžitě a je zajímavé sledovat, co se objeví. Náš první jednoduchý náčrt (níže) nedělá nic jiného, než zobrazuje tato nezpracovaná data.

#include #define RXPin 2

#define TXPin 3#definujte GPSBaud 4800

#define ConsoleBaud 115200

// Sériové připojení k zařízení GPS deviceSoftwareSerial ss (RXPin, TXPin);

neplatné nastavení () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS příklad 1");

Serial.println ("Zobrazení nezpracovaných dat NMEA přenášených modulem GPS.");

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

}

prázdná smyčka ()

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

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

}

POZNÁMKA: Náčrt definuje přijímací kolík (RXPin) jako 2, přestože jsme dříve řekli, že vysílací (TX) kolík bude připojen ke kolíku 2. Toto je běžným zdrojem nejasností. RXPin je přijímací pin (RX) z pohledu Arduina. Přirozeně musí být připojen k vysílacímu (TX) kolíku modulu a naopak.

Nahrajte tento náčrt a otevřete Serial Monitor na 115, 200 baudů. Pokud vše funguje, měli byste vidět hustý, nekonečný proud textových řetězců oddělených čárkami. Každý bude vypadat jako druhý obrázek na začátku odstavce.

Tyto charakteristické řetězce jsou známé jako věty NMEA, takzvaně proto, že formát vynalezla Národní asociace námořní elektroniky. NMEA definuje řadu těchto vět pro navigační data od základních (místo a čas) po esoterické (poměr signálu k šumu satelitu, magnetické rozptyly atd.). Výrobci jsou nekonzistentní ohledně typů vět, které jejich přijímače používají, ale GPRMC je zásadní. Jakmile váš modul dostane opravu, měli byste vidět spravedlivý počet těchto vět GPRMC.

Krok 5: Nalezení sebe sama

Není triviální převést výstup nezpracovaného modulu na informace, které váš program může skutečně použít. Naštěstí již existuje několik skvělých knihoven, které to za vás udělají. Oblíbená knihovna GPS Adafruit společnosti Limor Fried je vhodnou volbou, pokud používáte jejich Ultimate breakout. Je napsán tak, aby umožňoval funkce jedinečné pro Ultimate (jako je interní protokolování dat) a přidává nějaké své vlastní zvony a píšťaly. Moje oblíbená knihovna pro analýzu však - a zde jsem samozřejmě zcela nezaujatý - je ta, kterou jsem napsal, s názvem TinyGPS ++. Navrhl jsem jej tak, aby byl komplexní, výkonný, stručný a snadno použitelný. Vezměme to na otočku.

Krok 6: Kódování pomocí TinyGPS ++

Z pohledu programátora je používání TinyGPS ++ velmi jednoduché:

1) Vytvořte objekt gps.

2) Pomocí gps.encode () nasměrujte každý znak, který přijde z modulu do objektu.

3) Když potřebujete znát svou polohu nebo nadmořskou výšku nebo čas nebo datum, jednoduše se dotazte na objekt gps.

#include #include

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Sériové připojení k zařízení GPS deviceSoftwareSerial ss (RXPin, TXPin);

// Objekt TinyGPS ++

GPS TinyGPSPlus;

neplatné nastavení () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS příklad 2");

Serial.println („Jednoduchý tracker využívající TinyGPS ++.“);

Serial.println ("od Mikala Harta");

Serial.println ();

}

prázdná smyčka () {

// Pokud z GPS dorazily nějaké znaky, /

/ pošlete je do objektu TinyGPS ++

while (ss.available ()> 0)

gps.encode (ss.read ());

// Ukažme nové umístění a nadmořskou výšku

// kdykoli byla některá z nich aktualizována

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

{

Serial.print („Umístění:“);

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

Serial.print (",");

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

Serial.print ("Nadmořská výška:");

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

}

}

Naše druhá aplikace průběžně zobrazuje polohu a nadmořskou výšku přijímače a pomocí TinyGPS ++ pomáhá s analýzou. Ve skutečném zařízení můžete tato data zaznamenat na kartu SD nebo je zobrazit na displeji LCD. Popadněte knihovnu a načrtněte FindingYourself.ino (výše). Nainstalujte knihovnu jako obvykle do složky knihoven Arduino. Nahrajte skicu do svého Arduina a otevřete Serial Monitor na 115 200 baudů. Měli byste vidět aktualizaci vaší polohy a nadmořské výšky v reálném čase. Chcete -li přesně vidět, kde stojíte, vložte některé z výsledných souřadnic zeměpisné šířky a délky do Map Google. Nyní připojte notebook a vyrazte na procházku nebo na projížďku. (Nezapomeňte však sledovat oči na silnici!)

Krok 7: „ČTVRTÝ ROZMĚR“

ačkoli spojujeme GPS s polohou ve vesmíru, nezapomeňte, že tyto satelity vysílají také časová a datová razítka. Průměrné hodiny GPS jsou přesné na jednu desetimiliontinu sekundy a teoretický limit je ještě vyšší. I když svůj projekt potřebujete pouze ke sledování času, modul GPS může být stále nejlevnějším a nejsnadnějším řešením.

Chcete-li z FindingYourself.ino udělat super přesné hodiny, změňte několik posledních řádků 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: Hledání cesty

Hledání cesty
Hledání cesty

Naše třetí a poslední aplikace je výsledkem osobní výzvy napsat čitelný skript TinyGPS ++ v méně než 100 řádcích kódu, který by uživatele pomocí jednoduchých textových pokynů typu „držet rovně“nebo „odklonit doleva“dovedl k cíli.

#include #include

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Sériové připojení k zařízení GPS deviceSoftwareSerial ss (RXPin, TXPin);

// Objekt TinyGPS ++ TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438

/* Tento příklad ukazuje základní rámec toho, jak byste mohli pomocí kurzu a vzdálenosti navést osobu (nebo drona) do cíle. Tímto cílem je Eiffelova věž. Změňte jej podle potřeby

Souřadnici lat/long získáte nejsnadněji tak, že kliknete pravým tlačítkem na cíl v Mapách Google (maps.google.com) a zvolíte „Co je tady?“. Tím se do vyhledávacího pole vloží přesné hodnoty

*/

neplatné nastavení () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS příklad 3");

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

Serial.println ("od Mikala Harta");

Serial.println ();

}

prázdná smyčka () {

// Pokud nějaké znaky dorazily z GPS, // pošlete je do objektu TinyGPS ++ while (ss.available ()> 0) gps.encode (ss.read ());

// Každých 5 sekund proveďte aktualizaci

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Zjistěte náš aktuální 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;

// ladění 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 metrů od cíle? Byli zde

if (distanceToDestination <= 20,0)

{Serial.println ("GRATULUJEME: Přijeli jste!");

výstup (1);

}

Serial.print ("VZDÁLENOST:"); Serial.print (distanceToDestination);

Serial.println („metry do konce.“);

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

// Stát v klidu? Stačí naznačit, kterým směrem se vydat

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

{

Serial.print ("Hlava");

Serial.print (directionToDestination);

Serial.println (".");

vrátit se;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Pokračujte rovně!");

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

Serial.println („Zatočte mírně doleva.“);

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

Serial.println („Zatočte mírně doprava.“);

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

Serial.println ("Otočte se doleva.");

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

Serial.println („Otočit doprava.“);

jiný

Serial.println („Otoč se úplně.“);

}

}

Každých 5 sekund kód zachytí polohu a směr uživatele (směr jízdy) a vypočítá směr (směr k cíli) pomocí metody TinyGPS ++ courseTo (). Porovnání těchto dvou vektorů vygeneruje návrh, zda jet rovně nebo zatočit, jak je uvedeno níže.

Zkopírujte skicu FindingYourWay.ino (výše) a vložte ji do Arduino IDE. Nastavte cíl 1 km nebo 2 km, nahrajte skicu do svého Arduina, spusťte jej na notebooku a zjistěte, zda vás tam dovede. Ale co je důležitější, prostudujte si kód a pochopte, jak funguje.

Krok 9: Jít dále

Tvůrčí potenciál GPS je obrovský. Jednou z nejuspokojivějších věcí, které jsem kdy vyrobil, byl logický box s podporou GPS, který se otevírá pouze na jednom předem naprogramovaném místě. Pokud vaše oběť chce dostat poklad zamknutý dovnitř, musí zjistit, kde je to tajné místo, a fyzicky tam přinést krabici. Populární myšlenkou prvního projektu je nějaký druh zařízení pro protokolování, které zaznamenává polohu za minutu a nadmořskou výšku, řekněme, turisty, který kráčí po Trans-Pennine Trail. Nebo co jeden z těch záludných magnetických sledovačů, kteří agenti DEA v Breaking Bad drží na autech padouchů? Oba jsou zcela proveditelné a pravděpodobně by bylo zábavné stavět, ale doporučuji vám přemýšlet expanzivněji nad rámec věcí, které si již můžete koupit na Amazonu. Venku je velký svět. Toulejte se tak široko daleko, jak jen můžete.

Doporučuje: