Բովանդակություն:
- Քայլ 1: Նյութեր
- Քայլ 2. 3D տպեք Robotic Arm- ը
- Քայլ 3. Էլեկտրոնային մոնտաժ
- Քայլ 4: Սմարթֆոնների դիմում
- Քայլ 5. Arduino ծածկագիրը
- Քայլ 6: Ահա և վերջ:
Video: Robotic Arm Game - Smartphone Controller: 6 Steps
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Բարեւ Ձեզ !
Ահա զվարճալի ամառային խաղ. Սմարթֆոնի միջոցով կառավարվող ռոբոտային ձեռքը !!
Ինչպես տեսնում եք Տեսանյութում, ձեր սմարթֆոնի որոշ oyոյստիկներով կարող եք ձեռքը կառավարել:
Դուք նաև կարող եք պահպանել մի օրինաչափություն, որի համաձայն ռոբոտը կվերարտադրվի օղակի մեջ `որոշ կրկնվող առաջադրանքներ կատարելու համար: Բայց այս օրինակը մոդուլացվող է, ինչպես ցանկանում եք !!!!
Եղի՛ր ստեղծագործ:
Քայլ 1: Նյութեր
Այստեղ կարող եք տեսնել ձեզ անհրաժեշտ նյութը:
Այս ռոբոտային թևը կառուցելու համար ձեզ կարժենա մոտ 50 եվրո: Softwareրագրակազմը և գործիքները կարող են փոխարինվել, բայց ես դրանք օգտագործել եմ այս նախագծի համար:
Քայլ 2. 3D տպեք Robotic Arm- ը
Robotic Arm- ը 3D տպագրված էր (մեր prusa i3- ով):
«HowtoMechatronics.com» կայքի շնորհիվ նրա STL ֆայլերը հիանալի են 3D թև կառուցելու համար:
Բոլոր կտորները տպելու համար կպահանջվի մոտ 20 ժամ:
Քայլ 3. Էլեկտրոնային մոնտաժ
Մոնտաժն առանձին է 2 մասի.
Էլեկտրոնային մաս, որտեղ arduino- ն միացված է սերվոներին Թվային կապումներով և Bluetooth սարքով (Rx, Tx):
Էլեկտրաէներգիայի մի մաս, որտեղ սպասարկիչները սնուցվում են 2 հեռախոսի լիցքավորիչով (5 Վ, 2 Ա առավելագույն):
Քայլ 4: Սմարթֆոնների դիմում
Դիմումը կատարվել է App գյուտարար 2 -ի վրա: Մենք օգտագործում ենք 2 Joystick ՝ 4 Servos և ևս 2 Կոճակներ վերահսկելու վերջնական Grip- ը:
Մենք միացնում ենք Arm- ը և Smartphone- ը ՝ օգտագործելով Bluetooth մոդուլ (HC-06):
Ի վերջո, խնայողության ռեժիմը թույլ է տալիս օգտվողին խնայել մինչև 9 դիրք Arm- ի համար:
Այնուհետև թևը կանցնի ավտոմատ ռեժիմի, որտեղ նա կվերարտադրի պահպանված դիրքերը:
Քայլ 5. Arduino ծածկագիրը
// 08/19 - Robotic Arm Սմարթֆոնի կառավարում
#ներառել #սահմանել ճշմարիտ ճշմարիտը #սահմանել կեղծը կեղծ // ******************* ՀԱՅՏԱՐԱՐՈԹՅՈՆՆԵՐ ***************** ***********
բառերի ներկայացուցիչ; // mot envoyé du module Arduino կամ սմարթֆոն
int chiffre_final = 0; int cmd = 3; // փոփոխական commande du servo moteur (troisième fil (նարնջագույն, դեղին)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activ_saving = 0; Servo moteur; // définit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int քայլ_անկյուն = 3; int անկյուն, անկյուն 1, անկյուն 3, անկյուն 5, անկյուն 2; // անկյուն int pas; int r, r1, r2, r3; int գրանցող; բուլյան լող = ՍՏԱ; բուլյան ֆին 1 = ՍՈSEՏ; բուլյան fin2 = ՍՈALՏ; բուլյան fin3 = ՍՈALՏ; բուլյան fin4 = ՍՈALՏ; բառը w; // փոփոխական Envoyé du smartphone կամ a module Arduino int sauvegarde_positions1 [5]; int sauvegarde_positions2 [5]; int sauvegarde_positions3 [5]; int sauvegarde_positions4 [5]; int sauvegarde_positions5 [5]; int sauvegarde_positions6 [5]; int sauvegarde_positions7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_positions9 [5];
// int անկյուն; // պտույտի անկյուն (0-180)
// ******************** SETUP ************************** ******** void setup () {sauvegarde_positions1 [0] = sauvegarde_positions1 [1] = sauvegarde_positions1 [2] = sauvegarde_positions1 [3] = sauvegarde_positions1 [4] = 0; sauvegarde_positions2 [0] = sauvegarde_positions2 [1] = sauvegarde_positions2 [2] = sauvegarde_positions2 [3] = sauvegarde_positions2 [4] = 0; sauvegarde_positions3 [0] = sauvegarde_positions3 [1] = sauvegarde_positions3 [2] = sauvegarde_positions3 [3] = sauvegarde_positions3 [4] = 0; sauvegarde_positions4 [0] = sauvegarde_positions4 [1] = sauvegarde_positions4 [2] = sauvegarde_positions4 [3] = sauvegarde_positions4 [4] = 0; sauvegarde_positions5 [0] = sauvegarde_positions5 [1] = sauvegarde_positions5 [2] = sauvegarde_positions5 [3] = sauvegarde_positions5 [4] = 0; sauvegarde_positions6 [0] = sauvegarde_positions6 [1] = sauvegarde_positions6 [2] = sauvegarde_positions6 [3] = sauvegarde_positions6 [4] = 0; sauvegarde_positions7 [0] = sauvegarde_positions7 [1] = sauvegarde_positions7 [2] = sauvegarde_positions7 [3] = sauvegarde_positions7 [4] = 0; sauvegarde_positions8 [0] = sauvegarde_positions8 [1] = sauvegarde_positions8 [2] = sauvegarde_positions8 [3] = sauvegarde_positions8 [4] = 0; sauvegarde_positions9 [0] = sauvegarde_positions9 [1] = sauvegarde_positions9 [2] = sauvegarde_positions9 [3] = sauvegarde_positions9 [4] = 0; moteur.attach (սմդ); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3. կցել (cmd3); // moteur4.attach (cmd4); moteur5. կցել (cmd5); moteur.write (6); անկյուն = 6; moteur1.write (100); անկյուն 1 = 100; moteur2.write (90); moteur3. գրել (90); //moteur4.write(12); moteur5. գրել (90); անկյուն = 6; անկյուն 1 = 100; անկյուն 2 = 90; անկյուն 3 = 90; անկյուն 5 = 90; Serial.begin (9600); // permettra de communiquer au մոդուլ Bluetooth} // ******************* BOUCLE ****************** ***************** դատարկ հանգույց () {
// Serial.print («անկյուն»);
//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t Serial.print (angle3); Serial.print ("\ t"); Serial.print (angle5); Serial.print ("\ n");
//Serial.print( angle »);
int i; w = ընդունիչ (); // սմարթֆոնի մասին ստացվող տեղեկատվության մասին, փոփոխական w անջատիչ (w) {դեպք 1: TouchDown_Release (); ընդմիջում; գործ 2: TouchDown_Grab (); ընդմիջում; դեպք 3: Base_Rotation (); ընդմիջում; դեպք 4: Base_AntiRotation (); ընդմիջում; դեպք 5: Waist_Rotation (); ընդմիջում; դեպք 6: Waist_AntiRotation (); ընդմիջում; դեպք 7: Third_Arm_Rotation (); ընդմիջում; դեպք 8: Third_Arm_AntiRotation (); ընդմիջում; դեպք 9: Չորրորդ_Արման_շրջում (); ընդմիջում; դեպք 10: Չորրորդ_Արման_Շրջադարձ (); ընդմիջում; // գործ 11: Fifth_Arm_Rotation (); break; // դեպք 12: Fifth_Arm_AntiRotation (); ընդմիջում; գործ 21: Serial.print («գործի կոճակ 1»); chiffre_final = 1; sauvegarde_positions1 [0] = անկյուն; sauvegarde_positions1 [1] = անկյուն 1; sauvegarde_positions1 [2] = անկյուն 2; sauvegarde_positions1 [3] = անկյուն 3] sauvegarde = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); ընդմիջում; դեպք 22: ընդմիջում; գործ 23. գործ 24. ընդմիջում; գործ 25. ընդմիջում; գործ 26. ընդմիջում; գործ 27: ընդմիջում; գործ 28. ընդմիջում; դեպք 29: ընդմիջում;
գործ 31. Serial.print ("31"); activ_saving = 1; chiffre_final = 0; ընդմիջում; // ՍԿՍԵԼ
գործ 33: Serial.print ("33"); activ_saving = 0; break; // BUTTON SAVE կանխադրված `break; break; } if (w == 32) {Serial.print ("\ n Վերարտադրել / n Չիֆրի վերջնական ՝"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde դիրք 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 3: / n"); (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} համար (i = 1; i <= chiffre_final; i ++) {Սերիա տպել ("\ n / n ՍԿՍԵԼ / n Շրջանակ."); Serial.print (i); Serial.print ("\ n"); անջատիչ (i) {դեպք 1: goto_moteur (*(sauvegarde_positions1)); հետաձգում (200); goto_moteur1 (*(sauvegarde_positions1+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions1+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions1+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions1+4)); հետաձգում (200); ընդմիջում; գործ 2: goto_moteur (*(sauvegarde_positions2)); ուշացում (200); goto_moteur1 (*(sauvegarde_positions2+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions2+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions2+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions2+4)); հետաձգում (200); ընդմիջում; դեպք 3: goto_moteur (*(sauvegarde_positions3)); հետաձգում (200); goto_moteur1 (*(sauvegarde_positions3+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions3+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions3+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions3+4)); հետաձգում (200); ընդմիջում; գործ 4. goto_moteur (*(sauvegarde_positions4)); ուշացում (200); goto_moteur1 (*(sauvegarde_positions4+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions4+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions4+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions4+4)); հետաձգում (200); ընդմիջում; դեպք 5: goto_moteur (*(sauvegarde_positions5)); ուշացում (200); goto_moteur1 (*(sauvegarde_positions5+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions5+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions5+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions5+4)); հետաձգում (200); ընդմիջում; գործ 6. goto_moteur (*(sauvegarde_positions6)); հետաձգում (200); goto_moteur1 (*(sauvegarde_positions6+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions6+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions6+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions6+4)); հետաձգում (200); ընդմիջում; գործ 7. goto_moteur (*(sauvegarde_positions7)); ուշացում (200); goto_moteur1 (*(sauvegarde_positions7+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions7+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions7+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions7+4)); հետաձգում (200); ընդմիջում; գործ 8. goto_moteur (*(sauvegarde_positions8)); հետաձգում (200); goto_moteur1 (*(sauvegarde_positions8+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions8+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions8+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions8+4)); հետաձգում (200); ընդմիջում; գործ 9. goto_moteur (*(sauvegarde_positions9)); հետաձգում (200); goto_moteur1 (*(sauvegarde_positions9+1)); ուշացում (200); goto_moteur2 (*(sauvegarde_positions9+2)); հետաձգում (200); goto_moteur3 (*(sauvegarde_positions9+3)); ուշացում (200); goto_moteur5 (*(sauvegarde_positions9+4)); հետաձգում (200); ընդմիջում; } Serial.print ("\ n ** / n "); ուշացում (500); }} /*Serial.print ("դեբյուտային / n"); Serial.print (sauvegarde_positions1 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions2 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions3 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions4 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [4]); Serial.print ("\ n");
Serial.print ("\ nfin / n");*/
ուշացում (100); } // ************************** ԳՈՐՈՆԵՈԹՅՈՆՆԵՐ ****************** ******************
word recevoir () {// fonction permettant de recevoir l'information du smartphone
if (Serial.available ()) {w = Serial.read ();
Serial.flush ();
վերադարձ w; }}
void goto_moteur (int angle_destination)
{while (անկյունի_որոշման անկյուն+քայլ_անկյուն) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (անկյունային_որոշում); Serial.print ("\ n angle1 = / t"); Serial.print (անկյուն); եթե (անկյունային_որոշման անկյուն + քայլ_անկյուն) {անկյուն = անկյուն + քայլ_անկյուն; moteur.write (անկյուն);} ուշացում (100); } moteur.write (angle_destination); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (անկյունային_որոշում); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); եթե (անկյունային_որոշման անկյուն 1 +քայլ_անկյուն) {անկյուն 1 += քայլի անկյուն; moteur1.write (angle1);;} ուշացում (100); } moteur1.write (angle_destination); } void goto_moteur2 (int angle_destination) {
իսկ (անկյուն_որոշման անկյուն 2+քայլ_անկյուն)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (անկյունային_որոշում); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); եթե (անկյունային_որոշման անկյուն 2 +քայլ_անկյուն) {անկյուն 2 += քայլի անկյուն; moteur2.write (angle2);} ուշացում (100); } moteur2.write (անկյունային_որոշում); } void goto_moteur3 (int angle_destination) {
while (անկյուն_որոշման անկյուն 3+քայլի_անկյուն)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (անկյունային_որոշում); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); եթե (անկյունային_որոշման անկյուն 3 +քայլ_անկյուն) {անկյուն 3 += քայլ_անկյուն; moteur3.write (angle3);} ուշացում (100); } moteur3.write (angle_destination); } void goto_moteur5 (int angle_destination) {
while (անկյունային_որոշման անկյուն 5+քայլի_անկյուն)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (անկյունային_որոշում); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); եթե (անկյունային_որոշման անկյուն 5 +քայլ_անկյուն) {անկյուն 5 += քայլի անկյուն; moteur5.write (angle5);} ուշացում (100); } moteur5.write (angle_destination); }
անվավեր TouchDown_Release () // TouchDown կոճակի թողարկում
{if (angle5 <180) {angle5 = angle5+step_angle_mini; } moteur5.write (angle5); }
անվավեր TouchDown_Grab () // TouchDown կոճակի բռնում
{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Base_Rotation () {if (անկյուն 0) {angle = angle-step_angle; } else անկյուն = 0; moteur.write (անկյուն); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } այլ անկյուն 1 = 20; moteur1.write (անկյուն 1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (անկյուն 2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (angle3); }
Քայլ 6: Ահա և վերջ:
Շնորհակալություն դիտման համար, հուսով եմ գնահատեցիք:
Եթե ձեզ դուր եկավ այս Instructable- ը, ապա հաստատ ավելին կարող եք այցելել մեզ: =)
Խորհուրդ ենք տալիս:
Robotic Arm with Gripper: 9 քայլ (նկարներով)
Robotic Arm With Gripper. Կիտրոնի ծառերի բերքը համարվում է ծանր աշխատանք `ծառերի մեծ չափերի և նաև այն շրջանների տաք կլիմայի պատճառով, որտեղ կիտրոնի ծառեր են տնկվում: Ահա թե ինչու մեզ այլ բան է պետք, որը կօգնի գյուղատնտեսության ոլորտի աշխատողներին ավելի հեշտությամբ ավարտին հասցնել իրենց աշխատանքը
Moslty եռաչափ տպված Robotic Arm, որը նմանակում է տիկնիկային վերահսկիչին. 11 քայլ (նկարներով)
Moslty 3D տպված Robotic Arm That Mimics Puppet Controller. Ես ինժեներական ճարտարագիտության ուսանող եմ Հնդկաստանից և սա My Undergrad աստիճանի նախագիծն է: Այս նախագիծը կենտրոնացած է ցածր գնով ռոբոտային թևի մշակման վրա, որը հիմնականում 3D տպված է և ունի 5 DOF 2 մատով բռնիչ Ռոբոտային ձեռքը վերահսկվում է
Robotic Arm: 3 քայլ
Robotic Arm: Ciao a tutti! Vediamo come si può costruire un braccio robotico controllabile da remoto
Robotic Arm Controlled by Arduino and PC: 10 Steps
Robotic Arm Controlled by Arduino and PC: Robotic arms լայնորեն կիրառվում են արդյունաբերության մեջ: Անկախ նրանից, թե դա հավաքման աշխատանքների համար է, եռակցման կամ նույնիսկ մեկը օգտագործվում է ISS (Միջազգային տիեզերակայան) նավահանգստի համար, դրանք օգնում են մարդկանց աշխատանքում կամ դրանք ամբողջությամբ փոխարինում են մարդուն: Իմ կառուցած ձեռքը ավելի փոքր է
ROS MoveIt Robotic Arm Մաս 2. Robot Controller: 6 Steps
ROS MoveIt Robotic Arm Մաս 2: Robot Controller ՝ https://github.com/AIWintermuteAI/ros-moveit-arm.git Հոդվածի նախորդ մասում մենք ստեղծել ենք URDF և XACRO ֆայլեր մեր ռոբոտացված թևի համար և գործարկել ենք RVIZ- ը ռոբոտացված ձեռքը մոդելավորված միջավայրում: Այս անգամ մենք դա կանենք ռեալի հետ