Tartalomjegyzék:

Útkeresés a GPS segítségével: 9 lépés
Útkeresés a GPS segítségével: 9 lépés

Videó: Útkeresés a GPS segítségével: 9 lépés

Videó: Útkeresés a GPS segítségével: 9 lépés
Videó: A kémműholdaktól a jármű-navigációig 2024, November
Anonim
Útkeresés a GPS segítségével
Útkeresés a GPS segítségével

Gyors gyakorlat a GPS -adatok megértésében és alkalmazásában

  • Szükséges idő: 2 óra
  • Ára: 75-150 dollár

A gyártók számára meglehetősen olcsó lett a kiváló minőségű térinformatikai adatok beépítése az elektronikai projektekbe. És az elmúlt néhány évben a GPS (Global Positioning System) vevőmodulok sokkal változatosabbak, hatékonyabbak és könnyen integrálhatók az olyan fejlesztői táblákkal, mint az Arduino, a PIC, a Teensy és a Raspberry Pi. Ha a GPS köré épített, akkor jó időt választott a kezdéshez.

1. lépés: Hogyan működik?

A GPS modul egy apró rádióvevő, amely műholdak flottája által ismert frekvenciákon sugárzott jeleket dolgozza fel. Ezek a műholdak nagyjából körpályán keringnek a Föld körül, és rendkívül pontos helyzet- és óraadatokat továbbítanak az alatta lévő földre. Ha a földhöz kötött vevő elég „lát” ezekből a műholdakból, akkor ezek segítségével kiszámíthatja saját helyét és magasságát.

Amikor GPS -üzenet érkezik, a vevő először megvizsgálja a sugárzás időbélyegét, hogy lássa, mikor küldték. Mivel a rádióhullám sebessége az űrben ismert állandó (c), a vevő összehasonlíthatja a sugárzási és vételi időket, hogy meghatározza a jel megtett távolságát. Miután megállapította távolságát négy vagy több ismert műholdtól, saját pozíciójának kiszámítása a 3D háromszögelés meglehetősen egyszerű problémája. Ahhoz azonban, hogy ezt gyorsan és pontosan megtehesse, a vevőnek képesnek kell lennie arra, hogy fürgén letörje a számokat akár 20 adatfolyamból egyszerre. Mivel a GPS rendszer közzétett célja, hogy mindenhol használható legyen a Földön, a rendszernek biztosítania kell, hogy legalább négy műhold - lehetőleg több - mindig látható a földgolyó minden pontjáról. Jelenleg 32 GPS műhold végez aprólékosan koreografált táncot egy ritka, 20 000 kilométer magas felhőben.

2. lépés: Fan Fact

A GPS nem működhetne Einstein relativitáselmélete nélkül, mivel kompenzálni kell azokat a 38 mikroszekundumokat, amelyeket a keringő atomórák minden nap nyernek a Föld gravitációs mezőjének időbeli tágulása miatt.

3. lépés: Első lépések

Elkezdeni
Elkezdeni

Bármi legyen is a projektje, a GPS egyszerűen integrálható. A legtöbb vevőmodul egyszerű soros protokollal kommunikál, így ha talál egy tartalék soros portot a vezérlőpanelen, akkor csak néhány vezeték kell a fizikai kapcsolat létrehozásához. És ha nem is, a legtöbb vezérlő támogatja az emulált „szoftveres” soros módot, amellyel tetszőleges tűkhöz csatlakozhat.

Kezdőknek az Adafruit Ultimate GPS Breakout modulja jó választás. Sok versenytárs termék van a piacon, de az Ultimate szilárd teljesítményt nyújt elfogadható áron, nagy átmenő lyukakkal, amelyek könnyen forraszthatók vagy csatlakoztathatók a kenyérsütő táblához.

Először csatlakoztassa a földet és az áramot. Arduino kifejezéssel ez azt jelenti, hogy az egyik mikrokontroller GND csatlakozót a modul GND -jéhez, a +5 V -os csatlakozót pedig a modul VIN -hez kell csatlakoztatni. Az adatátvitel kezeléséhez a modul TX és RX csapjait is csatlakoztatnia kell az Arduino -hoz. Ebből a célból önkényesen kiválasztom az Arduino 2 -es (TX) és 3 -as (RX) érintkezőit, még akkor is, ha a 0 -as és 1 -es csapokat kifejezetten „hardveres soros portként” vagy UART -ként tervezték. Miért? Mert nem akarom elpazarolni az egyetlen UART-ot, amellyel ezek az alacsony minőségű AVR processzorok rendelkeznek. Az Arduino UART-ja keményen van csatlakoztatva az alaplapi USB-csatlakozóhoz, és szeretem a számítógéphez csatlakoztatni a hibakereséshez.

4. lépés: Lábujj az adatfolyamban

Lábujj az adatfolyamban
Lábujj az adatfolyamban

A tápfeszültség bekapcsolása után a GPS modul elkezdi a szöveges adatdarabok küldését a TX vonalára. Lehet, hogy még nem lát egyetlen műholdat, még kevésbé van „javítása”, de az adatcsap azonnal bekapcsol, és érdekes látni, mi jön ki. Az első egyszerű vázlatunk (alább) nem tesz mást, csak megjeleníti ezeket a feldolgozatlan adatokat.

#tartalmazza #define RXPin 2

#define TXPin 3#define GPSBaud 4800

#define ConsoleBaud 115200

// A soros kapcsolat a GPS -eszközzelSoftwareSerial ss (RXPin, TXPin);

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("1. GPS -példa");

Serial.println ("A GPS modul által továbbított nyers NMEA adatok megjelenítése.");

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

}

üres hurok ()

{if (ss.available ()> 0) // Ahogy minden karakter megérkezik…

Soros.írás (ss.read ()); //… írja be a konzolra

}

MEGJEGYZÉS: A vázlat a fogadócsapot (RXPin) 2 -ként határozza meg, annak ellenére, hogy korábban azt mondtuk, hogy az átviteli (TX) érintkezőt a 2 -es tűhöz kell csatlakoztatni. Ez gyakori zűrzavar. Az RXPin a fogadócsap (RX) az Arduino szempontjából. Természetesen a modul átviteli (TX) csatlakozójához kell csatlakoztatni, és fordítva.

Töltse fel ezt a vázlatot, és nyissa meg a Soros monitort 115, 200 baud sebességgel. Ha minden működik, akkor sűrű, végtelen vesszővel elválasztott szöveges karakterláncot kell látnia. Mindegyik úgy fog kinézni, mint a második kép a bekezdés elején.

Ezeket a megkülönböztető karakterláncokat NMEA mondatoknak nevezik, úgynevezett azért, mert a formátumot a Nemzeti Tengeri Elektronikai Szövetség találta ki. Az NMEA számos ilyen mondatot határoz meg a navigációs adatokhoz, az alapvető (hely és idő) és az ezoterikus (műholdas jel-zaj arány, mágneses szórás stb.) Között. A gyártók nem egységesek abban, hogy a vevők mely mondattípusokat használnak, de a GPRMC elengedhetetlen. Miután a modul javítást kapott, szép számú GPRMC mondatot kell látnia.

5. lépés: Találd meg önmagad

Nem triviális a nyers modul kimenetét a program által ténylegesen használható információkká alakítani. Szerencsére vannak olyan nagyszerű könyvtárak, amelyek ezt meg tudják tenni az Ön számára. Limor Fried népszerű Adafruit GPS könyvtára kényelmes választás, ha a végső kitörést használja. Úgy van megírva, hogy lehetővé tegye az Ultimate egyedi funkcióit (például a belső adatnaplózást), és hozzáad egy csipetnyi csengőt és sípot. A kedvenc elemző könyvtárom azonban - és itt természetesen teljesen elfogulatlan vagyok - az, amit TinyGPS ++ néven írtam. Úgy terveztem, hogy átfogó, erőteljes, tömör és könnyen használható legyen. Vegyük egy körre.

6. lépés: Kódolás a TinyGPS ++ segítségével

A programozó szemszögéből a TinyGPS ++ használata nagyon egyszerű:

1) Hozzon létre egy gps objektumot.

2) A modulból érkező minden karaktert a gps.encode () használatával irányítsa el az objektumhoz.

3) Ha tudnia kell pozícióját, magasságát, idejét vagy dátumát, egyszerűen kérdezze le a gps objektumot.

#befoglalni #befoglalni

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// A soros kapcsolat a GPS -eszközzelSoftwareSerial ss (RXPin, TXPin);

// A TinyGPS ++ objektum

TinyGPSPlus gps;

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS 2. példa");

Serial.println ("Egy egyszerű nyomkövető a TinyGPS ++ segítségével.");

Serial.println ("Mikal Hart");

Sorozat.println ();

}

void loop () {

// Ha bármilyen karakter érkezett a GPS -ből, /

/ küldje el őket a TinyGPS ++ objektumnak

míg (ss.available ()> 0)

gps.encode (ss.read ());

// Jelenítsük meg az új helyet és magasságot

// amikor bármelyikük frissült

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

{

Serial.print ("Hely:");

Soros.nyomtatás (gps.location.lat (), 6);

Serial.print (",");

Soros.nyomtatás (gps.location.lng (), 6);

Serial.print ("Magasság:");

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

}

}

Második alkalmazásunk folyamatosan megjeleníti a vevő helyét és magasságát, a TinyGPS ++ segítségével segít az elemzésben. Valódi eszközön naplózhatja ezeket az adatokat egy SD -kártyára, vagy megjelenítheti egy LCD -n. Fogja meg a könyvtárat, és vázolja fel a FindingYourself.ino (fent) vázlatát. Telepítse a könyvtárat, mint általában, az Arduino könyvtárak mappába. Töltse fel a vázlatot az Arduino készülékére, és nyissa meg a Soros monitort 115, 200 baud sebességgel. Látnia kell, hogy a tartózkodási helye és a magassága valós időben frissül. Ha pontosan látni szeretné, hol tart, illessze be a kapott szélességi/hosszúsági koordináták egy részét a Google Térképbe. Most csatlakoztassa a laptopját, és sétáljon egyet. (De ne felejtse el, hogy a szemét az úton tartsa!)

