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

Robotic Arm Game - Smartphone Controller: 6 Steps
Robotic Arm Game - Smartphone Controller: 6 Steps

Video: Robotic Arm Game - Smartphone Controller: 6 Steps

Video: Robotic Arm Game - Smartphone Controller: 6 Steps
Video: ROS2 Moveit 2 Control of XArm 1S robot arm 2024, Հուլիսի
Anonim
Robotic Arm Game - սմարթֆոնների վերահսկիչ
Robotic Arm Game - սմարթֆոնների վերահսկիչ

Բարեւ Ձեզ !

Ահա զվարճալի ամառային խաղ. Սմարթֆոնի միջոցով կառավարվող ռոբոտային ձեռքը !!

Ինչպես տեսնում եք Տեսանյութում, ձեր սմարթֆոնի որոշ oyոյստիկներով կարող եք ձեռքը կառավարել:

Դուք նաև կարող եք պահպանել մի օրինաչափություն, որի համաձայն ռոբոտը կվերարտադրվի օղակի մեջ `որոշ կրկնվող առաջադրանքներ կատարելու համար: Բայց այս օրինակը մոդուլացվող է, ինչպես ցանկանում եք !!!!

Եղի՛ր ստեղծագործ:

Քայլ 1: Նյութեր

Նյութեր
Նյութեր

Այստեղ կարող եք տեսնել ձեզ անհրաժեշտ նյութը:

Այս ռոբոտային թևը կառուցելու համար ձեզ կարժենա մոտ 50 եվրո: Softwareրագրակազմը և գործիքները կարող են փոխարինվել, բայց ես դրանք օգտագործել եմ այս նախագծի համար:

Քայլ 2. 3D տպեք Robotic Arm- ը

3D Տպել Robotic Arm- ը
3D Տպել Robotic Arm- ը
3D Տպել Robotic Arm- ը
3D Տպել Robotic Arm- ը
3D Տպել Robotic Arm- ը
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 ծածկագիրը

Arduino ծածկագիրը
Arduino ծածկագիրը
Arduino ծածկագիրը
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- ը, ապա հաստատ ավելին կարող եք այցելել մեզ: =)

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