Sadržaj:

Kako pronaći svoj put s GPS -om: 9 koraka
Kako pronaći svoj put s GPS -om: 9 koraka

Video: Kako pronaći svoj put s GPS -om: 9 koraka

Video: Kako pronaći svoj put s GPS -om: 9 koraka
Video: НАБРАЛ Секретный Код На Телефоне И ОФИГЕЛ!! БАТАРЕЯ НЕ САДИТСЯ! 2024, Srpanj
Anonim
Traženje puta s GPS -om
Traženje puta s GPS -om

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

Početak rada
Početak rada

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

Nožni prst u toku podataka
Nožni 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

Pronalaženje svog puta
Pronalaženje svog puta

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: