Sommario:

Gioco del braccio robotico - Controller per smartphone: 6 passaggi
Gioco del braccio robotico - Controller per smartphone: 6 passaggi

Video: Gioco del braccio robotico - Controller per smartphone: 6 passaggi

Video: Gioco del braccio robotico - Controller per smartphone: 6 passaggi
Video: Come funziona il CODICE di un BRACCIO ROBOTICO con ARDUINO e INTERFACCIA TOUCH - Spiegazione codice 2024, Novembre
Anonim
Gioco del braccio robotico - Controller per smartphone
Gioco del braccio robotico - Controller per smartphone

Ciao !

Ecco un divertente gioco estivo: Il braccio robotico controllato da Smartphone!!

Come puoi vedere nel Video, puoi controllare il Braccio con alcuni Joystick sul tuo smartphone.

Puoi anche salvare un modello, che il robot riprodurrà in un ciclo, per eseguire alcune attività ripetitive come esempio. Ma questo schema è modulabile come vuoi tu!!!!

Essere creativo !

Passaggio 1: materiali

Materiali
Materiali

Qui puoi vedere il materiale di cui hai bisogno.

Ti costerà circa 50€ per costruire questo braccio robotico. Il software e gli strumenti possono essere sostituiti, ma ho usato quelli per questo progetto.

Passaggio 2: stampa 3D del braccio robotico

Stampa 3D del braccio robotico
Stampa 3D del braccio robotico
Stampa 3D del braccio robotico
Stampa 3D del braccio robotico
Stampa 3D del braccio robotico
Stampa 3D del braccio robotico

Il braccio robotico è stato stampato in 3D (con la nostra prusa i3).

Grazie al sito "HowtoMechatronics.com", i suoi file STL sono fantastici per costruire un braccio 3D.

Ci vorranno circa 20 ore per stampare tutti i pezzi.

Passaggio 3: montaggio elettronico

Montaggio elettronico
Montaggio elettronico

Il montaggio è separato in 2 parti:

Una parte elettronica, dove l'arduino è collegato ai servi tramite i Pin Digitali, e con il dispositivo Bluetooth (Rx, Tx).

Una parte di alimentazione, dove i servi sono alimentati con 2 caricatori del telefono (5V, 2A max).

Passaggio 4: applicazione per smartphone

Applicazione per smartphone
Applicazione per smartphone

L'applicazione è stata realizzata sull'inventore dell'app 2. Usiamo 2 joystick per controllare 4 servi e altri 2 pulsanti per controllare la presa finale.

Connettiamo Arm e Smartphone insieme utilizzando un modulo Bluetooth (HC-06).

Infine, una modalità di salvataggio consente all'utente di salvare fino a 9 posizioni per il braccio.

Il braccio passerà quindi in modalità automatica, dove riprodurrà le posizioni salvate.

Passaggio 5: il codice Arduino

Il codice Arduino
Il codice Arduino
Il codice Arduino
Il codice Arduino

// 19/08 - Braccio robotico controllato da smartphone

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

parola rappresentante; // mot envoyé du module Arduino au smartphone

int chiffre_final = 0; int cmd=3; // variabile 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 intactivate_saving = 0; Servomotore; //on définit notre servomoteur Servo moteur1; Servomotore2; Servomotore3; //Servo motore4; Servomotore5; int step_angle_mini = 4; int passo_angolo = 3; int angolo, angolo1, angolo3, angolo5, angolo2;//angolo int pas; int r, r1, r2, r3; registratore int; pinna booleana = FALSO; booleano fin1 = FALSO; fin2 booleana = FALSO; booleano fin3 = FALSO; fin4 booleana = FALSO; parola w; // variabile inviato dello smartphone al modulo 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];

//angolo int; // angolo di rotazione (0 a 180)

//********************IMPOSTARE*************************** ******** 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); angolo = 6; motore1.write(100); angolo1 = 100; motore2.write(90); motore3.write(90); //moteur4.write(12); moteur5.write(90); angolo=6; angolo1=100; angolo2= 90; angolo3=90; angolo5=90; Serial.begin(9600); // permettra di comunicare al modulo Bluetooth } //********************BOUCLE****************** **************** ciclo vuoto() {

// Serial.print (" angolo");

//Serial.print(angolo);Serial.print (" \t");Serial.print(angolo1);Serial.print (" \t");Serial.print(angolo2);Serial.print (" \t ");Serial.print(angolo3);Serial.print (" \t");Serial.print(angolo5);Serial.print (" \n");

//Serial.print("angolo");

int io; w=ricevitore(); // su va revoir une information du smartphone, la variabile w switch (w) { case 1: TouchDown_Release();break; caso 2: TouchDown_Grab();break; caso 3: Base_Rotation();break; caso 4: Base_AntiRotation();break; caso 5: Waist_Rotation();break; caso 6: Waist_AntiRotation();break; caso 7: Third_Arm_Rotation();break; caso 8: Third_Arm_AntiRotation();break; caso 9: Fourth_Arm_Rotation();break; caso 10: Fourth_Arm_AntiRotation();break; //caso 11: Fifth_Arm_Rotation();break; //caso 12: Fifth_Arm_AntiRotation();break; case 21: Serial.print("case button 1 ");chiffre_final = 1;sauvegarde_positions1[0] =angle;sauvegarde_positions1[1] =angle1;sauvegarde_positions1[2] =angle2;sauvegarde_positions1[3] =angle3;sauvegarde_posizioni1[4] =angle5;Serial.println(sauvegarde_positions1[1]);Serial.println(sauvegarde_positions1[2]);Serial.println(sauvegarde_positions1[3]);Serial.println(sauvegarde_positions1[4]); rottura; case 22: chiffre_final = 2;posizioni_sauvegarde2[0] =angolo;posizioni_sauvegarde2[1] =angolo1;posizioni_sauvegarde2[2] =angolo2;posizioni_sauvegarde2[3] =angolo3;posizioni_sauvegarde2[4] =angolo5; rottura; case 23: chiffre_final = 3;sauvegarde_posizioni3[0] =angolo;sauvegarde_posizioni3[1] =angolo1;sauvegarde_posizioni3[2] =angolo2;sauvegarde_posizioni3[3] =angolo3;sauvegarde_posizioni3[4] =angolo5;break; case 24: chiffre_final = 4;posizioni_sauvegarde4[0] =angolo;posizioni_sauvegarde4[1] =angolo1;posizioni_sauvegarde4[2] =angolo2;posizioni_sauvegarde4[3] =angolo3;posizioni_sauvegarde4[4] =angolo5; rottura; case 25: chiffre_final = 5;posizioni_sauvegarde5[0] =angolo;posizioni_sauvegarde5[1] =angolo1;posizioni_sauvegarde5[2] =angolo2;posizioni_sauvegarde5[3] =angolo3;posizioni_sauvegarde5[4] =angolo5; rottura; case 26: chiffre_final = 6;posizioni_sauvegarde6[0] =angolo;posizioni_sauvegarde6[1] =angolo1;posizioni_sauvegarde6[2] =angolo2;posizioni_sauvegarde6[3] =angolo3;posizioni_sauvegarde6[4] =angolo5; rottura; case 27: chiffre_final = 7;posizioni_sauvegarde7[0] =angolo;posizioni_sauvegarde7[1] =angolo1;posizioni_sauvegarde7[2] =angolo2;posizioni_sauvegarde7[3] =angolo3;posizioni_sauvegarde7[4] =angolo5; rottura; case 28: chiffre_final = 8;posizioni_sauvegarde8[0] =angolo;posizioni_sauvegarde8[1] =angolo1;posizioni_sauvegarde8[2] =angolo2;posizioni_sauvegarde8[3] =angolo3;posizioni_sauvegarde8[4] =angolo5; rottura; case 29: chiffre_final = 9;posizioni_sauvegarde9[0] =angolo;posizioni_sauvegarde9[1] =angolo1;posizioni_sauvegarde9[2] =angolo2;posizioni_sauvegarde9[3] =angolo3;posizioni_sauvegarde9[4] =angolo5; rottura;

case 31: Serial.print("31");activate_saving = 1;chiffre_final = 0; pausa;// INIZIO

case 33: Serial.print("33");activate_saving = 0; break;// BUTTON SAVE default: break; } if(w == 32) { Serial.print("\nRiproduci\nChiffre finale: "); Serial.print(chiffre_final); Serial.print("\n Sauvegarde posizione 1: \n"); for(i=0;i<5;i++){ Serial.print(sauvegarde_positions1);Serial.print("\t");} Serial.print("\n Sauvegarde posizione 2: \n"); for(i=0;i<5;i++){ Serial.print(sauvegarde_positions2);Serial.print("\t");} Serial.print("\n Sauvegarde posizione 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 INIZIO \nLoop: "); Serial.print(i);Serial.print("\n"); switch(i) { case 1: goto_moteur(*(sauvegarde_positions1));delay(200); goto_moteur1(*(sauvegarde_positions1+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions1+2));delay(200); goto_moteur3(*(sauvegarde_positions1+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions1+4));delay(200); rottura; caso 2: goto_moteur(*(sauvegarde_positions2));delay(200); goto_moteur1(*(sauvegarde_positions2+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions2+2));delay(200); goto_moteur3(*(sauvegarde_positions2+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions2+4));delay(200); rottura; caso 3: goto_moteur(*(sauvegarde_positions3));delay(200); goto_moteur1(*(sauvegarde_positions3+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions3+2));delay(200); goto_moteur3(*(sauvegarde_positions3+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions3+4));delay(200); rottura; caso 4: goto_moteur(*(sauvegarde_positions4));delay(200); goto_moteur1(*(sauvegarde_positions4+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions4+2));delay(200); goto_moteur3(*(sauvegarde_positions4+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions4+4));delay(200); rottura; caso 5: goto_moteur(*(sauvegarde_positions5));delay(200); goto_moteur1(*(sauvegarde_positions5+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions5+2));delay(200); goto_moteur3(*(sauvegarde_positions5+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions5+4));delay(200); rottura; caso 6: goto_moteur(*(sauvegarde_positions6));delay(200); goto_moteur1(*(sauvegarde_positions6+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions6+2));delay(200); goto_moteur3(*(sauvegarde_positions6+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions6+4));delay(200); rottura; caso 7: goto_moteur(*(sauvegarde_positions7));delay(200); goto_moteur1(*(sauvegarde_positions7+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions7+2));delay(200); goto_moteur3(*(sauvegarde_positions7+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions7+4));delay(200); rottura; caso 8: goto_moteur(*(sauvegarde_positions8));delay(200); goto_moteur1(*(sauvegarde_positions8+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions8+2));delay(200); goto_moteur3(*(sauvegarde_positions8+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions8+4));delay(200); rottura; caso 9: goto_moteur(*(sauvegarde_positions9));delay(200); goto_moteur1(*(sauvegarde_positions9+1)); ritardo(200); goto_moteur2(*(sauvegarde_positions9+2));delay(200); goto_moteur3(*(sauvegarde_positions9+3)); ritardo(200); goto_moteur5(*(sauvegarde_positions9+4));delay(200); rottura; } Serial.print("\n*********************** RIPRODUZIONE FIN ***************** \n "); ritardo (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");*/

ritardo(100); } //****************************FUNZIONI****************** ******************

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

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

Serial.flush();

ritorno w; }}

void goto_moteur(int angle_destination)

{ while (angle_destination angle+step_angle) { Serial.print(" \n --------------* * * * * *-------------- ----\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angolo1 = \t ");Serial.print(angolo); if(angolo_destinazione angolo +angolo_passo){ angolo = angolo + angolo_passo;moteur.write(angolo);} ritardo(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(angle_destination); Serial.print("\n angolo2 = \t ");Serial.print(angolo1); if(angolo_destinazione angolo1 +angolo_passo){angolo1 += angolo_passo; moteur1.write(angolo1);;} ritardo(100); } moteur1.write(angle_destination); } void goto_moteur2(int angle_destination) {

mentre (angle_destination angle2+step_angle)

{ Serial.print(" \n --------------* * * * * *----\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angolo3 = \t ");Serial.print(angolo2); if(angolo_destinazione angolo2 +angolo_passo){angolo2+=angolo_passo; moteur2.write(angolo2);} ritardo(100); } moteur2.write(angle_destination); } void goto_moteur3(int angle_destination) {

mentre (angle_destination angle3+step_angle)

{ Serial.print(" \n --------------* * * * * *----\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angolo4 = \t ");Serial.print(angolo3); if(angolo_destinazione angolo3 +angolo_passo){angolo3+=angolo_passo; moteur3.write(angolo3);} ritardo(100); } moteur3.write(angle_destination); } void goto_moteur5(int angle_destination) {

mentre (angle_destination angle5+step_angle)

{ Serial.print(" \n --------------* * * * * *----\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angolo5 = \t ");Serial.print(angolo5); if(angolo_destinazione angolo5 +angolo_passo){angolo5+=angolo_passo; moteur5.write(angolo5);} ritardo(100); } moteur5.write(angle_destination); }

void TouchDown_Release() // Rilascio del pulsante TouchDown

{ if (angolo5 < 180) { angolo5 = angolo5+passo_angolo_mini; } moteur5.write(angolo5); }

void TouchDown_Grab() // Presa del pulsante TouchDown

{ if (angolo5 > 0) { angolo5 = angolo5-passi_angolo_mini; } moteur5.write(angolo5); } void Base_Rotazione() { if (angolo 0) { angolo = angolo-passo_angolo; } else angolo =0; motore.write(angolo); } void Vita_Rotazione() { if (angolo1 20) { angolo1 = angolo1-angolo_passo; } else angolo1 = 20; motore1.write(angolo1); } void Third_Arm_Rotation() { if (angle2 0) { angle2 = angle2-step_angle; } moteur2.write(angolo2); } void Rotazione_quarto_braccio() { if (angolo3 = 0) { angolo3 = angolo3-passo_angolo_mini; } moteur3.write(angolo3); }

Passaggio 6: questo è tutto

Grazie per la visione, spero che tu abbia apprezzato!

Se ti è piaciuto questo Instructable, puoi sicuramente visitarci per saperne di più! =)

Consigliato: