Talaan ng mga Nilalaman:

Paghahanap ng Iyong Daan Sa GPS: 9 Mga Hakbang
Paghahanap ng Iyong Daan Sa GPS: 9 Mga Hakbang

Video: Paghahanap ng Iyong Daan Sa GPS: 9 Mga Hakbang

Video: Paghahanap ng Iyong Daan Sa GPS: 9 Mga Hakbang
Video: PANO GAMITIN ANG GOOGLE MAPS SA RIDE | BEGINNER'S GUIDE 2024, Nobyembre
Anonim
Paghahanap ng Iyong Daan Sa GPS
Paghahanap ng Iyong Daan Sa GPS

Isang mabilis na ehersisyo sa pag-unawa at paglalapat ng data ng GPS

  • Kailangan ng Oras: 2 Oras
  • Gastos: $ 75– $ 150

Para sa mga gumagawa, naging mura ito upang isama ang de-kalidad na geospatial na data sa mga proyekto sa electronics. At sa huling ilang taon, ang mga module ng tagatanggap ng GPS (Global Positioning System) ay lumago nang higit na magkakaiba, makapangyarihan, at madaling maisama sa mga board ng pag-unlad tulad ng Arduino, PIC, Teensy, at Raspberry Pi. Kung naisip mong bumuo ng paligid ng GPS, pumili ka ng magandang oras upang magsimula.

Hakbang 1: Paano Ito Gumagana

Ang isang module ng GPS ay isang maliit na tatanggap ng radyo na nagpoproseso ng mga signal na nai-broadcast sa mga kilalang dalas ng isang fleet ng mga satellite. Ang mga satellite na ito ay umiikot sa paligid ng Earth sa halos paikot na mga orbit, na nagpapadala ng sobrang tumpak na posisyon at data ng orasan sa lupa sa ibaba. Kung ang tagatanggap ng lupa ay maaaring "makita" nang sapat sa mga satellite na ito, maaari itong gamitin ang mga ito upang makalkula ang sarili nitong lokasyon at altitude.

Kapag dumating ang isang mensahe sa GPS, unang susuriin ng tatanggap ang broadcast timestamp nito upang makita kung kailan ito ipinadala. Dahil ang bilis ng isang alon ng radyo sa kalawakan ay kilalang pare-pareho (c), maaaring ihambing ng tatanggap ang pag-broadcast at makatanggap ng mga oras upang matukoy ang distansya na naglakbay ang signal. Kapag naitatag na nito ang distansya nito mula sa apat o higit pang mga kilalang satellite, ang pagkalkula ng sarili nitong posisyon ay isang simpleng problema ng 3D triangulation. Ngunit upang gawin ito nang mabilis at tumpak, ang tatanggap ay dapat na mabilis na malutong ang mga numero mula sa hanggang sa 20 mga stream ng data nang sabay-sabay. Dahil ang sistema ng GPS ay may nai-publish na layunin na magamit kahit saan sa Lupa, dapat tiyakin ng system na hindi bababa sa apat na mga satellite - mas mabuti - nakikita sa lahat ng oras mula sa bawat punto sa mundo. Kasalukuyang may 32 mga satellite na GPS na gumaganap ng isang masining na choreographed na sayaw sa isang kalat-kalat na ulap na 20, 000 na kilometro ang taas.

Hakbang 2: Katotohanan ng Fan

Ang GPS ay hindi maaaring gumana nang wala ang teorya ng relatividad ni Einstein, dahil ang kompensasyon ay dapat gawin para sa 38 microseconds na kumukuha ng orbit na mga atomic na orasan bawat araw mula sa pagluwang ng oras sa gravitational field ng Earth.

Hakbang 3: Pagsisimula

Nagsisimula
Nagsisimula

Anuman ang iyong proyekto, ang GPS ay simple upang isama. Karamihan sa mga module ng tatanggap ay nakikipag-usap sa isang deretsong serial protocol, kaya kung makakahanap ka ng isang ekstrang serial port sa iyong board ng controller, dapat itong tumagal ng kaunting mga wires upang makagawa ng pisikal na koneksyon. At kahit na hindi, sinusuportahan ng karamihan sa mga kontroler ang isang tinulad na "software" na serial mode na maaari mong gamitin upang kumonekta sa di-makatwirang mga pin.

Para sa mga nagsisimula, ang Ultimate GPS Breakout module ng Adafruit ay isang mahusay na pagpipilian. Mayroong maraming mga nakikipagkumpitensyang produkto sa merkado, ngunit ang Ultimate ay isang solidong tagapalabas sa isang makatwirang presyo, na may malalaking mga butas na madaling maghinang o kumonekta sa isang breadboard.

Una, ikonekta ang lupa at lakas. Sa mga tuntunin ng Arduino, nangangahulugan ito ng pagkonekta ng isa sa mga microcontroller GND na pin sa GND ng module, at ang + 5V pin sa VIN ng module. Upang mapamahalaan ang paglipat ng data, kailangan mo ring ikonekta ang mga pin ng module at RX ng module sa Arduino. Arbitrary kong pipiliin ang Arduino pin 2 (TX) at 3 (RX) para sa hangaring ito, kahit na ang mga pin 0 at 1 ay partikular na idinisenyo para magamit bilang isang "serial serial port" o UART. Bakit? Dahil hindi ko nais na sayangin ang nag-iisang UART na mayroon ang mga low-end na prosesor na AVR na ito. Ang UART ng Arduino ay matigas ang pagkakakonekta sa onboard USB konektor, at nais kong panatilihin itong konektado sa aking computer para sa pag-debug.

Hakbang 4: Isang Toe sa Datastream

Isang Toe sa Datastream
Isang Toe sa Datastream

Ang instant na paglalapat mo ng lakas, isang module ng GPS ay nagsisimulang magpadala ng mga chunks ng data ng teksto sa linya na TX nito. Maaaring hindi pa ito nakakakita ng isang solong satellite, mas kaunti pa ang may isang "pag-aayos," ngunit ang gripo ng data ay agad na dumarating, at kagiliw-giliw na makita kung ano ang lalabas. Ang aming unang simpleng sketch (sa ibaba) ay walang ginawa kundi ipakita ang hindi naprosesong data.

# isama ang # tukuyin ang RXPin 2

# tukuyin ang TXPin 3 # tukuyin ang GPSBaud 4800

# tukuyin ang ConsoleBaud 115200

// Ang serial na koneksyon sa GPS aparatoSoftwareSerial ss (RXPin, TXPin);

walang bisa ang pag-setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Halimbawa ng GPS 1");

Serial.println ("Ipinapakita ang hilaw na data ng NMEA na ipinadala ng module ng GPS.");

Serial.println ("ni Mikal Hart"); Serial.println ();

}

walang bisa loop ()

{if (ss.available ()> 0) // Tulad ng pagdating ng bawat character…

Serial.write (ss.read ()); // … isulat ito sa console

}

TANDAAN: Tinutukoy ng sketch ang accept pin (RXPin) bilang 2, kahit na sinabi namin nang mas maaga na ang transmit (TX) pin ay konektado sa pin 2. Ito ay isang pangkaraniwang mapagkukunan ng pagkalito. Ang RXPin ay ang natanggap na pin (RX) mula sa pananaw ng Arduino. Naturally, dapat itong konektado sa transmit (TX) pin ng module, at kabaliktaran.

I-upload ang sketch na ito at buksan ang Serial Monitor sa 115, 200 baud. Kung gumagana ang lahat, dapat kang makakita ng isang siksik, walang katapusang stream ng mga string ng teksto na pinaghiwalay ng kuwit. Ang bawat isa ay magmukhang kagaya ng pangalawang imahe sa simula ng talata.

Ang mga natatanging string na ito ay kilala bilang mga pangungusap ng NMEA, tinawag ito sapagkat ang format ay naimbento ng National Maritime Electronics Association. Tinutukoy ng NMEA ang isang bilang ng mga pangungusap na ito para sa data ng pag-navigate mula sa mahalaga (lokasyon at oras), hanggang sa esoteric (satellite signal-to-noise ratio, magnetic variance, atbp.). Hindi pantay ang mga tagagawa tungkol sa kung aling mga uri ng pangungusap ang ginagamit ng kanilang mga tatanggap, ngunit mahalaga ang GPRMC. Kapag ang iyong module ay nakakakuha ng isang pag-aayos, dapat mong makita ang isang patas na bilang ng mga pangungusap na GPRMC.

Hakbang 5: Paghahanap ng Iyong Sarili

Hindi gaanong mahalaga na i-convert ang output ng raw module sa impormasyon na maaari talagang magamit ng iyong programa. Sa kasamaang palad, may ilang mga mahusay na aklatan na magagamit na upang gawin ito para sa iyo. Ang sikat na Adafruit GPS Library ng Limor Fried ay isang maginhawang pagpipilian kung gumagamit ka ng kanilang Ultimate breakout. Nakasulat ito upang paganahin ang mga tampok na natatangi sa Ultimate (tulad ng panloob na pag-log ng data) at nagdaragdag ng ilang mga snazzy na kampanilya at sipol ng sarili nitong. Gayunpaman, ang aking paboritong library sa pag-parse - at narito ako syempre ganap na walang kinikilingan - ay ang isinulat kong tinawag na TinyGPS ++. Dinisenyo ko ito upang maging komprehensibo, malakas, maigsi, at madaling gamitin. Dalhin natin ito para sa isang pagikot.

Hakbang 6: Pag-coding Sa TinyGPS ++

Mula sa pananaw ng programmer, ang paggamit ng TinyGPS ++ ay napaka-simple:

1) Lumikha ng isang object gps.

2) Rutain ang bawat character na darating mula sa module patungo sa object gamit ang gps.encode ().

3) Kapag kailangan mong malaman ang iyong posisyon o altitude o oras o petsa, magtanong lamang sa object ng gps.

# isama ang # isama

# tukuyin ang RXPin 2

# tukuyin ang TXPin 3

# tukuyin ang GPSBaud 4800

# tukuyin ang ConsoleBaud 115200

// Ang serial na koneksyon sa GPS aparatoSoftwareSerial ss (RXPin, TXPin);

// Ang bagay na TinyGPS ++

Mga TinyGPSPlus gps;

walang bisa ang pag-setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Halimbawa ng GPS 2");

Serial.println ("Isang simpleng tracker na gumagamit ng TinyGPS ++.");

Serial.println ("ni Mikal Hart");

Serial.println ();

}

void loop () {

// Kung may mga character na dumating mula sa GPS, /

/ ipadala ang mga ito sa bagay na TinyGPS ++

habang (ss.available ()> 0)

gps.encode (ss.read ());

// Ipakita natin ang bagong lokasyon at altitude

// tuwing alinman sa mga ito ay na-update

kung (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("Lokasyon:");

Serial.print (gps.location.lat (), 6);

Serial.print (",");

Serial.print (gps.location.lng (), 6);

Serial.print ("Altitude:");

Serial.println (gps.altitude.meters ());

}

}

Patuloy na ipinapakita ng aming pangalawang application ang lokasyon at altitude ng tatanggap, gamit ang TinyGPS ++ upang matulungan sa pag-parse. Sa isang tunay na aparato, maaari mong i-log ang data na ito sa isang SD card o ipakita ito sa isang LCD. Grab ang silid-aklatan at sketch na FindingYourelf.ino (sa itaas). I-install ang library, tulad ng dati, sa folder ng Arduino libraries. I-upload ang sketch sa iyong Arduino at buksan ang Serial Monitor sa 115, 200 baud. Dapat mong makita ang iyong lokasyon at altitude na nag-a-update sa real time. Upang makita ang eksaktong kinatatayuan mo, i-paste ang ilan sa mga nagresultang mga coordinate ng latitude / longitude sa Google Maps. I-hook up ang iyong laptop at maglakad-lakad o mag-drive. (Ngunit tandaan na panatilihin ang iyong mga mata sa daan!)

Hakbang 7: Ang "IKAAPAT NA DIMENSYON"

kahit na iniuugnay namin ang GPS sa lokasyon sa kalawakan, huwag kalimutan ang mga satellite na iyon ay nagpapadala rin ng oras- at mga datestamp. Ang average na GPS na orasan ay tumpak sa isang sampung-milyon ng isang segundo, at ang limitasyon ng teoretikal ay mas mataas pa. Kahit na kailangan mo lamang ang iyong proyekto upang subaybayan ang oras, ang isang module ng GPS ay maaari pa ring pinakamura at pinakamadaling solusyon.

Upang gawing isang sobrang tumpak na orasan ang FindingYourelf.ino, palitan lamang ang mga huling linya tulad nito:

kung (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "Ang oras ay% 02d:% 02d:% 02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Hakbang 8: Paghahanap ng Iyong Daan

Paghahanap ng Iyong Daan
Paghahanap ng Iyong Daan

Ang aming pangatlo at pangwakas na aplikasyon ay ang resulta ng isang personal na hamon na magsulat ng isang nabasang sketch ng TinyGPS ++, sa mas kaunti sa 100 mga linya ng code, na gagabay sa isang gumagamit sa isang patutunguhan na gumagamit ng mga simpleng tagubilin sa teksto tulad ng "panatilihing tuwid" o "veer pakaliwa."

# isama ang # isama

# tukuyin ang RXPin 2

# tukuyin ang TXPin 3

# tukuyin ang GPSBaud 4800

# tukuyin ang ConsoleBaud 115200

// Ang serial na koneksyon sa GPS aparatoSoftwareSerial ss (RXPin, TXPin);

// The TinyGPS ++ object TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

# tukuyin ang EIFFEL_LAT 48.85823 # tukuyin ang EIFFEL_LNG 2.29438

/ * Ang halimbawang ito ay nagpapakita ng isang pangunahing balangkas para sa kung paano mo maaaring gamitin ang kurso at distansya upang gabayan ang isang tao (o isang drone) sa isang patutunguhan. Ang patutunguhang ito ay ang Eiffel Tower. Baguhin ito ayon sa kinakailangan

Ang pinakamadaling paraan upang makuha ang lat / mahabang coordinate ay ang pag-right click sa patutunguhan sa Google Maps (maps.google.com), at piliin ang "Ano ang narito?". Inilalagay nito ang eksaktong mga halaga sa box para sa paghahanap

*/

walang bisa ang pag-setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Halimbawa ng GPS 3");

Serial.println ("Isang Hindi-kumpletong Sistema ng Patnubay");

Serial.println ("ni Mikal Hart");

Serial.println ();

}

void loop () {

// Kung may dumating na mga character mula sa GPS, // ipadala ang mga ito sa bagay na TinyGPS ++ habang (ss.available ()> 0) gps.encode (ss.read ());

// Tuwing 5 segundo, gumawa ng isang pag-update

kung (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Itaguyod ang aming kasalukuyang katayuan

dobleng distansyaToDestination = TinyGPSPlus:: distansyaBet pagitan

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

dobleng kursoToDestination = 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 ("CurCourse:");

Serial.print (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (direksyonToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

Serial.println (gps.speed.kmph ());

// Sa loob ng 20 metro ng patutunguhan? Nandito na kami

kung (distansyaToDestination <= 20.0)

{Serial.println ("CONGRATULATIONS: Dumating ka na!");

exit (1);

}

Serial.print ("DISTANCE:"); Serial.print (distansyaToDestination);

Serial.println ("metro na pupunta.");

Serial.print ("INSTRUCTION:");

// Nakatayo pa rin? Ipahiwatig lamang kung aling direksyon ang dapat puntahan

kung (gps.speed.kmph () <2.0)

{

Serial.print ("Head");

Serial.print (direksyonToDestination);

Serial.println (".");

bumalik;

}

kung (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Patuloy na diretso!");

kung hindi man (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Veer bahagyang pakaliwa.");

kung hindi man (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Bahagyang lumiko sa kanan.");

kung hindi man (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Lumiko sa kaliwa.");

kung hindi man (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Lumiko sa kanan.");

iba pa

Serial.println ("Lumiko nang buong paligid.");

}

}

Tuwing 5 segundo kinukuha ng code ang lokasyon at kurso ng gumagamit (direksyon ng paglalakbay) at kinakalkula ang tindig (direksyon sa patutunguhan), gamit ang pamamaraan ng TinyGPS ++ courseTo (). Ang paghahambing sa dalawang mga vector ay bumubuo ng isang mungkahi upang magpatuloy sa tuwid o pagliko, tulad ng ipinakita sa ibaba.

Kopyahin ang sketch na FindingYourWay.ino (sa itaas) at i-paste ito sa Arduino IDE. Magtakda ng patutunguhan na 1km o 2km ang layo, i-upload ang sketch sa iyong Arduino, patakbuhin ito sa iyong laptop, at tingnan kung gagabayan ka nito doon. Ngunit higit sa lahat, pag-aralan ang code at unawain kung paano ito gumagana.

Hakbang 9: Pupunta Pa

Ang malikhaing potensyal ng GPS ay malawak. Ang isa sa mga pinaka-kasiya-siyang bagay na nagawa ko ay isang kahon na palaisipan na pinagana ng GPS na bubukas lamang sa isang naka-preprogram na lokasyon. Kung nais ng iyong biktima na ma-lock ang kayamanan sa loob, dapat niyang malaman kung nasaan ang lihim na lokasyon na iyon at pisikal na dalhin ang kahon doon. Ang isang tanyag na unang ideya ng proyekto ay isang uri ng aparato sa pag-log na nagtatala ng minutong minuto na posisyon at altitude ng, halimbawa, isang hiker na naglalakad sa Trans-Pennine Trail. O ano ang tungkol sa isa sa mga sneaky na magnetikong tracker ng mga ahente ng DEA sa Breaking Bad stick sa mga kotse ng masamang tao? Ang parehong ay ganap na magagawa, at marahil ay magiging masaya na bumuo, ngunit hinihimok kita na mag-isip nang mas malawak, lampas sa mga bagay na maaari mo nang mabili sa Amazon. Ito ay isang malaking mundo doon. Umikot sa malayo at malapad na makakaya mo.

Inirerekumendang: