Բովանդակություն:
- Քայլ 1: Ձեզ անհրաժեշտ բաներ
- Քայլ 2: Ձեռք պատրաստելը
- Քայլ 3: Կապեր հաստատելը
- Քայլ 4: Կոդավորում
- Քայլ 5: Փորձարկում
Video: Պարզ և խելացի ռոբոտային ձեռք ՝ օգտագործելով Arduino !!!: 5 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Այս ուսանելի ուսուցման մեջ ես պատրաստելու եմ մի պարզ ռոբոտային թև: Դա կվերահսկվի `օգտագործելով հիմնական ձեռքը: Ձեռքը կհիշի շարժումները և կխաղա հաջորդականությամբ: Հայեցակարգը նոր չէ: Գաղափարը ստացա «մինի ռոբոտային թևից -Ստոերպիկից»: Ես երկար ժամանակ ցանկանում էի դա պատրաստել, բայց այն ժամանակ ես ամբողջովին անտարբեր էի և ծրագրավորման մասին ոչ մի գիտելիք չունեի: Այժմ վերջապես ես կառուցում եմ մեկը ՝ այն պահելով պարզ, էժան և կիսելով այն բոլորիդ հետ:
Այսպիսով, եկեք սկսենք….
Քայլ 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» ՝ գրանցված շարժումները խաղալու համար: Սերվոները կշարունակեն կատարել շարժումները, քանի դեռ տախտակը չի վերականգնվել:
Խորհուրդ ենք տալիս:
Ձայնի կառավարման ռոբոտային ձեռք ՝ 4 քայլ
Ձայնի կառավարման ռոբոտային ձեռքը. Ես ստեղծել եմ ռոբոտային թև, որը կգործի ձեր ձայնային հրամանով: Ռոբոտի թևը վերահսկվում է խոսքի բնական մուտքով: Լեզվի մուտքագրումը թույլ է տալիս օգտագործողին փոխազդել ռոբոտի հետ մարդկանց համար ծանոթ պայմաններով: Առաջխաղացումը
Arduino Պարզ ցածր գնով վերահսկվող ձեռք ՝ 5 քայլ
Arduino պարզ ցածր գնով վերահսկվող ձեռք. Հսկայական ինտերնետում կան շատ թանկարժեք 3D տպագիր և ճկուն սենսորների վրա հիմնված ռոբոտային ձեռքեր: Այնուամենայնիվ, լինելով ուսանող, ես այնքան էլ հասանելի չեմ այնպիսի իրերի, ինչպիսիք են ՝ CNC, 3D տպիչներ և էլեկտրական գործիքներ: Ես լուծում ունեմ, մենք պատրաստվում ենք կառուցել
IoT- ի վրա հիմնված խելացի այգեգործություն և խելացի գյուղատնտեսություն ՝ օգտագործելով ESP32: 7 քայլ
IoT- ի վրա հիմնված խելացի այգեգործություն և խելացի գյուղատնտեսություն ՝ օգտագործելով ESP32. Աշխարհը փոխվում է ժամանակի և գյուղատնտեսության հետ միասին: Այսօր մարդիկ ամենուր ինտեգրում են էլեկտրոնիկան, և գյուղատնտեսությունը դրանում բացառություն չէ: Էլեկտրոնիկայի այս միաձուլումը գյուղատնտեսությունում օգնում է ֆերմերներին և այգիներ կառավարող մարդկանց: Այս
Պարզ ռոբոտային թև, որը վերահսկվում է ձեռքի իրական շարժման վրա. 7 քայլ (նկարներով)
Պարզ ռոբոտային թև, որը վերահսկվում է ձեռքի իրական շարժման վրա. Սա շատ պարզ մեկ DOF ռոբոտային թև է սկսնակների համար: Ձեռքը վերահսկվում է Arduino- ով: Այն միացված է սենսորով, որը ամրացված է օպերատորի ձեռքին: Հետևաբար, օպերատորը կարող է վերահսկել թևի արմունկը ՝ ծալելով սեփական արմունկի շարժումը: …ամը
Երրորդ ձեռք ++. Էլեկտրոնիկայի և այլ նուրբ աշխատանքների համար բազմակողմանի օգնության ձեռք. 14 քայլ (նկարներով)
Երրորդ ձեռք ++. Էլեկտրոնիկայի և այլ նուրբ աշխատանքների բազմօգտագործման օգնության ձեռք. Նախկինում ես օգտագործել եմ երրորդ ձեռքերը/օգնության ձեռքերը, որոնք առկա են էլեկտրոնիկայի խանութների ցանցում և հիասթափված եմ դրանց օգտագործելիությունից: Ես երբեք չէի կարող ստանալ տեսահոլովակները հենց այնտեղ, որտեղ ես ուզում էի, կամ ավելի շատ ժամանակ պահանջվեց, քան իրականում պետք էր տեղադրելը