Table des matières:

Jeu de bras robotique - Contrôleur de smartphone : 6 étapes
Jeu de bras robotique - Contrôleur de smartphone : 6 étapes

Vidéo: Jeu de bras robotique - Contrôleur de smartphone : 6 étapes

Vidéo: Jeu de bras robotique - Contrôleur de smartphone : 6 étapes
Vidéo: Comment fabriquer un bras robot hydraulique avec du carton ? 2024, Novembre
Anonim
Jeu de bras robotique - Contrôleur de smartphone
Jeu de bras robotique - Contrôleur de smartphone

Salut !

Voici un jeu d'été amusant: Le Bras robotique contrôlé par Smartphone !!

Comme vous pouvez le voir sur la vidéo, vous pouvez contrôler le bras avec des joysticks sur votre smartphone.

Vous pouvez également enregistrer un motif, que le robot reproduira en boucle, afin d'effectuer des tâches répétitives par exemple. Mais ce motif est modulable à votre guise !!!!

Sois créatif !

Étape 1: Matériaux

Matériaux
Matériaux

Ici vous pouvez voir le matériel dont vous avez besoin.

Il vous en coûtera environ 50€ pour construire ce bras robotique. Le logiciel et les outils peuvent être remplacés, mais je les ai utilisés pour ce projet.

Étape 2: Imprimez en 3D le bras robotique

Imprimer en 3D le bras robotique
Imprimer en 3D le bras robotique
Imprimer en 3D le bras robotique
Imprimer en 3D le bras robotique
Imprimer en 3D le bras robotique
Imprimer en 3D le bras robotique

Le bras robotique a été imprimé en 3D (avec notre prusa i3).

Grâce au site "HowtoMechatronics.com", ses fichiers STL sont géniaux pour construire un bras 3D.

Il faudra environ 20 heures pour imprimer toutes les pièces.

Étape 3: Montage électronique

Montage électronique
Montage électronique

Le montage est séparé en 2 parties:

Une partie électronique, où l'arduino est connecté aux servos par les broches numériques, et avec le périphérique Bluetooth (Rx, Tx).

Une partie Power, où les servos sont alimentés par 2 chargeurs de téléphone (5V, 2A max).

Étape 4: Application Smartphone

Application smartphone
Application smartphone

L'application a été réalisée sur l'inventeur de l'application 2. Nous utilisons 2 joysticks pour contrôler 4 servos et 2 autres boutons pour contrôler la poignée finale.

Nous connectons Arm et Smartphone ensemble en utilisant un module Bluetooth (HC-06).

Enfin, un mode de sauvegarde permet à l'utilisateur de sauvegarder jusqu'à 9 positions pour le bras.

Le bras passera alors dans un mode automatique, où il reproduira les positions enregistrées.

Étape 5: Le code Arduino

Le code Arduino
Le code Arduino
Le code Arduino
Le code Arduino

// 19/08 - Bras robotisé contrôlé par Smartphone

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

représentant de mot; // mot envoyé du module Arduino au 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 activate_saving = 0; Servomoteur; //on définit notre servomoteur Servo moteur1; Servomoteur2; Servomoteur3; //Servomoteur4; Servomoteur5; int step_angle_mini = 4; int step_angle = 3; int angle, angle1, angle3, angle5, angle2;//angle int pas; entier r, r1, r2, r3; en cours d'enregistrement; nageoire booléenne = FAUX; booléen fin1 = FAUX; nageoire booléenne2 = FAUX; nageoire booléenne3 = FAUX; nageoire booléenne4 = FAUX; mot w; // variable envoyée du smartphone au module 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];

//angle entier; // angle de rotation (0 à 180)

//********************METTRE EN PLACE*************************** ******** 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.attache(cmd); // on s'appuie sur l'objet au pin de commande moteur1.attach(cmd1); moteur2.attache(cmd2); moteur3.attach(cmd3); // moteur4.attach(cmd4); moteur5.attache(cmd5); moteur.write(6); angle = 6; moteur1.write(100); angle1 = 100; moteur2.write(90); moteur3.write(90); //moteur4.write(12); moteur5.write(90); angle=6; angle1=100; angle2= 90; angle3=90; angle5=90; Serial.begin(9600); // permettra de communiquer au module Bluetooth } //************************BOUCLE****************** ******************* boucle vide() {

// Serial.print (" angle ");

//Serial.print(angle);Serial.print (" \t");Serial.print(angle1);Serial.print (" \t");Serial.print(angle2);Serial.print (" \t" ");Serial.print(angle3);Serial.print (" \t");Serial.print(angle5);Serial.print (" \n");

//Série.print("angle");

int je; w=recevoir(); // on va recevoir une information du smartphone, la variable w switch (w) { case 1: TouchDown_Release();break; cas 2: TouchDown_Grab();break; cas 3: Base_Rotation();break; cas 4: Base_AntiRotation();break; cas 5:Taille_Rotation();break; cas 6: Waist_AntiRotation();break; cas 7: Third_Arm_Rotation();break; cas 8: Third_Arm_AntiRotation();break; cas 9: Fourth_Arm_Rotation();break; cas 10: Fourth_Arm_AntiRotation();break; //cas 11: Fifth_Arm_Rotation();break; //cas 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_positions1[4] =angle5;Série.println(sauvegarde_positions1[1]);Série.println(sauvegarde_positions1[2]);Série.println(sauvegarde_positions1[3]);Série.println(sauvegarde_positions1[4]); Pause; cas 22: chiffre_final = 2;sauvegarde_positions2[0] =angle;sauvegarde_positions2[1] =angle1;sauvegarde_positions2[2] =angle2;sauvegarde_positions2[3] =angle3;sauvegarde_positions2[4] =angle5; Pause; cas 23: chiffre_final = 3;sauvegarde_positions3[0] =angle;sauvegarde_positions3[1] =angle1;sauvegarde_positions3[2] =angle2;sauvegarde_positions3[3] =angle3;sauvegarde_positions3[4] =angle5;break; cas 24: chiffre_final = 4;sauvegarde_positions4[0] =angle;sauvegarde_positions4[1] =angle1;sauvegarde_positions4[2] =angle2;sauvegarde_positions4[3] =angle3;sauvegarde_positions4[4] =angle5; Pause; cas 25: chiffre_final = 5;sauvegarde_positions5[0] =angle;sauvegarde_positions5[1] =angle1;sauvegarde_positions5[2] =angle2;sauvegarde_positions5[3] =angle3;sauvegarde_positions5[4] =angle5; Pause; cas 26: chiffre_final = 6;sauvegarde_positions6[0] =angle;sauvegarde_positions6[1] =angle1;sauvegarde_positions6[2] =angle2;sauvegarde_positions6[3] =angle3;sauvegarde_positions6[4] =angle5; Pause; cas 27: chiffre_final = 7;sauvegarde_positions7[0] =angle;sauvegarde_positions7[1] =angle1;sauvegarde_positions7[2] =angle2;sauvegarde_positions7[3] =angle3;sauvegarde_positions7[4] =angle5; Pause; cas 28: chiffre_final = 8;sauvegarde_positions8[0] =angle;sauvegarde_positions8[1] =angle1;sauvegarde_positions8[2] =angle2;sauvegarde_positions8[3] =angle3;sauvegarde_positions8[4] =angle5; Pause; cas 29: chiffre_final = 9;sauvegarde_positions9[0] =angle;sauvegarde_positions9[1] =angle1;sauvegarde_positions9[2] =angle2;sauvegarde_positions9[3] =angle3;sauvegarde_positions9[4] =angle5; Pause;

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

case 33: Serial.print("33");activate_saving = 0; break;// BUTTON SAVE default: break; } if(w == 32) { Serial.print("\nReproduire\nChiffre final: "); Serial.print(chiffre_final); Serial.print("\n Position de sauvegarde 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) { cas 1: goto_moteur(*(sauvegarde_positions1));delay(200); goto_moteur1(*(sauvegarde_positions1+1)); retard (200); goto_moteur2(*(sauvegarde_positions1+2));delay(200); goto_moteur3(*(sauvegarde_positions1+3)); retard (200); goto_moteur5(*(sauvegarde_positions1+4));delay(200); Pause; cas 2: goto_moteur(*(sauvegarde_positions2));delay(200); goto_moteur1(*(sauvegarde_positions2+1)); retard (200); goto_moteur2(*(sauvegarde_positions2+2));delay(200); goto_moteur3(*(sauvegarde_positions2+3)); retard (200); goto_moteur5(*(sauvegarde_positions2+4));delay(200); Pause; cas 3: goto_moteur(*(sauvegarde_positions3));delay(200); goto_moteur1(*(sauvegarde_positions3+1)); retard (200); goto_moteur2(*(sauvegarde_positions3+2));delay(200); goto_moteur3(*(sauvegarde_positions3+3)); retard (200); goto_moteur5(*(sauvegarde_positions3+4));delay(200); Pause; cas 4: goto_moteur(*(sauvegarde_positions4));delay(200); goto_moteur1(*(sauvegarde_positions4+1)); retard (200); goto_moteur2(*(sauvegarde_positions4+2));delay(200); goto_moteur3(*(sauvegarde_positions4+3)); retard (200); goto_moteur5(*(sauvegarde_positions4+4));delay(200); Pause; cas 5: goto_moteur(*(sauvegarde_positions5));delay(200); goto_moteur1(*(sauvegarde_positions5+1)); retard (200); goto_moteur2(*(sauvegarde_positions5+2));delay(200); goto_moteur3(*(sauvegarde_positions5+3)); retard (200); goto_moteur5(*(sauvegarde_positions5+4));delay(200); Pause; cas 6: goto_moteur(*(sauvegarde_positions6));delay(200); goto_moteur1(*(sauvegarde_positions6+1)); retard (200); goto_moteur2(*(sauvegarde_positions6+2));delay(200); goto_moteur3(*(sauvegarde_positions6+3)); retard (200); goto_moteur5(*(sauvegarde_positions6+4));delay(200); Pause; cas 7: goto_moteur(*(sauvegarde_positions7));delay(200); goto_moteur1(*(sauvegarde_positions7+1)); retard (200); goto_moteur2(*(sauvegarde_positions7+2));delay(200); goto_moteur3(*(sauvegarde_positions7+3)); retard (200); goto_moteur5(*(sauvegarde_positions7+4));delay(200); Pause; cas 8: goto_moteur(*(sauvegarde_positions8));delay(200); goto_moteur1(*(sauvegarde_positions8+1)); retard (200); goto_moteur2(*(sauvegarde_positions8+2));delay(200); goto_moteur3(*(sauvegarde_positions8+3)); retard (200); goto_moteur5(*(sauvegarde_positions8+4));delay(200); Pause; cas 9: goto_moteur(*(sauvegarde_positions9));delay(200); goto_moteur1(*(sauvegarde_positions9+1)); retard (200); goto_moteur2(*(sauvegarde_positions9+2));delay(200); goto_moteur3(*(sauvegarde_positions9+3)); retard (200); goto_moteur5(*(sauvegarde_positions9+4));delay(200); Pause; } Serial.print("\n********************** FIN REPRODUIRE ******************* \n "); retard (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");*/

retard (100); } //******************************FONCTIONS****************** ******************

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

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

Serial.flush();

retour 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 angle1 = \t ");Serial.print(angle); if(angle_destination angle +step_angle){ angle = angle + step_angle;moteur.write(angle);} delay(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 angle2 = \t ");Serial.print(angle1); if(angle_destination angle1 +step_angle){angle1 += step_angle; moteur1.write(angle1);;} délai(100); } moteur1.write(angle_destination); } void goto_moteur2(int angle_destination) {

while (angle_destination angle2+step_angle)

{ Serial.print(" \n --------------* * * * * *------------------\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angle3 = \t ");Serial.print(angle2); if(angle_destination angle2 +step_angle){angle2+=step_angle; moteur2.write(angle2);} délai(100); } moteur2.write(angle_destination); } void goto_moteur3(int angle_destination) {

while (angle_destination angle3+step_angle)

{ Serial.print(" \n --------------* * * * * *------------------\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angle4 = \t ");Serial.print(angle3); if(angle_destination angle3 +step_angle){angle3+=step_angle; moteur3.write(angle3);} délai(100); } moteur3.write(angle_destination); } void goto_moteur5(int angle_destination) {

while (angle_destination angle5+step_angle)

{ Serial.print(" \n --------------* * * * * *------------------\n"); Serial.print("angle_destination = \t "); Serial.print(angle_destination); Serial.print("\n angle5 = \t ");Serial.print(angle5); if(angle_destination angle5 +step_angle){angle5+=step_angle; moteur5.write(angle5);} délai(100); } moteur5.write(angle_destination); }

void TouchDown_Release() // Relâchement du bouton TouchDown

{ if (angle5 < 180) { angle5 = angle5+step_angle_mini; } moteur5.write(angle5); }

void TouchDown_Grab() // Saisie du bouton TouchDown

{ if (angle5 > 0) { angle5 = angle5-step_angle_mini; } moteur5.write(angle5); } void Base_Rotation() { if (angle 0) { angle = angle-step_angle; } sinon angle =0; moteur.write(angle); } void Waist_Rotation() { if (angle1 20) { angle1 = angle1-step_angle; } sinon angle1 = 20; moteur1.write(angle1); } void Third_Arm_Rotation() { if (angle2 0) { angle2 = angle2-step_angle; } moteur2.write(angle2); } void Fourth_Arm_Rotation() { if (angle3 = 0) { angle3 = angle3-step_angle_mini; } moteur3.write(angle3); }

Étape 6: C'est tout

Merci d'avoir regardé, j'espère que vous avez apprécié !

Si vous avez aimé ce Instructable, vous pouvez à coup sûr nous rendre visite pour plus ! =)

Conseillé: