Obsah:
- Krok 1: Jak to funguje
- Krok 2: Faktor ventilátoru
- Krok 3: Začínáme
- Krok 4: Špička v datovém proudu
- Krok 5: Nalezení sebe sama
- Krok 6: Kódování pomocí TinyGPS ++
- Krok 7: „ČTVRTÝ ROZMĚR“
- Krok 8: Hledání cesty
- Krok 9: Jít dále
Video: Hledání cesty s GPS: 9 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
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
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
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
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:
Pomocí rozšíření Hope's Chest k vyhledání neúplné chrámové obřadní práce ve vašem rodokmenu při hledání rodiny: 11 kroků
Použití rozšíření Hope's Chest k vyhledání neúplné chrámové obřadní práce v rámci vašeho rodokmenu při hledání rodiny: Účelem tohoto instruktážního programu je ukázat, jak pomocí rodokmenu Hope's Chest vyhledat rodokmen ve službě Family Search pro předky s neúplnou prací na chrámové obřadě. Použití Hope's Chest může výrazně urychlit vaše hledání nekomp
ActoKids: nový způsob hledání aktivit: 11 kroků
ActoKids: nový způsob hledání aktivit: Je důležité udržovat děti všech věkových kategorií a schopností aktivní a zapojené do jejich komunit. Účast na aktivitách pomáhá dětem zůstat zdravé, navazovat přátelství, rozvíjet dovednosti a rozvíjet kreativitu. Nalezení informací o
Při hledání efektivity .: 9 kroků
Při hledání efektivity .: BUCK Converter na " DPAK " Velikost.Obvykle elektronický začátečník nebo kutil potřebuje regulátor napětí v desce s plošnými spoji tištěný nebo na desce. Bohužel pro jednoduchost používáme lineární regulátor napětí, ale neexistují
Jak postavit parkovací senzor, abyste vyřešili bolest při hledání volného místa: 12 kroků
Jak postavit parkovací senzor, abychom vyřešili bolest při hledání volného místa: V tomto projektu postavíme jednoduchý parkovací senzor pomocí Raspberry Pi. Ukazuje se, že každé ráno musím čelit této otázce: je již POUZE parkovací místo před mojí kanceláří obsazeno? Protože když to ve skutečnosti je, musím jít kolem
Hledání min: 5 kroků (s obrázky)
Hledání min: Pro náš finální projekt CPE 133 jsme se s Chase rozhodli vytvořit ‘ Minesweeper ’ hra, která využívala vstup tlačítek a přepínačů z desky Basys-3 a také kód VHDL. Lepším názvem hry by mohla být velmi dobře ’ ruská ruleta & rsqu