Sommario:
- Passaggio 1: materiali
- Passaggio 2: stampa 3D del braccio robotico
- Passaggio 3: montaggio elettronico
- Passaggio 4: applicazione per smartphone
- Passaggio 5: il codice Arduino
- Passaggio 6: questo è tutto
Video: Gioco del braccio robotico - Controller per smartphone: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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
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
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
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
// 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:
Controllo del braccio robotico con TLV493D, joystick e Arduino: 3 passaggi
Controllo del braccio robotico con TLV493D, Joystick e Arduino: un controller alternativo per il tuo robot con un sensore TLV493D, un sensore magnetico con 3 gradi di libertà (x,y,z) con questi puoi controllare i tuoi nuovi progetti con la comunicazione I2C sul tuo microcontrollori e scheda elettronica che Bast P
L'arrivo del braccio robotico intelligente: 3 passaggi
L'arrivo del braccio robotico intelligente: stringere la mano agli ospiti, parlare di cose, mangiare e così via, queste cose ordinarie, perché la salute della nostra vita è nelle cose ordinarie, ma per alcune persone speciali è un sogno. Alcune persone speciali da me menzionate sono le persone disabili che hanno perso
Pinza per braccio robotico: 3 passaggi (con immagini)
Pinza per braccio robotico: questa pinza robotica realizzata con stampante 3D può essere controllata con due servi economici (MG90 o SG90). Abbiamo usato lo scudo cerebrale (+Arduino) per controllare il morsetto e l'APP di controllo jjRobots per spostare tutto a distanza tramite WIFI ma puoi usare qualsiasi
Dimostrazione del braccio robotico del reattore Arbotix e della Pixycam: 11 passaggi
Arbotix Reactor Robot Arm e dimostrazione di Pixycam: siamo 2 studenti del college UCN in Danimarca. Siamo stati incaricati di fare un imperscrutabile come parte della nostra valutazione per la nostra classe, robot e visione. I requisiti del progetto erano di includere uno o più robot di arbotix ed eseguire un compito.Prog
Utilizzo di Arduino Uno per il posizionamento XYZ del braccio robotico 6 DOF: 4 passaggi
Utilizzo di Arduino Uno per il posizionamento XYZ del braccio robotico 6 DOF: questo progetto riguarda l'implementazione di uno schizzo Arduino breve e relativamente semplice per fornire il posizionamento cinematico inverso XYZ. Avevo costruito un braccio robotico con 6 servocomandi, ma quando si trattava di trovare un software per eseguirlo, non c'era molto là fuori tranne che per il cliente