![Մաս 3 ՝ GPIO ՝ ARM հավաք. Գծի հետևորդ ՝ TI-RSLK ՝ 6 քայլ Մաս 3 ՝ GPIO ՝ ARM հավաք. Գծի հետևորդ ՝ TI-RSLK ՝ 6 քայլ](https://i.howwhatproduce.com/images/011/image-30696-j.webp)
Բովանդակություն:
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48
![Image Image](https://i.howwhatproduce.com/images/011/image-30696-2-j.webp)
![](https://i.ytimg.com/vi/Q1EuUWpgbic/hqdefault.jpg)
![Սարքավորումը Սարքավորումը](https://i.howwhatproduce.com/images/011/image-30696-3-j.webp)
Բարեւ Ձեզ. Սա հաջորդ մասն է, որտեղ մենք շարունակում ենք օգտագործել ARM հավաքածուն (ավելի բարձր մակարդակի լեզվի փոխարեն): Այս Instructable- ի ոգեշնչումը Texas Instruments Robotics System Learning Kit- ի Lab 6-ն է կամ TI-RSLK- ը:
Մենք կօգտագործենք հավաքածուի միկրոկառավարիչը ՝ MSP432 LaunchPad զարգացման տախտակը, բայց գուցե օգտակար բան գտնեք այս Instructable- ից հանելու համար, նույնիսկ եթե չեք օգտագործում LaunchPad- ը կամ հետևում եք T. I. ուսումնական պլան.
Մենք սկսեցինք հրահանգով ներկայացնելով ARM ժողովը, զարգացման միջավայրը և ինչպես կազմել նախագիծ:
ARM Assembly- ի հաջորդ Instructable- ը ներկայացրեց, թե ինչպես փոխազդել մուտքի/ելքի (GPIO) հետ:
Հետո մենք ընդլայնեցինք մեր գիտելիքները և ներդրեցինք գործառույթներ ՝ վերահսկելով LED- ները և անջատիչները:
Այժմ այս Instructable- ի միջոցով մենք կարող ենք սովորածը օգտագործել ավելի զվարճալի և ավելի օգտակար բան անելու համար. Հայտնաբերել տող:
Սա կարող է օգնել մեզ հետագայում, երբ կառուցում ենք գծերի հետևորդ ռոբոտ:
Ուսումնական ծրագրում ծրագրավորման մեծ մասը կատարվում է C կամ C ++ լեզվով, բայց օգտակար է ծանոթանալ հավաքմանը, նախքան ավելի բարձր մակարդակի լեզուներից և գրադարաններից կախված լինելը սկսելը:
Քայլ 1: Սարքավորումը
![Սարքավորումը Սարքավորումը](https://i.howwhatproduce.com/images/011/image-30696-4-j.webp)
![Սարքավորումը Սարքավորումը](https://i.howwhatproduce.com/images/011/image-30696-5-j.webp)
![Սարքավորումը Սարքավորումը](https://i.howwhatproduce.com/images/011/image-30696-6-j.webp)
Ես չեմ ուզում մանրամասն վերամշակել սարքավորումները, քանի որ արդեն կան աղբյուրներ, բայց անհրաժեշտության դեպքում մենք կավելացնենք բացատրություններ:
Այս Instructable- ի համար մենք կօգտագործենք Pololu- ի Reflectance Sensor Arrray- ը, քանի որ այն գալիս է որպես TI-RSLK (ռոբոտների հավաքածուի) մաս: Դա այն է, որն օգտագործվում է դասընթացում և ուսումնական ծրագրի 6 -րդ լաբորատորիայում:
Եթե դա չունեք, կարող եք օգտագործել ցանկացած IR դետեկտոր (կամ դրանց շարք), որը թվային ազդանշան է տալիս ՝ HIGH կամ LOW, առկայության և բացակայության համար:
Arանգվածի սենսորը ամենալավն է, քանի որ այն կարող է օգնել հայտնաբերել, թե արդյոք մենք գտնվում ենք գծի կենտրոնում, թե մի կողմ: Բացի այդ, ինչպես կտեսնենք ավելի ուշ, այն կարող է օգնել մեզ հայտնաբերել ռոբոտի անկյունը գծի նկատմամբ:
Անդրադարձման զանգվածն ունի դետեկտորներ, որոնք շատ մոտ են միմյանց: Դա նշանակում է, որ մենք պետք է ստանանք բազմաթիվ հայտնաբերման ազդանշաններ ՝ կախված, իհարկե, գծի հաստությունից:
Եթե այո, ապա եթե ռոբոտը ուղիղ ներդաշնակ չէ գծի հետ, ապա այն պետք է վերադարձնի ելք, որն այն ավելի լայն է, քան պետք է լինի (քանի որ մենք անկյան տակ ենք):
Վերոնշյալի ավելի լավ բացատրության համար նայեք Lab 6 փաստաթղթին:
Էլեկտրագծերի / սենսորը MSP432 LaunchPad զարգացման տախտակին միացնելու հարցում օգնության համար ահա որոշ օգտակար հրահանգներ:
Այս քայլին ես ավելացրել եմ նույն (նման?) Pdf հրահանգները:
Եթե դուք ուշադիր կարդաք Pololu- ի փաստաթղթերը, դրանք բացատրում են «3.3V շրջանցման» պատճառը, որ դուք կցանկանաք ցատկել, եթե 5V- ի փոխարեն օգտագործում եք 3.3V:
Քանի որ մենք դեռ չենք կառուցում ռոբոտը, այլ փոխարենը մենք պարզապես սովորում ենք ARM- ի հավաքման և նաև, թե ինչպես փոխազդել ռոբոտի կտորների (ենթահամակարգերի) հետ, մենք ստիպված չենք հետևել վերը նշված հրահանգներին:
Առայժմ գծի տվիչների զանգվածը միացնելը պարզապես եռում/նվազում է մինչև հետևյալը.
- միացրեք 3.3V և GND MSP432 տախտակից սենսորային զանգվածին:
- միացրեք միացքի պին (ես առաջարկում եմ P5.3) MSP432- ից LED- ի միացման փին գծի սենսորային զանգվածի վրա: Սենսորի վրա այդ քորոցը գտնվում է 3.3V- ի և GND- ի միջև:
- միացրեք մեկ պորտի բոլոր ութ կապում/բիթերը (ես առաջարկում եմ P7.0- ից P7.7) «1» - ից «8» պիտակավորված սենսորային զանգվածի ութ կապում: Սրանք այն տողերն են, որոնք կբարձրանան ԲԱՐՁՐ կամ OWԱOWՐ `կախված զգացածի զգացումից:
Ինչպես տեսնում եք այս քայլի պատկերներում և տեսանյութում, ես սենսորը չեմ կցել ռոբոտի շասսիին, քանի որ ցանկանում էի ծրագրավորման, կարգաբերման, փորձարկման, սովորելու հեշտություն:
Այսպիսով, կապված ամեն ինչի հետ, մենք պատրաստ ենք մուտք գործել ծրագրակազմ:
Քայլ 2: Հետևեք տողին
![Հետևում է տողին Հետևում է տողին](https://i.howwhatproduce.com/images/011/image-30696-7-j.webp)
![Հետևում է տողին Հետևում է տողին](https://i.howwhatproduce.com/images/011/image-30696-8-j.webp)
Ռեֆլեկտիվության զանգվածի սենսորը բավականին սրամիտ է, քանի որ այն կարող է օգնել առնվազն երկու եղանակով:
- Որոշեք ՝ ռոբոտը կենտրոնացած է գծի վրա կամ սահում է մի կողմ:
- Արդյո՞ք ռոբոտը հավասարեցված է գծի ուղղությամբ, թե՞ այն անկյան տակ է:
Theանգվածի դետեկտորներից յուրաքանչյուրը, ըստ էության, տրամադրում է մեկ բիթ տեղեկատվություն ՝ կամ Բարձր կամ OWԱOWՐ:
Գաղափարն այն է, որ այդ բոլոր բիթերը միավորեն մեկ թվի կամ մեկ բիթ-օրինակի մեջ և օգտագործեն այդ օրինակը որոշումներ կայացնելու համար (ճիշտ շարժվելու համար):
Քայլ 3: Նախքան մենք իսկապես կարող ենք սկսել…
![](https://i.ytimg.com/vi/AABZ9Rv_H9I/hqdefault.jpg)
.. մենք պետք է նոր բան սովորենք ARM հավաքների ծրագրավորման վերաբերյալ: Եվ ես նկատի չունեմ այլ հրահանգ: Նրանք հակված են չնչին լինելու:
Մինչ այժմ մենք մեր ծրագրերում չենք օգտագործել «բուրգը»:
Մենք ապավինել ենք գլոբալ պրոցեսորների գրանցամատյանների մեծ մասի օգտագործմանը տարբեր ենթածրագրերի միջոցով:
Միակ բանը, որ մենք արեցինք, այն էր, որ պահպանենք և վերականգնենք LR (հղումների գրանցամատյան) հասցեն մեկ գործառույթի համար `այն, որը կանչեց մի քանի այլ գործառույթներ: (Այստեղ ես փոխադարձաբար օգտագործում եմ «գործառույթ» և «ենթածրագիր»):
Այն, ինչ մենք անում էինք, լավ չէ: Ի՞նչ անել, եթե ուզում ենք այլ գործառույթների բույն դնել: Իսկ եթե մենք ունենանք բնադրման մեկից ավելի մակարդակ:
Նախորդ օրինակներում մենք ընտրեցինք օգտագործել R6 գրանցամատյանը որպես պահեստ LR- ի կամ վերադարձի հասցեի համար: Բայց եթե մենք ցանկանում ենք ավելի/ավելի խորը բույն դնել, մենք չենք կարող շարունակել փոխել R6- ի արժեքը: Մենք ստիպված կլինենք ընտրել մեկ այլ գրանցամատյան: Եվ մեկ այլ: Եվ այնուհետև ծանրաբեռնված է դառնում հետևել, թե որ հիմնական պրոցեսորի գրանցամատյանը որ LR- ն է պահում, որը որ գործառույթը վերականգնել:
Այսպիսով, այժմ մենք մի հայացք ենք նետում «դեղին»:
Քայլ 4: The Stack
![](https://i.ytimg.com/vi/RULY05L7ZwY/hqdefault.jpg)
Ահա մի քանի ընթերցման նյութ, որը բացատրում է կույտը:
Ես մի երկու գաղափարների ավելի մեծ կողմնակից եմ.
- միայն այնքան տեսություն, որքան պահանջվում է, արագ անցեք գործնականին
- սովորել ըստ անհրաժեշտության, կենտրոնանալ իրականում ինչ -որ բան անելու և ոչ միայն անիմաստ վարժությունների կամ օրինակների վրա:
Առցանց առկա են բազմաթիվ ARM և MSP432 փաստաթղթեր, որոնք խոսում են դեղաքանակի մասին, այնպես որ այդ ամենը չվերանայելու համար: Ես նաև մտադիր եմ այստեղ պահեստավորման օգտագործումը հասցնել նվազագույնի `պահպանելով վերադարձի հասցեն (հղումների գրանցում):
Ըստ էության, մեզ անհրաժեշտ են միայն հրահանգներ.
PUSH {գրանցման ցուցակ}
POP {գրանցման ցուցակ}
Կամ, մեր դեպքում, մասնավորապես.
ՀՐԱՄԱՆ {LR}
POP {LR}
Այսպիսով, հավաքման գործառույթը/ենթածրագիրը նման կլինի հետևյալին.
funcLabel:.asmfunc
PUSH {LR}; սա, հավանաբար, պետք է լինի մուտքի առաջին հրահանգներից մեկը:; այստեղ ավելի շատ կոդ արա..; բլա.. բլա… բլա…; լավ, մենք ավարտեցինք գործառույթը, պատրաստ ենք վերադառնալ POP {LR} գործառույթին վերադառնալու համար. սա վերադարձնում է ճիշտ վերադարձի հասցեն զանգին: գործառույթը: BX LR; վերադարձ.endasmfunc
Տեսահոլովակն անցնում է մի քանի բնադրված գործառույթների կենդանի օրինակով:
Քայլ 5: Theրագրակազմ
![](https://i.ytimg.com/vi/VIY0G_zfNdo/hqdefault.jpg)
«MSP432_Chapter…» պիտակով կցված ֆայլը շատ լավ տեղեկություններ ունի MSP432 նավահանգիստների մասին, և այդ փաստաթղթից մենք ստանում ենք հետևյալ նավահանգիստները, գրանցամատյանները, հասցեները և այլն: Այնուամենայնիվ, դա մի փոքր թվագրված է: Այնուամենայնիվ, ես չտեսա մանրամասն հասցեները, որոնք թվարկված են 5 -րդ և ավելի բարձր նավահանգիստների համար: (միայն «այլընտրանքային գործառույթներ»): Բայց դա դեռ օգտակար է:
Մենք կօգտագործենք երկու նավահանգիստ: P5, P7, P1 և P2:
P5.3 (մեկ բիթ) ելքը պետք է լինի սենսորի վրա IR LED միացման վերահսկումը: Մենք օգտագործում ենք P5.3- ը, քանի որ այն բաց վերնագիր է նույն վերնագրի վրա, ինչպես մյուս MSP432 միացումները, որոնք անցնում են սենսորային զանգվածին:
P7.0- ից P7.7- ը կլինեն ութ մուտք, որոնք տվյալները հավաքում են սենսորից. այն, ինչ «տեսնում է»:
P1.0- ը միակ կարմիր LED- ն է, և մենք կարող ենք օգտագործել այն ՝ տվյալների որոշ ցուցումներ տալու համար:
P2.0, P2.1, P2.2- ը RGB LED- ն է, և մենք կարող ենք դա օգտագործել նաև իր տարբեր գունային հնարավորություններով ՝ սենսորների տվյալների վերաբերյալ մեզ նշումներ տալու համար:
Եթե անցել եք այս ամենի հետ կապված նախորդ Instructables- ով, ապա արդեն գիտեք, թե ինչպես կարգավորել ծրագիրը:
Ուղղակի ունեցեք հայտարարությունների բաժին նավահանգիստների և բիթերի համար և այլն:
Դուք կունենաք «հիմնական» բաժին:
Պետք է լինի մի հանգույց, որտեղ մենք անընդհատ կարդում ենք P7- ի տվյալները, որոշում ենք այդ տվյալները և համապատասխանաբար լուսավորում ենք երկու LED- ները:
Ահա կրկին նավահանգստի գրանցման հասցեները.
- GPIO P1: 0x4000 4C00 + 0 (նույնիսկ հասցեներ)
- GPIO P2: 0x4000 4C00 + 1 (կենտ հասցեներ)
- GPIO P3: 0x4000 4C00 + 20 (նույնիսկ հասցեներ)
- GPIO P4: 0x4000 4C00 + 21 (կենտ հասցեներ)
- GPIO P5: 0x4000 4C00 + 40 (նույնիսկ հասցեներ)
- GPIO P6: 0x4000 4C00 + 41 (կենտ հասցեներ)
- GPIO P7: 0x4000 4C00 + 60 (նույնիսկ հասցեներ)
- GPIO P8: 0x4000 4C00 + 61 (կենտ հասցեներ)
- GPIO P9: 0x4000 4C00 + 80 (նույնիսկ հասցեներ)
- GPIO P10: 0x4000 4C00 + 81 (կենտ հասցեներ)
Այն, ինչ համարձակ է, այն է, ինչ մենք կօգտագործենք այս Instructable- ի համար:
IRրագրային քայլեր IR դետեկտորներ կարդալու համար
Ստորև բերված է psuedo-code ծրագիրը C- ով գրելու համար, բայց այն դեռ օգտակար է, և մենք դրան բավականին ուշադիր հետևելու ենք ծրագրի հավաքման տարբերակում:
հիմնական ծրագիր 0) Նախաստորագրել // նավահանգիստները մինչ (1) {1) P5.3 բարձր դնել (միացնել IR LED- ը) 2) P7.0- ը դարձնել ելք և բարձր դնել այն (լիցքավորելով կոնդենսատորը) 3) Սպասել մեզ 10, Clock_Delay1us (10); 4) P7.0- ը մուտքագրեք 5) Գործարկեք այս հանգույցը 10.000 անգամ ա) Կարդացեք P7.0 (P7.0- ի լարումը փոխակերպում է երկուականի) բ) Երկուական ելքը P1.0- ի (թույլ է տալիս տեսնել իրական երկուականությունը իրական ժամանակում) 6) P5.3 ցածր դնել (անջատել IR LED- ը, էներգիայի խնայողությունը) 7) Սպասել 10 ms, Clock_Delay1ms (10); } // կրկնել (վերադառնալ մինչ ())
Քայլ 6: Եկեք բարելավենք օրենսգիրքը
Pololu IR LED զանգվածի նպատակը կամ օգտագործումը գիծ հայտնաբերելն է և իմանալ, արդյոք ռոբոտը (ապագան) ուղղակիորեն կենտրոնացած է գծի վրա, թե՞ մի կողմ: Բացի այդ, քանի որ գիծն ունի որոշակի հաստություն, եթե սենսորային զանգվածը ուղիղ ուղղահայաց է գծին, սենսորների N թիվը կունենա այլ ընթերցում, քան մնացածը, մինչդեռ եթե IR LED զանգվածը որոշ անկյան տակ է (ոչ ուղղահայաց), ապա N+1 կամ N+2 IR LED/դետեկտոր զույգերը այժմ պետք է այլ ընթերցում տան:
Այսպիսով, կախված նրանից, թե քանի սենսորներ են նշում գծի առկայությունը, մենք պետք է իմանանք ՝ կենտրոնացած ենք, և թեքված ենք, թե ոչ:
Այս վերջին փորձի համար եկեք միայն տեսնենք, թե արդյոք մենք կարող ենք ստանալ կարմիր LED- ը և RGB LED- ը, որոնք մեզ ավելի շատ տեղեկություններ կտան այն մասին, թե ինչ է մեզ ասում սենսորային զանգվածը:
Տեսանյութը ներառում է բոլոր մանրամասները: Կցված է նաև վերջնական ծածկագիրը:
Սա ավարտում է GPIO- ի հետ կապված ARM Assembly- ի շարքը: Հուսով ենք, որ ավելի ուշ կվերադառնանք ARM- ի համագումարով:
Շնորհակալություն.
Խորհուրդ ենք տալիս:
Ընդլայնված գծի հետևորդ ռոբոտ ՝ 7 քայլ
![Ընդլայնված գծի հետևորդ ռոբոտ ՝ 7 քայլ Ընդլայնված գծի հետևորդ ռոբոտ ՝ 7 քայլ](https://i.howwhatproduce.com/images/009/image-26479-j.webp)
Ընդլայնված գծի հետևորդ ռոբոտ. Սա գծի հետևորդ ռոբոտ է `որոշ լրացուցիչ հնարավորություններով: Այս նախատիպը կարող է օգտագործվել գործարանի ներսում `առանց վարորդական նյութերի տեղաշարժի: Կա երկու կայան Բեռնման կայան Բեռնաթափման կայան: Բեռնման կայանից ռոբոտը կսպասի Materia
Ինչպես կատարել գծի հետևորդ ռոբոտ ՝ առանց Arduino (միկրոկոնտրոլեր) օգտագործելու. 5 քայլ
![Ինչպես կատարել գծի հետևորդ ռոբոտ ՝ առանց Arduino (միկրոկոնտրոլեր) օգտագործելու. 5 քայլ Ինչպես կատարել գծի հետևորդ ռոբոտ ՝ առանց Arduino (միկրոկոնտրոլեր) օգտագործելու. 5 քայլ](https://i.howwhatproduce.com/images/010/image-28111-j.webp)
Ինչպես կատարել գծի հետևորդ ռոբոտ ՝ առանց Arduino- ի (միկրոկառավարիչ) օգտագործելու. Այս ուսուցանվող դասում ես ձեզ կսովորեցնեմ, թե ինչպես կարելի է առանց Arduino- ի չօգտագործել ռոբոտի հաջորդ տող: Ես բացատրելու համար շատ հեշտ քայլեր կկիրառեմ: Այս ռոբոտը կօգտագործի IR Proximity Sensor- ը հետևեք տողին: willրագրավորման որևէ փորձի կարիք չեք ունենա
Պարզ գծի հետևորդ Arduino- ի միջոցով. 5 քայլ
![Պարզ գծի հետևորդ Arduino- ի միջոցով. 5 քայլ Պարզ գծի հետևորդ Arduino- ի միջոցով. 5 քայլ](https://i.howwhatproduce.com/images/010/image-28276-j.webp)
Պարզ գծի հետևորդ ՝ օգտագործելով Arduino: Arduino Line Follower Robot Arduino Line Follower Co
Կառավարման ալգորիթմների ուսուցման գծի հետևորդ ռոբոտ ՝ 3 քայլ
![Կառավարման ալգորիթմների ուսուցման գծի հետևորդ ռոբոտ ՝ 3 քայլ Կառավարման ալգորիթմների ուսուցման գծի հետևորդ ռոբոտ ՝ 3 քայլ](https://i.howwhatproduce.com/images/011/image-30989-j.webp)
Կառավարման ալգորիթմների ուսուցման գծի հետևորդ ռոբոտ. Ես նախագծել եմ այս գծի հետևորդ ռոբոտը մի քանի տարի առաջ, երբ ես ռոբոտաշինության ուսուցիչ էի: Այս նախագծի նպատակն էր իմ ուսանողներին սովորեցնել, թե ինչպես պետք է ծածկագրել մրցույթին հաջորդող ռոբոտին, ինչպես նաև համեմատել If/Else- ի և PID հսկողության միջև: Եւ ոչ
GiggleBot գծի հետևորդ ՝ օգտագործելով Python- ը ՝ 5 քայլ
![GiggleBot գծի հետևորդ ՝ օգտագործելով Python- ը ՝ 5 քայլ GiggleBot գծի հետևորդ ՝ օգտագործելով Python- ը ՝ 5 քայլ](https://i.howwhatproduce.com/images/002/image-4707-12-j.webp)
GiggleBot Line Follower- ը Python- ի միջոցով. Այս անգամ մենք ծրագրավորում ենք MicroPython- ում Dexter Industries GiggleBot- ը ՝ հետևելու սև գծին ՝ օգտագործելով ներկառուցված գծի հետևորդի սենսորը: պետք է պատշաճ կերպով վերահսկվի: Եթե