Kazalo:
- 1. korak: Kako deluje
- 2. korak: Fan Fact
- 3. korak: Začnite
- 4. korak: Prst v toku podatkov
- 5. korak: Najti sebe
- 6. korak: Kodiranje s programom TinyGPS ++
- 7. korak: "ČETRTA DIMENZIJA"
- 8. korak: Iskanje poti
- 9. korak: Nadaljujte
Video: Iskanje poti z GPS: 9 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:06
Hitra vaja pri razumevanju in uporabi podatkov GPS
- Potreben čas: 2 uri
- Cena: 75-150 USD
Za proizvajalce je postalo precej poceni vključevanje visokokakovostnih geoprostorskih podatkov v elektronske projekte. In v zadnjih nekaj letih so sprejemniški moduli GPS (Global Positioning System) postali veliko bolj raznoliki, močni in enostavni za integracijo z razvojnimi ploščami, kot so Arduino, PIC, Teensy in Raspberry Pi. Če ste razmišljali o gradnji okoli GPS -a, ste za začetek izbrali pravi čas.
1. korak: Kako deluje
Modul GPS je majhen radijski sprejemnik, ki obdeluje signale, ki jih na znanih frekvencah oddaja flota satelitov. Ti sateliti se vrtijo okoli Zemlje po približno krožnih orbitah in na tla spodaj prenašajo izredno natančne podatke o položaju in uri. Če zemeljski sprejemnik lahko "vidi" dovolj teh satelitov, jih lahko uporabi za izračun lastne lokacije in nadmorske višine.
Ko prispe sporočilo GPS, sprejemnik najprej pregleda časovni žig oddaje, da ugotovi, kdaj je bilo poslano. Ker je hitrost radijskega vala v vesolju znana konstanta (c), lahko sprejemnik primerja čas oddajanja in sprejema, da določi razdaljo, ki jo je signal prehodil. Ko določi svojo razdaljo od štirih ali več znanih satelitov, je izračun lastnega položaja dokaj preprost problem 3D triangulacije. Če pa želite to narediti hitro in natančno, mora sprejemnik hitro spremeniti številke iz največ 20 podatkovnih tokov hkrati. Ker ima sistem GPS objavljen cilj, da je uporaben povsod na Zemlji, mora sistem zagotoviti, da imajo vsaj štirje sateliti - po možnosti več - so vedno vidne z vseh točk na svetu. Trenutno obstaja 32 satelitov GPS, ki izvajajo natančno koreografiran ples v redkem oblaku, visokem 20 000 kilometrov.
2. korak: Fan Fact
GPS ne bi mogel delovati brez Einsteinove teorije relativnosti, saj je treba kompenzirati 38 mikrosekund, ki jih atomske ure v orbiti vsak dan pridobijo zaradi časovnega razmika v gravitacijskem polju Zemlje.
3. korak: Začnite
Ne glede na vaš projekt je GPS preprosto integrirati. Večina sprejemnih modulov komunicira z enostavnim serijskim protokolom, zato, če na nadzorni plošči najdete rezervna serijska vrata, bo za vzpostavitev fizične povezave potrebnih le nekaj žic. Tudi če ne, večina krmilnikov podpira emuliran "programski" serijski način, ki ga lahko uporabite za povezavo z poljubnimi zatiči.
Za začetnike je Adafruitov modul Ultimate GPS Breakout dobra izbira. Na trgu je veliko konkurenčnih izdelkov, vendar je Ultimate trden izvajalec po razumni ceni, z velikimi luknjami, ki jih je enostavno spajkati ali povezati na ploščo.
Najprej priključite ozemljitev in napajanje. V smislu Arduina to pomeni priključitev enega od nožic GND mikrokrmilnika na GND modula in +5V pin na VIN modula. Za upravljanje prenosa podatkov morate na Arduino povezati tudi zatiče TX in RX modula. V ta namen bom poljubno izbral nožice Arduino 2 (TX) in 3 (RX), čeprav sta nožici 0 in 1 posebej zasnovani za uporabo kot "serijska vrata strojne opreme" ali UART. Zakaj? Ker nočem zapraviti edinega UART-a, ki ga imajo ti nizko kakovostni AVR procesorji. Arduinov UART je trdno povezan z vgrajenim USB priključkom in rad bi bil povezan z računalnikom za odpravljanje napak.
4. korak: Prst v toku podatkov
Takoj, ko vključite napajanje, začne modul GPS pošiljati kose besedilnih podatkov v liniji TX. Morda še ne vidi niti enega satelita, še manj pa ima "popravilo", vendar se pipa za podatke takoj vklopi in zanimivo je videti, kaj pride ven. Naša prva preprosta skica (spodaj) ne prikazuje nič drugega kot prikaz teh neobdelanih podatkov.
#include #define RXPin 2
#define TXPin 3#define GPSBaud 4800
#define ConsoleBaud 115200
// Zaporedna povezava z napravo GPSSoftwareSerial ss (RXPin, TXPin);
void setup () {
Serial.begin (ConsoleBaud);
ss.začetek (GPSBaud);
Serial.println ("Primer GPS 1");
Serial.println ("Prikaz surovih podatkov NMEA, ki jih posreduje modul GPS.");
Serial.println ("avtor Mikal Hart"); Serial.println ();
}
void loop ()
{if (ss.available ()> 0) // Ko pride vsak znak …
Serial.write (ss.read ()); //… zapišite v konzolo
}
OPOMBA: Skica definira sprejemni pin (RXPin) kot 2, čeprav smo že povedali, da bo oddajni (TX) pin priključen na pin 2. To je pogost vir zmede. RXPin je sprejemni pin (RX) z vidika Arduina. Seveda mora biti povezan z oddajnikom (TX) modula in obratno.
Naložite to skico in odprite serijski monitor pri 115, 200 baud. Če vse deluje, bi morali videti gost, neskončen tok besedilnih nizov, ločenih z vejicami. Vsak bo videti kot druga slika na začetku odstavka.
Ti značilni nizi so znani kot stavki NMEA, tako imenovani, ker je obliko izumilo Nacionalno združenje za pomorsko elektroniko. NMEA opredeljuje številne te stavke za navigacijske podatke, od bistvenih (lokacija in čas) do ezoteričnih (razmerje med satelitskim signalom in šumom, magnetno variacijo itd.). Proizvajalci niso dosledni glede vrst stavkov, ki jih uporabljajo njihovi sprejemniki, vendar je GPRMC bistvenega pomena. Ko bo vaš modul popravljen, bi morali videti precej število teh stavkov GPRMC.
5. korak: Najti sebe
Pretvoriti izhod surovega modula v informacije, ki jih program dejansko lahko uporablja, ni nepomembno. Na srečo je za to že na voljo nekaj odličnih knjižnic. Priljubljena knjižnica Adafruit GPS Limorja Frieda je priročna izbira, če uporabljate njihov Ultimate breakdown. Napisano je za omogočanje edinstvenih funkcij za Ultimate (na primer notranje beleženje podatkov) in dodaja nekaj lastnih zvokov in piščal. Moja najljubša knjižnica za razčlenjevanje - in tukaj sem seveda popolnoma nepristranska - je tista, ki sem jo napisal z imenom TinyGPS ++. Oblikoval sem ga tako, da je celovit, zmogljiv, jedrnat in enostaven za uporabo. Vzemimo za spin.
6. korak: Kodiranje s programom TinyGPS ++
Z vidika programerja je uporaba TinyGPS ++ zelo preprosta:
1) Ustvarite objekt GPS.
2) Vsak znak, ki prispe iz modula, preusmerite v objekt s pomočjo gps.encode ().
3) Ko morate vedeti svoj položaj ali nadmorsko višino ali čas ali datum, preprosto poizvedite predmet GPS.
#include #include
#define RXPin 2
#define TXPin 3
#define GPSBaud 4800
#define ConsoleBaud 115200
// Zaporedna povezava z napravo GPSSoftwareSerial ss (RXPin, TXPin);
// Objekt TinyGPS ++
TinyGPSPlus gps;
void setup () {
Serial.begin (ConsoleBaud);
ss.začetek (GPSBaud);
Serial.println ("Primer 2 GPS");
Serial.println ("Preprost sledilnik, ki uporablja TinyGPS ++.");
Serial.println ("avtor Mikal Hart");
Serial.println ();
}
void loop () {
// Če so iz GPS prispeli znaki, /
/ jih pošljite v objekt TinyGPS ++
medtem ko (ss.available ()> 0)
gps.encode (ss.read ());
// Prikažimo novo lokacijo in nadmorsko višino
// kadar koli je bil kateri od njih posodobljen
if (gps.location.isUpdated () || gps.altitude.isUpdated ())
{
Serial.print ("Lokacija:");
Serijski.tisk (gps.location.lat (), 6);
Serial.print (",");
Serial.print (gps.location.lng (), 6);
Serial.print ("Nadmorska višina:");
Serial.println (gps.altitude.meters ());
}
}
Naša druga aplikacija nenehno prikazuje lokacijo in nadmorsko višino sprejemnika z uporabo TinyGPS ++ za pomoč pri razčlenjevanju. V resnični napravi lahko te podatke zabeležite na kartico SD ali jih prikažete na LCD -prikazovalniku. Zgrabi knjižnico in skiciraj FindingYourself.ino (zgoraj). Knjižnico, kot običajno, namestite v mapo knjižnic Arduino. Skico naložite v svoj Arduino in odprite Serijski monitor pri 115, 200 baud. V realnem času bi morali videti svojo lokacijo in nadmorsko višino. Če želite natančno videti, kje stojite, prilepite nekaj nastalih koordinat zemljepisne širine/dolžine v Google Zemljevide. Zdaj priključite prenosni računalnik in pojdite na sprehod ali vožnjo. (Ampak ne pozabite, da bodite pozorni na cesto!)
7. korak: "ČETRTA DIMENZIJA"
Čeprav GPS povezujemo z lokacijo v vesolju, ne pozabite, da tudi ti sateliti oddajajo časovni in datumski žig. Povprečna ura GPS je natančna do ene desetmilijone sekunde, teoretična meja pa je še višja. Tudi če vaš projekt potrebujete le za spremljanje časa, je lahko modul GPS še vedno najcenejša in najlažja rešitev.
Če želite FindingYourself.ino spremeniti v zelo natančno uro, samo spremenite zadnjih nekaj vrstic:
if (gps.time.isUpdated ()) {{100} {101}
char buf [80];
sprintf (buf, "Čas je%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);
}
8. korak: Iskanje poti
Naša tretja in zadnja aplikacija je rezultat osebnega izziva pisanja berljive skice TinyGPS ++ v manj kot 100 vrsticah kode, ki bi uporabnika vodila do cilja s preprostimi besedilnimi navodili, kot sta »drži naravnost« ali »zavij levo«.
#include #include
#define RXPin 2
#define TXPin 3
#define GPSBaud 4800
#define ConsoleBaud 115200
// Zaporedna povezava z napravo GPSSoftwareSerial ss (RXPin, TXPin);
// objekt TinyGPS ++ TinyGPSPlus gps;
unsigned long lastUpdateTime = 0;
#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438
/* Ta primer prikazuje osnovni okvir, kako lahko uporabite smer in razdaljo za vodenje osebe (ali drona) do cilja. Ta cilj je Eifflov stolp. Po potrebi ga spremenite
Najlažji način, da dobite koordinato širine/dolžine, je, da z desno miškino tipko kliknete cilj v Google Zemljevidih (maps.google.com) in izberete »Kaj je tukaj?«. To vnese iskalne vrednosti v iskalno polje
*/
void setup () {
Serial.begin (ConsoleBaud);
ss.začetek (GPSBaud);
Serial.println ("Primer GPS 3");
Serial.println ("Ne tako celovit sistem vodenja");
Serial.println ("avtor Mikal Hart");
Serial.println ();
}
void loop () {
// Če so iz GPS prispeli znaki, jih // pošljite v objekt TinyGPS ++, medtem ko (ss.available ()> 0) gps.encode (ss.read ());
// Posodobi vsakih 5 sekund
if (millis () - lastUpdateTime> = 5000)
{
lastUpdateTime = millis ();
Serial.println ();
// Vzpostavimo trenutno stanje
dvojna distanceToDestination = TinyGPSPlus:: distanceBetween
gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);
dvojni courseToDestination = TinyGPSPlus:: courseTo
gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);
const char *directionToDestination = TinyGPSPlus:: kardinal (courseToDestination);
int courseChangeNeeded = (int) (360 + courseToDestination - gps.course.deg ()) % 360;
// odpravljanje napak 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 ());
// V 20 metrih od cilja? So bili tukaj
če (distanceToDestination <= 20,0)
{Serial.println ("ČESTITKE: Prispeli ste!");
izhod (1);
}
Serial.print ("DISTANCE:"); Serial.print (distanceToDestination);
Serial.println ("meter to go.");
Serial.print ("NAVODILO:");
// Stojiš pri miru? Samo navedite, v katero smer morate iti
if (gps.speed.kmph () <2.0)
{
Serial.print ("glava");
Serial.print (directionToDestination);
Serial.println (".");
vrnitev;
}
if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Nadaljujte naravnost!");
sicer če (courseChangeNeeded> = 315 && courseChangeNeeded <345)
Serial.println ("Rahlo v levo.");
sicer če (courseChangeNeeded> = 15 && courseChangeNeeded <45)
Serial.println ("Zavijte malo desno".);
sicer če (courseChangeNeeded> = 255 && courseChangeNeeded <315)
Serial.println ("Zavijte levo.");
sicer če (courseChangeNeeded> = 45 && courseChangeNeeded <105)
Serial.println ("Zavijte na desno.");
drugače
Serial.println ("Popolnoma se obrni.");
}
}
Koda vsakih 5 sekund zajame lokacijo in smer uporabnika (smer vožnje) ter izračuna metodo (smer do cilja) z uporabo metode TinyGPS ++ courseTo (). Primerjava obeh vektorjev daje predlog, da nadaljujete naravnost ali zavijete, kot je prikazano spodaj.
Kopirajte skico FindingYourWay.ino (zgoraj) in jo prilepite v Arduino IDE. Določite cilj 1 km ali 2 km stran, naložite skico v svoj Arduino, jo zaženite na prenosnem računalniku in preverite, ali vas bo tja vodila. Še pomembneje pa je, da preučite kodo in razumete, kako deluje.
9. korak: Nadaljujte
Ustvarjalni potencial GPS -a je ogromen. Ena najbolj zadovoljujočih stvari, ki sem jih kdaj naredil, je bila uganka z GPS-om, ki se odpre samo na enem vnaprej programiranem mestu. Če želi vaša žrtev zaklad zakleniti, mora ugotoviti, kje je ta skrivna lokacija, in fizično prinesti škatlo tja. Priljubljena prva zamisel o projektu je nekakšna naprava za beleženje, ki beleži iz minute v minuto položaj in nadmorsko višino, recimo, pohodnika, ki hodi po Transpeninski poti. Ali kaj pa eden od teh podlih magnetnih sledilcev, ki so jih agenti DEA v Breaking Bad prilepili na avtomobile slabih fantov? Oboje je povsem izvedljivo in verjetno bi bilo zabavno graditi, vendar vas spodbujam, da razmišljate bolj obsežno, poleg stvari, ki jih že lahko kupite na Amazonu. Zunaj je velik svet. Potujte čim dlje in širše.
Priporočena:
Robot za daljinsko iskanje in odstranjevanje z nadzorom gibanja: 5 korakov
Robot za daljinsko iskanje in odstranjevanje z nadzorom Leap Motion: Kot del moje prijave za Leap Motion #3D Jam sem bil navdušen nad izdelavo tega brezžičnega robota za iskanje/reševanje s kretnjami na osnovi Raspberry Pi. Ta projekt prikazuje in ponuja minimalističen primer, kako brezžične 3D ročne kretnje vplivajo na
Uporaba upanja na prsih za iskanje nepopolnega dela templja v družinskem drevesu pri družinskem iskanju: 11 korakov
Uporaba razširitve skrinje Hope's Chest za iskanje nepopolnega dela ureditve templja v vašem družinskem drevesu pri iskanju družine: Namen tega navodila je prikazati, kako poiskati svoje družinsko drevo v družinskem iskanju prednikov z nepopolnim tempeljskim odlokom z razširitvijo Hope's Chest. Uporaba Skrinje upanja lahko močno pospeši iskanje incomp
Ev3 Lego robot za prijemanje/iskanje: 7 korakov
Ev3 Lego Gripper/Finder Robot: Pozdravljeni! GrabBot je večnamenski robot, ki se rad vrti … Ko naleti na majhen predmet, ga dvigne in pripelje nazaj v začetni položaj
Iskanje Google na ESP32: 7 korakov
Iskanje Google na ESP32: V tej vadnici vam bom pokazal, kako iskati v Googlu z ESP32. Rezultat sam po sebi ni zelo uporaben, ker so rezultati iskanja na serijskem monitorju v računalniku, vendar je super narediti in pokazati moč ESP32. Koda lahko
Pripomoček blagajna za iskanje zaklada: 12 korakov
Gadget Cashe Post for Treasure Hunts: Greetings Treasure Hunters! Še eno v nizu orodij, ki jih uporabljam za ustvarjanje lova na zaklad, to je pripomoček za pripomočke iz PVC cevi. Kaj je blagajna za pripomočke? Beseda prihaja od naših prijateljev v svetu unovčevanja zemlje, da opišejo kraj za skrivanje