15H — Bras mécanique
Par admin le mercredi, février 17 2016, 12:00 - 2015-2016 - Lien permanent
Ce projet a été réalisé par Damien Korber. N'avez-vous jamais rêvé d'un robot faisant multiples actions à votre place comme le ménage ou encore le rangement ? Et bien vous tombez bien, cas ce n'est pas ce que vous aller pouvoir faire mon projet, du moins, pas directement. Le but de ce projet de réaliser un bras mécanique pouvant déplacer des pions sur un damier. L'artefact réalisé dans ce projet n'est évidemment qu'un prototype du vrai robot de vos rêves, mais dans tout projet, il faut un début et pourquoi ne pas commencer par le bras ? Je vous invite donc à me suivre au sein de se projet...
1. Introduction
Les robots sont des bijoux de notre évolution. En effet, ils nous sont extrêmement utiles pour réaliser les tâches redondantes que personne ne veut réaliser ou les tâches potentiellement dangereuses, dans les industries. Du robot qui déplace des chocolats dans leur boîte à celui qui soulève de lourdes charges, nous les utilisons à beaucoup d'endroits, et leur augmentation d'application n'est pas prêt de s'arrêter, à un tel point que l'on arrivera à un moment où ils se comporteront, j'en suis persuadé, comme des humains. Le monde de la robotique est un univers vaste, mais passionnant, qui ne cherche qu'à évoluer, encore et encore. Il s'agit d'une révolution importante de notre futur, comme l'ont été, par exemple, l'invention des outils de pierre ou de l'imprimerie à l'époque.
C'est dans cet intérêt pour la robotique et la technologie que j'ai décidé de réaliser un bras mécanique. Celui-ci a pour objectif de déplacer un pion sur un échiquier, à l'aide de la position de départ et d'arrivée, donnée par l'utilisateur. Je suis conscient qu'il existe beaucoup de robots bien plus performants que le mien, et qu'il s'agit d'un projet, très simple par rapport à ce qui se fait ailleurs, mais il me permettra de comprendre les bases de la robotique, de la mécanique et de la programmation.
2. Matériel et méthodes
2.1 Le matériel
Pour la réalisation de ce bras mécanique, j'ai utilisé:
- Un kit Arduino comportant au minimum
- Des câbles de différentes tailles (certains doivent être longs ou être raccordés)
- Une breadboard
- Une plaque Arduino (j’utilise un Arduino Uno)
- 4 Servos pour les différentes articulations
- Un câble de transfert entre l’Arduino et l’ordinateur
- Une alimentation externe 9V 2A
- Un échiquier
- Un pion
- Un ordinateur sous un OS supportant l’IDE d’Arduino (disponible à cette adresse: Ici)
- Les matériaux de votre choix (du bois est utilisé dans ce projet)
- Des visses
- Différents outils en fonction de votre besoin (des tournevis de différentes tailles, une perceuse ou une scie à bois par exemple)
- Du ruban adhésif
- Du Velcro
- D’autres matériaux personnels pouvant être utilisés à votre guise
2.2 La méthode
La réalisation de ce projet se découpe en deux parties distinctes:
- La construction du bras
- La programmation
2.2.1 Le prototype
Avant d’entamer le projet, j’ai commencé par fabriquer un petit prototype cheap afin de bien me rendre compte du fonctionnement global du bras. Celui-ci pourrait sembler inutile et être une forte perte de temps, mais pour 1 heure de construction et programmation du prototype, combien de temps gagné en fin de course ? En effet, beaucoup. Ainsi, je conseille fortement à quiconque qui entame un projet, de faire un prototype en amont. Voici donc mon chef-d’oeuvre.
Figure 2.1 - Prototype du bras mécanique
2.2.2 Le choix des servos
Pour ce projet, plusieurs types de servos seront utilisés. Certains sont plus puissants mais plus grands, alors que d’autres sont plus petits mais moins puissants. Pour ce que est de l’épaule, les deux servos doivent être capables de supporter une masse relativement élevée. Les gros servos sont donc conseillés. De mon côté, j’ai choisi des BMS-621. Pour ce qui est du coude, il faut également un servo puissant, mais il ne peut pas être aussi gros et lourd que le BMS-621. J’ai donc choisi un GWS Naro Super D. Finalement, pour la pince, j’ai choisi un servo léger mais peu puissant, le S0361, ce qui est amplement suffisant pour attraper un pion. Voici quelques détails techniques:
- La base rectangulaire des BMS-621 mesure 41 mm x 20 mm.
- La base rectangulaire du GWS Naro Super D mesure 27 mm x 12 mm.
- La base rectangulaire du S0361 mesure 20 mm x 8 mm.
Avant de continuer, je conseille de vérifier le bon fonctionnement des servos. En effet, ce serait dommage de perdre 30 minutes à remplacer un servo, lorsque le bras sera prêt.
2.2.3 Le plateau de jeu
Le but du bras mécanique est de déplacer un pion sur un damier. Il faut donc choisir le damier final dès à présent pour en connaître les dimensions. Mon damier en carton provient d’une boîte de ‘’jeux multiples’’ et mesure ~ 40 cm de diamètre. (la taille exacte n’est pas importante, vu que mon bras sera capable d’aller un peu plus loin) Ajoutons à cela, que le pion qui sera déplacé, n’est pas vraiment homologué. En effet, le pion simple ne tient pas sur la pince, car il est beaucoup trop lisse. Du coup, je l’ai enroulé dans du ruban adhésif de carrossier et le tour est joué.
2.2.4 Le plan
Maintenant que les servos et le damier ont été choisis, il est temps de préparer les plans du bras. Les deux pièces principales sont le bras et l’avant-bras. Voici mon plan de découpe.
Figure 2.2 - Plan du bras
Figure 2.3 - Plan de l'avant-bras
Il y a quelques détails à faire attention lors de la réalisation de celui-ci:
- L’emplacement des servos: ils doivent être dessinés dans le plan, car dans le cas contraire, il deviendra plutôt complexe de les placer.
- Les dimensions: elles doivent être évidemment respectées. Je conseille également de prévoir des dimensions légèrement plus grandes, afin d’avoir la possibilité de, par exemple, limer les côtés.
Évidemment, ces plans sont personnels et changent en fonction du besoin. Cependant, ils perment de se rendre compte rapidement à quoi il faut faire attention. Je conseille de dessiner des plans personnels. Je tiens également à préciser que tout ne se trouve pas sur ce plan. En effet, diverses blocs de bois seront ajoutés au fil de la construction, qui m’ont aidé à stabiliser le bras en général. Et comme ceux-ci dépendent de la forme du bras, je ne peux donc pas les planifier.
2.2.5 Le montage
La première étape est la découpe des pièces du plan. À l’aide d’une scie à bois, découpons le bras et l’avant-bras. Après cela, je conseille de limer les bords, afin de ne pas se planter une écharde en le touchant. Il en sortira également plus beau.
Maintenant que les pièces sont découpées, place au montage. Commençons par la base, l’épaule. Pour ceci, il faut tout d’abord creuser le support du bras, dans mon cas une boite de vin, avec les dimensions du BMS-621.
Figure 2.4 - Ancienne boîte de vin, servant de support principal au bras.
Ensuite, il faut monter le second BMS-621 sur le premier. Pour ma part, j’ai décidé de fabriquer un petit support à l’aide d’un bloc de bois.
Figure 2.5 - Bloc de bois servant à relier les deux servos de l'articulation de l'épaule.
À ce bloc, j’ai vissé une petite plaque. Attention à ce que l’angle entre la plaque et le bloc vaille bien 90 degrés.
Figure 2.6 - Bloc de bois servant à relier les deux servos de l'articulation de l'épaule.
On peut désormais visser ce support au premier BMS-621 et visser le tout dans le trou de la boite.
Figure 2.7 - Bloc de bois pour lier les deux articulations vissées au premier servo.
Maintenant, passons au bras. Cette pièce, découpée et limée au préalable, va être reliée au second BMS-621, qui lui-même va être relié au premier BMS-621. Tout d’abord, vissons le second au bras.
Figure 2.8 - Deuxième servo de l'épaule, vissé au bras.
Par sécurité, j’ai également ajouté des petits blocs de bois de l’autre côté, afin que personne ne se blesse lors de l’utilisation.
Figure 2.9 - Petits blocs de bois permettant de sécuriser les visses.
Ensuite, vissons le GWS Naro Super D à l’opposé du bras de la même manière. Puis, visser le second BMS-621 au support en bois.
Figure 2.10 - Première partie du bras vissé au support.
Il nous reste donc plus que l’avant-bras et la pince. Pour la pince, j’ai découpé une pièce de la même forme que le bout de l’avant-bras. J’ai ensuite placé le servo de la bonne manière, et tant bien que mal, j’ai mis en place le mécanisme. Pour que la pince agrippe mieux le pion, j’ai placé sur les deux côtés de la pince du Velcro, mais attention, uniquement la face avec les crochets.
Figure 2.11 - Avant-bras et pince assemblés.
Désormais, le bras est prêt à être utilisé.
2.2.6 Le câblage
Au niveau électronique, ce projet est enfantin. En effet, aucun câblage complexe n’est requis. Les servos sont directement alimentés, et reliés au signal. Voici tout de même un schéma électrique du projet, comme je l’ai conçu.
Figure 2.12 - Schéma électrique du projet
2.2.7 La programmation
Avant tout chose, je tiens à préciser que le code source du projet est disponible à cette adresse: Ici Ce code est commenté et expliqué en détail pour une meilleure compréhension.
2.2.7.1 Le ‘C’ d’Arduino
Pour que je n'aie pas à m'étaler sur ce sujet, car cela prendrais plusieurs centaines de pages, je vous redirige vers quelques ressources.
- Une vidéo d'ExperimentBoy (français) pour ceux qui n'aiment pas lire: Ici
- La référence officielle de toutes les fonction d'Arduino: Ici
- Ce guide plutôt complet d'Eskimon et d'Olyte: Ici
Et si ce n'est pas suffisant, Google est votre ami. :)
2.2.7.2 Le fonctionnement global
Lorsque le programme est lancé, l’Arduino va suivre ces différentes étapes pour mener à bien sa mission:
- Défini les variables, les constantes et mets en place tous les détails du ‘’setup’’
- Attend l’arrivée d’une valeur contenue entre ‘’A0’’ et ‘’J9’’ pour les coordonnées.
- Enregistre la valeur actuelle des angles.
- Défini les différentes longeures en fonction de l’entrée de l’utilisateur précédemment.
- Calcul des hypoténuses.
- Calcul des angles
- Déplace les servos dans la position demandée.
- Ressert la pince et se repositionne à la position initiale.
- Reinitialise la valeur des coordonnées à ‘’XX’’
- Attend la nouvelle coordonnée et refait toutes les étapes précédente, en lâchant le pion à la fin
2.2.7.3 Le calcul d’angle et la trigonométrie
La trigonométrie touche une part importante du projet. En effet, pour ne pas avoir à définir la position de chaque case manuellement, il est recommandé de passer par la voie mathématique pour s'en sortir. Avant de continuer, voici les quelques calculs que je vais utiliser pour le calcul des angles, selon ces triangles:
Figure 2.13 - Triangles
- la célèbre formule de pythagore.
- les relations trigonométriques permettant le calcul d’angle dans un triangle rectangle
- la relation trigonométrique permettant le calcul d’angle dans un triangle quelconque
Si vous ne comprenez pas ces formules, vous avez deux choix: soit vous me faites confiance et vous les utilisez à la lettre, soit, vous vous renseignez sur ces différentes relations et leur fonctionnement. Le second choix me semble le plus judicieux.
Le calcul des différents angles va donc être possible à l’aide de ces différentes relations. Le détail des calculs se trouve dans le code.
2.2.7.4 Le mouvement adouci
Vous l'avez sûrement remarqué, les servos sont pour le moins... réactifs. En effet, ceux que j'ai choisis sont, pour ma part, utilisés pour du modélisme, et en vol, pas question de faire bouger le servo doucement, il faut aller droit au but. Le souci est que, pour le bras, cette réactivité risque de détruire le matériel. Je conseille donc d'utiliser une méthode alternative pour changer l'angle des servos. Pour cela, il va falloir programmer une fonction. Celle-ci fonctionne assez simplement. On connait l'angle actuel, l'angle voulu, et le servo à mouvoir. Grâce à ces informations, on va donc modifier progressivement la valeur de l'angle, et mettre un léger délai pour donner l'illusion de bouger lentement. En réalité, le servo saccadera tout autant qu'avec la méthode simple, avec la différence que les sauts de valeur seront plus faibles. Voici donc ma fonction:
move(x, y, z)
Les variables ‘’x’’ et ‘’y’’ sont de type float, et la variable ‘’z’’ est de type integer. Pour mouvoir plus doucement les servos, il faut renseigner trois champs. Le premier, où se trouve ‘’x’’, est l’angle de départ, le second, où se trouve ‘’y’’, est l’angle d’arrivée, et le dernier, où se trouve ‘’z’’, est le servo à mouvoir. En utilisant cette fonction, on arrive donc à rendre précis et plus stable le bras. La fonction est détaillée dans le code source.
2.2.7.5 La modulation de longueur d’impulsion
Le mouvement des servos se fait avec ce qu’on appelle ‘’PWM’’, soit la ‘’modulation de longueur d’impulsion’’ ou ‘’pulse width modulation’’ en anglais. Comme son nom l’indique, il s’agit de la modulation de la longueur d’une impulsion d’un signal digital. Un signal digital ne peut pas être modulé dans la hauteur. Ce qui veut dire qu’il n’y a que deux valeurs possibles: la valeur maximale et la valeur minimale.
Figure 2.14 - Signal digital simple
Du coup, comment faire pour donner une valeur intermédiaire au servo, comme avec un signal analogique qui est à 2.5 Volts?
La réponse est simple, PWM. Si le signal digital ne peut pas modifier sa hauteur, il est en revanche possible de modifier la largeur, simplement en réduisant sa taille. En effet, on remarque que, sur une même période, l’aire sous le signal digital modulé est le même aire sous le signal analogique.
Figure 2.15 - Signal analogique
Figure 2.16 - Signal digital modulé
Dans les deux cas, l'aire sous la courbe vaut bien 2.5 Volts.
Du coup, l’Arduino ne gérant pas les sorties analogiques, il faut utiliser les sorties digitales modulées. Attention tout de même, il n’y a qu’un certain nombre de ports digitaux sur l’Arduino qui supportent le PWM. Ils sont indiqués avec un tilde (~).
3. Résultats
Le résultat de ce projet étant très visuel, j'ai choisi de réaliser une petite vidéo de l'expérimentation.4. Discussion
Afin de rendre plus claire le traitement des résultats, je vais classer les différents problèmes.
4.1 La précision
Un des soucis principaux est la précision. En effet, le bras n’est pas aligné à certaines cases, et manque le pion suivant sa position. Ce cas se remarque principalement sur les cases aux extrémités. Au niveau théorique, les calculs semblent être justes, et fonctionnent sur les autres cases. Le souci pourrait provenir de la précision de ces calculs. En effet, Arduino possède une grande limitation, les variables floats et doubles. Dans la plupart des autres languages de programmation, les floats permettent de réaliser des calculs avec des nombre décimaux, et dans le cas où la précision des floats n’est pas suffisante, les variables doubles sont deux fois plus précises. Le problème est que sur Arduino, les floats et les doubles ont la même précision qui est plutôt faible. En l’occurence, si ce float ne servait qu’a faire des additions, ce ne serait pas forcément un problème, mais pour les arc cosinus, la différente peut-être flagrante, et l'accumulation de ces arrondis, produit un résultat final ‘’loin’’ de la réalité. La seule solution imaginée pour enlever ces limites est la multiplication des chiffres par ‘’dix’’ puissance ‘’n’’ avec un ‘’n’’ positif. Cependant, pour des raisons de temps et de priorité, je n’ai pas pu procéder au changement.
4.2 Les vibrations de l’avant-bras
Le second souci flagrant de ce projet est la vibration de l’avant-bras lorsque le servo du coude se déplace. En effet, cette vibration est telle que le pion glisse régulièrement de la pince. La gravité de ce problème a été passablement réduite en réduisant les mouvement de l'avant-bras. En effet, auparavant, l'avant-bras, ainsi que le reste du bras, se remettaient dans leur position initiale à chaque fois qu'un mouvement était terminé. Désormais, l'avant-bras est optimisé, et bouge le moins possible. Le problème est toujours présent, car il doit toujours bouger de temps à autre.
4.3 La pince
Un troisième soucis provient de la pince. En effet, celle-ci est assez simple. Elle se contente de bloquer le pion entre deux plaques. Cette simplicité apporte deux soucis: le pion n'est pas bien tenu et tombe régulièrement, et celui-ci se retrouve dans la mauvaise position lorsque l'on le déplace aux extrêmes. Pour corriger le problème de la chute du pion, il existe beaucoup de solution. La première est de modifier la texture qui se trouve sur les "plateaux" de la pince. En effet, le Velcro n'est pas la texture optimale. Un matière telle que de la mousse serait plus intéressante. Ensuite, il est également possible de régler ce souci en complexifiant la pince. Au début, mon prototype de pince devait plaquer le pion, entre deux plaques parallèles. En voici un schéma.
Figure 4.1 - Schéma d'un prototype de pince
Les deux plaques parallèles sont liées à l'aide de deux fils pour fermer la pince, ainsi que deux ressorts pour ouvrir la pince. Les deux fils sont reliés à un servo qui, en ayant un angle plus ou moins grand, change l'état de la pince. Ce procédé me semblait plus optimal, mais plusieurs autres problèmes se créent. Certes, le pion devrait être mieux attrapé, mais la pince serait beaucoup plus fragile et risquerait facilement de se casser. Il faut aussi préciser qu'un tel procédé est bien plus difficile à mettre en place que la pince actuelle. Du coup, peut-être que cette pince n'est pas non plus l'idéale.
4.4 L'utilisation
4.5 L'efficacité
5. Conclusion
Je pense pouvoir affirmer que j'ai atteint mon but. En effet, malgré ses défauts, mon bras mécanique fonctionne. Une question se pose: « Et maintenant ? » Désormais, il serait temps de passer à une version améliorée de ce bras. Dans son état actuel, il ne sert pas à grand chose. En revanche, il est un bon prototype. Une version 2.0 du projet, en utilisant un Raspberry Pi et une interface web, serait largement envisageable. Ce passage au Raspberry Pi améliorerait grandement le bras mécanique. Cependant, seul, ce bras n'est pas très utile, car son efficacité est assez limitée. (cf. 4.5) En revanche, son application peut-être plus utilisée dans le domaine de la robotique.
Comme je l'ai dit à de maintes reprises, ce projet n'est qu'un simple prototype, mais il m'a permis de me familiariser avec la programmation, la mécanique et différents concepts tel que le pwm. Maintenant que le prototype est terminé et fonctionne plus ou moins, il est temps de passer à la fabrication de la fameuse version 2.0.
6. Annexes
6.1 Où acheter les matériaux ?
Ce type de projet utilise votre créativité, et préférez donc le recyclage. Tout n’a pas besoin d’être neuf. Pour le bois par exemple, il est possible de réutiliser des vieux objets que plus personne n’utilise. Pour mon bloc de bois qui sert de support au second servo de l’épaule, j’ai pris une vieille barrière, puis je l’ai découpée et limée. Facile non ? Dans le cas où vous n’arriveriez pas à trouver ces matériaux, il est également possible d’aller dans un déchetterie du coin et d’y trouver son bonheur. Pour les matériaux électroniques, je conçois volontiers que tout le monde n'en possède pas. Les servos par exemple. Voici donc différents sites où ces matériaux peuvent être achetés. Si les liens sont indisponible, ils mènent vers http://www.hobbyking.com/.
6.2 Les ressources
Dans le cas où vous n'auriez pas eu le temps de lire cette entrée du blog, j’ai décidé de rassembler les ressources dans cette section.
- Archive contenant toutes les images en haute définition: imageshd.zip
- Le code source: Ici
6.3 Les sources
Pour la réalisation de ce projet, j’ai dû m’informer sur quelques concepts que je ne connaissais pas. Voici les endroits où je me suis renseignés.
Wikipedia contributors, "Pulse-width modulation," Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/w/index.php?title=Pulse-width_modulation&oldid=700781363 (accessed February 6, 2016).
Contributeurs de Wikipédia, "Modulation de largeur d'impulsion," Wikipédia, l'encyclopédie libre, http://fr.wikipedia.org/w/index.php?title=Modulation_de_largeur_d%27impulsion&oldid=123064270 (Page consultée le 6 février, 2016).
Contributeurs de Wikipédia, "Virgule flottante," Wikipédia, l'encyclopédie libre, http://fr.wikipedia.org/w/index.php?title=Virgule_flottante&oldid=122854493 (Page consultée le 10 février, 2016).
"Masse Volumique et Densité", Warmaths, http://www.warmaths.fr/SCIENCES/densiteCatalogue..htm (Page consultée le 16 février, 2016).
Wikipedia contributors, "Delta robot", Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/w/index.php?title=Delta_robot&oldid=69936107 (accessed February 16, 2016).
David Halliday, Robert Resnick et Jearl Walker, "Chapitre 11: La rotation" dans Physique 1: mécanique, edition Chenelière McGraw-Hill, Montréal.