Mündəricat:
- Addım 1: Necə Çalışır
- Addım 2: Fan Fakt
- Addım 3: Başlayın
- Addım 4: Məlumat axınında bir barmaq
- Addım 5: Özünüzü tapın
- Addım 6: TinyGPS ++ ilə kodlaşdırma
- Addım 7: "DÖRDÜNCÜ BOYUT"
- Addım 8: Yolunuzu Tapın
- Addım 9: İrəli gedin
Video: GPS ilə yolunuzu tapmaq: 9 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
GPS məlumatlarını anlamaq və tətbiq etmək üçün sürətli bir məşq
- Tələb olunan vaxt: 2 saat
- Qiymət: 75-150 dollar
İstehsalçılar üçün yüksək keyfiyyətli coğrafi məlumatları elektronika layihələrinə daxil etmək olduqca ucuzlaşdı. Və son bir neçə ildə GPS (Qlobal Konumlandırma Sistemi) qəbuledici modulları daha müxtəlif, güclü və Arduino, PIC, Teensy və Raspberry Pi kimi inkişaf lövhələri ilə inteqrasiyası asanlaşdı. GPS ətrafında qurmağı düşünürsünüzsə, başlamaq üçün yaxşı bir vaxt seçmisiniz.
Addım 1: Necə Çalışır
GPS modulu, peyk donanması tərəfindən məlum tezliklərdə yayımlanan siqnalları işləyən kiçik bir radio qəbuledicisidir. Bu peyklər Yer kürəsində təxminən dairəvi orbitlərdə fırlanır və son dərəcə dəqiq mövqe və saat məlumatlarını aşağıya ötürür. Yerə gedən alıcı bu peykləri kifayət qədər "görə bilirsə", öz yerini və hündürlüyünü hesablamaq üçün onlardan istifadə edə bilər.
Bir GPS mesajı gəldikdə, alıcı əvvəlcə yayım vaxtını yoxlayır və nə vaxt göndərildiyini görür. Kosmosdakı bir radio dalğasının sürəti bilinən sabit (c) olduğundan, alıcı siqnalın getdiyi məsafəni təyin etmək üçün yayım və qəbul vaxtlarını müqayisə edə bilər. Dörd və ya daha çox tanınmış peykdən məsafəsini müəyyən etdikdən sonra, öz mövqeyini hesablamaq, 3D üçbucağı yaratmaq üçün olduqca sadə bir problemdir. Ancaq bunu tez və dəqiq bir şəkildə yerinə yetirmək üçün alıcı, eyni anda 20 -ə qədər məlumat axınından rəqəmləri çevik şəkildə kəsməyi bacarmalıdır. GPS sistemi dünyanın hər yerində istifadə edilə bilən bir nəşr olunmuş hədəfə malik olduğundan, sistem ən az dörd peykin olmasını təmin etməlidir. - tercihen daha çox - dünyanın hər nöqtəsindən hər zaman görünür. Hal -hazırda 20 min kilometr yüksəklikdə seyrək bir buludda çox xoreoqrafik rəqs edən 32 GPS peyki var.
Addım 2: Fan Fakt
GPS, Einstein -in nisbi nəzəriyyəsi olmadan işləyə bilməzdi, çünki Yerin cazibə sahəsindəki zaman dilatasiyasında hər gün orbitdə olan atom saatlarının əldə etdiyi 38 mikrosaniyəyə görə kompensasiya edilməlidir.
Addım 3: Başlayın
Layihəniz nə olursa olsun, GPS inteqrasiya etmək asandır. Əksər alıcı modulları sadə bir serial protokolu ilə ünsiyyət qurur, buna görə də nəzarətçi lövhənizdə ehtiyat serial portu tapa bilsəniz, fiziki əlaqəni qurmaq üçün bir neçə tel lazımdır. Və olmasa da, əksər nəzarətçilər ixtiyari pinlərə qoşulmaq üçün istifadə edə biləcəyiniz təqlid edilmiş "proqram" serial rejimini dəstəkləyir.
Yeni başlayanlar üçün Adafruit -in Ultimate GPS Breakout modulu yaxşı bir seçimdir. Bazarda rəqabət aparan bir çox məhsul var, amma Ultimate, lehim etmək və ya çörək taxtasına qoşulmaq asan olan böyük deliklərə malik, münasib qiymətə möhkəm bir ifaçıdır.
Əvvəlcə torpağı və gücü birləşdirin. Arduino baxımından, bu, GND sancaqlarından birini modulun GND -yə, +5V pinini isə modulun VIN -ə bağlamaq deməkdir. Məlumat ötürülməsini idarə etmək üçün modulun TX və RX pinlərini Arduinoya bağlamalısınız. 0 və 1 sancaqlar "hardware serial port" və ya UART kimi istifadə üçün xüsusi olaraq hazırlanmış olsa da, bu məqsədlə Arduino pin 2 (TX) və 3 (RX) özbaşına seçəcəyəm. Niyə? Çünki bu aşağı səviyyəli AVR prosessorlarının malik olduğu tək UART-ı israf etmək istəmirəm. Arduinonun UART-i, USB konnektoru ilə sıx əlaqəlidir və onu ayıklama üçün kompüterimə bağlı saxlamağı sevirəm.
Addım 4: Məlumat axınında bir barmaq
Güc tətbiq etdiyiniz anda bir GPS modulu TX xəttində mətn məlumatlarının bir hissəsini göndərməyə başlayır. Hələ tək bir peyk görməyəcək, daha doğrusu "düzəltmə" var, ancaq məlumat kranı dərhal işə düşür və nə çıxdığını görmək maraqlıdır. İlk sadə eskizimiz (aşağıda) bu işlənməmiş məlumatları göstərməkdən başqa heç nə etmir.
#daxil edin #RXPin 2 təyin edin
#dexine TXPin 3#GPSBaud 4800 təyin edin
#define ConsoleBaud 115200
// GPS cihazına serial əlaqəSoftwareSerial ss (RXPin, TXPin);
boş quraşdırma () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS Nümunəsi 1");
Serial.println ("GPS modulu ilə ötürülən xam NMEA məlumatlarının göstərilməsi.");
Serial.println ("Mikal Hart tərəfindən"); Serial.println ();
}
boşluq döngəsi ()
{if (ss.available ()> 0) // Hər bir xarakter gəldikcə…
Serial.write (ss.read ()); //… konsola yazın
}
DİQQƏT: Eskiz, qəbul pinini (RXPin) 2 olaraq təyin edir, baxmayaraq ki, əvvəllər ötürücü (TX) pininin 2 -ci pinlə bağlı olacağını söyləmişik. Bu ümumi bir qarışıqlıq mənbəyidir. RXPin, Arduino baxımından qəbul pinidir (RX). Təbii olaraq, modulun ötürücü (TX) pininə və əksinə bağlanmalıdır.
Bu eskizi yükləyin və Serial Monitoru 115, 200 baudda açın. Hər şey işləyirsə, vergüllə ayrılmış sıx və sonsuz bir mətn sətirləri görməlisiniz. Hər biri paraqrafın əvvəlindəki ikinci görüntüyə bənzəyəcək.
Bu fərqli simlər, NMEA cümlələri olaraq bilinir, buna görə də format Milli Dəniz Elektronikası Dərnəyi tərəfindən icad edildi. NMEA, əsas (yer və vaxt) dan ezoterikə (peyk siqnalının səs-küy nisbətinə, maqnit varyansına və s.) Qədər olan naviqasiya məlumatları üçün bu cümlələrin bir çoxunu təyin edir. İstehsalçılar, alıcılarının hansı cümlə növlərindən istifadə etməsi ilə uyğun gəlmirlər, lakin GPRMC vacibdir. Modulunuz bir düzəliş əldə etdikdən sonra bu GPRMC cümlələrinin ədalətli sayını görməlisiniz.
Addım 5: Özünüzü tapın
Xam modul çıxışını proqramınızın həqiqətən istifadə edə biləcəyi məlumatlara çevirmək heç də vacib deyil. Xoşbəxtlikdən, sizin üçün bunu edə biləcək bəzi böyük kitabxanalar var. Limor Frid'in məşhur Adafruit GPS Kitabxanası, Ultimate breakout istifadə edirsinizsə əlverişli bir seçimdir. Ultimate -ə xas olan xüsusiyyətləri (daxili məlumat girişi kimi) təmin etmək üçün yazılmışdır və özünəməxsus səs -küylü zənglər və fitlər əlavə edir. Ən çox sevdiyim təhlil kitabxanası - və əlbəttə ki, tamamilə qərəzsizəm - yazdığım kitab TinyGPS ++. Hərtərəfli, güclü, qısa və istifadəsi asan olması üçün dizayn etdim. Gəlin bir dönmə üçün götürək.
Addım 6: TinyGPS ++ ilə kodlaşdırma
Proqramçı baxımından TinyGPS ++ istifadə etmək çox sadədir:
1) GPS obyekti yaradın.
2) Moduldan gələn hər bir xarakteri gps.encode () istifadə edərək obyektə yönləndirin.
3) Vəzifənizi, yüksəkliyinizi və ya vaxtınızı və ya tarixinizi bilmək lazım olduqda, gps obyektini soruşun.
#daxil edin #daxil edin
#RXPin 2 təyin edin
#TXPin 3 təyin edin
#Define GPSBaud 4800
#define ConsoleBaud 115200
// GPS cihazına serial əlaqəSoftwareSerial ss (RXPin, TXPin);
// TinyGPS ++ obyekti
TinyGPSPlus GPS;
boş quraşdırma () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS Nümunəsi 2");
Serial.println ("TinyGPS ++ istifadə edən sadə bir izləyici.");
Serial.println ("Mikal Hart tərəfindən");
Serial.println ();
}
boşluq döngəsi () {
// GPS -dən hər hansı bir simvol gəlmişsə, /
/ onları TinyGPS ++ obyektinə göndərin
while (ss.available ()> 0)
gps.encode (ss.read ());
// Yeni yeri və yüksəkliyi göstərək
// hər ikisi də yenilənəndə
if (gps.location.isUpdated () || gps.altitude.isUpdated ())
{
Serial.print ("Yer:");
Serial. çap (gps.location.lat (), 6);
Serial.print (",");
Serial. çap (gps.location.lng (), 6);
Serial.print ("Hündürlük:");
Serial.println (gps.altitude.meters ());
}
}
İkinci tətbiqimiz, təhlil etməyə kömək etmək üçün TinyGPS ++ istifadə edərək alıcının yerini və yüksəkliyini davamlı olaraq göstərir. Həqiqi bir cihazda bu məlumatları bir SD karta daxil edə və ya LCD -də göstərə bilərsiniz. Kitabxananı götürün və FindingYourself.ino'nun eskizini çəkin (yuxarıda). Kitabxananı həmişəki kimi Arduino kitabxanaları qovluğuna quraşdırın. Eskizi Arduino -ya yükləyin və Serial Monitoru 115, 200 baud -da açın. Yerinizi və yüksəkliyinizi real vaxtda yenilədiyinizi görməlisiniz. Tam olaraq harada dayandığınızı görmək üçün ortaya çıxan enlik/uzunluq koordinatlarından bir neçəsini Google Xəritələrə yapışdırın. İndi dizüstü kompüterinizi bağlayın və gəzintiyə çıxın. (Ancaq gözlərinizi yolda saxlamağı unutmayın!)
Addım 7: "DÖRDÜNCÜ BOYUT"
GPS-ni kosmosdakı yerlə əlaqələndirsək də, bu peyklərin vaxt və məlumat damgalarını da ötürdüyünü unutmayın. Orta GPS saatı saniyənin on milyonda bir hissəsinə qədər dəqiqdir və nəzəri hədd daha da yüksəkdir. Vaxtınızı izləmək üçün yalnız layihənizə ehtiyacınız olsa belə, GPS modulu yenə də ən ucuz və asan həll ola bilər.
FindingYourself.inonu çox dəqiq bir saata çevirmək üçün son bir neçə sətri belə dəyişdirin:
əgər (gps.time.isUpdated ()) {
char buf [80];
sprintf (buf, "Saat%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);
}
Addım 8: Yolunuzu Tapın
Üçüncü və son tətbiqimiz, bir istifadəçini "düz saxlamaq" və ya "sola çəkmək" kimi sadə mətn təlimatlarından istifadə edərək hədəfə doğru istiqamətləndirəcək, 100 -dən az kod xətti ilə oxunaqlı bir TinyGPS ++ eskizini yazmaq üçün şəxsi problemin nəticəsidir.
#daxil edin #daxil edin
#RXPin 2 təyin edin
#TXPin 3 təyin edin
#Define GPSBaud 4800
#define ConsoleBaud 115200
// GPS cihazına serial əlaqəSoftwareSerial ss (RXPin, TXPin);
// TinyGPS ++ obyekti TinyGPSPlus gps;
imzasız uzun lastUpdateTime = 0;
#EIFFEL_LAT 48.85823#EIFFEL_LNG tanımlayın 2.29438
/* Bu nümunə, bir insanı (və ya pilotsuz təyyarəni) təyinat yerinə istiqamətləndirmək üçün kurs və məsafədən necə istifadə edə biləcəyinizə dair əsas çərçivəni göstərir. Bu istiqamət Eyfel qülləsidir. Lazım olduğu kimi dəyişdirin
Lat/uzun koordinat əldə etməyin ən asan yolu, Google Xəritə (maps.google.com) ünvanına sağ vurmaq və "Burada nə var?" Seçməkdir. Bu, dəqiq dəyərləri axtarış qutusuna qoyur
*/
boş quraşdırma () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS Nümunəsi 3");
Serial.println ("O qədər də əhatəli olmayan bir Rəhbərlik Sistemi");
Serial.println ("Mikal Hart tərəfindən");
Serial.println ();
}
boşluq döngəsi () {
// GPS -dən hər hansı bir simvol gəlmişsə, // onları TinyGPS ++ obyektinə göndərin (ss.available ()> 0) gps.encode (ss.read ());
// Hər 5 saniyədə bir yeniləmə edin
əgər (millis () - lastUpdateTime> = 5000)
{
lastUpdateTime = milis ();
Serial.println ();
// Mövcud vəziyyətimizi qurun
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;
// debug Serial.print ("DEBUG: Course2Dest:");
Serial.print (courseToDestination);
Serial.print ("CurCourse:");
Serial. çap (gps.course.deg ());
Serial.print ("Dir2Dest:");
Serial. çap (istiqamətToDestination);
Serial.print ("RelCourse:");
Serial.print (courseChangeNeeded);
Serial.print ("CurSpd:");
Serial.println (gps.speed.kmph ());
// 20 metr yaxınlıqda? Biz burdayıq
əgər (məsafəToDestination <= 20.0)
{Serial.println ("TEBRİKLER: Gəldiniz!");
çıxış (1);
}
Serial.print ("DISTANCE:"); Serial. çap (məsafə təyinatı);
Serial.println ("getmək üçün sayılar.");
Serial.print ("TALİMAT:");
// Hələ durursan? Hansı istiqamətə getməyinizi göstərin
əgər (gps.speed.kmph () <2.0)
{
Serial.print ("Baş");
Serial.print (istiqamətToDestination);
Serial.println (".");
qayıtmaq;
}
if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Düz irəli get!");
başqa halda (courseChangeNeeded> = 315 && courseChangeNeeded <345)
Serial.println ("Biraz sola dönün.");
başqa halda (courseChangeNeeded> = 15 && courseChangeNeeded <45)
Serial.println ("Biraz sağa dönün.");
başqa halda (courseChangeNeeded> = 255 && courseChangeNeeded <315)
Serial.println ("Sola dönün.");
başqa halda (courseChangeNeeded> = 45 && courseChangeNeeded <105)
Serial.println ("Sağa dönün.");
başqa
Serial.println ("Tamamilə dönün.");
}
}
Kod hər 5 saniyədə TinyGPS ++ courseTo () metodundan istifadə edərək istifadəçinin yerini və gedişatını (səyahət istiqamətini) tutur və yatağı (təyinat istiqamətinə) hesablayır. İki vektorun müqayisəsi, aşağıda göstərildiyi kimi düz yola dönmək üçün bir təklif yaradır.
FindingYourWay.ino eskizini (yuxarıda) kopyalayın və Arduino IDE -ə yapışdırın. 1 km və ya 2 km məsafədə bir təyinat təyin edin, eskizini Arduino -ya yükləyin, dizüstü kompüterinizdə işlədin və oranın sizə yol göstərib -göstərməyəcəyini görün. Ancaq daha da əhəmiyyətlisi, kodu öyrənin və necə işlədiyini anlayın.
Addım 9: İrəli gedin
GPS -in yaradıcı potensialı genişdir. Hazırladığım ən məmnun şeylərdən biri, yalnız əvvəlcədən proqramlaşdırılmış bir yerdə açılan GPS-ə malik bir tapmaca qutusu idi. Qurbanınız xəzinəni içəridə kilidləmək istəyirsə, o gizli yerin harada olduğunu anlamalı və fiziki olaraq qutunu ora gətirməlidir. Məşhur bir ilk layihə fikri, məsələn, Trans-Pennine Cığırında gedən bir yürüyüşçünün dəqiqəlik mövqeyini və hündürlüyünü dəqiqələrlə qeyd edən bir növ cihazdır. Yoxsa pis adamların avtomobillərinə yapışan DEA agentlərinin hiyləgər maqnit izləyicilərindən biri? Hər ikisi də tamamilə mümkündür və qurmaq çox əyləncəli olardı, amma Amazon -da satın ala biləcəyiniz şeylərin xaricində daha geniş düşünməyi məsləhət görürəm. Orada böyük bir dünya var. Bacardığınız qədər uzaq və geniş gəzin.
Tövsiyə:
Ailə Axtarışında Ailə Ağacınızda Yarımçıq Məbəd Fərmanı Tapmaq üçün Ümidin Sinə Genişləndirməsindən istifadə: 11 Addım
Ailə Axtarışında Ailə Ağacınızda Yarımçıq Məbəd Təminatı İşini Tapmaq üçün Ümidin Sinə Genişləndirməsindən istifadə: Bu təlimatın məqsədi, Ümid Göğüs uzantısını istifadə edərək, natamam məbəd nizamnaməsi işi olan Ailə Axtarışında ailə ağacınızı necə axtarmağı göstərməkdir. Ümid Sandığını istifadə etmək, uyğunsuzluq axtarışınızı xeyli sürətləndirə bilər
Paltaryuyan maşın motorunun pinlərini necə tapmaq olar: 6 addım
Paltaryuyan maşın motorunun sancaqlarını necə tapmaq olar: rəqəmsal bir multimetrin köməyi ilə paltaryuyan maşın motorunun pinlərini tapırıq. Davamlılıq test rejimində bir multimetrə və yuxarıdakı şəkildəki kimi bənzər bir universal paltaryuyan maşın motoruna ehtiyacımız var. əvvəlcə vizual yoxlama ilə başlayın
Pulsuz bir yer tapmaq ağrısını həll etmək üçün bir park sensoru necə qurulacaq: 12 addım
Pulsuz bir yer tapmaq ağrısını həll etmək üçün bir park sensoru necə qurulacaq: Bu layihədə bir Raspberry Pi istifadə edərək sadə bir park sensoru quracağıq. Məlum olur ki, hər səhər bu sualla qarşılaşmalı oluram: ofisimin qarşısındakı YALNIZ dayanacaq yeri artıq götürülmüşdürmü? Çünki əslində belə olanda, ətrafında dolaşmalıyam
Lazer və Kameradan İstifadəçi Tapmaq: 6 addım
Lazer və Kameradan İstifadəçi Tapmaq: Hal -hazırda gələn Bahar üçün bəzi daxili işlər planlaşdırıram, ancaq köhnə bir ev əldə etdiyim üçün heç bir ev planım yoxdur. Bir hökmdar istifadə edərək divardan divara olan məsafəni ölçməyə başladım, amma yavaş və səhvlərə meyllidir. Bir çeşid almaq barədə düşündüm
Arduino və Bluetooth ilə itirilmiş bir TV pultunu tapmaq: 5 addım
Arduino və Bluetooth ilə itirilmiş bir TV pultunu tapmaq: itirilmiş bir televiziyanın uzaqdan tapılması çox sadə bir sxemdir və kodu çox sadədir, sadəcə Bluetooth modulu olan Arduino Nano və 3.7v -dən 5v -a qədər batareya gücləndiricisi olan kiçik səs siqnalı istifadə edərək bir tətbiq yaratdım. MIT App Inventor -da * qoşula bilərsiniz