Indholdsfortegnelse:

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

Video: Robotic Arm Game - Smartphone Controller: 6 trin

Video: Robotic Arm Game - Smartphone Controller: 6 trin
Video: Hiwonder/LewanSoul LeArm 6DOF Robotic Arm Review 2024, Juli
Anonim
Robotic Arm Game - Smartphone Controller
Robotic Arm Game - Smartphone Controller

Hej !

Her et sjovt sommerspil: Robotarmen styret af smartphone !!

Som du kan se på videoen, kan du styre armen med nogle joysticks på din smartphone.

Du kan også gemme et mønster, som robotten vil gengive i en loop, for at udføre nogle gentagne opgaver som eksempel. Men dette mønster er modulerbart, som du ønsker !!!!

Vær kreativ !

Trin 1: Materialer

Materialer
Materialer

Her kan du se det materiale, du har brug for.

Det vil koste dig omkring 50 € at bygge denne robotarm. Softwaren og værktøjerne kan udskiftes, men jeg brugte dem til dette projekt.

Trin 2: 3D -udskrivning af robotarmen

3D -udskrivning af robotarmen
3D -udskrivning af robotarmen
3D -udskrivning af robotarmen
3D -udskrivning af robotarmen
3D -udskrivning af robotarmen
3D -udskrivning af robotarmen

Robotarmen blev 3D -printet (med vores prusa i3).

Takket være webstedet "HowtoMechatronics.com" er hans STL -filer fantastiske for at bygge en 3D -arm.

Det vil tage omkring 20 timer at udskrive alle stykker.

Trin 3: Elektronisk montage

Elektronisk montage
Elektronisk montage

Montagen er adskilt i 2 dele:

En elektronisk del, hvor arduinoen er forbundet til servoerne med de digitale stifter og med Bluetooth -enheden (Rx, Tx).

En strømdel, hvor servoerne drives med 2 telefonopladere (5V, 2A max).

Trin 4: Smartphone -applikation

Smartphone -applikation
Smartphone -applikation

Ansøgningen blev foretaget på App opfinder 2. Vi bruger 2 joystick til at styre 4 servoer og 2 knapper til at styre det sidste greb.

Vi forbinder arm og smartphone sammen ved hjælp af et Bluetooth-modul (HC-06).

Endelig giver en sparetilstand brugeren mulighed for at gemme op til 9 positioner til armen.

Armen går derefter over i en automatisk tilstand, hvor han vil gengive de gemte positioner.

Trin 5: Arduino -koden

Arduino -koden
Arduino -koden
Arduino -koden
Arduino -koden

// 08/19 - Robotarm Smartphone styret

#include #define TRUE true #define FALSE false // ******************** ERKLÆRINGER ***************** ************

ord rep; // Mod envoyé du module Arduino eller smartphone

int chiffre_final = 0; int cmd = 3; // variable commande du servo moteur (troisième fil (orange, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int active_saving = 0; Servomotor; // on définit notre servomoteur Servo moteur1; Servomotor2; Servomotor3; // Servomotor4; Servomotor5; int step_angle_mini = 4; int step_angle = 3; int vinkel, vinkel1, vinkel3, vinkel5, vinkel2; // vinkel int pas; int r, r1, r2, r3; int enregistrer; boolsk finne = FALSK; boolsk fin1 = FALSK; boolsk fin2 = FALSK; boolsk fin3 = FALSK; boolsk fin4 = FALSK; ord w; // variabel envoyé du smartphone eller modul 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 vinkel; // rotationsvinkel (0 a 180)

//********************OPSÆTNING*************************** ******** 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 (cmd); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); vinkel = 6; moteur1.write (100); vinkel1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); vinkel = 6; vinkel1 = 100; vinkel2 = 90; vinkel3 = 90; vinkel5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************* BOUCLE ****************** ******************* ugyldigt loop () {

// Serial.print ("vinkel");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (vinkel1); Serial.print ("\ t"); Serial.print (vinkel2); Serial.print ("\ t "); Serial.print (vinkel3); Serial.print (" / t "); Serial.print (vinkel5); Serial.print (" / n ");

//Serial.print("angle ");

int i; w = recevoir (); // om en ny information om smartphone, med variabel switch (w) {case 1: TouchDown_Release (); pause; sag 2: TouchDown_Grab (); pause; case 3: Base_Rotation (); pause; sag 4: Base_AntiRotation (); pause; sag 5: Waist_Rotation (); pause; sag 6: Waist_AntiRotation (); pause; sag 7: Third_Arm_Rotation (); pause; case 8: Third_Arm_AntiRotation (); pause; case 9: Fourth_Arm_Rotation (); pause; sag 10: Fourth_Arm_AntiRotation (); pause; // sag 11: Fifth_Arm_Rotation (); pause; // sag 12: Fifth_Arm_AntiRotation (); pause; case 21: Serial.print ("case button 1"); chiffre_final = 1; sauvegarde_positions1 [0] = vinkel; sauvegarde_positions1 [1] = vinkel1; sauvegarde_positions1 [2] = vinkel2; sauvegarde_positions1 [3] = vinkel3; sauvegarde_ = vinkel5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); pause; sag 22: chiffre_final = 2; sauvegarde_positions2 [0] = vinkel; sauvegarde_positions2 [1] = vinkel1; sauvegarde_positions2 [2] = vinkel2; sauvegarde_positions2 [3] = vinkel3; sauvegarde_positions2 [4] = vinkel5; pause; sag 23: chiffre_final = 3; sauvegarde_positions3 [0] = vinkel; sauvegarde_positions3 [1] = vinkel1; sauvegarde_positions3 [2] = vinkel2; sauvegarde_positions3 [3] = vinkel3; sauvegarde_positions3 [4] = vinkel5; sag 24: chiffre_final = 4; sauvegarde_positions4 [0] = vinkel; sauvegarde_positions4 [1] = vinkel1; sauvegarde_positions4 [2] = vinkel2; sauvegarde_positions4 [3] = vinkel3; sauvegarde_positioner4 [4] = vinkel5; pause; sag 25: chiffre_final = 5; sauvegarde_positions5 [0] = vinkel; sauvegarde_positions5 [1] = vinkel1; sauvegarde_positions5 [2] = vinkel2; sauvegarde_positions5 [3] = vinkel3; sauvegarde_positions5 [4] = vinkel5; pause; sag 26: chiffre_final = 6; sauvegarde_positions6 [0] = vinkel; sauvegarde_positions6 [1] = vinkel1; sauvegarde_positions6 [2] = vinkel2; sauvegarde_positions6 [3] = vinkel3; sauvegarde_positioner6 [4] = vinkel5; pause; sag 27: chiffre_final = 7; sauvegarde_positions7 [0] = vinkel; sauvegarde_positions7 [1] = vinkel1; sauvegarde_positions7 [2] = vinkel2; sauvegarde_positions7 [3] = vinkel3; sauvegarde_positions7 [4] = vinkel5; pause; sag 28: chiffre_final = 8; sauvegarde_positions8 [0] = vinkel; sauvegarde_positions8 [1] = vinkel1; sauvegarde_positions8 [2] = vinkel2; sauvegarde_positions8 [3] = vinkel3; sauvegarde_positions8 [4] = vinkel5; pause; sag 29: chiffre_final = 9; sauvegarde_positions9 [0] = vinkel; sauvegarde_positions9 [1] = vinkel1; sauvegarde_positions9 [2] = vinkel2; sauvegarde_positions9 [3] = vinkel3; sauvegarde_positions9 [4] = vinkel5; pause;

sag 31: Serial.print ("31"); active_saving = 1; chiffre_final = 0; pause; // BEGYNG

sag 33: Serial.print ("33"); active_saving = 0; pause; // BUTTON SAVE default: break; } hvis (w == 32) {Serial.print ("\ nReproducer / nChiffre endelig:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde position 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Serial. print ("\ n / n BEGIN / nLoop:"); Serial.print (i); Serial.print ("\ n"); switch (i) {case 1: goto_moteur (*(sauvegarde_positions1)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions1+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions1+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions1+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions1+4)); forsinkelse (200); pause; sag 2: goto_moteur (*(sauvegarde_positions2)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions2+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions2+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions2+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions2+4)); forsinkelse (200); pause; sag 3: goto_moteur (*(sauvegarde_positions3)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions3+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions3+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions3+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions3+4)); forsinkelse (200); pause; sag 4: goto_moteur (*(sauvegarde_positions4)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions4+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions4+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions4+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions4+4)); forsinkelse (200); pause; sag 5: goto_moteur (*(sauvegarde_positions5)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions5+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions5+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions5+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions5+4)); forsinkelse (200); pause; sag 6: goto_moteur (*(sauvegarde_positions6)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions6+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions6+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions6+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions6+4)); forsinkelse (200); pause; sag 7: goto_moteur (*(sauvegarde_positions7)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions7+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions7+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions7+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions7+4)); forsinkelse (200); pause; sag 8: goto_moteur (*(sauvegarde_positions8)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions8+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions8+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions8+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions8+4)); forsinkelse (200); pause; sag 9: goto_moteur (*(sauvegarde_positions9)); forsinkelse (200); goto_moteur1 (*(sauvegarde_positions9+1)); forsinkelse (200); goto_moteur2 (*(sauvegarde_positions9+2)); forsinkelse (200); goto_moteur3 (*(sauvegarde_positions9+3)); forsinkelse (200); goto_moteur5 (*(sauvegarde_positions9+4)); forsinkelse (200); pause; } Serial.print ("\ n ********************** FIN REPRODUCE ***************** / n "); forsinkelse (500); }} /*Serial.print ("debut / 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");*/

forsinkelse (100); } // *************************** FUNKTIONER ******************* *******************

word recevoir () {// fonction permettant de recevoir l'information du smartphone

hvis (Serial.available ()) {w = Serial.read ();

Seriel.flush ();

vende tilbage; }}

ugid goto_moteur (int vinkel_destination)

{while (vinkel_bestemmelsesvinkel+trin_vinkel) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel1 = / t"); Serial.print (vinkel); hvis (vinkel_bestemmelsesvinkel + trin_vinkel) {vinkel = vinkel + trin_vinkel; moteur.write (vinkel);} forsinkelse (100); } moteur.write (vinkel_destination); } ugid goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel2 = / t"); Serial.print (vinkel1); hvis (vinkel_destination vinkel1 +trin_vinkel) {vinkel1 += trin_vinkel; moteur1.write (vinkel1);;} forsinkelse (100); } moteur1.write (vinkel_destination); } ugid goto_moteur2 (int vinkel_destination) {

mens (vinkel_bestemmelsesvinkel2+trin_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel3 = / t"); Serial.print (vinkel2); hvis (vinkel_destination vinkel2 +trin_vinkel) {vinkel2 += trin_vinkel; moteur2.write (vinkel2);} forsinkelse (100); } moteur2.write (vinkel_destination); } void goto_moteur3 (int vinkel_destination) {

mens (vinkel_bestemmelsesvinkel3+trin_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel4 = / t"); Serial.print (vinkel3); hvis (vinkel_destination vinkel3 +trin_vinkel) {vinkel3 += trin_vinkel; moteur3.write (vinkel3);} forsinkelse (100); } moteur3.write (vinkel_destination); } ugid goto_moteur5 (int vinkel_destination) {

mens (vinkel_bestemmelsesvinkel5+trin_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel5 = / t"); Serial.print (vinkel5); hvis (vinkel_destination vinkel5 +trin_vinkel) {vinkel5 += trin_vinkel; moteur5.write (vinkel5);} forsinkelse (100); } moteur5.write (vinkel_destination); }

void TouchDown_Release () // TouchDown Button Release

{hvis (vinkel5 <180) {vinkel5 = vinkel5+trin_vinkel_mini; } moteur5.write (vinkel5); }

void TouchDown_Grab () // TouchDown Button Grab

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (vinkel5); } ugyldig Base_Rotation () {if (vinkel 0) {vinkel = vinkel-trin_angel; } anden vinkel = 0; moteur.write (vinkel); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } anden vinkel1 = 20; moteur1.write (vinkel1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (vinkel2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (vinkel3); }

Trin 6: Det er det

Tak fordi du så med, jeg håber du værdsætter det!

Hvis du kunne lide denne Instructable, kan du helt sikkert besøge os for mere! =)

Anbefalede: