Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Բարեւ Ձեզ

Այս հոդվածում ես ուզում եմ նկարագրել Arduino-ի միջոցով իմ առաջին ռոբոտը հավաքելու գործընթացը: Նյութը օգտակար կլինի ինձ նման այլ սկսնակների համար, ովքեր ցանկանում են ինչ-որ «ինքնակառավարվող սայլ» պատրաստել: Հոդվածը տարբեր նրբերանգների վրա իմ հավելումներով աշխատելու փուլերի նկարագրությունն է։ Հոդվածի վերջում տրված է վերջնական կոդի հղումը (ամենայն հավանականությամբ, ոչ ամենաիդեալականը):

Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Հնարավորության դեպքում մասնակցում էի որդուս (8 տարեկան): Թե կոնկրետ ինչն աշխատեց դրա հետ, և ինչը ոչ - ես հոդվածի մի մասը նվիրել եմ դրան, գուցե դա օգտակար լինի ինչ-որ մեկին:

Ռոբոտի ընդհանուր նկարագրությունը

Նախ, մի քանի խոսք ռոբոտի մասին (գաղափարը) Սկզբում ես իսկապես չէի ուզում ստանդարտ ինչ-որ բան հավաքել: Միևնույն ժամանակ, բաղադրիչների հավաքածուն բավականին ստանդարտ էր՝ շասսի, շարժիչներ, ուլտրաձայնային սենսոր, գծային սենսոր, LED-ներ, թվիթեր: Սկզբում այս «ապուրի հավաքածուից» հայտնագործվեց ռոբոտը, որը պահպանում է իր տարածքը։ Նա քշում է դեպի օրինախախտը, ով անցել է շրջանագծի գիծը, իսկ հետո վերադառնում է կենտրոն։ Այնուամենայնիվ, այս տարբերակը պահանջում էր գծված գիծ, ​​գումարած լրացուցիչ մաթեմատիկա, որպեսզի մշտապես մնար շրջանակի մեջ:

Հետևաբար, որոշ մտածելուց հետո ես որոշ չափով փոխեցի գաղափարը և որոշեցի ստեղծել «որսորդ» ռոբոտ: Սկզբում այն ​​պտտվում է իր առանցքի շուրջ՝ ընտրելով մոտակա թիրախը (անձը): Եթե ​​«որսը» հայտնաբերվի, «որսորդը» միացնում է թարթող լույսերն ու ազդանշանը և սկսում քշել դեպի այն։ Երբ մարդը հեռանում է/փախչում, ռոբոտը ընտրում է նոր թիրախ և հետապնդում այն ​​և այլն։ Նման ռոբոտը սահմանափակ շրջանակի կարիք չունի, և այն կարող է աշխատել բաց տարածքներում։

Ինչպես տեսնում եք, սա շատ նման է բռնելու խաղի: Թեև, ի վերջո, ռոբոտը բավականաչափ արագ չստացվեց, այն ազնվորեն շփվում է շրջապատի մարդկանց հետ։ Հատկապես երեխաներին այն դուր է գալիս (երբեմն, սակայն, թվում է, թե պատրաստվում են ոտնահարել, սիրտը բաբախում է...): Կարծում եմ՝ սա լավ լուծում է տեխնիկական դիզայնի հանրահռչակման համար։

Ռոբոտի կառուցվածքը

Այսպիսով, մենք որոշել ենք գաղափարը, եկեք անցնենք դասավորությունը. Տարրերի ցանկը ձևավորվում է այն բանից, թե ինչ պետք է կարողանա անել ռոբոտը: Այստեղ ամեն ինչ միանգամայն ակնհայտ է, ուստի եկեք անմիջապես նայենք համարակալմանը.

Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Ռոբոտի «ուղեղները» arduino uno տախտակն են (1); եղել է Չինաստանից պատվիրված հավաքածուում։ Մեր նպատակների համար դա բավական է (մենք կենտրոնանում ենք օգտագործված քորոցների քանակի վրա): Նույն հավաքածուից մենք վերցրեցինք պատրաստի շասսի (2), որի վրա ամրացված են երկու շարժիչ անիվ (3) և մեկ հետևի (ազատ պտտվող) (4): Հավաքածուն ներառում էր նաև պատրաստի մարտկոցի խցիկ (5): Ռոբոտի դիմաց կա ուլտրաձայնային սենսոր (HC-SR04) (6), հետևի մասում՝ շարժիչի վարորդ (L298N) (7), կենտրոնում՝ LED թարթիչ (8), և մի փոքր մինչև կողմում կա թվիթեր (9):

Դասավորության փուլում մենք նայում ենք.

- որպեսզի ամեն ինչ տեղավորվի
- լինել հավասարակշռված
- ռացիոնալ տեղադրվել

Մեր չինացի գործընկերներն արդեն մասամբ դա արել են մեզ համար։ Այսպիսով, ծանր մարտկոցի խցիկը տեղադրված է կենտրոնում, իսկ շարժիչ անիվները գտնվում են մոտավորապես դրա տակ: Բոլոր մյուս տախտակները թեթև են և կարող են տեղադրվել ծայրամասում:

Նրբություններ:

  1. Հավաքածուի շասսին ունի շատ գործարանային անցքեր, բայց ես դեռ չեմ հասկացել, թե որն է դրանց տրամաբանությունը: Շարժիչները և մարտկոցները առանց խնդիրների ամրացվեցին, այնուհետև սկսվեց «կարգավորումը»՝ նոր անցքեր փորելով՝ այս կամ այն ​​տախտակն ամրացնելու համար:
  2. Պահեստային տարածքների արույրե դարակները և այլ ամրացումները մեծ օգնություն էին (երբեմն ստիպված էինք դրանք հանել):
  3. Ես յուրաքանչյուր տախտակի ավտոբուսները անցա սեղմակների միջով (կրկին գտա դրանք պահեստում): Շատ հարմար է, բոլոր լարերը լավ պառկած են և չեն կախվում:

Անհատական ​​բլոկներ

Հիմա ես կանցնեմ բլոկներ և ես ձեզ անձամբ կպատմեմ յուրաքանչյուրի մասին:

մարտկոցի խցիկ

Հասկանալի է, որ ռոբոտը պետք է էներգիայի լավ աղբյուր ունենա։ Տարբերակները կարող են տարբեր լինել, ես ընտրել եմ 4 AA մարտկոցներով տարբերակը: Ընդհանուր առմամբ նրանք տալիս են մոտավորապես 5 Վ, և այս լարումը կարող է ուղղակիորեն կիրառվել arduino տախտակի 5 Վ պինդին (շրջանցելով կայունացուցիչը):

Իհարկե, ես որոշակի զգուշություն ունեի, բայց այս լուծումը բավականին կիրառելի է:

Քանի որ ամենուր հոսանք է անհրաժեշտ, հարմարության համար ես ռոբոտի կենտրոնում երկու միակցիչ պատրաստեցի. մեկը «բաշխում» է գետնին (աջ կողմում), իսկ երկրորդը՝ 5 Վ (ձախ կողմում):

Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Շարժիչներ և վարորդ

Նախ, շարժիչների տեղադրման մասին: Մոնտաժը գործարանային է, բայց պատրաստված է մեծ հանդուրժողականությամբ։ Այլ կերպ ասած, շարժիչները կարող են տատանվել մի քանի միլիմետր աջ ու ձախ։ Մեր առաջադրանքի համար դա կարևոր չէ, բայց որոշ տեղերում դա կարող է ազդեցություն ունենալ (ռոբոտը կսկսի շարժվել դեպի կողմը): Համենայն դեպս, շարժիչները խիստ զուգահեռ դրեցի և սոսինձով ամրացրեցի։

Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Շարժիչները կառավարելու համար, ինչպես վերևում գրեցի, օգտագործվում է L298N դրայվերը: Փաստաթղթերի համաձայն՝ յուրաքանչյուր շարժիչի համար այն ունի երեք կապ՝ մեկը արագությունը փոխելու համար և մի զույգ՝ պտտման ուղղության համար: Այստեղ կա մեկ կարևոր կետ. Ստացվում է, որ եթե մատակարարման լարումը 5 Վ է, ապա արագության վերահսկումը պարզապես չի աշխատում: Այսինքն՝ կամ ընդհանրապես չի պտտվում, կամ դառնում է առավելագույնը։ Սա այն հատկանիշն է, որը ստիպեց ինձ «սպանել» մի քանի երեկո։ Ի վերջո, ես գտա մի հիշատակում ինչ-որ տեղ ֆորումներից մեկում:

Ընդհանրապես, ռոբոտը պտտելիս ինձ անհրաժեշտ էր ցածր պտտման արագություն, որպեսզի այն ժամանակ ունենար սկանավորելու տարածությունը: Բայց, քանի որ այս մտքից ոչինչ չստացվեց, ես ստիպված էի դա անել այլ կերպ՝ մի փոքր շրջադարձ - կանգառ - շրջադարձ - կանգառ և այլն: Կրկին ոչ այնքան էլեգանտ, բայց գործունակ:

Այստեղ ես նաև կավելացնեմ, որ յուրաքանչյուր հետապնդումից հետո ռոբոտը ընտրում է պատահական ուղղություն նոր պտույտի համար (ժամացույցի սլաքի ուղղությամբ կամ հակառակ ուղղությամբ):

ուլտրաձայնային սենսոր

Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Սարքավորման ևս մեկ կտոր, որտեղ մենք պետք է փոխզիջումային լուծում փնտրեինք: Ուլտրաձայնային սենսորը իրական խոչընդոտների վրա արտադրում է անկայուն թվեր: Իրականում սա սպասելի էր։ Իդեալում, այն աշխատում է ինչ-որ տեղ մրցումների ժամանակ, որտեղ կան հարթ, հարթ և ուղղահայաց մակերեսներ, բայց եթե ինչ-որ մեկի ոտքերը «բռնում են» դրա դիմաց, անհրաժեշտ է լրացուցիչ մշակում մտցնել:

Որպես այդպիսի վերամշակում ես սահմանեցի միջին ֆիլտր երեք հաշվի համար. Իրական երեխաների թեստերի հիման վրա (թեստերի ընթացքում ոչ մի երեխա չի տուժել), պարզվեց, որ դա բավականին բավարար է տվյալների նորմալացման համար: Այստեղ ֆիզիկան պարզ է. մենք ունենք ազդանշաններ, որոնք արտացոլվում են անհրաժեշտ առարկաներ (տալով անհրաժեշտ հեռավորությունը) և արտացոլված ավելի հեռավորներից, օրինակ՝ պատերից։ Վերջիններս պատահական արտանետումներ են 45, 46, ձևի չափումներով: 230, 46, 46, 45, 45, 310, 46... Հենց սրանք են կտրում միջնադարյան ֆիլտրը։

Ամբողջ մշակումից հետո մենք ստանում ենք հեռավորությունը մոտակա օբյեկտին։ Եթե ​​այն փոքր է որոշակի շեմային արժեքից, ապա մենք միացնում ենք ահազանգը և քշում ուղիղ դեպի «ներխուժողը»:

Թարթիչ և ազդանշան

Թերևս վերը նշված բոլորի ամենապարզ տարրերը: Դրանք կարելի է տեսնել վերը նշված լուսանկարներում: Սարքավորումների մասին այստեղ գրելու ոչինչ չկա, ուստի հիմա եկեք անցնենք ծածկագիր.

Վերահսկիչ ծրագիր

Կոդը մանրամասն նկարագրելու իմաստ չեմ տեսնում, թե ում է դա պետք, հղումը հոդվածի վերջում է, այնտեղ ամեն ինչ բավականին ընթեռնելի է: Բայց լավ կլիներ բացատրել ընդհանուր կառուցվածքը։

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

Ժամաչափերը կարող են փոխկապակցված լինել: Օրինակ, թվիթերը աշխատում է սինխրոն թարթիչի հետ: Սա մի փոքր պարզեցնում է ծրագիրը:

Բնականաբար, մենք ամեն ինչ բաժանում ենք առանձին գործառույթների (թարթող լույսեր, ձայն, շրջադարձ, առաջ շարժվել և այլն): Եթե ​​դուք դա չանեք, ապա չեք կարողանա պարզել, թե որտեղից և որտեղից ինչ է գալիս:

Մանկավարժության նրբությունները

Վերը նկարագրված ամեն ինչ անում էի ազատ ժամանակ երեկոյան ժամերին։ Հանգիստ կերպով ես մոտ երեք շաբաթ անցկացրեցի ռոբոտի վրա: Սա կարող էր ավարտվել այստեղ, բայց ես նաև խոստացա պատմել երեխայի հետ աշխատելու մասին։ Ի՞նչ կարելի է անել այս տարիքում:

Աշխատեք ըստ հրահանգների

Մենք նախ ստուգեցինք յուրաքանչյուր դետալ առանձին-առանձին` LED-ներ, թվիթեր, շարժիչներ, սենսորներ և այլն: Կան մեծ թվով պատրաստի օրինակներ. մի քանիսը հենց զարգացման միջավայրում, մյուսները կարելի է գտնել ինտերնետում: Սա, անշուշտ, ուրախացնում է ինձ: Մենք վերցնում ենք կոդը, միացնում ենք մասը, համոզվում, որ այն աշխատում է, այնուհետև սկսում ենք այն փոխել մեր առաջադրանքին համապատասխան: Երեխան կապերը կատարում է ըստ գծապատկերի և իմ որոշ հսկողության ներքո: Սա լավ է. Դուք նաև պետք է կարողանաք աշխատել խստորեն ըստ հրահանգների:

Աշխատանքի կարգը («մասնավորից ընդհանուր»)

Սա դժվար կետ է: Դուք պետք է սովորեք, որ մեծ նախագիծը («պատրաստել ռոբոտ») բաղկացած է փոքր առաջադրանքներից («միացնել սենսորը», «միացնել շարժիչները»...), իսկ դրանք, իրենց հերթին, բաղկացած են նույնիսկ ավելի փոքր քայլերից («գտնել ծրագիր», «միացնել տախտակը», «ներբեռնել որոնվածը»...): Կատարելով ցածր մակարդակի քիչ թե շատ հասկանալի առաջադրանքներ՝ մենք «փակում» ենք միջին մակարդակի առաջադրանքները, և դրանցից ձևավորվում է ընդհանուր արդյունքը։ Բացատրեցի, բայց կարծում եմ, որ գիտակցումը շուտ չի գա։ Ինչ-որ տեղ, հավանաբար, դեռահասության տարիքում:

Տեղակայում

Հորատում, թելեր, պտուտակներ, ընկույզներ, զոդում և ռոսինի հոտ - որտե՞ղ կլինեինք մենք առանց դրա: Երեխան ստացավ «Զոդման երկաթի հետ աշխատել» հիմնական հմտությունը. նրան հաջողվեց մի քանի կապ զոդել (ես մի փոքր օգնեցի, չեմ թաքցնի): Մի մոռացեք անվտանգության բացատրության մասին:

Համակարգչային աշխատանք

Ես գրեցի ծրագիրը ռոբոտի համար, բայց այնուամենայնիվ կարողացա որոշակի բարենպաստ արդյունքների հասնել։

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

Երկրորդ՝ արդյունավետ աշխատանք: Մենք սովորեցրել ենք թեժ ստեղների համակցություններ և ինչպես արագ կատարել ստանդարտ գործողություններ: Պարբերաբար, երբ գրում էինք ծրագիրը, ես ու տղաս փոխանակում էինք տեղերը, և ես ասում էի, թե ինչ է պետք անել (փոխարինում, որոնում և այլն): Ես ստիպված էի նորից ու նորից կրկնել՝ «կրկնակի սեղմեք ընտրեք», «պահեք Shift», «պահեք Ctrl» և այլն: Այստեղ ուսուցման գործընթացը արագ չէ, բայց կարծում եմ, որ հմտություններն աստիճանաբար կտեղադրվեն «ենթակեղևում»:

Թաքնված տեքստԿարելի է ասել, որ վերը նշվածը գրեթե ակնհայտ է։ Բայց, անկեղծ ասած, այս աշնանը ես հնարավորություն ունեցա 9-րդ դասարանում համակարգչային գիտություն դասավանդել մեկ դպրոցում։ Դա սարսափելի է: Ուսանողները չգիտեն այնպիսի հիմնական բաներ, ինչպիսիք են Ctrl + Z, Ctrl + C և Ctrl + V, Shift-ը պահելով տեքստ ընտրելը կամ բառի վրա կրկնակի սեղմելը և այլն: Սա այն դեպքում, երբ նրանք սովորում էին համակարգչային գիտություն սովորելու երրորդ կուրսում... Ինքդ եզրակացություն արեք.

Երրորդ՝ հպումով մուտքագրում: Կոդի մեկնաբանությունները վստահեցի երեխային, որ տպի (թող պարապի): Մենք անմիջապես ճիշտ տեղադրեցինք մեր ձեռքերը, որպեսզի մեր մատները կամաց-կամաց հիշեին ստեղների տեղը։

Ինչպես տեսնում եք, մենք դեռ նոր ենք սկսում: Մենք կշարունակենք կատարելագործել մեր հմտություններն ու գիտելիքները, դրանք օգտակար կլինեն կյանքում:

Ի դեպ, ապագայի մասին...

Հետագա զարգացում

Ռոբոտը պատրաստված է, քշում է, թարթում և ազդանշան է տալիս: Հիմա ինչ? Ոգեշնչված նրանով, ինչ մենք հասել ենք, մենք նախատեսում ենք այն ավելի կատարելագործել: Գոյություն ունի հեռակառավարման վահանակ պատրաստելու գաղափար՝ ինչպես լուսնագնացը: Հետաքրքիր կլիներ, հեռակառավարման վահանակի մոտ նստած, վերահսկել ռոբոտի շարժումը, որը վարում է բոլորովին այլ տեղ։ Բայց դա այլ պատմություն կլինի...

Իսկ վերջում, փաստորեն, այս հոդվածի հերոսները (տեսանյութը՝ սեղմելով).

Arduino-ում առաջին ռոբոտը ստեղծելու փորձ (ռոբոտ «որսորդ»)

Շնորհակալություն ձեր ուշադրության համար:

Կոդի հղում

Source: www.habr.com

Добавить комментарий