7. lépés: A "NEGYEDIK MÉRET"

Ha a GPS-t az űrben található helyzettel társítjuk, ne felejtsük el, hogy ezek a műholdak idő- és adatbélyegeket is továbbítanak. Az átlagos GPS-óra másodperc tízmilliomod része, és az elméleti határ még magasabb. Még akkor is, ha a projektre csak az idő nyomon követésére van szüksége, a GPS modul továbbra is a legolcsóbb és legegyszerűbb megoldás.

Ha a FindingYourself.ino-t szuperpontos órává szeretné változtatni, csak az utolsó néhány sort módosítsa így:

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "Az idő%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Soros.println (buf);

}

8. lépés: Találja meg az utat

Útkeresés
Útkeresés

Harmadik és egyben utolsó alkalmazásunk egy személyes kihívás eredménye, amely egy olvasható TinyGPS ++ vázlatot ír le kevesebb, mint 100 kódsorban, amely egyszerű szöveges utasítások, például „egyenesen tartás” vagy „balra kanyarodás” segítségével elvezeti a célt.

#befoglalni #befoglalni

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// A soros kapcsolat a GPS -eszközzelSoftwareSerial ss (RXPin, TXPin);

// A TinyGPS ++ objektum TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438

/* Ez a példa egy alapvető keretet mutat be arra vonatkozóan, hogyan használhatja a pályát és a távolságot egy személy (vagy drón) célba vezetéséhez. Ez az úticél az Eiffel -torony. Szükség szerint változtassa meg

A lat/hosszú koordináta legegyszerűbb módja, ha a jobb egérgombbal kattint a célhelyre a Google Térképen (maps.google.com), és kiválasztja a "Mi van itt?" Lehetőséget. Ezzel a pontos értékeket a keresőmezőbe helyezi

*/

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS 3. példa");

Serial.println ("Nem túl átfogó irányítási rendszer");

Serial.println ("Mikal Hart");

Sorozat.println ();

}

void loop () {

// Ha bármilyen karakter érkezett a GPS -ből, // küldje el őket a TinyGPS ++ objektumra, miközben (ss.available ()> 0) gps.encode (ss.read ());

// 5 másodpercenként frissítsen

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Sorozat.println ();

// Jelenlegi állapotunk megállapítása

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;

// debug Serial.print ("DEBUG: Course2Dest:");

Serial.print (courseToDestination);

Serial.print ("Kurzus:");

Soros.nyomtatás (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

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

// 20 méteren belül a célállomástól? Itt voltak

if (distanceToDestination <= 20,0)

{Serial.println ("GRATULÁLOK: Megérkeztél!");

kijárat (1);

}

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

Serial.println ("méter hátra.");

Serial.print ("UTASÍTÁS:");

// Mozdulatlanul állni? Csak jelezze, melyik irányba kell menni

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

{

Serial.print ("Fej");

Serial.print (directionToDestination);

Soros.println (".");

Visszatérés;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Folytasd egyenesen!");

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

Serial.println ("Veer kissé balra.");

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

Serial.println ("Veer kissé jobbra.");

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

Serial.println ("Forduljon balra.");

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

Serial.println ("Forduljon jobbra.");

más

Serial.println ("Fordulj meg teljesen.");

}

}

A kód 5 másodpercenként rögzíti a felhasználó tartózkodási helyét és irányát (haladási irány), és a TinyGPS ++ courseTo () módszerrel kiszámítja az irányt (irány a cél felé). A két vektor összehasonlítása azt javasolja, hogy folytassa egyenesen vagy kanyarodást, amint az alább látható.

Másolja a FindingYourWay.ino vázlatot (fent), és illessze be az Arduino IDE -be. Állítson be egy úti célt 1 km -re vagy 2 km -re, töltse fel a vázlatot az Arduino készülékére, futtassa laptopján, és nézze meg, hogy elvezet -e oda. De ami még fontosabb, tanulmányozza a kódot, és értse meg, hogyan működik.

9. lépés: Továbblépés

A GPS kreatív potenciálja hatalmas. Az egyik legmegfelelőbb dolog, amit valaha készítettem, egy GPS-képes rejtvénydoboz volt, amely csak egy előre programozott helyen nyílik meg. Ha áldozata be akarja zárni a kincset, ki kell találnia, hol van az a titkos hely, és fizikailag oda kell hoznia a dobozt. A népszerű első projektötlet egyfajta naplózó eszköz, amely rögzíti mondjuk a Trans-Pennine Trail-en sétáló túrázó percenkénti helyzetét és magasságát. Vagy mi van azokkal az aljas mágneses nyomkövetőkkel, amelyeket a DEA ügynökei a Breaking Bad -ben ragaszkodnak a rosszfiúk autójához? Mindkettő teljes mértékben megvalósítható, és valószínűleg szórakoztató lenne megépíteni, de bátorítalak benneteket arra, hogy gondolkodjatok tágabban, azon túl, amit már megvásárolhattok az Amazon -on. Ez egy nagy világ odakint. Barangoljon, amennyire csak tud.

Ajánlott: