Innehållsförteckning:

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

Video: Robotic Arm Game - Smartphone Controller: 6 steg

Video: Robotic Arm Game - Smartphone Controller: 6 steg
Video: Lego Mindstorm Ev3 6 axis arm robot. 2024, Juli
Anonim
Robotic Arm Game - Smartphone Controller
Robotic Arm Game - Smartphone Controller

Hej !

Här är ett roligt sommarspel: Robotarmen som styrs av Smartphone !!

Som du kan se på videon kan du styra armen med några joysticks på din smartphone.

Du kan också spara ett mönster som roboten kommer att reproducera i en loop, för att göra några repetitiva uppgifter som exempel. Men detta mönster är modulerbart som du vill !!!!

Vara kreativ !

Steg 1: Material

Material
Material

Här kan du se det material du behöver.

Det kommer att kosta dig cirka 50 € att bygga denna robotarm. Programvaran och verktygen kan bytas ut, men jag använde dem för detta projekt.

Steg 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 trycktes i 3D (med vår prusa i3).

Tack vare webbplatsen "HowtoMechatronics.com" är hans STL -filer fantastiska för att bygga en 3D -arm.

Det tar cirka 20 timmar att skriva ut alla bitar.

Steg 3: Elektronisk montage

Elektronisk montage
Elektronisk montage

Montaget är separat i 2 delar:

En elektronisk del, där arduino är ansluten till servon via Digital Pins, och med Bluetooth -enheten (Rx, Tx).

En strömdel, där servon drivs med 2 telefonladdare (5V, 2A max).

Steg 4: Smartphone -applikation

Smartphone -applikation
Smartphone -applikation

Ansökan gjordes på App uppfinnare 2. Vi använder 2 joystick för att styra 4 servon och 2 knappar till för att styra det slutliga greppet.

Vi ansluter arm och smartphone tillsammans med en Bluetooth-modul (HC-06).

Slutligen tillåter ett sparläge användaren att spara upp till 9 positioner för armen.

Armen går sedan in i ett automatiskt läge, där han återger de sparade positionerna.

Steg 5: Arduino -koden

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

// 08/19 - Robotarm Smartphone kontrollerad

#inkludera #define TRUE true #define FALSE false // ******************** DEKLARATIONER ***************** ************

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

int chiffre_final = 0; int cmd = 3; // variabel commande du servo moteur (troisième fil (orange, 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; booleska fenan = FALSKT; booleska fin1 = FALSKT; booleska fin2 = FALSKT; booleska fin3 = FALSKT; booleska fin4 = FALSKT; 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)

//********************UPPSTART*************************** ******** 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 (); // om du vill få information om din smartphone, den variabla omkopplaren (w) {case 1: TouchDown_Release (); break; fall 2: TouchDown_Grab (); paus; fall 3: Base_Rotation (); paus; fall 4: Base_AntiRotation (); paus; fall 5: Waist_Rotation (); paus; fall 6: Waist_AntiRotation (); paus; fall 7: Third_Arm_Rotation (); break; fall 8: Third_Arm_AntiRotation (); break; fall 9: Fourth_Arm_Rotation (); break; fall 10: Fourth_Arm_AntiRotation (); break; // fall 11: Fifth_Arm_Rotation (); break; // fall 12: Fifth_Arm_AntiRotation (); break; fall 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_ = vinkel5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); ha sönder; fall 22: chiffre_final = 2; sauvegarde_positions2 [0] = vinkel; sauvegarde_positions2 [1] = vinkel1; sauvegarde_positions2 [2] = vinkel2; sauvegarde_positions2 [3] = vinkel3; sauvegarde_positions2 [4] = vinkel5; ha sönder; fall 23: chiffre_final = 3; sauvegarde_positions3 [0] = vinkel; sauvegarde_positions3 [1] = vinkel1; sauvegarde_positions3 [2] = vinkel2; sauvegarde_positions3 [3] = vinkel3; sauvegarde_positions3 [4] = vinkel5; fall 24: chiffre_final = 4; sauvegarde_positions4 [0] = vinkel; sauvegarde_positions4 [1] = vinkel1; sauvegarde_positions4 [2] = vinkel2; sauvegarde_positions4 [3] = vinkel3; sauvegarde_positions4 [4] = vinkel5; ha sönder; fall 25: chiffre_final = 5; sauvegarde_positions5 [0] = vinkel; sauvegarde_positions5 [1] = vinkel1; sauvegarde_positions5 [2] = vinkel2; sauvegarde_positions5 [3] = vinkel3; sauvegarde_positions5 [4] = vinkel5; ha sönder; fall 26: chiffre_final = 6; sauvegarde_positions6 [0] = vinkel; sauvegarde_positions6 [1] = vinkel1; sauvegarde_positions6 [2] = vinkel2; sauvegarde_positions6 [3] = vinkel3; sauvegarde_positions6 [4] = vinkel5; ha sönder; fall 27: chiffre_final = 7; sauvegarde_positions7 [0] = vinkel; sauvegarde_positions7 [1] = vinkel1; sauvegarde_positions7 [2] = vinkel2; sauvegarde_positions7 [3] = vinkel3; sauvegarde_positions7 [4] = vinkel5; ha sönder; fall 28: chiffre_final = 8; sauvegarde_positions8 [0] = vinkel; sauvegarde_positions8 [1] = vinkel1; sauvegarde_positions8 [2] = vinkel2; sauvegarde_positions8 [3] = vinkel3; sauvegarde_positions8 [4] = vinkel5; ha sönder; fall 29: chiffre_final = 9; sauvegarde_positions9 [0] = vinkel; sauvegarde_positions9 [1] = vinkel1; sauvegarde_positions9 [2] = vinkel2; sauvegarde_positions9 [3] = vinkel3; sauvegarde_positions9 [4] = vinkel5; ha sönder;

fall 31: Serial.print ("31"); active_saving = 1; chiffre_final = 0; paus; // BÖRJA

fall 33: Serial.print ("33"); active_saving = 0; break; // KNAPP SPARA standard: break; } if (w == 32) {Serial.print ("\ nReproducera / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde position 1: / n"); för (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); för (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 3: / n"); för (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} för (i = 1; i <= chiffre_final; i ++) {Serial. print ("\ n / n BÖRJA / nSlinga:"); Serial.print (i); Serial.print ("\ n"); switch (i) {case 1: goto_moteur (*(sauvegarde_positions1)); delay (200); goto_moteur1 (*(sauvegarde_positions1+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions1+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions1+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions1+4)); fördröjning (200); ha sönder; fall 2: goto_moteur (*(sauvegarde_positions2)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions2+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions2+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions2+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions2+4)); fördröjning (200); ha sönder; fall 3: goto_moteur (*(sauvegarde_positions3)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions3+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions3+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions3+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions3+4)); fördröjning (200); ha sönder; fall 4: goto_moteur (*(sauvegarde_positions4)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions4+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions4+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions4+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions4+4)); fördröjning (200); ha sönder; fall 5: goto_moteur (*(sauvegarde_positions5)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions5+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions5+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions5+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions5+4)); fördröjning (200); ha sönder; fall 6: goto_moteur (*(sauvegarde_positions6)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions6+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions6+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions6+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions6+4)); fördröjning (200); ha sönder; fall 7: goto_moteur (*(sauvegarde_positions7)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions7+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions7+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions7+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions7+4)); fördröjning (200); ha sönder; fall 8: goto_moteur (*(sauvegarde_positions8)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions8+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions8+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions8+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions8+4)); fördröjning (200); ha sönder; fall 9: goto_moteur (*(sauvegarde_positions9)); fördröjning (200); goto_moteur1 (*(sauvegarde_positions9+1)); fördröjning (200); goto_moteur2 (*(sauvegarde_positions9+2)); fördröjning (200); goto_moteur3 (*(sauvegarde_positions9+3)); fördröjning (200); goto_moteur5 (*(sauvegarde_positions9+4)); fördröjning (200); ha sönder; } Serial.print ("\ n *********************** FIN REPRODUCE ****************** / n "); fördröjning (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");*/

fördröjning (100); } // **************************** FUNKTIONER ******************* *******************

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

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

Serial.flush ();

återvända w; }}

void goto_moteur (int vinkel_destination)

{while (vinkel_destinationsvinkel+steg_vinkel) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel1 = / t"); Serial.print (vinkel); if (vinkel_destinationsvinkel + steg_vinkel) {vinkel = vinkel + steg_vinkel; moteur.write (vinkel);} fördröjning (100); } moteur.write (vinkel_destination); } void 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); om (vinkel_destinationsvinkel1 +steg_vinkel) {vinkel1 += steg_vinkel; moteur1.write (vinkel1);;} fördröjning (100); } moteur1.write (vinkel_destination); } void goto_moteur2 (int vinkel_destination) {

medan (vinkel_destinationsvinkel2+steg_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel3 = / t"); Serial.print (vinkel2); if (vinkel_destinationsvinkel2 +steg_vinkel) {vinkel2 += steg_vinkel; moteur2.write (vinkel2);} fördröjning (100); } moteur2.write (vinkel_destination); } void goto_moteur3 (int vinkel_destination) {

medan (vinkel_destinationsvinkel3+steg_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel4 = / t"); Serial.print (vinkel3); if (vinkel_destinationsvinkel3 +steg_vinkel) {vinkel3 += steg_vinkel; moteur3.write (vinkel3);} fördröjning (100); } moteur3.write (vinkel_destination); } void goto_moteur5 (int vinkel_destination) {

medan (vinkel_destinationsvinkel5+steg_vinkel)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("vinkel_destination = / t"); Serial.print (vinkel_destination); Serial.print ("\ n vinkel5 = / t"); Serial.print (vinkel5); if (vinkel_destinationsvinkel5 +steg_vinkel) {vinkel5 += steg_vinkel; moteur5.write (vinkel5);} fördröjning (100); } moteur5.write (vinkel_destination); }

void TouchDown_Release () // TouchDown Button Release

{if (vinkel5 <180) {vinkel5 = vinkel5+steg_vinkel_mini; } moteur5.write (vinkel5); }

void TouchDown_Grab () // TouchDown Button Grab

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (vinkel5); } void Base_Rotation () {if (vinkel 0) {vinkel = vinkel-steg_vinkel; } annars vinkel = 0; moteur.write (vinkel); } void Waist_Rotation () {if (vinkel1 20) {vinkel1 = vinkel1-steg_vinkel; } annars vinkel1 = 20; moteur1.write (vinkel1); } void Third_Arm_Rotation () {if (vinkel2 0) {vinkel2 = vinkel2-steg_vinkel; } moteur2.write (vinkel2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (vinkel3); }

Steg 6: Det är det

Tack för att du tittade, jag hoppas att du uppskattade det!

Om du gillade denna Instructable kan du säkert besöka oss för mer! =)

Rekommenderad: