Innholdsfortegnelse:

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

Video: Robotic Arm Game - Smartphone Controller: 6 trinn

Video: Robotic Arm Game - Smartphone Controller: 6 trinn
Video: DIY Robotic Arm Car #shorts 2024, Juli
Anonim
Robotic Arm Game - Smartphone Controller
Robotic Arm Game - Smartphone Controller

Hallo !

Her et morsomt sommerspill: Robotarmen som styres av smarttelefonen !!

Som du kan se på videoen, kan du kontrollere armen med noen joysticks på smarttelefonen din.

Du kan også lagre et mønster som roboten vil reprodusere i en sløyfe, for å gjøre noen repetitive oppgaver som eksempel. Men dette mønsteret er modulerbart som du ønsker !!!!

Vær kreativ !

Trinn 1: Materialer

Materialer
Materialer

Her kan du se materialet du trenger.

Det vil koste deg rundt 50 € å bygge denne robotarmen. Programvaren og verktøyene kan byttes ut, men jeg brukte dem for dette prosjektet.

Trinn 2: 3D -utskrift av robotarmen

3D -utskrift av robotarmen
3D -utskrift av robotarmen
3D -utskrift av robotarmen
3D -utskrift av robotarmen
3D -utskrift av robotarmen
3D -utskrift av robotarmen

Robotarmen ble 3D -trykt (med vår prusa i3).

Takket være nettstedet "HowtoMechatronics.com" er STL -filene hans fantastiske for å bygge en 3D -arm.

Det vil ta rundt 20 timer å skrive ut alle delene.

Trinn 3: Elektronisk montering

Elektronisk montasje
Elektronisk montasje

Montasjen er atskilt i 2 deler:

En elektronisk del, der arduinoen er koblet til servoene med de digitale pinnene, og med Bluetooth -enheten (Rx, Tx).

En strømdel, der servoene drives med 2 telefonladere (5V, 2A maks).

Trinn 4: Smarttelefonapplikasjon

App for smarttelefon
App for smarttelefon

Søknaden ble laget på App -oppfinner 2. Vi bruker 2 joystick til å kontrollere 4 servoer og 2 knapper til for å kontrollere det siste grepet.

Vi kobler arm og smarttelefon sammen ved hjelp av en Bluetooth-modul (HC-06).

Til slutt lar en lagringsmodus brukeren lagre opptil 9 posisjoner for armen.

Armen vil da gå over i en automatisk modus, hvor han vil gjengi de lagrede posisjonene.

Trinn 5: Arduino -koden

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

// 08/19 - Robotic Arm Smartphone kontrollert

#include #define TRUE true #define FALSE false // ******************** ERKLARINGER ***************** ************

ord rep; // mot envoyé du module Arduino eller smarttelefon

int chiffre_final = 0; int cmd = 3; // variable commande du servo moteur (troisième fil (oransje, gul)) 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 fin = FALSK; boolsk fin1 = FALSK; boolsk fin2 = FALSK; boolsk fin3 = FALSK; boolsk fin4 = FALSK; ordet 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; // rotasjonsvinkel (0 a 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 (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 ****************** ******************* void 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 (); // for å få informasjon om smarttelefonen, variabelen med bryteren (w) {case 1: TouchDown_Release (); break; sak 2: TouchDown_Grab (); pause; sak 3: Base_Rotation (); pause; sak 4: Base_AntiRotation (); pause; sak 5: Waist_Rotation (); pause; sak 6: Waist_AntiRotation (); pause; sak 7: Third_Arm_Rotation (); pause; sak 8: Third_Arm_AntiRotation (); pause; sak 9: Fourth_Arm_Rotation (); pause; sak 10: Fourth_Arm_AntiRotation (); pause; // sak 11: Fifth_Arm_Rotation (); pause; // sak 12: Fifth_Arm_AntiRotation (); pause; sak 21: Serial.print ("case -knapp 1"); chiffre_final = 1; sauvegarde_positions1 [0] = vinkel; sauvegarde_positions1 [1] = vinkel1; sauvegarde_positions1 [2] = vinkel2; sauvegarde_positions1 [3] = vinkel3; sauvegarde_ = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); gå i stykker; sak 22: chiffre_final = 2; sauvegarde_positions2 [0] = vinkel; sauvegarde_positions2 [1] = vinkel1; sauvegarde_posisjoner2 [2] = vinkel2; sauvegarde_posisjoner2 [3] = vinkel3; sauvegarde_posisjoner2 [4] = vinkel5; gå i stykker; sak 23: chiffre_final = 3; sauvegarde_positions3 [0] = vinkel; sauvegarde_positions3 [1] = vinkel1; sauvegarde_positions3 [2] = vinkel2; sauvegarde_positions3 [3] = vinkel3; sauvegarde_posisjoner3 [4] = vinkel5; sak 24: chiffre_final = 4; sauvegarde_positions4 [0] = vinkel; sauvegarde_positions4 [1] = vinkel1; sauvegarde_posisjoner4 [2] = vinkel2; sauvegarde_posisjoner4 [3] = vinkel3; sauvegarde_posisjoner4 [4] = vinkel5; gå i stykker; sak 25: chiffre_final = 5; sauvegarde_positions5 [0] = vinkel; sauvegarde_positions5 [1] = vinkel1; sauvegarde_positions5 [2] = vinkel2; sauvegarde_positions5 [3] = vinkel3; sauvegarde_posisjoner5 [4] = vinkel5; gå i stykker; sak 26: chiffre_final = 6; sauvegarde_positions6 [0] = vinkel; sauvegarde_positions6 [1] = vinkel1; sauvegarde_posisjoner6 [2] = vinkel2; sauvegarde_posisjoner6 [3] = vinkel3; sauvegarde_posisjoner6 [4] = vinkel5; gå i stykker; sak 27: chiffre_final = 7; sauvegarde_positions7 [0] = vinkel; sauvegarde_positions7 [1] = vinkel1; sauvegarde_posisjoner7 [2] = vinkel2; sauvegarde_posisjoner7 [3] = vinkel3; sauvegarde_posisjoner7 [4] = vinkel5; gå i stykker; sak 28: chiffre_final = 8; sauvegarde_positions8 [0] = vinkel; sauvegarde_positions8 [1] = vinkel1; sauvegarde_posisjoner8 [2] = vinkel2; sauvegarde_posisjoner8 [3] = vinkel3; sauvegarde_posisjoner8 [4] = vinkel5; gå i stykker; sak 29: chiffre_final = 9; sauvegarde_positions9 [0] = vinkel; sauvegarde_positions9 [1] = vinkel1; sauvegarde_posisjoner9 [2] = vinkel2; sauvegarde_posisjoner9 [3] = vinkel3; sauvegarde_posisjoner9 [4] = vinkel5; gå i stykker;

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

sak 33: Serial.print ("33"); active_saving = 0; pause; // KNAPP SPAR standard: pause; } hvis (w == 32) {Serial.print ("\ nReproduser / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde posisjon 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde posisjon 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde posisjon 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)); delay (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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; sak 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); gå i stykker; } 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); } // *************************** FUNKSJONER ****************** *******************

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

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

Serial.flush ();

retur w; }}

void goto_moteur (int angle_destination)

{while (vinkel_destinasjonsvinkel+trinn_vinkel) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("vinkel_destinasjon = / t"); Serial.print (vinkel_destinasjon); Serial.print ("\ n vinkel1 = / t"); Serial.print (vinkel); hvis (vinkel_destinasjonsvinkel + trinn_vinkel) {vinkel = vinkel + trinn_vinkel; moteur.write (vinkel);} forsinkelse (100); } moteur.write (vinkel_destinasjon); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("vinkel_destinasjon = / t"); Serial.print (vinkel_destinasjon); Serial.print ("\ n vinkel2 = / t"); Serial.print (vinkel1); hvis (vinkel_destinasjonsvinkel1 +trinn_vinkel) {vinkel1 += trinn_vinkel; moteur1.write (vinkel1);;} forsinkelse (100); } moteur1.write (vinkel_destinasjon); } ugyldig goto_moteur2 (int vinkel_destinasjon) {

mens (vinkel_destinasjonsvinkel2+trinn_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destinasjon = / t"); Serial.print (vinkel_destinasjon); Serial.print ("\ n vinkel3 = / t"); Serial.print (vinkel2); hvis (vinkel_destinasjonsvinkel2 +trinn_vinkel) {vinkel2 += trinn_vinkel; moteur2.write (vinkel2);} forsinkelse (100); } moteur2.write (vinkel_destinasjon); } ugyldig goto_moteur3 (int vinkel_destinasjon) {

mens (vinkel_destinasjonsvinkel3+trinn_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destinasjon = / t"); Serial.print (vinkel_destinasjon); Serial.print ("\ n vinkel4 = / t"); Serial.print (vinkel3); hvis (vinkel_destinasjonsvinkel3 +trinn_vinkel) {vinkel3 += trinn_vinkel; moteur3.write (vinkel3);} forsinkelse (100); } moteur3.write (vinkel_destinasjon); } ugyldig goto_moteur5 (int vinkel_destinasjon) {

mens (vinkel_destinasjonsvinkel5+trinn_vinkel)

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

void TouchDown_Release () // TouchDown Button Release

{if (angle5 <180) {angle5 = angle5+step_angle_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-trinn_vinkel; } annen vinkel = 0; moteur.write (vinkel); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } annet 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); }

Trinn 6: Det er det

Takk for at du så på, jeg håper du setter pris på det!

Hvis du likte denne Instructable, kan du sikkert besøke oss for mer! =)

Anbefalt: