Агуулгын хүснэгт:

GPS ашиглан замаа олох: 9 алхам
GPS ашиглан замаа олох: 9 алхам

Видео: GPS ашиглан замаа олох: 9 алхам

Видео: GPS ашиглан замаа олох: 9 алхам
Видео: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Арваннэгдүгээр
Anonim
GPS ашиглан өөрийн замыг хайж олох
GPS ашиглан өөрийн замыг хайж олох

GPS өгөгдлийг ойлгох, ашиглах хурдан дасгал

  • Шаардлагатай хугацаа: 2 цаг
  • Зардал: 75-150 доллар

Үйлдвэрлэгчдийн хувьд өндөр чанартай гео орон зайн өгөгдлийг электроникийн төсөлд оруулах нь нэлээд хямд болсон. Сүүлийн хэдэн жилийн хугацаанд GPS (Global Positioning System) хүлээн авагч модулиуд нь илүү олон төрлийн, хүчирхэг, Arduino, PIC, Teensy, Raspberry Pi зэрэг хөгжлийн самбартай нэгтгэхэд хялбар болсон. Хэрэв та GPS -ийн эргэн тойронд бүтээх талаар бодож байсан бол та эхлэхэд тохиромжтой цагийг сонгосон байна.

Алхам 1: Энэ нь хэрхэн ажилладаг талаар

GPS модуль бол хиймэл дагуулын флотын мэдэгдэж буй давтамж дээр цацаж буй дохиог боловсруулдаг жижиг радио хүлээн авагч юм. Эдгээр хиймэл дагуулууд тойрог замд дэлхийг тойрон эргэлдэж, маш нарийн байрлал, цагийн мэдээллийг доорх газарт дамжуулдаг. Хэрэв дэлхий дээрх хүлээн авагч эдгээр хиймэл дагуулыг хангалттай "харах" боломжтой бол тэдгээрийг ашиглан өөрийн байршил, өндрийг тооцоолох боломжтой.

GPS мессеж ирэхэд хүлээн авагч эхлээд нэвтрүүлгийн цагийн тэмдгийг шалгаж, хэзээ илгээгдсэнийг нь шалгадаг. Сансар дахь радио долгионы хурд нь мэдэгдэх тогтмол (c) байдаг тул хүлээн авагч нь дохио дамжсан зайг тодорхойлохын тулд нэвтрүүлэг, хүлээн авах хугацааг харьцуулж чаддаг. Дөрвөн ба түүнээс дээш мэдэгдэж буй хиймэл дагуулаас зайгаа тогтоосны дараа өөрийн байрлалыг тооцоолох нь 3D гурвалжингийн маш энгийн асуудал юм. Гэхдээ үүнийг хурдан бөгөөд үнэн зөв хийхийн тулд хүлээн авагч нь 20 хүртэлх өгөгдлийн дамжуулалтыг нэгэн зэрэг таслах чадвартай байх ёстой. - илүү зохимжтой - дэлхийн өнцөг булан бүрээс үргэлж харагддаг. Одоогийн байдлаар 20,000 км өндөр сийрэг үүлэнд бүжиглэж буй бүжиглэж буй 32 GPS хиймэл дагуул байдаг.

Алхам 2: Фенүүдийн баримт

GPS нь Эйнштейний харьцангуйн онолгүйгээр ажиллах боломжгүй байсан, учир нь дэлхийн таталцлын талбайн цаг хугацааны тэлэлтээс болж тойрог замд байдаг атомын цаг 38 микрекундэд нөхөн олговор олгох ёстой.

Алхам 3: Эхлэх

Эхлэх
Эхлэх

Таны төсөл ямар ч байсан GPS -ийг нэгтгэхэд хялбар байдаг. Ихэнх хүлээн авагч модулиуд нь шууд цуваа протоколоор ажилладаг тул хэрэв та хянагчийн самбар дээр нөөц сериал порт олж чадвал физик холболт хийхэд цөөн хэдэн утас хэрэгтэй болно. Тийм биш байсан ч ихэнх хянагчид дурын тээглүүртэй холбогдохын тулд ашиглаж болох "програм хангамж" цуврал горимыг дэмждэг.

Эхлэгчдэд Adafruit -ийн Ultimate GPS Breakout модуль бол сайн сонголт юм. Зах зээл дээр маш олон өрсөлдөгч бүтээгдэхүүн байдаг, гэхдээ Ultimate бол боломжийн үнээр ажилладаг, гагнах эсвэл талхны тавцан дээр холбоход хялбар том нүхнүүд юм.

Нэгдүгээрт, газар болон хүчийг холбоно уу. Arduino -ийн хувьд энэ нь GND микроконтроллерийн нэгийг модулийн GND, +5V зүүг модулийн VIN -тэй холбохыг хэлнэ. Мэдээлэл дамжуулалтыг удирдахын тулд та модулийн TX ба RX тээглүүрийг Arduino руу холбох хэрэгтэй. 0, 1 -р зүү нь "тоног төхөөрөмжийн цуваа порт" эсвэл UART болгон ашиглахаар тусгайлан бүтээгдсэн байсан ч гэсэн би энэ зорилгоор Arduino pin 2 (TX) ба 3 (RX) -ийг дур мэдэн сонгох гэж байна. Яагаад? Учир нь би эдгээр AVR процессоруудын цорын ганц UART-ийг үрэхийг хүсэхгүй байна. Arduino-ийн UART нь USB холбогчтой холбогдсон тул би үүнийг компьютер дээрээ холбож, дибаг хийх боломжтой.

Алхам 4: Мэдээллийн урсгал дахь хуруу

Мэдээллийн урсгал дахь хуруу
Мэдээллийн урсгал дахь хуруу

GPS -ийн модуль таны хүчийг ашиглах үед TX шугам дээр текст өгөгдлийн хэсгийг илгээж эхэлдэг. Энэ нь ганц хиймэл дагуул хараахан хараагүй байж магадгүй, гэхдээ "засварлах" нь хамаагүй, гэхдээ өгөгдлийн усны цорго тэр даруй гарч ирдэг бөгөөд юу гарах нь сонирхолтой юм. Бидний анхны энгийн ноорог (доор) энэ боловсруулаагүй өгөгдлийг харуулахаас өөр юу ч хийхгүй.

#оруулах #RXPin 2 -ийг тодорхойлох

#TXPin 3#тодорхойлох GPSBaud 4800

#desoleBol 115200

// GPS төхөөрөмжийн цуваа холболтSoftwareSerial ss (RXPin, TXPin);

хүчингүй тохиргоо () {

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 ()); // … үүнийг консол дээр бичээрэй

}

ТАЙЛБАР: Ноорог нь хүлээн авах зүүг (RXPin) 2 гэж тодорхойлдог боловч бид өмнө нь дамжуулагч (TX) зүү 2 -р зүүтэй холбогдоно гэж хэлсэн боловч энэ нь төөрөгдөлд оруулах нийтлэг шалтгаан болдог. RXPin бол Arduino -ийн үүднээс хүлээн авах зүү (RX) юм. Мэдээжийн хэрэг, энэ нь модулийн дамжуулагч (TX) зүүтэй холбогдсон байх ёстой бөгөөд эсрэгээр.

Энэхүү ноорогыг байршуулж, Serial Monitor -ийг 115, 200 бод дээр нээнэ үү. Хэрэв бүх зүйл үр дүнтэй бол та таслалаар тусгаарлагдсан текст мөрүүдийн нягт, төгсгөлгүй урсгалыг харах ёстой. Тус бүр догол мөрийн эхэнд байгаа хоёр дахь дүрс шиг харагдах болно.

Эдгээр өвөрмөц мөрүүдийг NMEA өгүүлбэр гэж нэрлэдэг бөгөөд энэ форматыг Далайн электроникийн үндэсний ассоциаци зохион бүтээсэн тул ингэж нэрлэдэг. NMEA нь хэд хэдэн өгүүлбэрийг үндсэн (байршил, цаг хугацаа), эзотерик (хиймэл дагуулын дохиолол, дуу чимээний харьцаа, соронзон хэлбэлзэл гэх мэт) хүртэлх өгөгдөлд тодорхойлдог. Үйлдвэрлэгчид хүлээн авагчид ямар өгүүлбэр ашигладаг талаар хоорондоо зөрчилддөг боловч GPRMC нь маш чухал юм. Таны модуль засвар авсны дараа та эдгээр GPRMC өгүүлбэрүүдийн нэлээд олон тоог харах ёстой.

Алхам 5: Өөрийгөө олох

Түүхий модулийн гаралтыг таны програм үнэхээр ашиглаж болох мэдээлэл болгон хөрвүүлэх нь тийм ч чухал биш юм. Аз болоход, танд зориулж хийх боломжтой агуу номын сангууд байдаг. Limor Fried -ийн алдартай Adafruit GPS -ийн номын сан нь хэрэв та тэдний эцсийн хувилбарыг ашиглаж байгаа бол тохиромжтой сонголт юм. Энэ нь Ultimate -ийн онцлог шинж чанаруудыг идэвхжүүлэхийн тулд бичигдсэн (дотоод өгөгдөл бүртгэх гэх мэт) бөгөөд өөрийн гэсэн өвөрмөц хонх, шүгэл нэмдэг. Гэхдээ миний хамгийн дуртай задлан шинжлэх номын сан бол миний хувьд мэдээжийн хэрэг огтхон ч харагддаггүй - миний бичсэн TinyGPS ++ ном юм. Би үүнийг цогц, хүчирхэг, товч бөгөөд ашиглахад хялбар байхаар зохион бүтээсэн. Үүнийг эргүүлж харцгаая.

Алхам 6: TinyGPS ++ ашиглан кодлох

Программистын үзэж байгаагаар TinyGPS ++ ашиглах нь маш энгийн:

1) gps объект үүсгэх.

2) Модулаас ирсэн тэмдэгт бүрийг gps.encode () ашиглан объект руу чиглүүлнэ.

3) Хэрэв та өөрийн байршил, өндөр, цаг, огноог мэдэх шаардлагатай бол gps объектыг асуугаарай.

#оруулах #оруулах

#RXPin 2 -ийг тодорхойлох

#TXPin 3 -ийг тодорхойлох

#GPSBaud 4800 -ийг тодорхойлох

#desole ConsoleBaud 115200

// GPS төхөөрөмжийн цуваа холболтSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ объект

TinyGPSPlus gps;

хүчингүй тохиргоо () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -ийн жишээ 2");

Serial.println ("TinyGPS ++ ашигладаг энгийн трекер.");

Serial.println ("Микал Харт");

Serial.println ();

}

void loop () {

// Хэрэв GPS -ээс ямар нэгэн тэмдэгт ирсэн бол, /

/ тэдгээрийг TinyGPS ++ объект руу илгээх

while (ss.available ()> 0)

gps.encode (ss.read ());

// Шинэ байршил, өндрийг харуулъя

// аль нэг нь шинэчлэгдэх бүрт

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

{

Serial.print ("Байршил:");

Цуваа.хэвлэх (gps.location.lat (), 6);

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 дээр нээнэ үү. Та өөрийн байршил, өндрийг бодит цаг хугацаанд шинэчилж байгааг харах ёстой. Хаана зогсож байгаагаа харахын тулд өргөрөг/уртрагийн координатын зарим хэсгийг Google газрын зураг дээр буулгана уу. Одоо зөөврийн компьютерээ холбоод зугаалж эсвэл машинаар яваарай. (Гэхдээ зам дээр нүдээ анихаа мартуузай!)

Алхам 7: "ДӨРӨВДҮГЭЭР ХЭМЖЭЭ"

Хэдийгээр бид GPS-ийг орон зайн байршилтай холбодог боловч эдгээр хиймэл дагуулууд нь цаг болон өгөгдлийн тэмдэг дамжуулдаг гэдгийг бүү мартаарай. GPS-ийн дундаж цаг нь секундын арван саяны нэг хүртэл нарийвчлалтай бөгөөд онолын хязгаар нь бүр ч өндөр байдаг. Хэдийгээр танд цагийг хянахад зөвхөн төсөл хэрэгтэй байсан ч GPS модуль нь хамгийн хямд бөгөөд хялбар шийдэл байж магадгүй юм.

FindingYourself.ino -г маш нарийвчлалтай цаг болгохын тулд сүүлийн хэдэн мөрийг дараах байдлаар өөрчилнө үү.

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "Цаг нь%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Алхам 8: Замаа олох

Замаа хайж байна
Замаа хайж байна

Бидний гурав дахь, эцсийн програм бол "шулуун байлгах" эсвэл "зүүн тийш чиглүүлэх" гэх мэт энгийн текстийн зааврыг ашиглан хэрэглэгчийг хүрэх газар руу чиглүүлэх 100 -аас цөөн мөрийн кодтой, унших боломжтой TinyGPS ++ ноорог бичих хувийн сорилтын үр дүн юм.

#оруулах #оруулах

#RXPin 2 -ийг тодорхойлох

#TXPin 3 -ийг тодорхойлох

#GPSBaud 4800 -ийг тодорхойлох

#desole ConsoleBaud 115200

// GPS төхөөрөмжийн цуваа холболтSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ объект TinyGPSPlus gps;

гарын үсэг зураагүй урт lastUpdateTime = 0;

#EIFFEL_LAT 48.85823#EIFFEL_LNG тодорхойлох 2.29438

/* Энэ жишээ нь хүнийг (эсвэл нисгэгчгүй онгоцыг) хүрэх газар руу чиглүүлэхийн тулд курс ба зайг хэрхэн ашиглах талаархи үндсэн хүрээг харуулж байна. Энэ очих газар бол Эйфелийн цамхаг юм. Үүнийг шаардлагатай бол өөрчилнө үү

Лат/урт координат авах хамгийн хялбар арга бол Google газрын зураг (maps.google.com) дээрх очих газар дээр хулганы баруун товчийг дараад "Энд юу байна?" Гэснийг сонгох явдал юм. Энэ нь хайлтын талбарт яг утгыг оруулна

*/

хүчингүй тохиргоо () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -ийн жишээ 3");

Serial.println ("Тийм ч өргөн хүрээтэй бус удирдамжийн систем");

Serial.println ("Микал Харт");

Serial.println ();

}

void loop () {

// Хэрэв GPS -ээс ямар нэгэн тэмдэгт ирсэн бол // тэдгээрийг TinyGPS ++ объект руу илгээнэ үү (ss.available ()> 0) gps.encode (ss.read ());

// 5 секунд тутамд шинэчлэлт хийж байгаарай

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Бидний одоогийн статусыг тогтооно уу

давхар зайToDestination = TinyGPSPlus:: distanceBetween

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

double 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:");

Цуваа.хэвлэх (courseToDestination);

Serial.print ("CurCourse:");

Цуваа.хэвлэх (gps.course.deg ());

Serial.print ("Dir2Dest:");

Цуваа.хэвлэх (directionToDestination);

Serial.print ("RelCourse:");

Цуваа.хэвлэх (courseChangeNeeded);

Serial.print ("CurSpd:");

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

// Очих газраас 20 метрийн дотор уу? Энд байсан

if (distanceToDestination <= 20.0)

{Serial.println ("БАЯРЛАЛАА: Та ирлээ!");

гарах (1);

}

Serial.print ("DISTANCE:"); Цуваа.хэвлэх (distanceToDestination);

Serial.println ("метр явах ёстой.");

Serial.print ("ЗААВАР:");

// Одоохондоо? Аль чиглэл рүү явахаа л зааж өг

хэрэв (gps.speed.kmph () <2.0)

{

Serial.print ("Толгой");

Цуваа.хэвлэх (directionToDestination);

Serial.println (".");

буцах;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Шууд урагшаа үргэлжлүүлээрэй!");

өөр бол (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Бага зэрэг зүүн тийш чиглэнэ.");

өөр бол (courseChangeNeeded> = 15 &&CursChangeNeeded <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-ээр ажилладаг таавар хайрцаг байв. Хэрэв таны хохирогч эрдэнэсийг дотроос нь түгжихийг хүсч байвал тэр нууц байршил хаана байгааг олж, хайрцгийг тэнд авчрах ёстой. Төслийн хамгийн алдартай санаа бол Транс-Пеннин мөрөөр алхаж буй явган хүний байрлал, өндрийг минут тутамд бүртгэдэг мод бэлтгэх төхөөрөмж юм. Эсвэл Breaking Bad дахь DEA агентлагуудын муу санаат соронзон мөрдөгчдийн нэг нь муу хүмүүсийн машинд наалддаг бол яах вэ? Энэ хоёрыг хоёуланг нь хийх боломжтой бөгөөд үүнийг бүтээх нь хөгжилтэй байх болно, гэхдээ би Амазон дээрээс худалдаж авах боломжтой зүйлээсээ илүү өргөн цар хүрээтэй бодохыг зөвлөж байна. Энэ бол том ертөнц юм. Аль болох хол, өргөнөөр тэнүүчлээрэй.

Зөвлөмж болгож буй: