Sadržaj:
- Korak 1: Kako to radi
- Korak 2: Činjenica obožavatelja
- Korak 3: Početak
- Korak 4: Prst u toku podataka
- Korak 5: Pronađite sebe
- Korak 6: Kodiranje pomoću TinyGPS ++
- 7. korak: "Č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 promjena: 2024-01-30 09:36
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čiti visokokvalitetne geoprostorne podatke u elektroničke projekte. U posljednjih nekoliko godina, GPS (Global Positioning System) prijemnički moduli postali su mnogo raznolikiji, moćniji i jednostavniji za integraciju s razvojnim pločama poput Arduina, PIC -a, Teensyja i Raspberry Pi -a. Ako ste razmišljali o izgradnji oko GPS -a, odabrali ste dobro vrijeme za početak.
Korak 1: Kako to radi
GPS modul je mali radio prijemnik koji obrađuje signale koje emitira na poznatim frekvencijama flota satelita. Ovi sateliti kruže oko Zemlje u približno kružnim orbitama, prenoseći izuzetno precizne podatke o položaju i satu dolje na tlo. Ako zemaljski prijemnik može "vidjeti" dovoljno ovih satelita, može ih upotrijebiti za izračunavanje vlastite lokacije i nadmorske visine.
Kad stigne GPS poruka, primatelj prvo pregleda svoju vremensku oznaku emitiranja kako bi vidio kada je poslana. Budući da je brzina radijskog vala u svemiru poznata konstanta (c), prijemnik može usporediti vrijeme emitiranja i primanja kako bi odredio udaljenost koju je signal prešao. Nakon što utvrdi svoju udaljenost od četiri ili više poznatih satelita, izračunavanje vlastitog položaja prilično je jednostavan problem 3D triangulacije. No, da bi to učinio brzo i precizno, prijemnik mora biti sposoban spretno skratiti brojeve iz do 20 tokova podataka odjednom. Budući da GPS sustav ima objavljeni cilj da bude upotrebljiv svugdje na Zemlji, sustav 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 obožavatelja
GPS ne bi mogao funkcionirati bez Einsteinove teorije relativnosti, jer se mora nadoknaditi 38 mikrosekundi koje atomski satovi u orbiti dobivaju svaki dan od vremenskog širenja u Zemljinom gravitacijskom 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 upravljačkoj 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, Adafruitov 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 provrtima koje je lako lemiti ili spojiti na 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 ću svrhu 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 imaju ovi jeftiniji AVR procesori. Arduino UART je čvrsto povezan s ugrađenim USB priključkom i volim ga držati spojenim na računalo radi otklanjanja pogreš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 dolazi odmah 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#definirati GPSBaud 4800
#define ConsoleBaud 115200
// serijska veza s GPS uređajemSoftwareSerial ss (RXPin, TXPin);
void setup () {
Serial.begin (ConsoleBaud);
ss.početak (GPSBaud);
Serial.println ("GPS primjer 1");
Serial.println ("Prikaz neobrađenih podataka NMEA -e koje prenosi GPS modul.");
Serial.println ("autor Mikal Hart"); Serial.println ();
}
void loop ()
{if (ss.available ()> 0) // Kad svaki znak stigne …
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) s Arduinovog gledišta. Naravno, mora biti spojen na prijenosni (TX) pin modula i obrnuto.
Prenesite ovu skicu i otvorite Serijski monitor na 115, 200 bauda. Ako sve radi, trebali biste vidjeti gust, beskrajan niz tekstualnih nizova odvojenih zarezima. Svaki će izgledati nešto poput druge slike na početku odlomka.
Ove osebujne žice poznate su kao NMEA rečenice, tako nazvane jer je format izmislila Nacionalna udruga pomorske elektronike. NMEA definira niz ovih rečenica za navigacijske podatke u rasponu od bitnih (mjesto i vrijeme) do ezoteričnih (omjer satelitskog signala i šuma, magnetska varijansa itd.). Proizvođači nisu dosljedni u pogledu vrsta rečenica koje njihovi prijemnici koriste, ali GPRMC je bitan. Nakon što 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 knjižnice koje to mogu učiniti umjesto vas. Popularna Adafruit GPS knjižnica Limor Fried prikladan je izbor ako koristite njihov Ultimate breakout. Napisano je kako bi omogućilo značajke jedinstvene za Ultimate (poput internog bilježenja podataka) i dodaje neke vlastite snažne melodije. Moja omiljena biblioteka za raščlanjivanje - a ovdje sam, naravno, potpuno nepristran - je ona koju sam napisao pod nazivom TinyGPS ++. Dizajnirao sam ga da bude opsežan, snažan, sažet i jednostavan za korištenje. Uzmimo to za spin.
Korak 6: Kodiranje pomoću TinyGPS ++
S gledišta programera, korištenje TinyGPS ++ vrlo je jednostavno:
1) Napravite objekt GPS.
2) Svaki znak koji stigne iz modula usmjerite do objekta pomoću gps.encode ().
3) Kad 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 s GPS uređajemSoftwareSerial ss (RXPin, TXPin);
// Objekt TinyGPS ++
TinyGPSPlus gps;
void setup () {
Serial.begin (ConsoleBaud);
ss.početak (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 s GPS -a stigli neki znakovi, /
/ pošaljite ih na objekt TinyGPS ++
while (ss.available ()> 0)
gps.encode (ss.read ());
// Prikažimo novo mjesto i nadmorsku visinu
// kad god je bilo koji od njih ažuriran
if (gps.location.isUpdated () || gps.altitude.isUpdated ())
{
Serial.print ("Lokacija:");
Serijski.ispis (gps.location.lat (), 6);
Serial.print (",");
Serijski.ispis (gps.location.lng (), 6);
Serial.print ("Visina:");
Serial.println (gps.altitude.meters ());
}
}
Naša druga aplikacija stalno prikazuje lokaciju i nadmorsku visinu prijemnika, koristeći TinyGPS ++ za pomoć pri raščlanjivanju. U stvarnom uređaju te 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 knjižnice. 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 biste vidjeli gdje točno stojite, zalijepite neke od rezultata koordinata zemljopisne širine/dužine u Google karte. Sada priključite prijenosno računalo i prošetajte ili se provozajte. (Ali ne zaboravite držati oči na cesti!)
7. korak: "Č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 točan do jedne desetmilijunte sekunde, a teoretska granica je još veća. Čak i ako vam je vaš projekt potreban samo za praćenje vremena, GPS modul i dalje može biti najjeftinije i najjednostavnije rješenje.
Da biste FindingYourself.ino pretvorili u super-točan sat, samo promijenite zadnjih 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 ()); Serijski.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 redaka koda, koja bi vodila korisnika do odredišta pomoću jednostavnih tekstualnih uputa poput "drži ravno" ili "skreni lijevo".
#include #include
#define RXPin 2
#define TXPin 3
#define GPSBaud 4800
#define ConsoleBaud 115200
// serijska veza s GPS uređajemSoftwareSerial ss (RXPin, TXPin);
// Objekt 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 za navođenje osobe (ili drona) do odredišta. Ovo odredište je Eiffelov toranj. Promijenite ga prema potrebi
Najlakši način za dobivanje koordinate geografske širine/duljine je da desnom tipkom miša kliknete odredište na Google kartama (maps.google.com) i odaberete "Što je ovdje?". To postavlja točne vrijednosti u okvir za pretraživanje
*/
void setup () {
Serial.begin (ConsoleBaud);
ss.početak (GPSBaud);
Serial.println ("GPS primjer 3");
Serial.println ("Ne tako opsežan sustav 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 ();
// Utvrditi naš trenutni status
double 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;
// ispravljanje pogrešaka Serial.print ("DEBUG: Course2Dest:");
Serial.print (courseToDestination);
Serial.print ("CurCourse:");
Serijski.ispis (gps.course.deg ());
Serial.print ("Dir2Dest:");
Serial.print (directionToDestination);
Serial.print ("RelCourse:");
Serial.print (courseChangeNeeded);
Serial.print ("CurSpd:");
Serial.println (gps.speed.kmph ());
// Unutar 20 metara od odredišta? Bili ovdje
if (distanceToDestination <= 20,0)
{Serial.println ("ČESTITAMO: Stigli ste!");
izlaz (1);
}
Serial.print ("DISTANCE:"); Serial.print (distanceToDestination);
Serial.println ("metara do kraja.");
Serial.print ("UPUTE:");
// Stajati mirno? Samo naznačite u kojem smjeru trebate ići
if (gps.speed.kmph () <2.0)
{
Serial.print ("Glava");
Serial.print (directionToDestination);
Serial.println (".");
povratak;
}
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 ("Skrenite ulijevo.");
inače if (courseChangeNeeded> = 45 && courseChangeNeeded <105)
Serial.println ("Skrenite udesno.");
drugo
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 (). Usporedba 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čunalu i pogledajte hoće li vas tamo odvesti. No, 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 jednom unaprijed programiranom mjestu. Ako vaša žrtva želi zaključati blago unutra, mora otkriti gdje se to tajno mjesto nalazi 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 što je s jednim od onih lukavih magnetskih 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 potičem vas da razmišljate opsežnije, osim stvari koje već možete kupiti na Amazonu. Vani je veliki svijet. Lutajte što dalje i šire.
Preporučeni:
Izrada 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 s vrućim kotačem): Ova uputa pokazat će vam kako napraviti vrući kotač koji radi 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 Appleov 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čunalo. 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 riješiti problem koji nam se dogodio kada moramo dobiti IP adresu Ethernet uređaja, to može biti računalo, 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 mobitel ili bežični telefon: 6 koraka
Kako pronaći svoj izgubljeni mobitel ili bežični telefon: Scenarij: Supruga i ja imamo mobitele. Više ne koristimo kućni telefon jer smo stalno u pokretu. Zašto plaćati za fiksni telefon koji rijetko koristite