Mundarija:
- 1 -qadam: Bu qanday ishlaydi
- 2 -qadam: Muxlis fakt
- 3 -qadam: Ishga kirishish
- 4 -qadam: Ma'lumotlar oqimining barmog'i
- 5 -qadam: O'zingizni toping
- 6 -qadam: TinyGPS ++ yordamida kodlash
- 7 -qadam: "To'rtinchi o'lchov"
- 8 -qadam: O'z yo'lingizni toping
- 9 -qadam: Oldinga o'tish
Video: GPS yordamida o'z yo'lingizni topish: 9 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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
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
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
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:
Oilaviy qidiruvda oilaviy daraxtingiz ichida tugallanmagan ma'bad ishini topish uchun Umidning ko'krak kengaytmasidan foydalanish: 11 qadam
Oilaviy qidiruvda oilaviy daraxtingizda tugallanmagan ma'bad ishini topish uchun Umidning ko'krak kengaytmasidan foydalanish: Ushbu ko'rsatmaning maqsadi, "Umid sandig'i" kengaytmasi yordamida tugallanmagan ma'bad marosimlari bo'lgan ota -bobolaringizni oilaviy qidirishda oilaviy daraxtingizni qanday qidirishni ko'rsatishdir. Umid sandig'idan foydalanish mos kelmaydigan narsalarni qidirishni ancha tezlashtirishi mumkin
Arduino -dan foydalanish avtomatik kran (sensorsiz) - COVID -19 inqirozi paytida qo'lingizni yuving va xavfsiz bo'ling: 4 qadam
Arduino -dan foydalanadigan avtomatik kran (sensorsiz) - COVID -19 inqirozi paytida qo'lingizni yuving va xavfsiz bo'ling: Salom do'stlar! Umid qilamanki, barchangiz yaxshi va hozir xavfsizsiz. Bu postda men sizga qo'llarimni xavfsiz yuvishga mo'ljallangan prototipim haqida tushuntiraman. Men bu loyihani cheklangan resurslar bilan qildim. Xohlovchilar ushbu dasturni qayta tuzishi mumkin
Qo'lingizni yuvish uchun taymerni kamroq aloqa qilish uchun #Covid-19: 3 qadam
Qo'lingizni yuvish uchun taymerni kamroq aloqa qilish uchun #Covid-19: Salom! Bu darslik sizga taymer bilan kamroq aloqa qilishni ko'rsatib beradi. Haqiqatan ham koronavirus epidemiyasi davrida qo'llarni yaxshilab yuvish juda muhim. Shuning uchun men bu taymerni yaratdim. Bu taymer uchun men Nokia 5110 LCD -dan foydalandim
OWI robot qo'lini boshqarish uchun qo'lingizni silkiting Iplar biriktirilmagan: 10 qadam (rasmlar bilan)
OWI robot qo'lini boshqarish uchun qo'lingizni silkiting … Stringlar biriktirilmagan: IDEA: Instructables.com saytida (2015 yil 13 -may holatiga ko'ra) OWI robotli qo'lini o'zgartirish yoki boshqarish bo'yicha kamida 4 ta boshqa loyiha mavjud. Buning ajablanarli joyi yo'q, chunki bu o'ynash uchun ajoyib va arzon robot to'plami. Bu loyiha shunga o'xshash
Yo'qotilgan televizorni Arduino va Bluetooth yordamida topish: 5 qadam
Yo'qotilgan televizorni masofadan boshqarish pultini Arduino va Bluetooth yordamida topish: yo'qolgan televizorni masofadan boshqarish pultini topish juda oddiy va kodi juda oddiy, faqat Bluetooth moduli bilan Arduino Nano va 3,7v dan 5v gacha batareya kuchaytirgichi bilan kichik signalli signal yordamida va men dastur yaratdim. MIT App Inventor * da siz ulanishingiz mumkin