Table des matières:
- Étape 1: Matériaux
- Étape 2: Imprimez en 3D le bras robotique
- Étape 3: Montage électronique
- Étape 4: Application Smartphone
- Étape 5: Le code Arduino
- Étape 6: C'est tout
Vidéo: Jeu de bras robotique - Contrôleur de smartphone : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
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
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
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
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
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
// 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é:
Bras robotique avec pince : 9 étapes (avec photos)
Bras robotique avec pince : La récolte des citronniers est considérée comme un travail difficile, en raison de la grande taille des arbres et également en raison des climats chauds des régions où les citronniers sont plantés. C'est pourquoi nous avons besoin d'autre chose pour aider les travailleurs agricoles à terminer leur travail plus ea
Bras robotique 3D avec moteurs pas à pas contrôlés par Bluetooth : 12 étapes
Bras robotique 3D avec moteurs pas à pas contrôlés par Bluetooth : Dans ce tutoriel, nous verrons comment fabriquer un bras robotique 3D, avec des moteurs pas à pas 28byj-48, un servomoteur et des pièces imprimées en 3D. Carte de circuit imprimé, code source, schéma électrique, code source et de nombreuses informations sont inclus sur mon site Web
Bras robotique : 15 étapes
Bras de robot : avoir un système automatique
BRAS ROBOTIQUE Xbox 360 [ARDUINO] : BRAS AXIOM : 4 étapes
BRAS ROBOTIQUE Xbox 360 [ARDUINO] : BRAS AXIOM :
COMMENT ASSEMBLER UN BRAS DE ROBOT EN BOIS IMPRESSIONNANT (PARTIE 3: BRAS DE ROBOT) - BASÉ SUR LE MICRO: BITN: 8 étapes
COMMENT ASSEMBLER UN BRAS DE ROBOT EN BOIS IMPRESSIONNANT (PARTIE 3 : BRAS DE ROBOT) -- BASÉ SUR LE MICRO : BITN : Le prochain processus d'installation est basé sur l'achèvement du mode d'évitement d'obstacle. Le processus d'installation de la section précédente est le même que le processus d'installation en mode suivi de ligne. Jetons ensuite un coup d'œil à la forme finale de A