Orodha ya maudhui:

Kutafuta Njia Yako Pamoja na GPS: Hatua 9
Kutafuta Njia Yako Pamoja na GPS: Hatua 9

Video: Kutafuta Njia Yako Pamoja na GPS: Hatua 9

Video: Kutafuta Njia Yako Pamoja na GPS: Hatua 9
Video: Fahamu njia rahisi ya kumjua mtu alipo kwa kutumia namba yake ya simu 2024, Novemba
Anonim
Kupata njia yako na GPS
Kupata njia yako na GPS

Zoezi la haraka la kuelewa na kutumia data ya GPS

  • Muda Unaohitajika: Saa 2
  • Gharama: $ 75- $ 150

Kwa watengenezaji, imekuwa nafuu kabisa kuingiza data ya hali ya juu katika miradi ya umeme. Na katika miaka michache iliyopita, moduli za mpokeaji za GPS (Global Positioning System) zimekua tofauti zaidi, zenye nguvu, na rahisi kuunganishwa na bodi za maendeleo kama Arduino, PIC, Teensy, na Raspberry Pi. Ikiwa umekuwa ukifikiria kujenga karibu na GPS, umechagua wakati mzuri wa kuanza.

Hatua ya 1: Jinsi inavyofanya kazi

Moduli ya GPS ni kipokeaji kidogo cha redio ambacho husindika ishara inayotangazwa kwenye masafa inayojulikana na meli ya satelaiti. Satelaiti hizi huzunguka Ulimwenguni kwa mizunguko ya duara, ikipitisha data sahihi kabisa ya msimamo na saa chini chini. Ikiwa mpokeaji anayepatikana ardhini anaweza "kuona" kutosha kwa satelaiti hizi, anaweza kuzitumia kuhesabu eneo lake na urefu.

Ujumbe wa GPS unapofika, mpokeaji kwanza hukagua muhuri wa muda wake wa utangazaji ili kuona ni lini ilitumwa. Kwa sababu kasi ya wimbi la redio angani inajulikana kila mara (c), mpokeaji anaweza kulinganisha matangazo na kupokea nyakati ili kujua umbali ambao ishara imesafiri. Mara tu ikiwa imeweka umbali wake kutoka kwa satelaiti nne au zaidi zinazojulikana, kuhesabu msimamo wake ni shida rahisi ya upembuzi wa 3D. Lakini ili kufanya hivi haraka na kwa usahihi, mpokeaji lazima awe na uwezo wa kukomesha nambari kutoka kwa mito ya data 20. mara moja. Kwa kuwa mfumo wa GPS una lengo lililochapishwa la kutumiwa kila mahali Duniani, mfumo lazima uhakikishe kuwa angalau setilaiti nne - ikiwezekana zaidi - zinaonekana wakati wote kutoka kila hatua duniani. Hivi sasa kuna setilaiti 32 za GPS zinazocheza densi iliyochorwa kwa uangalifu katika wingu nadra 20 kilomita 000 kwa urefu.

Hatua ya 2: Ukweli wa Mashabiki

GPS haikuweza kufanya kazi bila nadharia ya Einstein ya urafiki, kwani fidia lazima ifanywe kwa microseconds 38 ambazo saa za atomiki zinazunguka hupata kila siku kutoka wakati wa kupanuka kwenye uwanja wa mvuto wa Dunia.

Hatua ya 3: Kuanza

Kuanza
Kuanza

Chochote mradi wako, GPS ni rahisi kujumuisha. Moduli nyingi za mpokeaji zinawasiliana na itifaki ya moja kwa moja ya moja kwa moja, kwa hivyo ikiwa unaweza kupata bandari ya vipuri kwenye bodi yako ya mtawala, inapaswa kuchukua waya wachache tu kufanya unganisho la mwili. Na hata kama sivyo, watawala wengi huunga mkono hali ya kuiga ya "programu" ambayo unaweza kutumia kuungana na pini holela.

Kwa Kompyuta, moduli ya kuzuka kwa GPS ya Adafruit ni chaguo nzuri. Kuna bidhaa nyingi zinazoshindana kwenye soko, lakini Ultimate ni mwigizaji thabiti kwa bei nzuri, na mashimo makubwa ambayo ni rahisi kutengenezea au kuunganisha kwenye ubao wa mkate.

Kwanza, unganisha ardhi na nguvu. Kwa maneno ya Arduino, hii inamaanisha kuunganisha moja ya pini za microcontroller GND kwenye GND ya moduli, na pini + 5V kwa VIN ya moduli. Ili kudhibiti uhamishaji wa data, unahitaji pia kuunganisha pini za moduli za TX na RX kwenye Arduino. Nitachagua kiholela Arduino pini 2 (TX) na 3 (RX) kwa kusudi hili, ingawa pini 0 na 1 zimeundwa mahsusi kwa matumizi kama "bandari ya vifaa vya vifaa" au UART. Kwa sababu sitaki kupoteza UART pekee wasindikaji hawa wa chini wa AVR. UART ya Arduino ina waya ngumu kwa kiunganishi cha USB cha ndani, na napenda kuiweka kushikamana na kompyuta yangu kwa utatuzi.

Hatua ya 4: Kidole kwenye Datastream

Kidole kwenye Datastream
Kidole kwenye Datastream

Mara unapotumia nguvu, moduli ya GPS huanza kutuma vipande vya data ya maandishi kwenye laini yake ya TX. Haiwezi bado kuona setilaiti moja, zaidi ya kuwa na "kurekebisha," lakini bomba la data linakuja mara moja, na inafurahisha kuona kile kinachotoka. Mchoro wetu wa kwanza rahisi (hapa chini) haufanyi chochote isipokuwa kuonyesha data hii ambayo haijasindika.

# pamoja na #fafanua RXPin 2

#fafanua TXPin 3 # fafanua GPSBaud 4800

#fafanua DashibodiBaud 115200

// Uunganisho wa serial kwa kifaa cha GPSSoftwareSerial ss (RXPin, TXPin);

usanidi batili () {

Anzisha Serial. (ConsoleBaud);

anza (GPSBaud);

Serial.println ("Mfano wa GPS 1");

Serial.println ("Kuonyesha data ghafi ya NMEA inayosambazwa na moduli ya GPS.");

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

}

kitanzi batili ()

{if (ss.available ()> 0) // Kila herufi inapofika…

Serial.write (ss.read ()); //… andika kwa kiweko

}

KUMBUKA: Mchoro unafafanua pini ya kupokea (RXPin) kama 2, hata ingawa tulisema mapema kuwa pini ya kusambaza (TX) ingeunganishwa na pini 2. Hiki ni chanzo cha kawaida cha mkanganyiko. RXPin ni pini ya kupokea (RX) kutoka kwa maoni ya Arduino. Kwa kawaida, lazima iunganishwe na pini ya moduli ya kupitisha (TX), na kinyume chake.

Pakia mchoro huu na ufungue Serial Monitor saa 115, 200 baud. Ikiwa kila kitu kinafanya kazi, unapaswa kuona mtiririko mnene, usio na mwisho wa nyuzi zilizotenganishwa kwa koma. Kila mmoja ataonekana kama picha ya pili mwanzoni mwa aya.

Kamba hizi tofauti zinajulikana kama sentensi za NMEA, inayoitwa kwa sababu fomati hiyo ilibuniwa na Chama cha Kitaifa cha Elektroniki cha Baharini. NMEA inafafanua idadi ya sentensi hizi kwa data ya baharia kuanzia muhimu (mahali na wakati), hadi esoteric (uwiano wa ishara ya kelele na kelele, utofauti wa sumaku, n.k.). Watengenezaji hawapatani juu ya aina gani za sentensi wapokeaji wao hutumia, lakini GPRMC ni muhimu. Mara baada ya moduli yako kupata sahihisho, unapaswa kuona idadi nzuri ya sentensi hizi za GPRMC.

Hatua ya 5: Kupata mwenyewe

Sio jambo la maana kubadilisha pato la moduli mbichi kuwa habari ambayo programu yako inaweza kutumia. Kwa bahati nzuri, kuna maktaba kubwa ambayo tayari inapatikana kukufanyia. Maktaba maarufu ya Adafruit GPS ya Limor Fried ni chaguo rahisi ikiwa unatumia kuzuka kwao kwa mwisho. Imeandikwa kuwezesha huduma za kipekee kwa Ultimate (kama vile kuingia kwa data ya ndani) na inaongeza kengele za snazzy na filimbi za aina yake. Maktaba ninayopenda zaidi ya kuchambua, hata hivyo - na hapa siko na ubaguzi kabisa - ndio niliyoandika iitwayo TinyGPS ++. Nimeiunda kuwa pana, yenye nguvu, mafupi, na rahisi kutumia. Hebu tuchukue kwa spin.

Hatua ya 6: Kuandika kwa TinyGPS ++

Kutoka kwa maoni ya programu, kutumia TinyGPS ++ ni rahisi sana:

1) Unda gps ya kitu.

2) Peleka kila tabia inayofika kutoka kwa moduli kwenda kwa kitu ukitumia gps.encode ().

3) Wakati unahitaji kujua msimamo wako au urefu au wakati au tarehe, swala tu kitu cha gps.

#jumuisha #jumuisha

#fafanua RXPin 2

#fafanua TXPin 3

#fafanua GPSBaud 4800

#fafanua DashibodiBaud 115200

// Uunganisho wa serial kwa kifaa cha GPSSoftwareSerial ss (RXPin, TXPin);

// Kitu cha TinyGPS ++

GPS ndogo za TinyGPSPlus;

usanidi batili () {

Kuanzia Serial (ConsoleBaud);

anza (GPSBaud);

Serial.println ("Mfano wa GPS 2");

Serial.println ("tracker rahisi kutumia TinyGPS ++.");

Serial.println ("na Mikal Hart");

Serial.println ();

}

kitanzi batili () {

// Ikiwa wahusika wamefika kutoka GPS, /

/ tuma kwa kitu cha TinyGPS ++

wakati (ss inapatikana ()> 0)

gps.encode (ss.read ());

// Wacha tuonyeshe eneo mpya na urefu

// wakati wowote mmoja wao amesasishwa

ikiwa (gps.location. Imesasishwa () || gps.utitude.isUpdated ())

{

Serial.print ("Mahali:");

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

Serial.print (",");

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

Serial.print ("Urefu:");

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

}

}

Programu yetu ya pili inaendelea kuonyesha mahali na urefu wa mpokeaji, kwa kutumia TinyGPS ++ kusaidia kuchanganua. Kwenye kifaa halisi, unaweza kuweka data hii kwenye kadi ya SD au kuionyesha kwenye LCD. Shika maktaba na mchoro Kupata mwenyewe.ino (hapo juu). Sakinisha maktaba, kama kawaida, kwenye folda ya maktaba ya Arduino. Pakia mchoro kwa Arduino yako na ufungue Serial Monitor saa 115, 200 baud. Unapaswa kuona eneo lako na uppdatering urefu katika muda halisi. Ili kuona kabisa mahali unaposimama, weka baadhi ya uratibu wa latitudo / longitudo kwenye Ramani za Google. Sasa funga laptop yako na nenda kwa kutembea au kuendesha. (Lakini kumbuka kuweka macho yako barabarani!)

Hatua ya 7: "DIMENSION YA NNE"

hough tunaunganisha GPS na eneo kwenye nafasi, usisahau hizo satelaiti zinapitisha wakati- na viunga vya data, pia. Saa ya wastani ya GPS ni sahihi kwa moja ya milioni kumi ya sekunde, na kikomo cha kinadharia ni cha juu zaidi. Hata ikiwa unahitaji mradi wako tu kufuatilia wakati, moduli ya GPS bado inaweza kuwa suluhisho rahisi na rahisi.

Kubadilisha KutafutaYourself.ino kuwa saa sahihi zaidi, badilisha tu mistari michache iliyopita kama hii:

ikiwa (gps.time.isPdated ()) {

char buf [80];

sprintf (buf, "Wakati ni% 02d:% 02d:% 02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Hatua ya 8: Kutafuta Njia yako

Kutafuta Njia Yako
Kutafuta Njia Yako

Maombi yetu ya tatu na ya mwisho ni matokeo ya changamoto ya kibinafsi kuandika mchoro wa TinyGPS ++ unaoweza kusomeka, kwa chini ya mistari 100 ya nambari, ambayo ingeongoza mtumiaji kwenda kwa kutumia maagizo rahisi ya maandishi kama "weka sawa" au "veer kushoto."

#jumuisha #jumuisha

#fafanua RXPin 2

#fafanua TXPin 3

#fafanua GPSBaud 4800

#fafanua DashibodiBaud 115200

// Uunganisho wa serial kwa kifaa cha GPSSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ kitu TinyGPSPlus gps;

unsigned longUpdateTime = 0;

#fafanua EIFFEL_LAT 48.85823 # fafanua EIFFEL_LNG 2.29438

/ * Mfano huu unaonyesha mfumo wa kimsingi wa jinsi unavyoweza kutumia kozi na umbali kuongoza mtu (au rubani) hadi marudio. Marudio haya ni Mnara wa Eiffel. Badilisha kama inavyotakiwa

Njia rahisi ya kupata uratibu wa lat / mrefu ni kubofya kulia kwenye marudio kwenye Ramani za Google (maps.google.com), na uchague "Kuna nini hapa?". Hii inaweka maadili halisi kwenye kisanduku cha utaftaji

*/

usanidi batili () {

Anzisha Serial. (ConsoleBaud);

anza (GPSBaud);

Serial.println ("Mfano wa GPS 3");

Serial.println ("Mfumo wa Miongozo Sio kamili sana");

Serial.println ("na Mikal Hart");

Serial.println ();

}

kitanzi batili () {

// Ikiwa wahusika wowote wamewasili kutoka kwa GPS, // wapeleke kwenye kitu cha TinyGPS ++ wakati (ss inapatikana ()> 0) gps.encode (ss.read ());

// Kila sekunde 5, fanya sasisho

ikiwa (millis () - mwishoUpdateTime> = 5000)

{

mwishoUpdateTime = millis ();

Serial.println ();

// Anzisha hali yetu ya sasa

umbali mara mbiliToDestination = TinyGPSPlus:: umbali kati ya

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

kozi mbiliToDestination = TinyGPSPlus:: courseTo

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

const char * directionToDestination = TinyGPSPlus:: kardinali (courseToDestination);

kozi ya IntChangeNeeded = (int) (360 + koziToDestination - gps.course.deg ())% 360;

// utatuzi Serial.print ("DEBUG: Course2Dest:");

Serial.print (koziToDestination);

Serial.print ("CurCourse:");

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

Serial.print ("Dir2Dest:");

Serial.print (mwelekeoToDestination);

Serial.print ("RelCourse:");

Serial.print (koziChangeNeded);

Serial.print ("CurSpd:");

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

// Ndani ya mita 20 za marudio? Tuko hapa

ikiwa (umbaliToDestination <= 20.0)

{Serial.println ("HONGERA SANA: Umefika!");

toka (1);

}

Serial.print ("MBALI:"); Printa ya serial (umbaliToDestination);

Serial.println ("mita kwenda.");

Serial.print ("MAELEKEZO:");

// Kusimama bado? Onyesha tu mwelekeo gani wa kwenda

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

{

Serial.print ("Kichwa");

Serial.print (mwelekeoToDestination);

Serial.println (".");

kurudi;

}

ikiwa (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Endelea mbele moja kwa moja!");

vinginevyo ikiwa (shakaChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Veer kidogo kushoto.");

vinginevyo ikiwa (bila shakaChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Veer kidogo kulia.");

vinginevyo ikiwa (shakaChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Geuka kushoto.");

vinginevyo ikiwa (bila shakaChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Geuka kulia.");

mwingine

Serial.println ("Geuka kabisa.");

}

}

Kila sekunde 5 nambari inakamata eneo la mtumiaji na kozi (mwelekeo wa safari) na huhesabu kuzaa (mwelekeo wa marudio), kwa kutumia njia ya TinyGPS ++ courseTo (). Kulinganisha veki mbili kunatoa maoni ya kuendelea moja kwa moja au kugeuka, kama inavyoonyeshwa hapa chini.

Nakili mchoro wa FindingYourWay.ino (hapo juu) na ubandike kwenye IDE ya Arduino. Weka marudio ya 1km au 2km mbali, pakia mchoro kwenye Arduino yako, ukimbie kwenye kompyuta yako ndogo, na uone ikiwa itakuongoza hapo. Lakini muhimu zaidi, jifunze nambari hiyo na uelewe jinsi inavyofanya kazi.

Hatua ya 9: Kwenda Zaidi

Uwezo wa ubunifu wa GPS ni kubwa. Moja ya vitu vya kuridhisha sana ambavyo nimewahi kutengeneza ni sanduku la fumbo linalowezeshwa na GPS linalofunguka tu katika eneo moja lililotayarishwa mapema. Ikiwa mhasiriwa wako anataka kufunga hazina ndani, lazima atambue mahali pa siri hapo na kuleta sanduku hapo. Wazo maarufu la mradi wa kwanza ni aina fulani ya kifaa cha kukata miti ambacho hurekodi dakika kwa nafasi ya dakika na urefu wa, sema, mtembezi anayetembea Njia ya Trans-Pennine. Au vipi kuhusu mmoja wa wafuatiliaji wa sumaku wajinga mawakala wa DEA katika Kuvunja fimbo mbaya kwenye magari ya watu wabaya? Zote zinawezekana kabisa, na labda itakuwa ya kufurahisha kujenga, lakini ninakuhimiza ufikirie zaidi, zaidi ya vitu ambavyo unaweza tayari kununua kwenye Amazon. Ni ulimwengu mkubwa huko nje. Zunguka kadiri uwezavyo.

Ilipendekeza: