Mundarija:

GPS yordamida o'z yo'lingizni topish: 9 qadam
GPS yordamida o'z yo'lingizni topish: 9 qadam

Video: GPS yordamida o'z yo'lingizni topish: 9 qadam

Video: GPS yordamida o'z yo'lingizni topish: 9 qadam
Video: "2023 Toyota Tacoma 4x4: Innovations for Your Next Off-Road Journey. 2023 Toyota Tacoma 4x4 interior 2024, Iyul
Anonim
GPS yordamida o'z yo'lingizni toping
GPS yordamida o'z yo'lingizni toping

GPS ma'lumotlarini tushunish va qo'llash bo'yicha tezkor mashq

  • Kerakli vaqt: 2 soat
  • Narxi: 75-150 dollar

Ishlab chiqaruvchilar uchun yuqori sifatli geografik ma'lumotlarni elektron loyihalarga kiritish ancha arzonlashdi. So'nggi bir necha yil ichida GPS (Global Positioning System) qabul qilish modullari ancha xilma -xil, kuchli va Arduino, PIC, Teensy va Raspberry Pi kabi ishlab chiqarish platalari bilan birlashishi osonlashdi. Agar siz GPS qurishni o'ylayotgan bo'lsangiz, siz boshlash uchun yaxshi vaqtni tanladingiz.

1 -qadam: Bu qanday ishlaydi

GPS moduli - ma'lum chastotalarda sun'iy yo'ldoshlar parki orqali uzatiladigan signallarni qayta ishlaydigan kichik radio qabul qilgich. Bu sun'iy yo'ldoshlar Yer atrofida aylana atrofida aylanib, juda aniq joylashuv va soat ma'lumotlarini erga uzatadilar. Agar erga ulangan qabul qilgich bu sun'iy yo'ldoshlarni etarlicha "ko'rishi" mumkin bo'lsa, u ularni o'z joylashuvi va balandligini hisoblash uchun ishlatishi mumkin.

GPS -xabar kelganda, qabul qilgich avval uning uzatilgan vaqtini tekshiradi va qachon yuborilganligini bilib oladi. Radio to'lqinining kosmosdagi tezligi ma'lum bo'lgan doimiy (c) bo'lgani uchun, qabul qiluvchi signalni bosib o'tgan masofani aniqlash uchun translyatsiya va qabul vaqtlarini solishtirishi mumkin. Ma'lumki, to'rt yoki undan ortiq sun'iy yo'ldoshlardan masofani aniqlaganidan so'ng, o'z pozitsiyasini hisoblash 3D uchburchaklarining juda oddiy muammosi hisoblanadi. Lekin buni tez va aniq bajarish uchun qabul qilgich bir vaqtning o'zida 20 tagacha ma'lumot oqimini tezlik bilan kesib o'tishi kerak, chunki GPS tizimi Yerning hamma joyida foydalanish uchun e'lon qilingan maqsadga ega bo'lgani uchun, tizim kamida to'rtta yo'ldosh bo'lishini ta'minlashi kerak. - afzalroq - har doim dunyoning har bir nuqtasidan ko'rinadi. Hozirgi vaqtda 32 GPS yo'ldoshlari balandligi 20 000 kilometr bo'lgan siyrak bulutda sinchkovlik bilan xoreografik raqsni ijro etishmoqda.

2 -qadam: Muxlis fakt

GPS Eynshteynning nisbiylik nazariyasisiz ishlay olmasdi, chunki Yerning tortishish maydonidagi vaqt kengayishidan har kuni aylanadigan atom soatlari 38 mikrosekundga kompensatsiya to'lanishi kerak.

3 -qadam: Ishga kirishish

Ishni boshlash
Ishni boshlash

Sizning loyihangiz qanday bo'lishidan qat'i nazar, GPS -ni birlashtirish oson. Qabul qilish modullarining ko'pchiligi oddiy ketma -ket protokol bilan aloqa o'rnatadi, shuning uchun agar siz boshqaruv panelida zaxira ketma -ket portni topsangiz, jismoniy ulanishni amalga oshirish uchun bir nechta sim kerak bo'ladi. Hatto bo'lmasa ham, ko'pchilik nazoratchilar o'zboshimchalik bilan pinlarga ulanish uchun ishlatilishi mumkin bo'lgan "dasturiy ta'minot" taqlid qilingan rejimini qo'llab -quvvatlaydi.

Yangi boshlanuvchilar uchun Adafruit -ning Ultimate GPS Breakout moduli yaxshi tanlovdir. Bozorda juda ko'p raqobatbardosh mahsulotlar bor, lekin Ultimate-bu oqilona narxda, ulkan teshiklari bo'lgan, lehimlash yoki non taxtasiga ulash oson.

Birinchidan, er va quvvatni ulang. Arduino iborasida bu GND mikrokontrollerlaridan birini modulning GND ga, +5V pinni esa modulning VIN kodiga ulashni anglatadi. Ma'lumot uzatishni boshqarish uchun siz modulning TX va RX pinlarini Arduino -ga ulashingiz kerak. Men shu maqsadda o'zboshimchalik bilan Arduino pin 2 (TX) va 3 (RX) ni tanlayman, garchi 0 va 1 -pinlar "apparat ketma -ket port" yoki UART sifatida foydalanish uchun maxsus mo'ljallangan bo'lsa -da. Chunki men bu AVR protsessorlarining yagona UARTini yo'qotishni xohlamayman. Arduino-ning UART bortidagi USB-ulagichga qattiq ulangan va men uni disk raskadrovka uchun kompyuterga ulab qo'yishni yoqtiraman.

4 -qadam: Ma'lumotlar oqimining barmog'i

Ma'lumot oqimidagi oyoq barmog'i
Ma'lumot oqimidagi oyoq barmog'i

Quvvat ishlatilgandan so'ng, GPS moduli TX liniyasida matnli ma'lumotlarning bir qismini yuborishni boshlaydi. U hali ham bitta sun'iy yo'ldoshni ko'rmasligi mumkin, bundan ham kamroq "tuzatish" bor, lekin ma'lumotlar oqimi darhol ishga tushadi va nima chiqishini ko'rish qiziq. Bizning birinchi oddiy eskizimiz (pastda) bu ishlov berilmagan ma'lumotlarni ko'rsatishdan boshqa narsani qilmaydi.

#RXPin 2 ni belgilang

#dexine TXPin 3#GPSBaud 4800 ni aniqlang

#desof ConsoleBaud 115200

// GPS qurilmasiga ketma -ket ulanishSoftwareSerial ss (RXPin, TXPin);

bo'sh o'rnatish () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -misol 1");

Serial.println ("GPS moduli orqali uzatilgan NMEA ma'lumotlarini ko'rsatish.");

Serial.println ("Mikal Xart"); Serial.println ();

}

bo'sh halqa ()

{if (ss.available ()> 0) // Har bir belgi kelganda…

Serial.write (ss.read ()); // … uni konsolga yozing

}

ESLATMA: eskizda qabul qilish pimi (RXPin) 2 deb belgilanadi, garchi biz ilgari uzatuvchi (TX) pin 2 -pin bilan bog'lanishini aytgan bo'lsak -da, bu chalkashliklarning keng tarqalgan manbaidir. RXPin - Arduino nuqtai nazaridan qabul qilish pimi (RX). Tabiiyki, u modulning uzatuvchi (TX) piniga ulangan bo'lishi kerak va aksincha.

Ushbu eskizni yuklang va Serial monitorni 115, 200 bodda oching. Agar hamma narsa ishlayotgan bo'lsa, siz vergul bilan ajratilgan zich va cheksiz matn satrini ko'rishingiz kerak. Har bir paragraf boshidagi ikkinchi rasmga o'xshaydi.

Bu o'ziga xos satrlar NMEA jumlalari deb nomlanadi, shuning uchun format Milliy dengiz elektronika assotsiatsiyasi tomonidan ixtiro qilingan. NMEA ushbu jumlalarning bir nechtasini asosiy (joylashuvi va vaqti) dan ezoterikgacha (yo'ldosh signallarining shovqin nisbati, magnit dispersiyasi va boshqalar) o'z ichiga olgan navigatsion ma'lumotlar uchun belgilaydi. Ishlab chiqaruvchilar qabul qiluvchilar qaysi jumlalarni ishlatishi haqida bir xil emas, lekin GPRMC muhim ahamiyatga ega. Modulingiz tuzatilgandan so'ng, siz ushbu GPRMC jumlalarining adolatli sonini ko'rishingiz kerak.

5 -qadam: O'zingizni toping

Xom modul chiqishini dasturingiz foydalanishi mumkin bo'lgan ma'lumotlarga aylantirish unchalik ahamiyatli emas. Yaxshiyamki, buni siz uchun qiladigan ba'zi ajoyib kutubxonalar mavjud. Limor Fridning mashhur Adafruit GPS kutubxonasi, agar siz ularning yakuniy natijasidan foydalanayotgan bo'lsangiz, qulay tanlovdir. Bu Ultimate -ga xos bo'lgan funktsiyalarni yoqish uchun yozilgan (masalan, ichki ma'lumotlarni yozib olish) va o'ziga xos qo'ng'iroq va hushtaklarni qo'shadi. Ammo, mening sevimli tahlil qilish kutubxonasi - va men, albatta, xolisman - bu men yozgan TinyGPS ++. Men uni har tomonlama, kuchli, ixcham va ishlatish uchun qulay qilib yaratdim. Keling, uni aylantirish uchun olaylik.

6 -qadam: TinyGPS ++ yordamida kodlash

Dasturchi nuqtai nazaridan, TinyGPS ++ dan foydalanish juda oddiy:

1) gps ob'ektini yarating.

2) Moduldan kelgan har bir belgini gps.encode () yordamida ob'ektga yo'naltiring.

3) Agar siz o'z pozitsiyangizni, balandligingizni, vaqtingizni yoki sanangizni bilishingiz kerak bo'lsa, gps ob'ektini so'rang.

#qo'shing #qo'shing

#RXPin 2 ni aniqlang

#TXPin 3 ni aniqlang

#GPSBaud 4800 ni aniqlang

#desof ConsoleBaud 115200

// GPS qurilmasiga ketma -ket ulanishSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ obyekti

TinyGPSPlus GPS;

bo'sh o'rnatish () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -misol 2");

Serial.println ("TinyGPS ++ yordamida oddiy kuzatuvchi.");

Serial.println ("Mikal Xart");

Serial.println ();

}

void loop () {

// Agar biron bir belgi GPS -dan kelgan bo'lsa, /

/ ularni TinyGPS ++ ob'ektiga yuboring

while (ss.available ()> 0)

gps.encode (ss.read ());

// Keling, yangi joy va balandlikni ko'rsataylik

// har ikkalasi ham yangilanganida

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

{

Serial.print ("Manzil:");

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

Serial.print (",");

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

Serial.print ("Balandlik:");

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

}

}

Bizning ikkinchi ilovamiz doimiy ravishda qabul qiluvchining joylashuvi va balandligini ko'rsatadi, TinyGPS ++ yordamida tahlil qilishga yordam beradi. Haqiqiy qurilmada siz ushbu ma'lumotlarni SD -kartaga yozib qo'yishingiz yoki LCD displeyda ko'rsatishingiz mumkin. Kutubxonani oling va FindingYourself.ino eskizini (yuqoridagi) oling. Kutubxonani odatdagidek Arduino kutubxonalari jildiga o'rnating. Eskizni Arduino -ga yuklang va Serial monitorni 115, 200 -da oching. Joylashuvingiz va balandligingiz real vaqtda yangilanishini ko'rishingiz kerak. Qaerda ekanligingizni aniq bilish uchun, kenglik va uzunlik koordinatalarini Google Xaritalarga joylashtiring. Endi noutbukni ulang va piyoda sayohat qiling. (Lekin ko'zingizni yo'lda saqlashni unutmang!)

7 -qadam: "To'rtinchi o'lchov"

Garchi biz GPSni kosmosdagi joylashuvi bilan bog'lasak ham, sun'iy yo'ldoshlar vaqt va ma'lumotlar belgilarini uzatayotganini unutmang. O'rtacha GPS-soat sekundning o'n milliondan biriga to'g'ri keladi va nazariy chegara bundan ham yuqori. Vaqtni kuzatib borish uchun sizga faqat loyihangiz kerak bo'lsa ham, GPS moduli hali ham eng arzon va eng oson echim bo'lishi mumkin.

FindingYourself.inoni o'ta aniq soatga aylantirish uchun oxirgi qatorlarni shunday o'zgartiring:

agar (gps.time.isUpdated ()) {

char buf [80];

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

}

8 -qadam: O'z yo'lingizni toping

Sizning yo'lingizni topish
Sizning yo'lingizni topish

Bizning uchinchi va oxirgi ilovamiz - bu "to'g'ri ushlab turish" yoki "chapga burilish" kabi oddiy matnli ko'rsatmalar yordamida foydalanuvchini manzilga yo'naltiradigan, 100 dan kam bo'lmagan satrda o'qilishi mumkin bo'lgan TinyGPS ++ eskizini yozishning shaxsiy qiyinchiliklari natijasidir.

#qo'shing #qo'shing

#RXPin 2 ni aniqlang

#TXPin 3 ni aniqlang

#GPSBaud 4800 ni aniqlang

#desof ConsoleBaud 115200

// GPS qurilmasiga ketma -ket ulanishSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ obyekti TinyGPSPlus gps;

imzosiz uzoq lastUpdateTime = 0;

#EIFFEL_LAT 48.85823 ni belgilang#EIFFEL_LNG 2.29438 ni aniqlang

/* Bu misolda odamni (yoki dronni) manzilga yo'naltirish uchun kurs va masofadan qanday foydalanish mumkinligi haqida asosiy ma'lumotlar ko'rsatilgan. Bu manzil - Eyfel minorasi. Zarur bo'lganda o'zgartiring

Lat/long koordinatasini olishning eng oson usuli-Google Xaritalar (maps.google.com) manzilini o'ng tugmasini bosib, "Bu erda nima?" Ni tanlash. Bu aniq qiymatlarni qidirish maydoniga qo'yadi

*/

bo'sh o'rnatish () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -misol 3");

Serial.println ("Keng qamrovli bo'lmagan rahbarlik tizimi");

Serial.println ("Mikal Xart");

Serial.println ();

}

void loop () {

// Agar GPS -dan biron bir belgi kelgan bo'lsa, // ularni TinyGPS ++ ob'ektiga yuborish paytida (ss.available ()> 0) gps.encode (ss.read ());

// Har 5 soniyada yangilanib turing

agar (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Hozirgi maqomimizni o'rnating

double distanceToDestination = 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:: kardinal (courseToDestination);

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

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

Serial.print (courseToDestination);

Serial.print ("CurCourse:");

Seriyali chop etish (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

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

// Belgilangan joyga 20 metr ichida? Biz shu erdamiz

agar (masofaToDestination <= 20.0)

{Serial.println ("TABRIKLAR: Siz keldingiz!");

chiqish (1);

}

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

Serial.println ("boradigan metrlar.");

Serial.print ("KO'RSATMA:");

// Jim turasizmi? Faqat qaysi yo'nalishga borishni ko'rsating

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

{

Serial.print ("Bosh");

Serial.print (directionToDestination);

Serial.println (".");

qaytish;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("To'g'ridan -to'g'ri davom eting!");

aks holda (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Biroz chapga buriling.");

aks holda (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Biroz o'ngga buriling.");

aks holda (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Chapga buriling.");

aks holda (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("O'ngga buriling.");

boshqa

Serial.println ("To'liq aylaning.");

}

}

Kod har 5 soniyada TinyGPS ++ courseTo () usuli yordamida foydalanuvchining joylashuvi va yo'nalishini (yurish yo'nalishi) yozib oladi va rulmanni (belgilangan joyga yo'nalishini) hisoblab chiqadi. Ikkala vektorni taqqoslash, quyida ko'rsatilganidek, to'g'ri yoki burilishni davom ettirish taklifini beradi.

FindingYourWay.ino (yuqoridagi) eskizini nusxalash va Arduino IDE -ga joylashtirish. 1 yoki 2 km masofada manzilni belgilang, eskizni Arduino -ga yuklang, noutbukda ishga tushiring va u sizni bu erga yo'naltiradimi -yo'qligini bilib oling. Lekin bundan ham muhimi, kodni o'rganish va uning qanday ishlashini tushunish.

9 -qadam: Oldinga o'tish

GPS -ning ijodiy salohiyati juda katta. Men qilgan eng qoniqarli narsalardan biri bu faqat oldindan dasturlashtirilgan joyda ochiladigan GPS-ga ega jumboq qutisi edi. Agar sizning qurboningiz xazinani ichkariga qulflashni xohlasa, u bu maxfiy joy qayerda ekanligini aniqlab, qutini jismonan olib kelishi kerak. Mashhur birinchi loyiha g'oyasi-bu, masalan, Trans-Pennin yo'lida yurgan sayohatchining daqiqali joylashuvi va balandligi bo'yicha daqiqalarni yozib oladigan yog'ochni yozish vositasi. Yoki yomon odamlarning mashinalariga "Breaking Bad" dagi DEA agentlarining ayyor magnit izlovchilaridan biri haqida nima deyish mumkin? Ikkalasini ham amalga oshirish mumkin va, ehtimol, qurish juda qiziq bo'lardi, lekin men sizni Amazonda sotib oladigan narsalardan tashqari, kengroq o'ylashga taklif qilaman. Bu katta dunyo. Iloji boricha uzoq va keng yurish.

Tavsiya: