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

Պարզ և խելացի ռոբոտային ձեռք ՝ օգտագործելով Arduino !!!: 5 քայլ (նկարներով)
Պարզ և խելացի ռոբոտային ձեռք ՝ օգտագործելով Arduino !!!: 5 քայլ (նկարներով)

Video: Պարզ և խելացի ռոբոտային ձեռք ՝ օգտագործելով Arduino !!!: 5 քայլ (նկարներով)

Video: Պարզ և խելացի ռոբոտային ձեռք ՝ օգտագործելով Arduino !!!: 5 քայլ (նկարներով)
Video: Ինչպես ստեղծել առողջ և ճիշտ սովորություններ և ազատվել վատ սովորույթներից 2024, Նոյեմբեր
Anonim
Image
Image
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ

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

Այսպիսով, եկեք սկսենք….

Քայլ 1: Ձեզ անհրաժեշտ բաներ

Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ
Ձեզ անհրաժեշտ բաներ

Ահա այն իրերի ցանկը, որոնք ձեզ հարկավոր կլինեն.

1. Servo motors x 5 Հղում ԱՄՆ-ի համար.- https://amzn.to/2OxbSH7 Հղում Եվրոպայի համար.

2. Պոտենցիոմետրեր x 5 (ես օգտագործել եմ 100k.) Հղում ԱՄՆ-ի համար.- https://amzn.to/2ROjhDMLink for Europe:-

3. Arduino UNO: (Դուք կարող եք օգտագործել նաև Arduino Nano- ն) Հղում ԱՄՆ-ի համար.- https://amzn.to/2DBbENW Հղում Եվրոպայի համար.

4. Հացաթուղթ: (Ես առաջարկում եմ այս հավաքածուն) Հղում ԱՄՆ-ի համար.- https://amzn.to/2Dy86w4 Հղում Եվրոպայի համար.-

5. Մարտկոց: (ըստ ցանկության, ես օգտագործում եմ 5 վ ադապտեր)

6. Ստվարաթուղթ/Փայտ/Արևի տախտակ/ակրիլ այն, ինչ երբևէ առկա է կամ հեշտ է գտնել:

Եվ ձեզ հարկավոր կլինի նաև Arduino IDE- ի տեղադրում:

Քայլ 2: Ձեռք պատրաստելը

Ձեռքի պատրաստում
Ձեռքի պատրաստում
Ձեռքի պատրաստում
Ձեռքի պատրաստում

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

Ես ուղղակի օգտագործեցի երկկողմանի ժապավեն, որպեսզի սերվերը կպչեմ Popsicle փայտին և ամրացնեմ դրանք պտուտակներով:

Վարպետ թևի համար ես պոտենցիոմետրեր կպցրեցի սառցաբեկորի ձողերին և պատրաստեցի թևը:

Նկարներին հղումը ձեզ ավելի լավ գաղափար կտա:

Ես ամեն ինչ տեղադրել եմ A4 չափի կտավի տախտակի վրա, որն օգտագործվում է որպես հիմք:

Քայլ 3: Կապեր հաստատելը

Կապեր հաստատելը
Կապեր հաստատելը
Կապեր հաստատելը
Կապեր հաստատելը
Կապեր հաստատելը
Կապեր հաստատելը

Այս քայլին մենք կկատարենք բոլոր անհրաժեշտ կապերը: Դիտեք վերևի նկարները:

  • Նախ միացրեք բոլոր սերվերը էներգիայի մատակարարմանը զուգահեռ (Կարմիր մետաղալարը +ve- ին և Սև կամ շագանակագույն մետաղալարերը Gnd- ին)
  • Հաջորդը միացրեք ազդանշանային լարերը, այսինքն `դեղին կամ նարնջագույն մետաղալարերը arduino- ի PWM կապին:
  • Այժմ զուգահեռաբար միացրեք պոտենցիոմետրերը +5v և Gnd arduino- ին:
  • Միացրեք միջին տերմինալը ardunio- ի անալոգային քորոցին:

Այստեղ թվային կապում 3, 5, 6, 9 և 10 -ն օգտագործվում են սերվերը վերահսկելու համար

Պոտենցիոմետրերից մուտքի համար օգտագործվում են A0- ից A4 անալոգային կապում:

Պին 3 -ին միացված servo- ն կառավարվելու է A0- ին միացված պոտենցիոմետրով

Պին 5 -ին միացված սերվոն կառավարվելու է A1- ի կաթսայով և այլն…

Նշում.

Քայլ 4: Կոդավորում

Կոդավորում `
Կոդավորում `

Այս ծածկագրի տրամաբանությունը բավականին պարզ է: պոտենցիոմետրերի արժեքները պահվում են զանգվածում: գրառումները այնուհետև անցնում են for loop- ի միջոցով, և սերվերը կատարում են քայլերը ըստ արժեքների: Դուք կարող եք ծանոթանալ այս ձեռնարկին, որը ես օգտագործել եմ «Arduino Potentiometer Servo Control & Memory» հղման համար:

Կոդ.- (Ներբեռնվող ֆայլը կցված է ստորև):

Սկզբում մենք կհայտարարենք բոլոր անհրաժեշտ փոփոխականները գլոբալ մակարդակում, որպեսզի կարողանանք դրանք օգտագործել ամբողջ ծրագրի ընթացքում: Դրա համար հատուկ բացատրություն պետք չէ:

#ներառում

// Servo Objects Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentiometer Objects int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Փոփոխական ՝ Servo Position- ի պահպանման համար Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Փոփոխական ՝ նախկին դիրքի արժեքները int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Փոփոխական ՝ պահելու ընթացիկ դիրքի արժեքները int Current_0_Pos; int Ընթացիկ_1_Տրամադրություն; int Ընթացիկ_2_ դրական; int Ընթացիկ_3_Pos; int Ընթացիկ_4_Pos; int Servo_Position; // Պահում է անկյունը int Servo_Number; // Պահում է servo int Storage- ի համարը [600]; // dataանգված ՝ տվյալները պահելու համար (զանգվածի չափի մեծացումն ավելի շատ հիշողություն կխլի) int Index = 0; // rayանգվածների ինդեքսը սկսվում է 0 -րդ դիրքից char data = 0; // փոփոխական ՝ տվյալները սերիական մուտքագրումից պահելու համար:

Այժմ մենք կգրենք տեղադրման գործառույթ, որտեղ մենք սահմանում ենք կապումներն ու դրանց գործառույթները: Սա այն հիմնական գործառույթն է, որն առաջին հերթին կատարում է:

դատարկ կարգավորում ()

{Serial.begin (9600); // arduino- ի և IDE- ի միջև սերիական հաղորդակցության համար: // Servo օբյեկտները կցվում են PWM կապումներին: Servo_0. կցել (3); Servo_1.attach (5); Servo_2.attach (6); Servo_3. կցել (9); Servo_4. կցել (10); // Servos- ը սկզբնավորման ժամանակ սահմանվում է 100 դիրքի: Servo_0. գրել (100); Servo_1.գրեք (100); Servo_2. գրել (100); Servo_3. գրել (100); Servo_4. Գրել (100); Serial.println («Սեղմեք 'R' ձայնագրման համար և 'P' խաղալու համար '); }

Այժմ մենք պետք է կարդանք պոտենցիոմետրերի արժեքները ՝ օգտագործելով Անալոգային մուտքի կապում և քարտեզագրենք դրանք սերվերը վերահսկելու համար: Դրա համար մենք սահմանելու ենք գործառույթ և այն անվանակոչելու ենք Map_Pot ();, կարող եք այն անվանել այն, ինչ ցանկանում եք, դա օգտագործողի կողմից սահմանված գործառույթ է:

անվավեր Map_Pot ()

{ / * Սերվոները պտտվում են 180 աստիճանով, սակայն այն սահմանափակելն այնքան էլ լավ գաղափար չէ, քանի որ այն ստիպում է սերվոներին անընդհատ բզզել, ինչը նյարդայնացնում է, ուստի մենք սահմանափակում ենք սերվոյի շարժումը ՝ 1-179 * / Pot_0 = analogRead (A0); // Կարդացեք կաթսայից մուտքագրված տվյալները և պահեք դրանք Variable Pot_0- ում: Servo_0_Pos = քարտեզ (Pot_0, 0, 1023, 1, 179); // Քարտեզագրեք սերվերը `0 -ից մինչև 1023 Servo_0.write (Servo_0_Pos) արժեքի միջև; // Սերվոն տեղափոխեք այդ դիրքը: Pot_1 = analogRead (A1); Servo_1_Pos = քարտեզ (Pot_1, 0, 1023, 1, 179); Servo_1.գրեք (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = քարտեզ (Pot_2, 0, 1023, 1, 179); Servo_2. գրել (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = քարտեզ (Pot_3, 0, 1023, 1, 179); Servo_3. գրել (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = քարտեզ (զամբյուղ_4, 0, 1023, 1, 179); Servo_4. գրել (Servo_4_Pos); }

Այժմ մենք կգրենք loop գործառույթը

դատարկ շրջան ()

{Map_Pot (); // Ֆունկցիայի կանչ `զամբյուղի արժեքները կարդալու համար (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Շարժումների գրանցում …"); if (data == 'P') Serial.println ("Գրանցված շարժումների նվագարկում …"); } if (data == 'R') // Եթե 'R' մուտքագրված է, սկսեք ձայնագրումը: {// Պահել արժեքները փոփոխականի մեջ Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Նախորդ_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Քարտեզի գործառույթը հետ է կանչվում համեմատության համար, եթե (abs (Prev_0_Pos == Servo_0_Pos)) // բացարձակ արժեքը ստացվում է ՝ համեմատելով {Servo_0.write (Servo_0_Pos); // Եթե արժեքները համընկնում են servo- ն վերափոխվում է, եթե (Current_0_Pos! = Servo_0_Pos) // Եթե արժեքները չեն համապատասխանում {Storage [Index] = Servo_0_Pos + 0; // Արժեքը ավելացվում է զանգվածի Index ++; // exուցանիշի արժեքն ավելացել է 1} Ընթացիկ_0_Պոս = Servo_0_Pos; } /* Նմանապես արժեքի համեմատությունը կատարվում է բոլոր սերվերի համար, մուտքի համար +100 ավելացվում է որպես դիֆերենցիալ արժեք: */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.գրեք (Servo_1_Pos); եթե (Ընթացիկ_1_Փոս! = Servo_1_Pos) {Պահեստ [Index] = Servo_1_Pos + 100; Indուցանիշ ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2. գրել (Servo_2_Pos); եթե (Ընթացիկ_Պոս! = Servo_2_Pos) {Պահեստ [Index] = Servo_2_Pos + 200; Indուցանիշ ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indուցանիշ ++; } Current_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); if (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Indուցանիշ ++; } Current_4_Pos = Servo_4_Pos; } / * Արժեքները տպվում են սերիական մոնիտորի վրա, '\ t' `աղյուսակային ձևաչափով արժեքները ցուցադրելու համար * / Serial.print (Servo_0_Pos); Serial.print ("\ t"); Serial.print (Servo_1_Pos); Serial.print ("\ t"); Serial.print (Servo_2_Pos); Serial.print ("\ t"); Serial.print (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("exուցանիշ ="); Serial.println (ինդեքս); ուշացում (50); } եթե (տվյալները == 'P') // IF 'P' մուտքագրված է, սկսեք նվագարկել գրանցված շարժումները: {for (int i = 0; i <Index; i ++) // Անցնել զանգվածը ՝ օգտագործելով loop {Servo_Number = Storage /100; // Գտնում է servo- ի թիվը Servo_Position = Պահեստավորում % 100; // Գտնում է servo անջատիչի դիրքը (Servo_Number) {case 0: Servo_0.write (Servo_Position); ընդմիջում; դեպք 1: Servo_1. գրել (Servo_Position); ընդմիջում; դեպք 2: Servo_2.write (Servo_Position); ընդմիջում; դեպք 3: Servo_3. գրել (Servo_Position); ընդմիջում; դեպք 4: Servo_4. գրել (Servo_Position); ընդմիջում; } ուշացում (50); }}}

Երբ ծածկագիրը պատրաստ է, այժմ վերբեռնեք այն arduino տախտակին:

Smart arm- ը պատրաստ է աշխատանքի: Գործառույթը դեռ այնքան հարթ չէ, որքան Stoerpeak- ի կատարածը:

Եթե կարող եք ավելի լավ դարձնել ծածկագիրը կամ ինձ համար որևէ առաջարկ ունեք, խնդրում եմ ինձ տեղյակ պահեք մեկնաբանությունների բաժնում:

Ասվածով ՝ եկեք անցնենք թեստավորման…

Քայլ 5: Փորձարկում

Կոդը տախտակին հաջողությամբ վերբեռնելուց հետո բացեք «Սերիական մոնիտոր», այն կարող եք գտնել Գործիքներ տարբերակում: Երբ սերիական մոնիտորը սկսվի, arduino- ն կվերակայվի: Այժմ դուք կարող եք կառավարել ռոբոտացված թևը ՝ օգտագործելով հիմնական ձեռքը: Բայց ոչինչ չի գրանցվում:

Ձայնագրումը սկսելու համար մուտքագրեք 'R' մոնիտորի վրա, այժմ կարող եք կատարել այն շարժումները, որոնք ցանկանում եք գրանցել:

Քայլերը կատարելուց հետո դուք պետք է մուտքագրեք «P» ՝ գրանցված շարժումները խաղալու համար: Սերվոները կշարունակեն կատարել շարժումները, քանի դեռ տախտակը չի վերականգնվել:

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