Բովանդակություն:

Գտեք ձեր ճանապարհը GPS- ով. 9 քայլ
Գտեք ձեր ճանապարհը GPS- ով. 9 քայլ

Video: Գտեք ձեր ճանապարհը GPS- ով. 9 քայլ

Video: Գտեք ձեր ճանապարհը GPS- ով. 9 քայլ
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Հուլիսի
Anonim
Գտեք ձեր ճանապարհը GPS- ով
Գտեք ձեր ճանապարհը GPS- ով

GPS- ի տվյալները հասկանալու և կիրառելու արագ վարժություն

  • Պահանջվող ժամանակը `2 ժամ
  • Արժեքը `75-150 դոլար

Ստեղծողների համար բավականին էժան է դարձել էլեկտրոնիկայի նախագծերում բարձրորակ երկրատարածական տվյալների ներառումը: Եվ վերջին մի քանի տարիների ընթացքում GPS (Global Positioning System) ստացողի մոդուլները շատ ավելի բազմազան, հզոր և դյուրին են ինտեգրվել զարգացման տախտակներին, ինչպիսիք են Arduino- ն, PIC- ը, Teensy- ն և Raspberry Pi- ն: Եթե մտածում էիք GPS- ի շուրջ կառուցել, լավ ժամանակ եք ընտրել սկսելու համար:

Քայլ 1: Ինչպես է այն աշխատում

GPS մոդուլը մի փոքրիկ ռադիոընդունիչ է, որը մշակում է արբանյակների նավատորմի կողմից հայտնի հաճախականություններով հեռարձակվող ազդանշանները: Այս արբանյակները պտտվում են Երկրի շուրջը մոտավորապես շրջանաձև ուղեծրերով ՝ փոխանցելով ստորև գետնին չափազանց ճշգրիտ դիրքորոշման և ժամացույցի տվյալները: Եթե երկրային ընդունիչը կարող է բավականաչափ «տեսնել» այս արբանյակները, կարող է դրանք օգտագործել `իր գտնվելու վայրը և բարձրությունը հաշվարկելու համար:

Երբ GPS հաղորդագրություն է գալիս, ստացողը նախ ստուգում է իր հեռարձակման ժամկետը ՝ տեսնելու, թե երբ է այն ուղարկվել: Քանի որ տիեզերքում ռադիոալիքի արագությունը հայտնի հաստատուն է (գ), ստացողը կարող է համեմատել հեռարձակման և ստացման ժամանակները `ազդանշանի անցած տարածությունը որոշելու համար: Երբ նա հաստատեց իր հեռավորությունը չորս կամ ավելի հայտնի արբանյակներից, սեփական դիրքի հաշվարկը 3D եռանկյունացման բավականին պարզ խնդիր է: Բայց դա արագ և ճշգրիտ կատարելու համար ստացողը պետք է կարողանա միանգամից ճեղքել թվերը մինչև 20 տվյալների հոսքերից: Քանի որ GPS համակարգը Երկրի վրա ամենուր օգտագործելի լինելու հրապարակված նպատակ ունի, համակարգը պետք է ապահովի, որ առնվազն չորս արբանյակ - նախընտրելի է ավելի շատ - տեսանելի են բոլոր ժամանակներում աշխարհի ցանկացած կետից: Ներկայումս գործում է 32 GPS արբանյակ, որոնք մանրազնին խորեոգրաֆիկ պար են կատարում 20 000 կիլոմետր բարձրությամբ նոսր ամպի մեջ:

Քայլ 2: Երկրպագուների փաստ

GPS- ը չէր կարող աշխատել առանց Էյնշտեյնի հարաբերականության տեսության, քանի որ փոխհատուցում պետք է տրվի 38 միկրոսայրկյանների համար, որոնք օրական ստանում են պտտվող ատոմային ժամացույցները Երկրի գրավիտացիոն դաշտում ժամանակի ընդլայնումից:

Քայլ 3: Սկսելու համար

Սկսել
Սկսել

Ինչ էլ որ լինի ձեր նախագիծը, GPS- ը հեշտ է ինտեգրվել: Ստացողի մոդուլների մեծ մասը շփվում է ուղղակի սերիական արձանագրության հետ, այնպես որ, եթե վերահսկիչի տախտակի վրա կարող եք գտնել պահեստային սերիական նավահանգիստ, ֆիզիկական կապ հաստատելու համար կպահանջվի ընդամենը մի բուռ լար: Եվ նույնիսկ եթե ոչ, վերահսկիչների մեծ մասն աջակցում է «ծրագրային ապահովման» սերիական ռեժիմին, որը կարող եք օգտագործել կամայական կապումներին միանալու համար:

Սկսնակների համար Adafruit- ի Ultimate GPS Breakout մոդուլը լավ ընտրություն է: Շուկայում կան շատ մրցունակ ապրանքներ, բայց Ultimate- ը լավ կատարում է ողջամիտ գնով, մեծ անցքերով, որոնք հեշտությամբ կպցվում կամ միանում են հացահատիկին:

Նախ, միացրեք հողը և ուժը: Ըստ Arduino- ի ՝ սա նշանակում է միկրոկառավարիչի GND կապում միացնել մոդուլի GND- ին, իսկ +5V կապը ՝ մոդուլի VIN- ին: Տվյալների փոխանցումը կառավարելու համար անհրաժեշտ է նաև միացնել մոդուլի TX և RX կապումներն Arduino- ին: Այս նպատակով ես կամայականորեն կընտրեմ Arduino կապերը 2 (TX) և 3 (RX), չնայած որ 0 և 1 կապերը հատուկ նախագծված են որպես «ապարատային սերիական նավահանգիստ» կամ UART օգտագործելու համար: Ինչու՞: Քանի որ ես չեմ ուզում վատնել միակ UART- ի այս ցածրակարգ AVR պրոցեսորները: Arduino- ի UART- ը միացված է USB միակցիչին, և ես սիրում եմ այն միացված պահել իմ համակարգչին ՝ վրիպազերծման համար:

Քայլ 4: Մի մատ տվյալների շղթայում

Մատը տվյալների շտեմարանում
Մատը տվյալների շտեմարանում

GPS- ի մոդուլը միացնելուց անմիջապես հետո սկսում է տեքստային տվյալների կտորներ ուղարկել իր TX գծի վրա: Հնարավոր է, որ այն դեռևս չի տեսնում մեկ արբանյակ, առավել ևս «շտկում», բայց տվյալների ծորակն անմիջապես բացվում է, և հետաքրքիր է տեսնել, թե ինչ է դուրս գալիս: Մեր առաջին պարզ ուրվագիծը (ստորև) ոչ այլ ինչ է անում, քան ցուցադրել այս չմշակված տվյալները:

#ներառել #սահմանել RXPin 2

#սահմանեք TXPin 3#սահմանեք GPSBaud 4800

#սահմանեք ConsoleBaud 115200

// Սերիական միացում GPS սարքին oftրագրային ապահովում Սերիալ ss (RXPin, TXPin);

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println («GPS օրինակ 1»);

Serial.println («GPS մոդուլով փոխանցվող NMEA հումքի տվյալների ցուցադրում»);

Serial.println («Միկալ Հարթի կողմից»); Serial.println ();

}

դատարկ շրջան ()

{if (ss.available ()> 0) // Յուրաքանչյուր նիշ հասնելուն պես…

Serial.write (ss.read ()); //… գրեք այն մխիթարել:

}

Ո NOTՇԱԴՐՈԹՅՈՆ. Էսքիզը ընդունման քորոցը (RXPin) սահմանում է որպես 2, չնայած ավելի վաղ ասել էինք, որ փոխանցման (TX) կապը միացված կլինի 2 -րդ կապին: Սա շփոթության ընդհանուր աղբյուր է: RXPin- ը ընդունման քորոցն է (RX) Arduino- ի տեսանկյունից: Բնականաբար, այն պետք է միացված լինի մոդուլի հաղորդիչ (TX) քորոցին և հակառակը:

Վերբեռնեք այս ուրվագիծը և բացեք Serial Monitor- ը 115,200 baud- ով: Եթե ամեն ինչ աշխատում է, ապա պետք է տեսնեք տեքստային տողերի խիտ, անվերջ հոսք: Յուրաքանչյուրը նման կլինի երկրորդ նկարի ՝ պարբերության սկզբում:

Այս տարբերակիչ տողերը հայտնի են որպես NMEA նախադասություններ, այսպես կոչված, քանի որ ձևաչափը հորինել է Marովային էլեկտրոնիկայի ազգային ասոցիացիան: NMEA- ն սահմանում է այս նախադասությունների մի մասը ՝ նավարկության տվյալների համար ՝ սկսած էականից (գտնվելու վայրը և ժամանակը), մինչև էզոթերիկ (արբանյակային ազդանշան-աղմուկ հարաբերակցություն, մագնիսական շեղում և այլն): Արտադրողները անհետեւողական են, թե որ նախադասության տեսակներից են օգտվում իրենց ընդունողները, սակայն GPRMC- ն էական է: Երբ ձեր մոդուլը շտկվի, դուք պետք է տեսնեք այս GPRMC նախադասությունների արդար թիվը:

Քայլ 5: Գտեք ինքներդ ձեզ

Չնչին բան չէ մոդուլային հումքի արդյունքը փոխակերպելը ձեր ծրագրի իրական օգտագործման տեղեկատվության: Բարեբախտաբար, արդեն կան մի քանի հիանալի գրադարաններ, որոնք կարող են դա անել ձեզ համար: Լիմոր Ֆրիդի հանրաճանաչ Adafruit GPS գրադարանը հարմար ընտրություն է, եթե օգտագործում եք նրանց Ultimate breakout- ը: Այն գրված է Ultimate- ի համար յուրահատուկ գործառույթներ միացնելու համար (ինչպես տվյալների ներքին գրանցումը) և ավելացնում է որոշ ինքնատիպ զանգեր և սուլիչներ: Այնուամենայնիվ, իմ սիրելի վերլուծական գրադարանը, և ահա ես, իհարկե, լիովին անաչառ եմ, այն է, ինչ ես գրել եմ, որը կոչվում է TinyGPS ++: Ես նախագծեցի, որ այն լինի համապարփակ, հզոր, հակիրճ և հեշտ օգտագործման համար: Եկեք այն վերցնենք պտտվելու համար:

Քայլ 6: Կոդավորում TinyGPS ++ - ով

Merրագրավորողի տեսանկյունից, TinyGPS ++ օգտագործումը շատ պարզ է.

1) Ստեղծեք gps օբյեկտ:

2) Ուղղորդեք յուրաքանչյուր նիշ, որը մոդուլից հասնում է օբյեկտ `օգտագործելով gps.encode ():

3) Երբ դուք պետք է իմանաք ձեր դիրքը կամ բարձրությունը կամ ժամանակը կամ ամսաթիվը, պարզապես հարցրեք gps օբյեկտը:

#ներառել #ներառել

#սահմանի RXPin 2

#սահմանի TXPin 3

#սահմանեք GPSBaud 4800

#սահմանեք ConsoleBaud 115200

// Սերիական միացում GPS սարքին oftրագրային ապահովում Սերիալ ss (RXPin, TXPin);

// TinyGPS ++ օբյեկտը

TinyGPSPlus GPS;

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println («GPS օրինակ 2»);

Serial.println ("Պարզ որոնիչ, որն օգտագործում է TinyGPS ++:");

Serial.println («Միկալ Հարթի կողմից»);

Serial.println ();

}

դատարկ շրջան () {

// Եթե որևէ կերպար է ժամանել GPS- ից, /

/ ուղարկեք դրանք TinyGPS ++ օբյեկտին

while (ss.available ()> 0)

gps.encode (ss.read ());

// Եկեք ցուցադրենք նոր տեղադրությունն ու բարձրությունը

// երբ դրանցից որևէ մեկը թարմացվել է:

եթե (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("Որտեղից:");

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

Serial.print (",");

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

Serial.print ("Բարձրություն:");

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

}

}

Մեր երկրորդ հավելվածը անընդհատ ցուցադրում է ստացողի գտնվելու վայրը և բարձրությունը ՝ օգտագործելով TinyGPS ++ ՝ վերլուծելու համար: Իրական սարքում դուք կարող եք այս տվյալները մուտքագրել SD քարտ կամ ցուցադրել դրանք LCD- ով: Գրավեք գրադարանը և ուրվագծեք FindingYourself.ino (վերևում): Տեղադրեք գրադարանը, ինչպես միշտ, Arduino գրադարանների պանակում: Վերբեռնեք էսքիզը ձեր Arduino- ում և բացեք Serial Monitor- ը 115, 200 baud համարով: Դուք պետք է տեսնեք ձեր գտնվելու վայրի և բարձրության թարմացումը իրական ժամանակում: Exactlyշգրիտ տեղը տեսնելու համար տեղադրեք լայնության/երկայնության կոորդինատներից մի քանիսը Google Քարտեզներում: Այժմ միացրեք ձեր նոութբուքը և գնացեք զբոսանքի կամ քշելու: (Բայց հիշեք, որ ձեր աչքերը ճանապարհին պահեք):

Քայլ 7: «ՉՈՐՐՈՐԴ ՉԱՓԸ»

Թեև մենք GPS- ը կապում ենք տարածության գտնվելու վայրի հետ, մի մոռացեք, որ այդ արբանյակները փոխանցում են նաև ժամանակի և տվյալների դրոշմանիշներ: Միջին GPS ժամացույցը ճշգրիտ է վայրկյանի մեկ տասներորդ միլիոներորդից, իսկ տեսական սահմանը նույնիսկ ավելի բարձր է: Նույնիսկ եթե ձեզ անհրաժեշտ է ձեր նախագիծը միայն ժամանակին հետևելու համար, GPS մոդուլը կարող է լինել ամենաէժան և ամենահեշտ լուծումը:

FindingYourself.ino- ն գերճշգրիտ ժամացույցի վերածելու համար պարզապես փոխեք վերջին մի քանի տողերն այսպես.

եթե (gps.time.isUpdated ()) {

char buf [80];

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

}

Քայլ 8: Գտեք ձեր ճանապարհը

Գտնելով ձեր ճանապարհը
Գտնելով ձեր ճանապարհը

Մեր երրորդ և վերջին կիրառումը անձնական մարտահրավերի արդյունքն է ՝ կարդալ TinyGPS ++ էսքիզ, ավելի քան 100 տող կոդով, որը օգտվողին կուղղորդի դեպի նպատակակետ ՝ օգտագործելով տեքստային պարզ հրահանգներ, ինչպիսիք են ՝ «ուղիղ պահել» կամ «շեղվել ձախ»:

#ներառել #ներառել

#սահմանի RXPin 2

#սահմանի TXPin 3

#սահմանեք GPSBaud 4800

#սահմանեք ConsoleBaud 115200

// Սերիական միացում GPS սարքին oftրագրային ապահովում Սերիալ ss (RXPin, TXPin);

// TinyGPS ++ օբյեկտ TinyGPSPlus gps;

անստորագիր երկար lastUpdateTime = 0;

#սահմանել EIFFEL_LAT 48.85823#սահմանել EIFFEL_LNG 2.29438

/* Այս օրինակը ցույց է տալիս հիմնական շրջանակը, թե ինչպես կարող եք օգտագործել ընթացքը և հեռավորությունը ՝ մարդուն (կամ անօդաչու թռչող սարքը) նպատակակետ ուղղորդելու համար: Այս նպատակակետը Էյֆելյան աշտարակն է: Փոխեք այն, ինչպես պահանջվում է:

Լատ/երկար կոորդինատը ստանալու ամենահեշտ ձևը ՝ Google Քարտեզներում (maps.google.com) աջ սեղմել նպատակակետին և ընտրել «Ի՞նչ է այստեղ»: Սա ճշգրիտ արժեքները դնում է որոնման դաշտում:

*/

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println («GPS օրինակ 3»);

Serial.println («Ուղղորդման ոչ այնքան համապարփակ համակարգ»);

Serial.println («Միկալ Հարթի կողմից»);

Serial.println ();

}

դատարկ շրջան () {

// Եթե GPS- ից որևէ կերպար է ժամանել, // ուղարկեք դրանք TinyGPS ++ օբյեկտին (ss.available ()> 0) gps.encode (ss.read ());

// Ամեն 5 վայրկյանը մեկ կատարեք թարմացում:

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = միլիարդ ();

Serial.println ();

// Ստեղծեք մեր ներկայիս կարգավիճակը

կրկնակի distanceToDestination = TinyGPSPlus:: distanceBetween

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

կրկնակի courseToDestination = TinyGPSPlus:: courseTo

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

const char *directionToDestination = TinyGPSPlus:: կարդինալ (courseToDestination);

int courseChangeNeeded = (int) (360 + courseToDestination - gps.course.deg ()) % 360;

// կարգաբերում 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 ());

// Նշանակման վայրից 20 մետր հեռավորության վրա: Մենք այստեղ ենք

եթե (distanceToDestination <= 20.0)

{Serial.println ("ՇՆՈՐՀԱՎՈՐՈԹՅՈՆ. Դուք հասել եք");

ելք (1);

}

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

Serial.println («մետր գնալ»);

Serial.print ("ՀԱSTRՈ:ՈԹՅՈ:Ն".);

// կանգնած? Պարզապես նշեք, թե որ ուղղությամբ գնալ:

եթե (gps.speed.kmph () <2.0)

{

Serial.print («Գլուխ»);

Serial.print (directionToDestination);

Serial.println (".");

վերադարձ;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Շարունակեք ուղիղ առաջ");

այլապես, եթե (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println («Թեքվեք մի փոքր ձախ»);

այլապես, եթե (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println («Թեթևակի դեպի աջ»);

այլապես, եթե (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println («Թեքվեք ձախ»);

այլապես, եթե (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println («Թեքվեք աջ»);

ուրիշ

Serial.println («Ամբողջովին շրջվեք»);

}

}

Ամեն 5 վայրկյանը մեկ կոդը գրավում է օգտվողի գտնվելու վայրը և ընթացքը (ճանապարհորդության ուղղություն) և հաշվարկում կրողը (ուղղությունը դեպի նպատակակետ) ՝ օգտագործելով TinyGPS ++ courseTo () մեթոդը: Երկու վեկտորների համեմատությունը առաջացնում է ուղիղ կամ շրջվել շարունակելու առաջարկ, ինչպես ցույց է տրված ստորև:

Պատճենեք FindingYourWay.ino էսքիզը (վերևում) և տեղադրեք Arduino IDE- ի մեջ: Տեղադրեք նպատակակետ 1 կմ կամ 2 կմ հեռավորության վրա, ներբեռնեք էսքիզը ձեր Arduino- ում, գործարկեք այն ձեր նոութբուքի վրա և տեսեք, արդյոք այն ձեզ կառաջնորդի այնտեղ: Բայց ավելի կարևոր է ՝ ուսումնասիրեք ծածկագիրը և հասկանաք, թե ինչպես է այն աշխատում:

Քայլ 9: Առաջ գնալ

GPS- ի ստեղծագործական ներուժը հսկայական է: Ամենագոհացուցիչ բաներից մեկը, որ ես երբևէ արել եմ, GPS- ով միացված հանելուկ տուփն է, որը բացվում է միայն մեկ նախապես ծրագրավորված վայրում: Եթե ձեր զոհը ցանկանում է գանձը ներսից փակել, նա պետք է պարզի, թե որտեղ է այդ գաղտնի վայրը և ֆիզիկապես տուփը բերում այնտեղ: Projectրագրի առաջին հանրաճանաչ գաղափարը անտառահատման մի տեսակ սարք է, որը արձանագրում է րոպե առ րոպե դիրքն ու բարձրությունը, ասենք, Տրանս-Փենինի արահետով քայլող արշավի: Կամ ի՞նչ կասեք Breaking Bad- ում DEA գործակալների այն ստոր մագնիսական հետքերից մեկի մասին, որոնք կպչում են վատ տղաների մեքենաներին: Երկուսն էլ լիովին իրագործելի են, և, հավանաբար, հաճելի կլիներ կառուցել, բայց ես ձեզ խրախուսում եմ ավելի ընդարձակ մտածել ՝ այն ապրանքներից դուրս, որոնք արդեն կարող եք գնել Amazon- ից: Այնտեղ մեծ աշխարհ է: Քայլեք որքան հնարավոր է հեռու և լայն:

Խորհուրդ ենք տալիս: