Table des matières:
- Fournitures
- Étape 1: Imprimez tous les composants 3D
- Étape 2: (Facultatif) Fixez une planche de bois au fond de votre boîte pour la renforcer
- Étape 3: Mesurez et coupez une planche de bois pour s'adapter à la boîte
- Étape 4: Marquez les positions des moteurs
- Étape 5: Marquez les positions des supports et du tuyau
- Étape 6: percez un trou pour les câbles sortant de votre boîte (USB et alimentation)
- Étape 7: Percez et sciez tous les trous marqués
- Étape 8: Fixez les moteurs et le tuyau à la planche
- Étape 9: Fixez la planche à la boîte avec les supports en L
- Étape 10: prenez vos borniers et soudez les fils ensemble
- Étape 11: Coupez l'extrémité du cordon d'alimentation de l'adaptateur et dénudez les fils
- Étape 12: Identifiez et marquez les fils plus et moins
- Étape 13: Attachez les fils aux borniers de sorte que tous les fils + servo et le fil + du cordon d'alimentation soient connectés, il en va de même pour les fils -
- Étape 14: Coupez la tête d'un fil de planche à pain
- Étape 15: Percez trois trous dans le fond de la boîte pour les fils sortant de votre bras
- Étape 16: Fixez le connecteur de base à la boîte
- Étape 17: Utilisez un couteau ou une lime à ongles pour approfondir les rainures de fil
- Étape 18: Construisez le bras
- Étape 19: Installez Processing et Arduino
- Étape 20: Collez les programmes de code
- Étape 21: connectez les broches de servocommande à l'Arduino
- Étape 22: appuyez sur le bouton de réinitialisation dans le traitement, cela réglera tous les bras à 90 degrés
- Étape 23: Fixez les bras servo au moteur horizontalement
- Étape 24: Enfilez les fils dans les bras pour qu'il n'y ait pas de mou
- Étape 25: Testez le bras et serrez ou desserrez les fils au besoin
- Étape 26: Collez à chaud les fils sur les bras servo pour le rendre permanent
- Étape 27: Remarques
- Étape 28: Dépannage
- Étape 29: Liens
- Étape 30: Coder
- Étape 31: Plus de photos
Vidéo: Bras robotique contrôlé par fil : 31 étapes
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Il s'agit d'un tutoriel sur la façon de fabriquer un bras de robot contrôlé par des fils. L'avantage d'utiliser des fils est que votre bras est plus léger et que vous pouvez avoir tous vos moteurs dans le bas de votre bras, ce qui facilite la construction et l'entretien. Voici une vidéo du bras en action. Je prévois d'ajouter une griffe à l'avenir pour qu'elle puisse ramasser des objets et pas simplement les pousser.
Imprimables 3D:
Ici et Ici
Fournitures
6 servomoteurs (MG995)
Arduino Uno
Environ 6 mètres de fil d'acier plastifié (0,5 mm)
Boîte 23x33x10 (peut être plus étroite, ne devrait certainement pas être plus courte)
Planche de bois 33x10
Écrous et boulons
Tuyau 14 cm (c'est nécessaire pour guider les cordes)
4 supports en L
adaptateur 5 volts
2 borniers 7 voies
Fils de planche à pain
Composants imprimés en 3D (non conçus par moi, liens vers des éléments dans la description):
3 « boulons »
2 « Élément 1 »
1 "Élément 2"
2 « Élément 3 »
1 connecteur de base
Étape 1: Imprimez tous les composants 3D
Vous aurez peut-être besoin d'un support pour les trous de boulons et les arches, mais assurez-vous de ne pas ajouter de support au corps de vos composants; cela fermera les petits trous de fil et vous devrez faire de nouveaux trous
Étape 2: (Facultatif) Fixez une planche de bois au fond de votre boîte pour la renforcer
Ma boîte était assez faible, la tienne peut-être pas
Étape 3: Mesurez et coupez une planche de bois pour s'adapter à la boîte
Étape 4: Marquez les positions des moteurs
assurez-vous qu'aucun des bras ne se touche
Étape 5: Marquez les positions des supports et du tuyau
Le tuyau doit être placé à environ un centimètre devant le trou
Étape 6: percez un trou pour les câbles sortant de votre boîte (USB et alimentation)
Étape 7: Percez et sciez tous les trous marqués
Étape 8: Fixez les moteurs et le tuyau à la planche
Étape 9: Fixez la planche à la boîte avec les supports en L
Étape 10: prenez vos borniers et soudez les fils ensemble
Étape 11: Coupez l'extrémité du cordon d'alimentation de l'adaptateur et dénudez les fils
Étape 12: Identifiez et marquez les fils plus et moins
Étape 13: Attachez les fils aux borniers de sorte que tous les fils + servo et le fil + du cordon d'alimentation soient connectés, il en va de même pour les fils -
Étape 14: Coupez la tête d'un fil de planche à pain
Fixez l'extrémité dénudée du fil de la planche à pain au bornier moins et l'extrémité de la broche à la broche de terre de votre arduino. Si vous ne le faites pas, les moteurs se déplaceront de manière erratique sans aucune entrée.
Étape 15: Percez trois trous dans le fond de la boîte pour les fils sortant de votre bras
Les trous doivent correspondre aux trous du connecteur de base.
Étape 16: Fixez le connecteur de base à la boîte
Étape 17: Utilisez un couteau ou une lime à ongles pour approfondir les rainures de fil
Les rainures de fil pour les éléments 2 et 3 sont trop peu profondes.
Étape 18: Construisez le bras
Construisez le bras selon les instructions ici, vous devrez peut-être classer les pièces pour qu'elles s'adaptent
Étape 19: Installez Processing et Arduino
Traitement et Arduino
Étape 20: Collez les programmes de code
Le code est en bas de cette page
Étape 21: connectez les broches de servocommande à l'Arduino
J'ai connecté le premier moteur à la troisième broche numérique, le deuxième moteur à la quatrième broche numérique et ainsi de suite. Assurez-vous que la broche de terre est toujours connectée au bornier -.
Étape 22: appuyez sur le bouton de réinitialisation dans le traitement, cela réglera tous les bras à 90 degrés
Étape 23: Fixez les bras servo au moteur horizontalement
Étape 24: Enfilez les fils dans les bras pour qu'il n'y ait pas de mou
Assurez-vous de faire passer le fil dans autant de trous que possible, cela le maintiendra temporairement et sera facile à retirer.
Étape 25: Testez le bras et serrez ou desserrez les fils au besoin
Étape 26: Collez à chaud les fils sur les bras servo pour le rendre permanent
Étape 27: Remarques
J'ai utilisé du fil de bijouterie de 0,5 mm mais 0,4 mm devrait suffire. La conception originale utilisait du fil de PVC mais qui se cassait trop facilement et était difficile à travailler.
Si vous allez déplacer le bras dans une voiture ou un vélo, enveloppez les articulations du bras dans du ruban adhésif pour vous assurer qu'elles ne sortent pas. Ceci est particulièrement important pour l'élément 1.
Quand j'ai commencé ce projet, je me demandais pourquoi je ne pouvais trouver qu'un seul tutoriel sur la façon de fabriquer un bras contrôlé par des fils. Maintenant, je comprends pourquoi ce n'est pas la façon la plus courante de fabriquer un bras de robot de loisir. Les fils tombent parfois de leurs rainures et le tout est assez fragile. Je ne sais pas si les problèmes sont dus au fait que je n'ai pas beaucoup d'expérience ou si toute l'idée est problématique même si je suis sûr que ce serait plus solide si je savais ce que je faisais.
Étape 28: Dépannage
Les trous de fil sont fermés dans les éléments imprimés en 3D:
Vous avez ajouté un support pour l'ensemble de l'élément au lieu de simplement les trous de boulon. Réimprimez l'élément ou ouvrez les trous avec une aiguille très chaude.
Le port COM est fermé, vous ne pouvez pas communiquer avec l'arduino:
Votre arduino peut ne pas accepter les ports USB 3 (le mien ne l'a pas fait), vous pouvez soit acheter un câble d'extension USB 2, soit utiliser un ordinateur doté de ports USB 2
Le code ne fonctionne pas:
Suivez ce tutoriel et modifiez-le pour créer votre propre code
Une partie du bras ne bouge pas:
Les fils peuvent s'être emmêlés, pour vérifier cela, retirez le bras du servo du servo et essayez de tirer les fils à la main. Démêlez les fils et s'il est toujours difficile de tirer les fils, essayez d'utiliser du WD-40 ou un lubrifiant pour faciliter le mouvement
Étape 29: Liens
Bras non robotique:
Bras 3D imprimables:
Mon bras imprimable en 3D:
Arduino et traitement:
Étape 30: Coder
Modifié à partir de ce code
Code Arduino:
#include //Déclarer les moteurs Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; //Tous les moteurs sont réglés à 90 degrés par défaut int current1 = 90; int courant2 = 90; int courant3 = 90; int courant4 = 90; courant int5 = 90; int courant6 = 90; //Degrés minimum et maximum que les moteurs peuvent atteindre int mini1 = 0; entier maxi1 = 180; int mini2 = 0; entier maxi2 = 180; int mini3 = 0; entier maxi3 = 180; int mini4 = 0; entier maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; entier maxi6 = 180; //Degrés à ajouter ou à soustraire de la position actuelle int degrésFoward = 5; //Délai pour que deux fonctions ne se produisent pas dans le mauvais ordre int delayBetweenSteps = 100; void setup() { //Définir les broches de contrôle pour chaque moteur myservo1.attach(3); monservo2.attach(4); monservo3.attach(5); monservo4.attach(6); monservo5.attach(7); monservo6.attach(8); //Définir tous les moteurs sur le paramètre par défaut myservo1.write(current1); monservo2.write(current2); monservo3.write(current3); monservo4.write(current4); monservo5.write(current5); monservo6.write(current6); //démarrer la communication série @9600 bps Serial.begin(9600); } void loop(){ if(Serial.available()){ //si les données sont disponibles pour la lecture char val = Serial.read(); //mettez-le dans ce caractère //Contrôles du moteur if(val == 'a' && current1 +degreesFoward mini1){ myservo1.write(current1 -degreesFoward); courant1 = courant1 - degrésAvant; delay(delayBetweenSteps); } if(val == 'c' && current2 mini2){ myservo2.write(current2 - degreeFoward); courant2 = courant2 - degrésAvant; delay(delayBetweenSteps); } if(val == 'e' && current3 mini3){ myservo3.write(current3 -degreesFoward); courant3 = courant3 - degrésAvant; delay(delayBetweenSteps); } if(val == 'g' && current4 mini4){ myservo4.write(current4 - degreeFoward); courant4 = courant4 - degrésAvant; delay(delayBetweenSteps); } if(val == 'i' && current5 mini5){ myservo5.write(current5 - degreeFoward); courant5 = courant5 - degrésAvant; delay(delayBetweenSteps); } if(val == 'k' && current6 mini6){ myservo6.write(current6 -degreesFoward); courant6 = courant6 - degrésAvant; delay(delayBetweenSteps); } //Contrôle de la vitesse if(val == 'w'){ //Si le bouton de la vitesse 1 a appuyé degrésFoward = 1; delay(delayBetweenSteps); } if(val == 'x'){ //Si le bouton de vitesse 5 a appuyé degrésFoward = 5; delay(delayBetweenSteps); } if(val == 'y'){ //Si le bouton de vitesse 10 a appuyé degrésFoward = 10; delay(delayBetweenSteps); } if(val == 'z'){ //Si le bouton de vitesse 20 a appuyé degrésFoward = 20; delay(delayBetweenSteps); } if(val == 'r'){ //Si le bouton de vitesse 20 a appuyé sur myservo1.write(90); courant1 = 90; monservo2.write(90); courant2 = 90; monservo3.write(90); courant3 = 90; monservo4.write(90); courant4 = 90; monservo5.write(90); courant5 = 90; monservo6.write(90); courant6 = 90; delay(delayBetweenSteps); } } }
Code de traitement:
import processing.serial.*; contrôle d'importationP5.*; //importez le port série de la bibliothèque ControlP5; ContrôleP5 cp5; //créer la police PFont de l'objet ControlP5; void setup () { // identique à la taille du programme arduino (300, 700); //taille de la fenêtre, (largeur, hauteur) printArray(Serial.list()); //imprime tous les ports série disponibles //Si vous rencontrez un problème, cela vient probablement d'ici String portName = Serial.list()[0]; port = new Serial(this, portName, 9600); // j'ai connecté arduino à com3, ce serait différent sous linux et mac os // permet d'ajouter un bouton à la fenêtre vide cp5 = new ControlP5 (this); font = createFont("Arial", 13); // polices personnalisées pour les boutons et le titre // Boutons de contrôle de vitesse cp5.addButton("One") //"One" est le nom du bouton.setPosition (50, 50) //coordonnées x et y du coin supérieur gauche du bouton.setSize(55, 25) //(largeur, hauteur).setFont(font); cp5.addButton("Cinq").setPosition(110, 50).setSize(55, 25).setFont(font); cp5.addButton("Dix").setPosition(170, 50).setSize(55, 25).setFont(font); cp5.addButton("Twenty").setPosition(230, 50).setSize(55, 25).setFont(font); cp5.addButton("Reset").setPosition(110, 2).setSize(55, 25).setFont(font); cp5.addButton("Servo_1_Foward").setPosition(50, 90).setSize(190, 40).setFont(font); // Boutons de contrôle du moteur cp5.addButton("Servo_1_Back").setPosition (50, 140).setSize(190, 40).setFont(font); cp5.addButton("Servo_2_Foward").setPosition(50, 190).setSize(190, 40).setFont(font); cp5.addButton("Servo_2_Back").setPosition(50, 240).setSize(190, 40).setFont(font); cp5.addButton("Servo_3_Foward").setPosition(50, 290).setSize(190, 40).setFont(font); cp5.addButton("Servo_3_Back").setPosition(50, 340).setSize(190, 40) //(largeur, hauteur).setFont(font); cp5.addButton("Servo_4_Foward").setPosition(50, 390).setSize(190, 40).setFont(font); cp5.addButton("Servo_4_Back").setPosition(50, 440).setSize(190, 40) //(largeur, hauteur).setFont(font); cp5.addButton("Servo_5_Foward").setPosition(50, 490).setSize(190, 40).setFont(font); cp5.addButton("Servo_5_Back").setPosition(50, 540).setSize(190, 40).setFont(font); cp5.addButton("Servo_6_Foward").setPosition(50, 590).setSize(190, 40).setFont(font); cp5.addButton("Servo_6_Back").setPosition(50, 640).setSize(190, 40).setFont(font); } void draw () { // identique à la boucle en arrière-plan arduino (192, 215, 249); // couleur d'arrière-plan de la fenêtre (r, g, b) ou (0 à 255) // Ajout de texte indiquant que le contrôle de vitesse est un remplissage de contrôle de vitesse (0, 10, 25); //couleur du texte (r, g, b) textFont(font); text("Contrôle de la vitesse", 50, 40); // ("texte", coordonnée x, coordonnée y) } // permet d'ajouter des fonctions à nos boutons // donc lorsque vous appuyez sur un bouton, il envoie un caractère particulier sur le port série // je suis sûr qu'il est possible d'envoyer des chaînes au lieu de chars, et cela aurait plus de sens mais je ne sais pas comment le faire // Commandes de contrôle de vitesse void One(){ port.write('w'); } void Five(){ port.write('x'); } void Ten(){ port.write('y'); } void Twenty(){ port.write('z'); } //Commandes de contrôle du moteur void Servo_1_Foward(){ port.write('a'); } void Servo_1_Back(){ port.write('b'); } void Servo_2_Foward(){ port.write('c'); } void Servo_2_Back(){ port.write('d'); } void Servo_3_Foward(){ port.write('e'); } void Servo_3_Back(){ port.write('f'); } void Servo_4_Foward(){ port.write('g'); } void Servo_4_Back(){ port.write('h'); } void Servo_5_Foward(){ port.write('i'); } void Servo_5_Back(){ port.write('j'); } void Servo_6_Foward(){ port.write('k'); } void Servo_6_Back(){ port.write('l'); } void Reset(){ port.write('r'); }