Tartalomjegyzék:
- 1. lépés: Hogyan működik?
- 2. lépés: Fan Fact
- 3. lépés: Első lépések
- 4. lépés: Lábujj az adatfolyamban
- 5. lépés: Találd meg önmagad
- 6. lépés: Kódolás a TinyGPS ++ segítségével
- 7. lépés: A "NEGYEDIK MÉRET"
- 8. lépés: Találja meg az utat
- 9. lépés: Továbblépés
Videó: Útkeresés a GPS segítségével: 9 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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
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
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
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:
LoRa GPS Tracker bemutató - LoRaWAN Dragino és TTN segítségével: 7 lépés
LoRa GPS Tracker bemutató | LoRaWAN Dragino -val és TTN -el: Hé, mi újság, srácok! Akarsh itt a CETech -től. Néhány projekt visszafelé megnéztük a Dragino LoRaWAN átjáróját. Különböző csomópontokat kötöttünk az átjáróhoz, és adatokat továbbítottunk a csomópontokról az átjáróhoz a TheThingsNetwork segítségével
Irányítsa a háztartási gépeket az Alexa segítségével az ESP8266 vagy az ESP32 segítségével: 8 lépés
Irányítsa a háztartási gépeket Alexa segítségével az ESP8266 vagy ESP32 segítségével: Hé, mi újság, srácok! Akarsh itt a CETech -től. Ez a projektem segíteni fog az életed megkönnyítésében, és úgy fogsz érezni magad, mint egy király, miután irányítottad a házban lévő eszközöket, csak parancsot adva Alexának. A legfontosabb dolog e
Ublox LEA 6h 02 GPS modul Arduino és Python segítségével: 4 lépés
Ublox LEA 6h 02 GPS -modul Arduino -val és Pythonnal: A GPS -modul illesztése Arduino UNO -val (vagy bármely más Arduino -eszközzel), valamint a szélesség és hosszúság kiszámítása a Python -ban írt alkalmazásablakban
GPS erdőtűz riasztórendszer Sim808 és Arduino Uno segítségével: 23 lépés (képekkel)
GPS erdőtűz -riasztó rendszer Sim808 és Arduino Uno segítségével: Üdvözöljük, hogy ebben a bejegyzésben látni fogjuk, hogyan lehet egy erdőtűz -érzékelő rendszert létrehozni szöveges üzenetben a baleset helyszínéről, köszönhetően a beépített gps sim808 modulnak, amit a DFRobot emberei adtak, látni fogjuk a forrást
A DeLorme Earthmate GPS LT-20 csatlakoztatása a Google Earth-hez a nagyszerű GPS nyomkövetési térképhez: 5 lépés
A DeLorme Earthmate GPS LT-20 csatlakoztatása a Google Earth-hez a nagyszerű GPS nyomkövetési térképhez: Megmutatom, hogyan csatlakoztathat GPS-eszközt a népszerű Google Earth programhoz a Google Earth Plus használata nélkül. Nincs nagy költségvetésem, így garantálhatom, hogy ez a lehető legolcsóbb lesz