Mündəricat:

Rəqəmsal Pusula və Başlıq Tapan: 6 addım
Rəqəmsal Pusula və Başlıq Tapan: 6 addım

Video: Rəqəmsal Pusula və Başlıq Tapan: 6 addım

Video: Rəqəmsal Pusula və Başlıq Tapan: 6 addım
Video: Ehtimal məsələləri | 3-cü hissə | Qızıl qaydalar və qəbula düşəcək sual tipləri | Nail Sadigov 2024, Noyabr
Anonim
Rəqəmsal Pusula və Başlıq Tapan
Rəqəmsal Pusula və Başlıq Tapan

Müəlliflər:

Cullan Whelan

Andrew Luft

Blake Johnson

Təşəkkürlər:

Kaliforniya Dənizçilik Akademiyası

Evan Chang-Siu

Giriş:

Bu layihənin əsası, başlığı izləyən rəqəmsal bir kompasdır. Bu, istifadəçiyə rəqəmsal bir cihazdan istifadə edərək uzun məsafələrdə bir başlıq izləməyə imkan verir. Danışıq başlığı, pusulanın göstərdiyi kimi sıfır dərəcə hesab edilən şimaldan saat yönünde ölçülmüş bir açıdır. Cihazın iki əsas funksiyası var: birincisi, cihazın cari başlığını rəqəmsal ekran istinadında göstərmək, ikincisi isə istifadəçinin istədiyi başlığı daxil etmək imkanıdır ki, bu da yuxarıdakı LED halqasında göstəriləcək. kompas yuvası. İstifadəçi daha sonra işıqlandırılmış LED ilə əlaqəli cihazın istiqamətini tənzimləyərdi. Cihazın istiqaməti dəyişdirildikdə, LED mərkəzi LED -ə gedəcək və bununla da düzgün başlığın qurulduğunu göstərir.

Təchizat:

- DIYmall 6M GPS Modulu

- HiLetgo MPU9250/6500 9-Axis 9 DOF 16 Bit

- Adafruit NeoPixel Üzük 16

- MakerFocus 4 ədəd 3.7V Lityum Şarj Edilə bilən Batareya

- ELEGOO MEGA 2560 R3 lövhəsi

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly şarj cihazı - v1

- 2,8 TFT LCD, MicroSD yuvası olan toxunma lövhəsi ilə

Addım 1: Layihənin İşlevselliğinin Tasarlanması

Layihənin funksionallığının dizaynı
Layihənin funksionallığının dizaynı

İlk addım məntiqi və son əməliyyat funksiyasını başa düşməkdir. Bu məntiq diaqramı üç cihaz vəziyyətini və iki sensor vəziyyətini təsvir edir.

Vəziyyət 1: Yüklənən Vəziyyət

Yükləmə vəziyyəti, Arduino Mega'nın işə salındıqda iki sensordan məlumat almasına icazə vermək üçün istifadə olunur. Cihaz ekranda yüklənməni göstərəcək, ekrandakı bütün ədəd dəyərlərini siləcək və NeoPixel halqasındakı LEDlər bir dairədə yanacaq.

Vəziyyət 2: Pusula rejimi

Bu vəziyyətdə cihaz rəqəmsal bir pusula kimi hərəkət edəcək. NeoPixel üzüyü cihazın istiqamətinə görə Şimal istiqamətini göstərmək üçün yanacaq. Əsl cihaz başlığı, cihazın Enlem və Boylam ilə birlikdə LCD ekranda da göstəriləcək. İstifadəçinin 3 -cü vəziyyətdə göstəriləcək istifadəçi başlığına girə biləcəyi də bu vəziyyətdə olacaq.

Dövlət 3: Başlıq İzləmə rejimi

Bu vəziyyətdə cihaz artıq istifadəçinin istədiyi başlıq üzərində qurulmasına kömək edəcək. Cihaz artıq cihazların başlıqlarını və istifadəçilərini LCD ekranda enlem və uzunluq məlumatları ilə birlikdə göstərəcək. NeoPixel üzüyü indi istifadəçilərin cihazların istiqamətinə görə getdiyini göstərmək üçün yanacaq.

Həm Dövlət 2, həm də Dövlət 3 daxilində bu sensor vəziyyətləri cihazın iş vəziyyətindən asılı olaraq ən dəqiq məlumatları verən sensordan məlumatları çəkməyə imkan verən iki sensor vəziyyəti var.

Sensor vəziyyəti 1: MPU

Cihaz hərəkət etmirsə, başlıq məlumatları cihaz hərəkət etmədikdə ən doğru məlumat olduğu üçün MPU -dan çıxarılacaq.

Sensor Vəziyyəti 2: GPS

Cihaz hərəkət edirsə, bu vəziyyətdə ən dəqiq məlumat olduğu üçün başlıq məlumatları GPS çipindən çıxarılacaq.

Cihaz, dəyişdirilən cihazın istifadə şərtlərini nəzərə almaq üçün istənilən vaxt bu vəziyyətlərə keçə bilər. Bu cihazın işləməsi üçün vacibdir, çünki cihazda istifadə olunan iki sensorun hər ikisinin də verdikləri məlumatların düzgünlüyünə təsir edən şərtləri var. MPU vəziyyətində çip, avtomobillərin və binalardakı metal tikinti materiallarının səbəb olduğu yerli maqnit sahələrindən asanlıqla təsirlənə bilər. Beləliklə, eyni təsirlərdən təsirlənməyən daha dəqiq bir başlıq təmin edə bilən bir GPS çipi istifadə olunur. Bununla birlikdə, GPS yalnız hərəkət edərkən başlıq məlumatları verə bilər, çünki enlik və uzunluq məlumatlarının dəyişməsini istifadə edərək başlığı hesablayır. Buna görə çiplər bir -birini tamamlayır və iki sensor vəziyyətindən istifadə edərək cihazın ən dəqiq və etibarlı funksiyasını təmin edir.

Addım 2: Quraşdırma və Tel Şeması

Quraşdırma və tel diaqramı
Quraşdırma və tel diaqramı
Quraşdırma və tel diaqramı
Quraşdırma və tel diaqramı
Quraşdırma və tel diaqramı
Quraşdırma və tel diaqramı

Layihə yuxarıdakı lövhəyə bənzər Arduino Mega klon lövhəsindən istifadə edir. Layihədəki bütün komponentlər bu lövhəyə bağlanacaq. Yuxarıda, bu layihə üçün komponentlərin necə bağlanacağına dair ətraflı diaqramlar verilmişdir. Düymələrdə ətraflı bir sxem yoxdur, çünki bunlar bir çox yolla qurula bilər. Bu proyektdə, təyin edilmiş pininə 3 voltluq bir siqnal göndərmək üçün 100K aşağı düşmə rezistoru və sadə düymədən istifadə edirlər.

Addım 3: Komponentləri və Əsas Kodu Test edin

Layihə həm MPU, həm də GPS çipindən daha əvvəl təsvir edildiyi kimi məlumatları götürəcək. Parçaların funksionallığını yoxlamaq üçün ekranlı MPU, GPS və MPU -dan məlumatların sınanmasını təmin edən üç kod əlavə edilmişdir. Kodun hər bir çip üçün ayrı olduğu və son kodda gözlənilməz səhvlərə yol açmaqdan qorxmadan hər hansı bir problemin həll edilə biləcəyi üçün bu mərhələdə komponentlərin işə salınması vacibdir.

Lazımi kitabxanalar:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Bütün bunları yuxarıdakı başlıqları axtararaq tapmaq olar. Bu kitabxanaların çoxsaylı mənbələrdən çoxlu nüsxələri olduğundan və yalnız orijinallara keçid etmək üçün icma standartına uyğun olaraq bağlantılar yerləşdirməyəcəyəm, bunları özünüz üçün tapmağınıza icazə verəcəyəm.

Addım 4: MPU Kalibrasiyası

MPU Kalibrləmə
MPU Kalibrləmə

Dövlət 2 və Ştat 3 -də MPU vasitəsilə tapılan başlıq dörd kvadranta bölündü. Kalibrləmə üsulumuz x və y oxları boyunca maqnitometrdən minimum və maksimum böyüklükləri tapmağı tələb etdiyi üçün bu lazım idi. Bu, cihazı Yerdən başqa heç bir əhəmiyyətli elektromaqnit sahəsindən azad olaraq üç oxu ətrafında təsadüfi olaraq fırlatmaqla edildi. Minimum və maksimum dəyərləri x və y oxları boyunca götürdük və mənfi bir ilə bir arasındakı dəyərləri məhdudlaşdırmaq üçün onları ölçmə tənliyinə qoyduq. Yuxarıdakı şəkildə, BigX və BigY, müvafiq olaraq x və y oxları boyunca maqnitometr məlumatlarının maksimum dəyərləridir, LittleX və LittleY, müvafiq olaraq, x və y oxları boyunca olan maqnitometr məlumatlarının minimum dəyərləridir, IMU.getMagX_uT () və IMU.getMagY_uT (), x və y oxları boyunca istənilən vaxt maqnitometrdən çəkilən dəyərlərdir və Mx və My başlığı hesablamaq üçün istifadə olunan yeni ölçülü dəyərlərdir.

Addım 5: Son Kod

Yekun Kod
Yekun Kod
Yekun Kod
Yekun Kod
Yekun Kod
Yekun Kod
Yekun Kod
Yekun Kod

Son addım son kodu yaratmaqdır. Layihələrin son kodunun bir nüsxəsini əlavə etdim. Kod daxilində kömək etmək üçün qeydlər edilmişdir. Bu bölmənin ən böyük çətinliyi, kvadrantların düzgün işləməsi idi. Quadrantların həyata keçirilməsi, əvvəllər gözlədiyimizdən daha yorucu və məntiqə zidd olduğunu sübut etdi. Başlanğıcda bir əsas arktan (My/Mx) tətbiq etdik və sonra radyanlardan dərəcələrə çevrildik, çünki Arduino standart olaraq radianda çıxış edir. Ancaq bunun işlədiyi yeganə kvadrant 90 dərəcədən 180 dərəcəyə qədər idi ki, bu da bizə mənfi bir nəticə verdi və nəticədə Quadrant III oldu. Bunun həlli mütləq dəyəri götürmək idi, çünki hələ də düzgün şəkildə artırdı. Bu dəyər daha sonra 360 -dan çıxarılaraq 2 -ci vəziyyətdə düzgün NeoPixel LEDini yandırdı və oxşar riyazi əməliyyat 3 -cü vəziyyətdə istifadə edildi, bu başlığın istifadəçinin giriş başlığından daha böyük və ya kiçik olduğuna əsaslanaraq hər ikisini də görmək olar. yuxarıdakı kod. Yuxarıdakı rəqəmlərdə Başlıq, cihazın başlığı ilə vəziyyət 2 -də şimaldan və istifadəçi başlığından fərqi nəzərə alınmaqla yandırılacaq NeoPixel işığına uyğundur. Bu vəziyyətdə, 90 ilə 180 dərəcə III Kadrana uyğundur. Hər iki halda da tft.print ekranın cihazın şimaldan getdiyini oxumasına səbəb olur.

Digər üç kvadrant üçün, arktan (My/Mx) tətbiqi cihaz döndükcə artımın tərsinə gətirib çıxardı, yəni hesablanmalı olduğu zaman başlıq bucağı geri sayılacaqdı və əksinə. Bu problemin həlli arktangenti arktan formasına çevirmək idi (Mx/My). Bu artım inversiyasını həll etsə də, dördbucaqların işə düşdüyü doğru cihaz başlığını vermədi. Bunun sadə düzəlişi, uyğun kvadranta əsaslanan bir dəyişiklik əlavə etmək idi. Bunu bir daha hər bir dördbucağın 2 və 3 -cü dövlətlərinin kod parçaları olan aşağıdakı rəqəmlərdə görmək olar.

MPU tənliyi ilə hesablanan başlıq istifadəçi başlığından böyükdürsə, ilk if ifadəsi aparılır. Bu şərtlə istifadəçinin giriş başlığı cihaz başlığına əlavə olunur və müvafiq dəyər 360 -dan çıxılır. Else ifadəsi yerinə yetirilərsə, MPU başlıq tənliyi istifadəçinin giriş başlığından çıxılır. Bu şərtlər yalnız NeoPixel üçün dəqiq bir dəyər əldə etmək üçün deyil, həm də 0 ilə 359 dərəcə arasında olan məqbul aralığın xaricində bir dəyər əldə etməmək üçün həyata keçirildi.

Tövsiyə: