Mündəricat:

GPS ilə yolunuzu tapmaq: 9 addım
GPS ilə yolunuzu tapmaq: 9 addım

Video: GPS ilə yolunuzu tapmaq: 9 addım

Video: GPS ilə yolunuzu tapmaq: 9 addım
Video: Kim nə başa düşdü ❓ 2024, Noyabr
Anonim
GPS ilə Yolunuzu Tapın
GPS ilə Yolunuzu Tapın

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

Başlanğıc
Başlanğıc

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

Məlumat axınında bir barmaq
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

Yolunuzu Tapmaq
Yolunuzu Tapmaq

Üçü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ə: