Table des matières:

Bras robotique contrôlé par Arduino avec 6 degrés de liberté : 5 étapes (avec photos)
Bras robotique contrôlé par Arduino avec 6 degrés de liberté : 5 étapes (avec photos)

Vidéo: Bras robotique contrôlé par Arduino avec 6 degrés de liberté : 5 étapes (avec photos)

Vidéo: Bras robotique contrôlé par Arduino avec 6 degrés de liberté : 5 étapes (avec photos)
Vidéo: bras manipulateur avec 6 degrés de liberté (Arm Robot 6 DOF) + interface avec matlab 2024, Novembre
Anonim
Bras robotique contrôlé par Arduino avec 6 degrés de liberté
Bras robotique contrôlé par Arduino avec 6 degrés de liberté
Bras robotique contrôlé par Arduino avec 6 degrés de liberté
Bras robotique contrôlé par Arduino avec 6 degrés de liberté
Bras robotique contrôlé par Arduino avec 6 degrés de liberté
Bras robotique contrôlé par Arduino avec 6 degrés de liberté

Je suis membre d'un groupe de robotique et chaque année notre groupe participe à une Mini-Maker Faire annuelle. Début 2014, j'ai décidé de construire un nouveau projet pour l'événement de chaque année. À l'époque, j'avais environ un mois avant l'événement pour préparer quelque chose et je n'avais aucune idée de ce que je voulais faire.

Un autre membre a posté un lien vers « une construction de bras robotique open source intéressante » qui a éveillé mon intérêt. Les plans n'étaient qu'un bras sans contrôle ni contrôleur. Compte tenu de mes contraintes de temps, cela semblait être un très bon point de départ. Le seul problème était que je n'avais vraiment pas d'outils pour commencer.

Avec l'aide de certains membres du groupe, j'ai pu faire découper et m'envoyer les pièces en acrylique ainsi que les deux pièces imprimées en 3D présentées ci-dessous. Combiné avec quelques commandes de matériel pendant la nuit et plusieurs voyages à la quincaillerie locale, j'ai terminé un projet de travail la veille de l'événement !

Comme c'est généralement le cas, il y a plus dans l'histoire et plusieurs incarnations de la construction qui ont été condensées à ce que vous voyez ci-dessous. Si vous êtes intéressé par l'histoire, vous pouvez en trouver plus ici:

Étape 1: Ce dont vous avez besoin - Matériel et électronique

Ce dont vous avez besoin - Matériel et électronique
Ce dont vous avez besoin - Matériel et électronique
Ce dont vous avez besoin - Matériel et électronique
Ce dont vous avez besoin - Matériel et électronique

Le concepteur du projet original vivait en Europe et a ensuite utilisé des mesures métriques et des matériaux communs là-bas. Par exemple, le panneau de presse qu'il a utilisé pour le corps était un standard de 5 mm d'épaisseur. Un matériau similaire ici aux États-Unis mesure 1/8 , ce qui représente environ 3,7 mm d'épaisseur. Cela a laissé un espace dans les ouvertures conçues à l'origine pour être ajustées à la presse. Plutôt que de corriger les dessins, j'ai simplement utilisé de la colle Gorilla Glue pour sécuriser ces joints.

Il a également utilisé des écrous et boulons filetés M3 qui ne sont pas standard dans votre quincaillerie locale aux États-Unis. Plutôt que de les convertir en options disponibles localement, j'ai simplement commandé le matériel en ligne comme indiqué dans ma liste de pièces ci-dessous.

  • 22 - Entretoises M3 x 0,5 x 23 mm
  • 15 - Entretoises M3 x 15mm
  • 40 - Vis M3
  • Écrous hexagonaux M3
  • Vis M3 25mm
  • 1 - Printemps
  • Ruban de montage double face 3/4"
  • 5 - Servomoteur SG 5010 TowerPro
  • 1 - Mini servomoteur SG92R TowerPro
  • 1 - Mini servomoteur SG90 TowerPro
  • Embase à broche droite à une rangée de 2,54 mm
  • 1 - Planche à pain demi-taille
  • 1 - Fils de raccordement femelle/mâle 'Extension' - 40 x 6"
  • 1 - Feuille acrylique bleue de 12 "x 24" ou les pièces découpées au laser de votre fournisseur de services préféré
  • 2 - Entretoises de roulement de joint 3 mm x 20 mm + 4 mm x 5 mm imprimées en 3D (voir ci-dessous)
  • 1 - Panneau de commande *Voir Remarque dans la section Câblage
  • 1 - LED RVB diffuse (tricolore) 10 mm
  • 1 - Arduino Uno
  • 1 - LCD standard 16x2 + extras - blanc sur bleu
  • 1 - Sac à dos LCD caractère i2c / SPI
  • 1 - Pilote PWM/Servo Adafruit 16 canaux 12 bits
  • 1 - MCP3008 - CAN 8 canaux 10 bits avec interface SPI
  • 3 - Capteur de module de dérivation JoyStick *Voir la note dans la section de câblage
  • DC Barrel Jack
  • Adaptateur CA vers CC
  • Câbles d'extension de servo - longueurs assorties

Presque toutes les pièces de ce bras ont été découpées dans de l'acrylique de 1/8 de pouce. Les deux entretoises de roulement de joint doivent cependant être imprimées. De plus, la conception originale prévoyait que les deux bases d'entretoise de joint mesurent 7 mm de haut par rapport à l'arbre de roulement. Lorsque j'ai commencé à assembler les bras supérieurs, il est rapidement devenu évident qu'ils étaient trop hauts en raison de la hauteur des servos TowerPro. Je devais faire fabriquer de nouveaux roulements de joint avec une base de seulement 3 mm de haut, ce qui, soit dit en passant, était encore un peu trop haut mais maniable. Vous voudrez prendre note de la hauteur relative de vos servos et tenir compte de la distance entre les deux bras inférieurs:

Hauteur servo + palonnier + roulement de joint + ruban adhésif double face = 47mm +/- 3mm.

Étape 2: Assemblage du bras

Assemblage du bras
Assemblage du bras
Assemblage du bras
Assemblage du bras
Assemblage du bras
Assemblage du bras
Assemblage du bras
Assemblage du bras

Avant de commencer, assurez-vous de centrer tous vos servos ! Si à n'importe quel moment de la construction, si vous déplacez manuellement la position du servo, vous devrez le recentrer avant de le fixer au châssis. Ceci est particulièrement important avec les servos d'épaule qui doivent toujours se déplacer à l'unisson.

  1. Fixez le servo de base à la plaque de base supérieure à l'aide des vis M3 25 mm et des écrous hexagonaux. Ne pas trop serrer !REMARQUE: vous pouvez appliquer un serrage serré sur les filetages pour minimiser le desserrage des écrous pendant l'utilisation.
  2. Si vous utilisez la liste de pièces que j'ai ci-dessus, vous voudrez ensuite assembler les 5 entretoises de base en enfilant 2 chacun des entretoises M3 x 0,5 x 23 mm ensemble, puis en les fixant à la plaque de base supérieure avec des écrous hexagonaux.
  3. Fixez la plaque de base inférieure aux entretoises avec 5 vis M3.
  4. Fixez la plaque d'épaule aux deux plaques de montage du servo à l'aide d'un adhésif acrylique sans danger. J'ai utilisé Gorilla Glue ici. REMARQUE: Chacune des deux plaques d'asservissement a un trou à l'arrière qui permet d'insérer une entretoise de renfort les reliant. Assurez-vous que les trous s'alignent !* Pendant que vous avez la colle à portée de main, allez-y et joignez la plaque de montage du poignet avec la plaque principale de la pince.* En option, vous pouvez également coller la plaque d'asservissement du poignet aux deux plaques d'articulation du poignet. Je ne l'ai pas fait en choisissant plutôt de les assembler avec des entretoises comme décrit ci-dessous.

  5. Fixez l'ensemble d'épaulement maintenant durci au servo de base. J'ai utilisé le klaxon le plus large inclus avec le servo qui était le klaxon de montage à six tiges.
  6. L'ajout du cadre du bras inférieur aux servos d'épaule peut être délicat. Je suggère de fixer les cornes aux cadres des bras inférieurs avant de continuer. REMARQUE: assurez-vous de centrer vos servos pour l'assemblage de l'épaule AVANT de les fixer au cadre. Ces deux servos doivent se déplacer à l'unisson et s'ils sont mal alignés, ils provoqueront au minimum une gigue des servos et, s'ils sont suffisamment mal alignés, ils pourraient endommager le cadre ou les servos. * Chacun des servos d'épaule est monté avec ses supports à l'arrière des plaques de montage au lieu de faire passer les servos à travers les plaques - cela vous permettra de pousser le klaxon sur l'arbre du servo à un angle et de fixer la vis. Ne fixez pas encore le servo à la plaque de montage. * Ensuite, ajoutez le servo interne et montez le bras

  7. Assemblez le cadre du bras supérieur et les servos en poussant les servos à travers les espaces dans les bras, puis en insérant les entretoises entre les deux plaques du bras supérieur et fixez avec des vis M3.
  8. Ajoutez du ruban adhésif double face à l'arrière de l'entretoise du coude et coupez l'excédent.
  9. Fixez l'entretoise au bas du servo qui servira d'actionneur de coude.
  10. Glissez l'assemblage du bras supérieur dans le cadre de l'assemblage du bras inférieur et fixez les vis du palonnier de servo.
  11. Ajoutez des entretoises de renfort entre deux plaques de bras inférieurs. J'en ai utilisé deux au lieu des quatre pour réduire le poids.
  12. Ajoutez du ruban adhésif double face à l'arrière de l'entretoise supérieure du poignet et coupez l'excédent.
  13. Fixez l'entretoise au bas du servo qui servira d'actionneur de poignet.
  14. Fixez la plaque de poignet extérieure au palonnier du servo de poignet et fixez-la avec une vis de palonnier.
  15. Assemblez la plaque d'asservissement du poignet avec les deux plaques d'articulation du poignet et les entretoises.
  16. Fixez le servo de poignet sur la plaque de servo avec la plaque de serrage de servo.
  17. Vous devrez fixer le cornet du poignet au servo avant de fixer l'ensemble de préhension à ce cornet en raison du blocage de l'ouverture pour la vis du cornet.
  18. Assemblez les pièces de la pince sans les serrer avant de fixer le palonnier de la pince sur le servo. Cela vous laissera de la place pour visser le klaxon à l'étape précédente.
  19. Fixez la corne de la pince à son servo et serrez davantage les vis qui maintiennent les articulations de la pince. REMARQUE: ne serrez pas complètement ces écrous et boulons car ils doivent être desserrés pour permettre à la pince de se déplacer.

Étape 3: Câblage et panneau de commande

Câblage et panneau de commande
Câblage et panneau de commande
Câblage et panneau de commande
Câblage et panneau de commande
Câblage et panneau de commande
Câblage et panneau de commande

J'ai construit ce projet comme une plate-forme de développement pour quelques idées que j'ai pour un projet éducatif ultérieur. Ainsi, la plupart de mes connexions sont de simples connecteurs dupont. La seule soudure que j'ai faite était pour le MCP3008. Si vous pouvez trouver une carte de dérivation pour ce composant, vous devriez pouvoir construire ce bras sans soudure.

Il existe 3 groupes de composants:

  1. Entrées - Ces éléments reçoivent des informations de l'utilisateur et sont composés des joysticks et du mcp3008 ADC.
  2. Sorties - Ces éléments transmettent des données au monde, soit en affichant l'état à l'utilisateur, soit en mettant à jour les servos avec les données de position. Ces éléments sont l'écran LCD, le sac à dos LCD, la LED RVB, la carte de servocommande et enfin les servos.
  3. Traitement - L'Arduino termine le dernier groupe qui prend les données des entrées et envoie les données aux sorties selon les instructions du code.

Le schéma de Fritzing ci-dessus détaille les connexions des broches pour tous les composants.

Contributions

Nous allons commencer par les entrées. Les joysticks sont des appareils analogiques, ce qui signifie qu'ils présentent une tension variable en entrée de l'Arduino. Chacun des trois joysticks a deux sorties analogiques pour X et Y (haut, bas, gauche droite) faisant un total de 6 entrées vers l'Arduino. Alors que l'Arduino Uno dispose de 6 entrées analogiques disponibles, nous devons utiliser deux de ces broches pour la communication I2C avec l'écran et le servocontrôleur.

Pour cette raison, j'ai intégré le convertisseur analogique-numérique (ADC) MCP3008. Cette puce prend en charge jusqu'à 8 entrées analogiques et les convertit en un signal numérique sur les broches de communication SPI de l'Arduino comme suit:

  • MCP Pins 1-6 > Sorties variables des joysticks au pouce
  • Broches MCP 7 et 8 > Pas de connexion
  • MCP Pin 9 (DGND) > Terre
  • MCP Broche 10 (CS/SHDN) > Uno Broche 12
  • MCP broche 11 (DIN) > Uno broche 11
  • MCP Broche 12 (DOUT) > Uno Broche 10
  • MCP Broche 13 (CLK) > Uno Broche 9
  • MCP Pin 14 (AGND) > Terre
  • MCP Broches 15 & 16 > +5V

Les connexions du joystick dans le schéma ne sont montrées qu'à titre d'exemple. Selon les manettes achetées et la façon dont elles sont montées, vos connexions peuvent différer des miennes. Différentes marques de joystick peuvent avoir un brochage différent et peuvent également orienter X et Y différemment. Ce qui est important, c'est de comprendre ce que chaque entrée sur l'ADC représente. Chaque broche représente les relations suivantes dans mon code:

  • Broche 1 - La base - Les données analogiques sur cette broche feront tourner le servo le plus bas du robot
  • Broche 2 - L'épaule - Les données analogiques sur cette broche feront tourner les deux servos au-dessus du servo de base
  • Broche 3 - Le coude - Les données analogiques sur cette broche feront pivoter le prochain servo vers le haut à partir des servos d'épaule
  • Broche 4 - UP/DN Wrist - Les données analogiques sur cette broche feront tourner le servo du poignet, élevant et abaissant l'ensemble de préhension
  • Broche 5 - La pince - Les données analogiques sur cette broche ouvriront et fermeront la pince
  • Broche 6 - Rotation du poignet - Les données analogiques sur cette broche feront tourner la pince

REMARQUE: lors de l'achat et du montage des manettes au pouce référencées dans la liste des pièces, gardez à l'esprit que l'orientation des modules peut différer de la mienne, testez donc les sorties x et y pour une connexion correcte à l'ADC. De plus, si vous utilisez mon panneau de commande imprimé en 3D, les trous de montage peuvent être décalés par rapport aux miens.

Les sorties

Le contrôleur Adafruit PWM/Servo rend ce projet très simple. Connectez simplement les servos aux en-têtes des servos et toutes les connexions d'alimentation et de signal sont gérées. À moins que vous ne trouviez des servos avec des fils extra-longs, vous voudrez vous procurer un ensemble d'extensions de câbles de servo de différentes longueurs afin que tous vos câbles de servo atteignent votre carte contrôleur.

Les servos sont connectés comme suit:

  • Position 0 - Servo de base
  • Position 1 - Servo d'épaule (Câble Y Servo)
  • Position 2 - Servo coudé
  • Position 3 - Servo poignet 1
  • Position 4 - Servo de préhension
  • Position 5 - Servo poignet 2

De plus, VCC et V+ sont tous deux connectés au +5 Volts et GND est connecté à la masse.

REMARQUE 1: Une GRANDE remarque ici: la tension d'alimentation pour l'ensemble du projet arrive par le bornier d'alimentation sur la carte de servocommande. La broche V+ du servocontrôleur alimente en fait le bornier au reste du circuit. Si vous avez besoin de programmer votre Uno, je vous recommande fortement de déconnecter la broche V+ avant de connecter l'Uno à votre PC car la consommation de courant des servos pourrait endommager votre port USB.

REMARQUE 2: j'utilise un adaptateur mural 6 V CA vers CC pour alimenter le projet. Je recommande un adaptateur qui peut fournir au moins 4A de courant afin que lorsqu'un ou plusieurs servos sont liés, la pointe soudaine de courant n'éteint pas votre système et ne réinitialise pas votre Arduino.

L'écran LCD 16X2 est connecté au sac à dos LCD Adafruit afin de profiter de l'interface I2C déjà utilisée par le servocontrôleur. Le SCL sur le servo-contrôleur et le CLK sur le sac à dos se connectent tous les deux à la broche A5 sur l'Uno. De même, le SDA du servocontrôleur et le DAT du sac à dos se connectent tous les deux à la broche A4 de l'Uno. De plus, 5V est connecté au +5 Volts et GND est connecté à la masse. LAT sur le sac à dos n'est connecté à rien.

Enfin, la LED RVB est connectée aux broches 7 (ROUGE), 6 (Vert) et 5 (Bleu) sur l'Uno. La branche de terre de la LED est connectée à la terre via une résistance de 330 ohms.

Traitement

Enfin et surtout, le reste des connexions Arduino non répertoriées ci-dessus sont les suivantes: la broche 5V est connectée à +5 volts et GND est connectée à la terre.

Dans ma configuration, j'ai utilisé les rails latéraux de la planche à pain pour relier toutes les lignes d'alimentation et de masse ainsi que les broches I2C pour tous les appareils.

Étape 4: Coder

Code
Code

Comme indiqué précédemment, j'ai initialement construit ce projet comme une démonstration pour ma Maker Faire locale. Je voulais que ce soit quelque chose pour que les enfants et les adultes puissent jouer avec pendant qu'ils étaient sur notre stand. En fin de compte, c'était bien plus populaire que je ne l'avais imaginé - à tel point que les enfants se disputaient pour ça. Ainsi, lorsque le temps est venu pour une réécriture, j'ai intégré un "mode démo" qui implémente une limite de temps.

Le bras attend que quelqu'un bouge un joystick et lorsqu'il le fait, il démarre une minuterie de 60 secondes. A la fin des 60 secondes, il arrête de prendre l'entrée de l'utilisateur et "se repose" pendant 15 secondes. Les courtes durées d'attention étant ce qu'elles sont, cette période de repos a considérablement réduit la contention pour le temps de bâton.

Opération de base

Le code répertorié dans la section de référence ci-dessous est assez simple. Un tableau garde une trace des 6 joints avec les étendues min, max, une position d'origine et la position actuelle. Lorsque le bras est mis sous tension, la fonction de démarrage définit les bibliothèques nécessaires pour communiquer avec le MCP3008, le LCD Backpack (et par la suite l'écran) et définit les broches LED. À partir de là, il effectue une vérification de base des systèmes et procède à l'accueil du bras. La fonction d'accueil commence par la pince et descend jusqu'à la base afin de minimiser les risques de grippage dans des conditions normales. Si le bras est complètement étendu, il peut être préférable de positionner manuellement le bras avant de l'alimenter. Étant donné que les servos génériques ne fournissent pas de retour sur sa position, nous devons placer chacun à un point prédéfini et garder une trace de la distance à laquelle chacun a été déplacé.

La boucle principale commence d'abord en mode attente - à la recherche des joysticks pour s'éloigner de leur position centrale. Une fois que cela se produit, la boucle principale change d'état en état de compte à rebours. Au fur et à mesure que l'utilisateur déplace chaque joystick, la position relative du joystick par rapport au centre s'ajoutera ou se soustraira à la position connue actuelle et mettra à jour le servo approprié. Une fois qu'un servo a atteint sa limite définie dans une direction, le joystick s'arrête. L'utilisateur devra déplacer le joystick dans l'autre sens pour le déplacer à nouveau. Il s'agit d'une limite logicielle à imposer aux servos indépendamment de leurs arrêts matériels. Cette fonction vous permet de maintenir les mouvements du bras dans une zone opérationnelle spécifiée si nécessaire. Si le joystick est relâché au centre, le mouvement s'arrêtera.

Ce code n'est qu'un point de départ général. Vous pouvez ajouter vos propres modes comme vous le souhaitez. Un exemple peut être un mode de fonctionnement continu sans minuterie ou peut-être ajouter les boutons poussoirs du joystick en tant qu'entrées et écrire un mode d'enregistrement/lecture.

Étape 5: Liens et ressources

Références de bras

  • Article qui a inspiré ce projet
  • Articles de blog des concepteurs originauxMon propre bras robotiqueMes mini pinces servo et bras robotisé terminé Multiplier le bras robotique et l'électronique
  • Bras de Thingiverse
  • Mini pince servo Thingiverse

Bibliothèques de logiciels

  • Ressources du contrôleur PWM/Servo Adafruit
  • Bibliothèque MCP3008
  • Fiche technique MCP3008

Panneau de configuration et code

  • Dessin Tinkercad du panneau que j'ai fait
  • Dépôt de code actuel

Conseillé: