Table des matières:

Bras robotique contrôlé par fil : 31 étapes
Bras robotique contrôlé par fil : 31 étapes

Vidéo: Bras robotique contrôlé par fil : 31 étapes

Vidéo: Bras robotique contrôlé par fil : 31 étapes
Vidéo: Bras robotique 💪 & vision par ordinateur avec Raspberry Pi 🍓 2025, Janvier
Anonim
Bras de robot contrôlé par fil
Bras de robot contrôlé par fil

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

Marquez les positions des supports et du tuyau
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)

Percez un trou pour les câbles sortant de votre boîte (USB et alimentation)
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

Percez et sciez tous les trous marqués
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

Prenez vos borniers et soudez les fils ensemble
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 -

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
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

Couper la tête d'un fil de planche à pain
Couper 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

Fixez le connecteur de base à la boîte
Fixez le connecteur de base à la boîte

Étape 17: Utilisez un couteau ou une lime à ongles pour approfondir les rainures de fil

Utilisez un couteau ou une lime à ongles pour approfondir les rainures du fil
Utilisez un couteau ou une lime à ongles pour approfondir les rainures du fil

Les rainures de fil pour les éléments 2 et 3 sont trop peu profondes.

Étape 18: Construisez le bras

Construire le bras
Construire 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

Connectez les broches de servocommande à l'Arduino
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

Remarques
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'); }

Étape 31: Plus de photos