Sadržaj:
- Korak 1: Kako to funkcionira
- Korak 2: Činjenica o obožavateljima
- Korak 3: Početak
- Korak 4: Prst u toku podataka
- Korak 5: Pronađite sebe
- Korak 6: Kodiranje pomoću TinyGPS ++
- Korak 7: "ČETVRTA DIMENZIJA"
- Korak 8: Pronađite svoj put
- Korak 9: Idite dalje
Video: Kako pronaći svoj put s GPS -om: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Brza vježba u razumijevanju i primjeni GPS podataka
- Potrebno vrijeme: 2 sata
- Cijena: 75-150 USD
Proizvođačima je postalo prilično jeftino uključivanje visokokvalitetnih geoprostornih podataka u elektroničke projekte. U posljednjih nekoliko godina, GPS (Global Positioning System) prijemnički moduli postali su mnogo raznovrsniji, moćniji i lakši za integraciju s razvojnim pločama poput Arduina, PIC, Teensy i Raspberry Pi. Ako ste razmišljali o izgradnji oko GPS -a, odabrali ste dobro vrijeme za početak.
Korak 1: Kako to funkcionira
GPS modul je mali radio prijemnik koji obrađuje signale koje emituje flota satelita na poznatim frekvencijama. Ovi sateliti kruže oko Zemlje po grubo kružnim orbitama, prenoseći izuzetno precizne podatke o položaju i satu na zemlju ispod. Ako zemaljski prijemnik može "vidjeti" dovoljno ovih satelita, može ih koristiti za izračunavanje vlastite lokacije i nadmorske visine.
Kada stigne GPS poruka, prijemnik prvo pregleda svoju vremensku oznaku emitiranja kako bi vidio kada je poslana. Budući da je brzina radio talasa u svemiru poznata konstanta (c), prijemnik može uporediti emitovanje i primanje kako bi odredio udaljenost koju je signal prešao. Nakon što utvrdi udaljenost od četiri ili više poznatih satelita, izračunavanje vlastite pozicije prilično je jednostavan problem 3D triangulacije. No, da bi to učinio brzo i precizno, prijemnik mora biti u stanju da okretno broji do 20 tokova podataka odjednom. Budući da GPS sistem ima objavljeni cilj da bude upotrebljiv svuda na Zemlji, sistem mora osigurati da najmanje četiri satelita - po mogućnosti više - vidljive su uvijek sa svih točaka na kugli zemaljskoj. Trenutno postoje 32 GPS satelita koji izvode pomno koreografiran ples u rijetkom oblaku visine 20 000 kilometara.
Korak 2: Činjenica o obožavateljima
GPS ne bi mogao funkcionirati bez Einsteinove teorije relativnosti, jer se mora kompenzirati 38 mikrosekundi koje atomski satovi u orbiti dobivaju svaki dan od vremenskog širenja u Zemljinom gravitacionom polju.
Korak 3: Početak
Bez obzira na vaš projekt, GPS je jednostavno integrirati. Većina prijemnih modula komunicira s jednostavnim serijskim protokolom, pa ako na svojoj kontrolnoj ploči možete pronaći rezervni serijski port, potrebno je samo nekoliko žica za fizičku vezu. Čak i ako nije, većina kontrolera podržava emulirani "softverski" serijski način rada koji možete koristiti za spajanje na proizvoljne pinove.
Za početnike, Adafruit -ov Ultimate GPS Breakout modul je dobar izbor. Na tržištu postoji mnogo konkurentnih proizvoda, ali Ultimate ima solidne performanse po razumnoj cijeni, s velikim otvorima koje je lako lemiti ili spojiti na matičnu ploču.
Prvo spojite uzemljenje i napajanje. U Arduino terminima, to znači povezivanje jednog od GND pinova mikrokontrolera na GND modula, a +5V pin na VIN modula. Za upravljanje prijenosom podataka također morate spojiti TX i RX pinove modula na Arduino. U tu svrhu ću proizvoljno odabrati Arduino pinove 2 (TX) i 3 (RX), iako su pinovi 0 i 1 posebno dizajnirani za upotrebu kao "hardverski serijski port" ili UART. Zašto? Zato što ne želim izgubiti jedini UART koji ovi jeftiniji AVR procesori imaju. Arduino UART je čvrsto povezan sa ugrađenim USB konektorom i volim ga držati povezanim sa računarom radi otklanjanja grešaka.
Korak 4: Prst u toku podataka
Čim uključite napajanje, GPS modul počinje slati komade tekstualnih podataka na svojoj TX liniji. Možda još ne vidi niti jedan satelit, a još manje ima "popravku", ali slavina za podatke se odmah uključuje i zanimljivo je vidjeti što će izaći. Naša prva jednostavna skica (ispod) ne prikazuje ništa osim prikaza ovih neobrađenih podataka.
#include #define RXPin 2
#define TXPin 3#define GPSBaud 4800
#define ConsoleBaud 115200
// serijska veza sa GPS uređajemSoftwareSerial ss (RXPin, TXPin);
void setup () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS primjer 1");
Serial.println ("Prikaz sirovih NMEA podataka koje prenosi GPS modul.");
Serial.println ("autor Mikal Hart"); Serial.println ();
}
void loop ()
{if (ss.available ()> 0) // Kako svaki znak stiže …
Serial.write (ss.read ()); //… upišite ga na konzolu
}
NAPOMENA: Skica definira prijemni pin (RXPin) kao 2, iako smo ranije rekli da će prijenosni (TX) pin biti spojen na pin 2. Ovo je uobičajeni izvor zabune. RXPin je prijemni pin (RX) sa Arduinovog gledišta. Naravno, mora biti spojen na prijenosni (TX) pin modula i obrnuto.
Otpremite ovu skicu i otvorite Serijski monitor na 115, 200 bauda. Ako sve funkcionira, trebali biste vidjeti gust, beskrajan niz tekstualnih nizova odvojenih zarezima. Svaki će izgledati nešto poput druge slike na početku odlomka.
Ovi prepoznatljivi nizovi poznati su kao NMEA rečenice, tako nazvani jer je format izmislila Nacionalna udruga pomorske elektronike. NMEA definira brojne ove rečenice za navigacijske podatke, od bitnih (lokacija i vrijeme), do ezoteričnih (omjer satelitskog signala i šuma, magnetska varijansa itd.). Proizvođači se ne slažu oko toga koje vrste rečenica koriste njihovi prijemnici, ali GPRMC je bitan. Kada vaš modul dobije ispravku, trebali biste vidjeti priličan broj ovih GPRMC rečenica.
Korak 5: Pronađite sebe
Nije trivijalno pretvoriti sirovi izlaz modula u informacije koje vaš program zapravo može koristiti. Srećom, već postoje neke sjajne biblioteke koje to mogu učiniti umjesto vas. Popularna Adafruit GPS biblioteka Limor Fried -a zgodan je izbor ako koristite njihov Ultimate napredak. Napisano je kako bi omogućilo funkcije jedinstvene za Ultimate (poput internog bilježenja podataka) i dodaje neke vlastite snažne melodije. Moja omiljena biblioteka za raščlanjivanje - ali ovdje sam naravno potpuno nepristrasna - je ona koju sam napisao pod nazivom TinyGPS ++. Dizajnirao sam ga da bude sveobuhvatan, snažan, sažet i jednostavan za upotrebu. Uzmimo to za spin.
Korak 6: Kodiranje pomoću TinyGPS ++
Sa stanovišta programera, korištenje TinyGPS ++ je vrlo jednostavno:
1) Kreirajte objekt GPS.
2) Usmjerite svaki znak koji stigne iz modula do objekta pomoću gps.encode ().
3) Kada trebate znati svoj položaj ili nadmorsku visinu ili vrijeme ili datum, jednostavno upitajte gps objekt.
#include #include
#define RXPin 2
#define TXPin 3
#define GPSBaud 4800
#define ConsoleBaud 115200
// serijska veza sa GPS uređajemSoftwareSerial ss (RXPin, TXPin);
// Objekat TinyGPS ++
TinyGPSPlus gps;
void setup () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS primjer 2");
Serial.println ("Jednostavan alat za praćenje koji koristi TinyGPS ++.");
Serial.println ("autor Mikal Hart");
Serial.println ();
}
void loop () {{100} {101}
// Ako su neki GPS likovi stigli, /
/ pošaljite ih na objekt TinyGPS ++
while (ss.available ()> 0)
gps.encode (ss.read ());
// Prikažimo novu lokaciju i nadmorsku visinu
// kad god je bilo koji od njih ažuriran
if (gps.location.isUpdated () || gps.altitude.isUpdated ())
{
Serial.print ("Lokacija:");
Serial.print (gps.location.lat (), 6);
Serial.print (",");
Serial.print (gps.location.lng (), 6);
Serial.print ("Visina:");
Serial.println (gps.altitude.meters ());
}
}
Naša druga aplikacija stalno prikazuje lokaciju i visinu prijemnika, koristeći TinyGPS ++ za pomoć pri raščlanjivanju. Na pravom uređaju ove podatke možete zapisati na SD karticu ili prikazati na LCD -u. Uzmite biblioteku i skicirajte FindingYourself.ino (gore). Biblioteku instalirajte, kao i obično, u mapu Arduino biblioteke. Prenesite skicu na svoj Arduino i otvorite Serijski monitor na 115, 200 bauda. Trebali biste vidjeti svoju lokaciju i nadmorsku visinu u stvarnom vremenu. Da vidite točno gdje stojite, zalijepite neke od rezultirajućih koordinata zemljopisne širine/dužine u Google karte. Sada priključite laptop i idite u šetnju ili vožnju. (Ali ne zaboravite držati oči na cesti!)
Korak 7: "ČETVRTA DIMENZIJA"
Iako povezujemo GPS s lokacijom u svemiru, ne zaboravite da i ti sateliti odašilju vremenske i datumske oznake. Prosječni GPS sat je tačan do jedne milionite sekunde, a teoretsko ograničenje je još veće. Čak i ako vam je vaš projekt potreban samo za praćenje vremena, GPS modul može biti najjeftinije i najjednostavnije rješenje.
Da biste FindingYourself.ino pretvorili u super precizan sat, samo promijenite posljednjih nekoliko redaka ovako:
if (gps.time.isUpdated ()) {{100} {101}
char buf [80];
sprintf (buf, "Vrijeme je%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);
}
Korak 8: Pronađite svoj put
Naša treća i posljednja aplikacija rezultat je osobnog izazova da napišete čitljivu skicu TinyGPS ++, u manje od 100 redova koda, koja bi vodila korisnika do odredišta pomoću jednostavnih tekstualnih uputa poput "drži pravo" ili "skrenite lijevo".
#include #include
#define RXPin 2
#define TXPin 3
#define GPSBaud 4800
#define ConsoleBaud 115200
// serijska veza sa GPS uređajemSoftwareSerial ss (RXPin, TXPin);
// Objekat TinyGPS ++ TinyGPSPlus gps;
unsigned long lastUpdateTime = 0;
#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438
/* Ovaj primjer prikazuje osnovni okvir za to kako možete koristiti kurs i udaljenost da biste vodili osobu (ili bespilotnu letjelicu) do odredišta. Ovo odredište je Ajfelov toranj. Promijenite ga prema potrebi
Najlakši način da dobijete geografsku širinu/širinu je da desnim tasterom miša kliknete na odredište u Google mapama (maps.google.com) i odaberete "Šta je ovdje?". Ovo stavlja tačne vrijednosti u okvir za pretraživanje
*/
void setup () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS primjer 3");
Serial.println ("Ne tako sveobuhvatan sistem navođenja");
Serial.println ("autor Mikal Hart");
Serial.println ();
}
void loop () {{100} {101}
// Ako su neki znakovi stigli s GPS -a, // pošaljite ih objektu TinyGPS ++ while (ss.available ()> 0) gps.encode (ss.read ());
// Svakih 5 sekundi ažurirajte
if (millis () - lastUpdateTime> = 5000)
{
lastUpdateTime = millis ();
Serial.println ();
// Uspostavimo naš trenutni status
dvostruka distanceToDestination = TinyGPSPlus:: distanceBetween
gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);
dvostruki 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;
// otklanjanje grešaka u 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 ());
// U krugu od 20 metara od odredišta? Ovdje smo
if (distanceToDestination <= 20.0)
{Serial.println ("ČESTITAMO: Stigli ste!");
izlaz (1);
}
Serial.print ("DISTANCE:"); Serial.print (distanceToDestination);
Serial.println ("metara do kraja.");
Serial.print ("UPUTSTVO:");
// Stojite mirno? Samo naznačite u kom smjeru da idete
if (gps.speed.kmph () <2.0)
{
Serial.print ("Head");
Serial.print (directionToDestination);
Serial.println (".");
return;
}
if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Samo naprijed!");
inače if (courseChangeNeeded> = 315 && courseChangeNeeded <345)
Serial.println ("Skrenite malo ulijevo.");
inače if (courseChangeNeeded> = 15 && courseChangeNeeded <45)
Serial.println ("Skrenite malo udesno.");
inače if (courseChangeNeeded> = 255 && courseChangeNeeded <315)
Serial.println ("Okrenite nalijevo.");
inače if (courseChangeNeeded> = 45 && courseChangeNeeded <105)
Serial.println ("Skrenite desno.");
else
Serial.println ("Potpuno se okreni.");
}
}
Svakih 5 sekundi kôd bilježi lokaciju i kurs korisnika (smjer putovanja) i izračunava smjer (smjer do odredišta), koristeći metodu TinyGPS ++ courseTo (). Poređenje dva vektora generira prijedlog da nastavite ravno ili skrenete, kao što je prikazano u nastavku.
Kopirajte skicu FindingYourWay.ino (gore) i zalijepite je u Arduino IDE. Postavite odredište udaljeno 1 km ili 2 km, prenesite skicu na svoj Arduino, pokrenite je na prijenosnom računaru i pogledajte hoće li vas tamo odvesti. Ali što je još važnije, proučite kôd i shvatite kako radi.
Korak 9: Idite dalje
Kreativni potencijal GPS -a je ogroman. Jedna od najzadovoljnijih stvari koje sam ikad napravio bila je kutija slagalica s GPS-om koja se otvara samo na jednoj unaprijed programiranoj lokaciji. Ako vaša žrtva želi zaključati blago unutra, mora otkriti gdje se nalazi ta tajna lokacija i fizički donijeti kutiju. Popularna prva projektna ideja je neka vrsta uređaja za bilježenje koji bilježi minutu po minutu položaj i nadmorsku visinu, recimo, planinara koji hoda Trans-Peninskom stazom. Ili šta je sa jednim od onih lukavih magnetnih tragača koje su agenti DEA -e u Breaking Badu zalijepili na automobile loših momaka? Obje su potpuno izvedive i vjerojatno bi ih bilo zabavno graditi, ali ohrabrujem vas da razmišljate opsežnije, osim stvari koje već možete kupiti na Amazonu. Tamo je veliki svet. Lutajte što dalje i šire.
Preporučuje se:
Napravite jednostavnog robota od stvari koje možete pronaći u svojoj kući (verzija na vrući točak): 5 koraka
Izrada jednostavnog robota od stvari koje možete pronaći u svojoj kući (verzija na vrući točak): Ova instrukcija će vam pokazati kako napraviti vrući točak koji ide sam od sebe i radi na baterije dvostruke A. Morat ćete koristiti samo stvari koje ćete najvjerojatnije pronaći u svojoj kući. Imajte na umu da ovaj robot vjerojatno neće ići ravno, a
Kako pronaći igle motora perilice rublja: 6 koraka
Kako pronaći igle motora perilice rublja: Pronalaženje iglica motora perilice rublja uz pomoć digitalnog multimetra. Potreban nam je multimetar u načinu rada za ispitivanje kontinuiteta i sličan univerzalni motor za pranje rublja poput onog na gornjoj slici. Mi ćemo počnite prvo vizualnim pregledom t
Kako pronaći izgubljeni Apple uređaj: 8 koraka
Kako locirati izgubljeni Apple uređaj: Ako ste ikada zaboravili svoj iPhone, evo jednostavnog rješenja za lociranje izgubljenog uređaja, uključujući i Apple računar. Ova instrukcija će detaljno opisati kako se koristi " Find My iPhone " aplikaciju tako da se više nikada ne morate pitati gdje
Kako pronaći IP adrese Ethernet uređaja?: 4 koraka
Kako pronaći IP adrese Ethernet uređaja ?: Ovom prilikom ćemo se pozabaviti problemom koji nam se dogodio kada je potrebno da dobijemo IP adresu Ethernet uređaja, to može biti računar, pametni telefon, PLC u našem slučaju može biti Arduino sa zaštitnim ethernetom, ESP8266 ili ESP32. Ako ne h
Kako pronaći svoj izgubljeni mobilni ili bežični telefon: 6 koraka
Kako pronaći svoj izgubljeni mobilni ili bežični telefon: Scenarij: I moja žena i ja imamo mobilne telefone. Više ne koristimo kućni telefon jer smo stalno u pokretu. Zašto plaćate za fiksni telefon koji rijetko koristite