Բովանդակություն:

Թվային կողմնացույց և վերնագիր որոնիչ ՝ 6 քայլ
Թվային կողմնացույց և վերնագիր որոնիչ ՝ 6 քայլ

Video: Թվային կողմնացույց և վերնագիր որոնիչ ՝ 6 քայլ

Video: Թվային կողմնացույց և վերնագիր որոնիչ ՝ 6 քայլ
Video: MS Excel - Բազային գիտելիքներ, դաս 1: Աղյուսակների ստեղծում և օպերատորներ 2024, Հուլիսի
Anonim
Թվային կողմնացույց և վերնագիր որոնիչ
Թվային կողմնացույց և վերնագիր որոնիչ

Հեղինակներ:

Կուլան Ուելան

Էնդրյու Լյուֆտ

Բլեյք Johnsonոնսոն

Շնորհակալություններ

Կալիֆոռնիայի ծովային ակադեմիա

Էվան Չանգ-Սյու

Ներածություն:

Այս նախագծի հիմքը թվային կողմնացույցն է ՝ վերնագրերի հետքերով: Սա հնարավորություն է տալիս օգտագործողին հետևել վերնագրին երկար հեռավորությունների վրա ՝ օգտագործելով թվային ապարատ: Խոսակցաբար վերնագիրն այն հյուսիսից ժամացույցի սլաքի ուղղությամբ չափվող անկյուն է, որը համարվում է զրո աստիճան, ինչպես նշված է կողմնացույցի կողմից: Սարքն ունի երկու հիմնական գործառույթ. Առաջինը ցուցադրում է սարքի ընթացիկ վերնագիրը թվային ցուցադրման տեղեկանքի վրա, իսկ երկրորդը ՝ օգտագործողի կողմից պահանջվող վերնագիր մուտքագրելու ունակություն, որը կցուցադրվի LED- ների օղակի վրա ՝ վերևում: կողմնացույցի բնակարան: Այնուհետև օգտագործողը կկարգավորի սարքի կողմնորոշումը ՝ կապված լուսավորված LED- ի հետ: Սարքի ուղղությունը փոխվելուն պես LED- ը կշարժվի դեպի կենտրոնական LED, դրանով իսկ նշելով, որ ճիշտ վերնագիրը հաստատված է:

Պարագաներ:

- DIYmall 6M GPS մոդուլ

- HiLetgo MPU9250/6500 9-առանցք 9 DOF 16 բիթ

- Adafruit NeoPixel Ring 16

- MakerFocus 4 հատ 3.7 Վ լիթիումային վերալիցքավորվող մարտկոց

- ELEGOO MEGA 2560 R3 տախտակ

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly լիցքավորիչ - v1

- 2.8 TFT LCD, Touchscreen Breakout Board- ով/MicroSD վարդակից

Քայլ 1. Նախագծի ֆունկցիոնալության նախագծում

Նախագծի ֆունկցիոնալության նախագծում
Նախագծի ֆունկցիոնալության նախագծում

Առաջին քայլը հասկանալն է տրամաբանությունը և վերջնական գործառնական գործառույթը: Այս տրամաբանական դիագրամը պատկերում է սարքի երեք վիճակը և երկու տվիչների վիճակը:

Պետություն 1. Բեռնման կարգավիճակ

Բեռնման վիճակն օգտագործվում է Arduino Mega- ին թույլ տալու համար տվյալների վերականգնում երկու սենսորներից գործարկելիս: Սարքը կցուցադրի բեռնումը էկրանին, կմաքրի էկրանին թվերի բոլոր արժեքները, և NeoPixel օղակի LED- ները կլուսավորվեն շրջանագծով:

Պետություն 2. Կողմնացույցի ռեժիմ

Այս վիճակում սարքը գործելու է թվային կողմնացույցի նման: NeoPixel օղակը կլուսավորվի ՝ նշելով հյուսիսի ուղղությունը սարքի կողմնորոշման հետ կապված: Սարքի իսկական վերնագիրը կցուցադրվի նաև LCD էկրանին ՝ սարքի լայնության և երկայնության հետ միասին: Այս վիճակի մեջ կլինի նաև, որ օգտագործողը կկարողանա մուտքագրել օգտվողի վերնագիրը, որը կցուցադրվի 3 -րդ նահանգում:

Նահանգ 3. Վերնագրի հետևման ռեժիմ

Այս վիճակում սարքն այժմ կօգնի օգտագործողին հաստատվել իր ցանկալի վերնագրում: Այժմ սարքը կցուցադրի սարքերի վերնագիրը և օգտվողները ՝ LCD էկրանին, ինչպես նաև լայնության և երկայնության տվյալները: NeoPixel օղակն այժմ կլուսավորվի ՝ նշելով այն օգտվողների շարժումները, որոնք վերաբերում են սարքերի կողմնորոշմանը:

Ինչպես 2, այնպես էլ 3 -րդ նահանգներում կա երկու սենսորային վիճակ, որոնցով սենսորային այս վիճակները թույլ են տալիս սարքին հանել տվյալները սենսորից, որն ապահովում է առավել ճշգրիտ տվյալներ `կախված սարքի գործառնական վիճակից:

Սենսորային վիճակ 1. MPU

Եթե սարքը չի շարժվում, վերնագրի տվյալները կհեռացվեն MPU- ից, քանի որ դա ամենաճշգրիտ տվյալներն են, երբ սարքը չի շարժվում:

Սենսորային վիճակ 2. GPS

Եթե սարքը շարժվում է, վերնագրի տվյալները կհեռացվեն GPS չիպից, քանի որ դա այս վիճակում ամենաճշգրիտ տվյալներն են:

Սարքը ցանկացած պահի կարող է սրանց միջև անցնել սենսորային վիճակների `հաշվի առնելով միավորի փոփոխման օգտագործման պայմանները: Սա կարեւոր է սարքի աշխատանքի համար, քանի որ սարքում օգտագործվող երկու սենսորներից երկուսն էլ ունեն պայմաններ, որոնք ազդում են նրանց տրամադրած տվյալների ճշգրտության վրա: MPU- ի դեպքում չիպի վրա հեշտությամբ կարող են ազդել տեղական մագնիսական դաշտերը, որոնք առաջացել են մեքենաներում և շենքերում մետաղական շինանյութերից: Այսպիսով, օգտագործվում է GPS չիպ, որը կարող է ապահովել ավելի ճշգրիտ վերնագիր, որը չի ազդում նույն ազդեցությունների վրա: Այնուամենայնիվ, GPS- ը կարող է տրամադրել միայն վերնագրի տվյալներ շարժվելիս, քանի որ այն հաշվարկում է վերնագիրը `օգտագործելով լայնության և երկայնության տվյալների փոփոխությունը: Հետևաբար, չիպերը լրացնում են մեկը մյուսին և օգտագործելով երկու սենսորային վիճակները ապահովում են սարքի առավել ճշգրիտ և հուսալի ֆունկցիոնալությունը:

Քայլ 2: Կարգավորում և մետաղալարերի դիագրամ

Կարգավորման և մետաղալարերի դիագրամ
Կարգավորման և մետաղալարերի դիագրամ
Կարգավորման և մետաղալարերի դիագրամ
Կարգավորման և մետաղալարերի դիագրամ
Կարգավորման և մետաղալարերի դիագրամ
Կարգավորման և մետաղալարերի դիագրամ

Theրագիրը օգտագործում և Arduino Mega- ի կլոնավորման տախտակ, որը նման է վերը նշված տախտակին: Նախագծի բոլոր բաղադրիչները միացված կլինեն այս տախտակին: Վերևում ներկայացված են մանրամասն դիագրամներ, թե ինչպես միացնել այս ծրագրի բաղադրիչները: Կոճակները չունեն մանրամասն միացում, քանի որ դրանք կարող են տեղադրվել բազմաթիվ եղանակներով: Այս նախագծում նրանք օգտագործում են 100K ձգվող ներքևի դիմադրություն և մի պարզ կոճակ `3 վոլտ ազդանշան ուղարկելու համար:

Քայլ 3. Բաղադրիչների փորձարկում և հիմնական ծածկագիր

Նախագիծը կհավաքի ինչպես MPU, այնպես էլ GPS չիպից, ինչպես նկարագրված է ավելի վաղ: Կից ներկայացված են երեք ծածկագրեր, որոնք հնարավորություն են տալիս MPU- ի, GPS- ի և MPU- ի տվյալների փորձարկում էկրանով `մասերի ֆունկցիոնալությունը ստուգելու համար: Այս փուլում կարևոր է բաղադրիչների գործարկումը, քանի որ ծածկագիրը յուրաքանչյուր չիպի համար առանձին է, և ցանկացած հարց կարող է լուծվել առանց վախենալու, որ վերջնական ծածկագրում չնախատեսված սխալներ կառաջանան:

Պահանջվող գրադարաններ

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. Ժ

Adafruit_NeoPixel.h

MPU9250.հ

Այս ամենը կարելի է գտնել ՝ վերը նշված վերնագրերը որոնելով: Ես հղումներ չեմ տեղադրի, քանի որ այս գրադարանների բազմաթիվ օրինակներ կան բազմաթիվ աղբյուրներից և հավատարիմ մնալով միայն բնօրինակներին կապելու համայնքային չափանիշին, թույլ կտամ ձեզ գտնել դրանք:

Քայլ 4: MPU- ի ստուգաչափում

MPU Calibration
MPU Calibration

Պետություն 2 -ում և 3 -ում MPU- ի միջոցով հայտնաբերված վերնագիրը բաժանված է չորս քառակուսիների: Սա անհրաժեշտ էր, քանի որ չափագրման մեր մեթոդը պահանջում էր գտնել մագնիսաչափից նվազագույն և առավելագույն մեծությունները նրա x և y առանցքների երկայնքով: Դա արվել է սարքը պատահականորեն պտտելով իր երեք առանցքների շուրջը ՝ զերծ ցանկացած այլ նշանակալի էլեկտրամագնիսական դաշտերից, բացի Երկրից: Այնուհետև մենք վերցրինք x և y առանցքի երկայնքով նվազագույն և առավելագույն արժեքները և դրանք միացրեցինք մասշտաբային հավասարման մեջ, որպեսզի սահմանափակենք բացասական մեկ և մեկ արժեքների մեծությունները: Վերոնշյալ նկարում BigX և BigY են x և y առանցքի երկայնքով մագնիսաչափերի տվյալների առավելագույն արժեքները, LittleX և LittleY ՝ x և y առանցքների երկայնքով մագնիսաչափերի տվյալների նվազագույն արժեքները, համապատասխանաբար, IMU.getMagX_uT () և IMU.getMagY_uT () այն արժեքներն են, որոնք ցանկացած ժամանակ քաշվում են մագնիսաչափից x և y առանցքների երկայնքով, իսկ Mx և My- ը նոր մասշտաբային արժեքներն են, որոնք օգտագործվում են վերնագիրը հաշվարկելու համար:

Քայլ 5: Վերջնական ծածկագիր

Վերջնական ծածկագիր
Վերջնական ծածկագիր
Վերջնական ծածկագիր
Վերջնական ծածկագիր
Վերջնական ծածկագիր
Վերջնական ծածկագիր
Վերջնական ծածկագիր
Վերջնական ծածկագիր

Վերջին քայլը վերջնական ծածկագրի ստեղծումն է: Ես կցել եմ նախագծերի վերջնական ծածկագրի պատճենը: Որոշակի նշումներ են կատարվել, որոնք կօգնեն նավարկելու ծածկագիրը: Այս բաժնի ամենամեծ մարտահրավերը քառակուսիներին ճիշտ աշխատելն էր: Քառակուսիների իրականացումը պարզվեց, որ ավելի հոգնեցուցիչ և տրամաբանորեն արհամարհող է, քան կարող էինք ենթադրել: Սկզբում մենք իրականացրեցինք հիմնական արկտան (My/Mx), այնուհետև ռադիաններից փոխակերպեցինք աստիճանների, քանի որ Arduino- ն լռելյայն թողարկում է ռադիաններ: Այնուամենայնիվ, միակ քառակուսին, որի վրա աշխատել է, 90 աստիճանից մինչև 180 աստիճան էր, ինչը մեզ բացասական արդյունք տվեց և վերջում դարձավ III քառակուսին: Դրա լուծումը բացարձակ արժեք վերցնելն էր, քանի որ այն դեռ ճիշտ աճում էր: Այս արժեքը այնուհետև հանվում է 360 -ից ՝ NeoPixel LED- ի ճիշտ վիճակը լուսավորելու համար 2 -ում, և նմանատիպ մաթեմատիկական գործողություն կիրառվում է 3 -ում ՝ հիմնվելով, եթե վերնագիրը ավելի մեծ կամ փոքր է, քան օգտագործողի մուտքային վերնագիրը, երկուսն էլ կարելի է տեսնել վերը նշված կոդը: Վերոնշյալ պատկերներում Վերնագիրը համապատասխանում է NeoPixel լուսավորությանը, որը լուսավորվելու է ՝ հիմնվելով սարքի վերնագրի և հյուսիսից շեղման միջև եղած տարբերության վրա ՝ 2 -րդ վիճակի դեպքում և օգտագործողի վերնագրի: Այս դեպքում 90 -ից 180 աստիճան համապատասխանում է III քառանկյունին: Երկու դեպքում էլ tft.print- ը ստիպում է էկրանին կարդալ սարքը, որը գնում է հյուսիսից:

Մնացած երեք քառակուսիների համար arctan- ի (My/Mx) իրականացումը հանգեցրեց սարքի պտտման աստիճանի ավելացման շրջադարձի, այսինքն `վերնագրի անկյունը կհաշվարկվի, երբ ենթադրվում էր, և հակառակը: Այս խնդրի լուծումը արկտանգենտին շրջելն էր արկտանի ձևին (Mx/My): Թեև դա լուծեց ավելացման շրջադարձը, այն չտվեց սարքի ճիշտ վերնագիրը, այն, որտեղ քառակուսիները մտան խաղի մեջ: Դրա պարզ շտկումն այն էր, որ համապատասխան քառակուսու վրա հիմնված տեղաշարժ ավելացվեր: Դա կարելի է տեսնել հետևյալ նկարներում, որոնք հերթական անգամ յուրաքանչյուր քառակուսի 2 -րդ և 3 -րդ նահանգների ծածկագրի կոդերն են:

Առաջին if հայտարարությունը կատարվում է, եթե MPU- ի հավասարմամբ հաշվարկված վերնագիրը ավելի մեծ է, քան օգտվողի վերնագիրը: Այս պայմանով օգտվողի մուտքային վերնագիրը ավելացվում է սարքի վերնագրին և համապատասխան արժեքը հանվում է 360 -ից: Եթե else հայտարարությունը կատարված է, MPU վերնագրի հավասարումը հանվում է օգտագործողի մուտքի վերնագրից: Այս պայմաններն իրականացվել են NeoPixel- ի համար ոչ միայն ճշգրիտ արժեք ստանալու, այլև ընդունելի միջակայքից դուրս արժեք ստանալուց խուսափելու համար, որը 0 -ից մինչև 359 աստիճան է:

Խորհուրդ ենք տալիս: