Construire un bras 4 axes : PCA9685, servos, cinématique
Un bras robotique de bureau qui va aux poses commandées — piloté par un PCA9685 et réglé avec une cinématique inverse comprise en simulation avant de câbler un seul servo.
Un bras robotique est le premier projet où un robot cesse de se déplacer et commence à faire quelque chose au monde. Un suiveur suit ; un éviteur esquive ; un bras atteint, positionne et saisit. Ce basculement — de la conduite à la manipulation — apporte l’idée unique sur laquelle tout manipulateur est bâti : la cinématique, la géométrie qui relie les angles commandables au point dans l’espace réellement voulu.
Ce parcours traite le bras exactement comme cela : une leçon de cinématique à tenir en main. Vous commencez par comprendre comment un bras deux segments transforme des angles articulaires en position d’outil et inversement, rassemblez les pièces qu’exige un bras à servos et apprenez ce que chacune fait, puis — avant de dépenser quoi que ce soit ou de casser un engrenage — explorez la portée, les deux solutions de coude et les poses inaccessibles dans le simulateur en navigateur. Ensuite seulement vous câblez le vrai bras, calibrez ses servos à la main, et exécutez la cinématique inverse sur le matériel.
Suivez l’arbre technologique ci-dessous de haut en bas. Chaque nœud s’ouvre une fois ses prérequis terminés, et votre progression est enregistrée sur cet appareil, pour construire le bras sur un week-end sans perdre votre place.
Nomenclature
| Pièce | Qté | Coût approx. | Notes |
|---|---|---|---|
| Arduino Uno | 1 | $5–8 | Toute carte convient — elle ne parle qu’I²C ici |
| PCA9685 pilote 16 voies | 1 | $3 | Pas strictement exigé pour quatre servos, mais c’est le bon outil |
| Servomoteur SG90 | 4 | $8 | Achetez un MG90S pour l’épaule — pignons métal, et c’est l’articulation qui casse |
| Kit bras 4 axes | 1 | $12–25 | L’acrylique suffit pour apprendre ; l’aluminium fléchit bien moins |
| Alim 5–6 V, ≥3 A | 1 | $8 | Quatre servos calés ensemble font ~2,6 A |
| Condensateur 1000 µF | 1 | $1 | Sur V+, près de la borne |
| Palonniers de rechange | 1 jeu | $2 | Vous en monterez un de travers. Tout le monde le fait |
Total : environ $40–60.
Deux achats méritent réflexion plutôt que défaut. Un MG90S à pignons métal à l’épaule coûte un dollar de plus et c’est l’articulation qui porte le poids de toutes les autres — les pignons nylon y cassent en charge prolongée, pas sous choc. Et une alimentation dimensionnée pour le calage, car la panne distinctive d’un bras est que quand il heurte son propre cadre ou saisit quelque chose de solide, chaque servo cale à la fois.
Mesurez votre bras avant d’écrire le moindre code
La cinématique inverse est de l’arithmétique sur des longueurs de segments. Ces quatre nombres sont toute l’entrée, et les prendre d’une fiche produit plutôt qu’au réglet est la raison la plus fréquente pour laquelle un bras atteint avec assurance le mauvais endroit.
| Symbole | Mesurez de | À | Typique |
|---|---|---|---|
L1 |
Axe d’articulation d’épaule | Axe d’articulation de coude | 90–105 mm |
L2 |
Axe de coude | Le point de prise réel de la pince | 80–95 mm |
Cette dernière ligne fait plus de travail qu’il n’y paraît. « Le point de prise réel de la pince » bouge quand les mors se ferment, et dimensionner la pince elle-même est un problème séparé du positionnement — avec ses propres murs, sa propre arithmétique et ses propres modes de panne. Si votre bras atteint la pièce puis la lâche ou l’écrase, la réponse n’est pas dans cette page : commencez au simulateur de pince.
| h | Surface de table | Axe d’épaule | 50–70 mm |
| d | Axe de rotation de base | Axe d’épaule, horizontalement | 0–15 mm |
Mesurez entre axes d’articulations, pas bords de supports. L’axe est le centre de la cannelure de sortie du servo, souvent 5–10 mm à l’intérieur du support visible. Sur un segment 95 mm, 10 mm d’erreur font plus de 10 %, et cela produit un bras systématiquement court qu’aucun gain ne corrige.
Ces deux longueurs donnent aussitôt l’espace de travail :
maximum reach = L1 + L2 e.g. 100 + 90 = 190 mm
minimum reach = |L1 - L2| e.g. |100 - 90| = 10 mm
L’espace de travail est un anneau, pas un disque. Il y a un trou au milieu que le bras ne peut physiquement pas atteindre, et une cible près de la base renvoyée « inaccessible » est un comportement correct plutôt qu’un bug.
Construisez par étapes
L’ordre d’assemblage contient ici une étape presque impossible à défaire, et c’est l’étape 2.
| N° | Étape | Le test | Un succès ressemble à |
|---|---|---|---|
| 1 | Le pilote répond | Balayez le bus I²C | 0x40 apparaît ; V+ a sa propre alimentation |
| 2 | Servos au neutre avant assemblage | Commandez chaque servo à 90° avant d’enfoncer un palonnier | Chaque palonnier est monté à votre pose zéro voulue |
| 3 | Butées par servo | Écartez depuis le centre jusqu’au grognement du servo | Vous avez des comptes min/max par servo, pas les défauts de bibliothèque |
| 4 | Table des articulations notée | Commandez chaque articulation sur sa plage | Offset, signe et limites mécaniques notés pour les quatre |
| 5 | Contrôle de collision | Balayez lentement chaque articulation sur toute sa plage | Rien ne heurte le cadre ; les limites reflètent l’observé |
| 6 | Cinématique directe | Fixez des angles connus, calculez la position d’outil, mesurez-la | Calculé et mesuré concordent à quelques millimètres |
| 7 | Aller-retour | Repassez la position calculée dans la CI | Les angles sortis correspondent aux angles entrés |
| 8 | Les quatre quadrants | Demandez des cibles devant, derrière, gauche, droite | Les quatre marchent — si deux se miroirent, vous avez utilisé atan pas atan2 |
| 9 | Accessibilité | Demandez une cible bien au-delà de L1 + L2 |
Un « inaccessible » propre — pas un NaN, et pas un bond |
| 10 | Mouvement lisse | Commandez un grand mouvement | Interpolé par pas, toutes articulations ensemble, sans à-coup |
| 11 | Répétabilité | Revenez dix fois à la même pose depuis des directions différentes | Dispersion d’arrivée mesurée — ce nombre est votre jeu |
L’étape 2 ne se récupère pas ensuite. Un palonnier de servo est cannelé — une vingtaine de dents — donc il ne s’emmanche qu’en positions discrètes espacées d’environ 18°. Assemblez d’abord et calibrez ensuite, et vous pouvez trouver une articulation dont la plage utile est décalée de 40° sans aucun moyen mécanique de corriger. Alimentez chaque servo, commandez 90°, puis enfoncez le palonnier.
Bougez-le toujours doucement
Un servo commandé vers un nouvel angle y va à pleine vitesse. Sur un bras cela signifie un mouvement violent, un pic de courant sur les quatre servos, et un choc mécanique dans des pignons nylon avec le levier propre du bras qui le multiplie.
// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
static float cur[3] = {0, 0, 0};
const float target[3] = {base, shoulder, elbow};
for (int s = 1; s <= steps; s++) {
const float t = (float)s / steps;
for (int j = 0; j < 3; j++) {
const float a = cur[j] + (target[j] - cur[j]) * t;
pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
}
delay(stepMs);
}
memcpy(cur, target, sizeof(cur));
}
Interpoler toutes les articulations ensemble compte autant que le lissage lui-même. Bouger les articulations une par une envoie l’outil sur un arc étrange dans l’espace — plus lent, et bien plus susceptible de heurter quelque chose en route.
À quoi ressemble un bon résultat
| Mesure | Kit acrylique, SG90 | Alu, MG90S |
|---|---|---|
| Répétabilité, même sens d’approche | ±3–5 mm | ±1–2 mm |
| Répétabilité, sens d’approche mixtes | ±8–15 mm | ±3–5 mm |
| Charge utile à pleine extension | 20–30 g | 40–60 g |
| Affaissement à pleine extension, à vide | 3–8 mm | 1–3 mm |
L’écart entre les deux lignes de répétabilité est le jeu, et c’est la plus grande source d’erreur d’un bras amateur. Quatre degrés de jeu à l’épaule sur 190 mm de portée font plus de 13 mm à la pince. La réponse pratique n’est pas de meilleures maths — c’est de toujours approcher une cible depuis le même sens, ce qui supprime entièrement le changement de signe et transforme une erreur de ±13 mm en offset répétable calibrable.
Dépannage
| Symptôme | Cause probable | Correctif |
|---|---|---|
| Le bras atteint complètement le mauvais point | Palonnier monté à un angle arbitraire | Mettez chaque servo au neutre 90° avant de monter les palonniers |
| La plage d’une articulation est décalée ~18° | Palonnier décalé d’une dent | Retirez et remontez — le logiciel ne peut pas corriger cela |
| Atteint correctement devant, miroir derrière | atan au lieu d’atan2 |
atan2 résout les quatre quadrants |
| La CI renvoie NaN et le bras bondit | Argument acos hors −1..1 |
Testez l’accessibilité avant la trigonométrie |
| Les cibles près de la base échouent | Dans le trou de portée minimale | Comportement correct — l’espace est un anneau |
| La carte redémarre quand le bras bouge | Courant servo dans l’Arduino | Alim V+ séparée, masse commune, condensateur 1000 µF |
| Le bras s’affaisse à pleine extension | Épaule au-delà de son couple confortable | MG90S à l’épaule ; contrepoids avec un élastique |
| Gronde en tenant une pose | Servo luttant contre une charge à sa limite | Réduisez la charge, ou detach quand le maintien est inutile |
| Pics de vitesse articulaire près de pleine extension | Traversée d’une singularité | Gardez les trajectoires prévues en marge de la frontière |
| Atterrit différemment selon le sens | Jeu | Approchez toujours depuis le même sens |
| Tous les angles systématiquement courts | Oscillateur PCA9685 pas exactement 25 MHz | Mesurez la vraie fréquence de sortie et appelez setOscillatorFrequency |
Pour aller plus loin
Ajoutez un mouvement en ligne droite. Interpoler en espace articulaire, comme le code ci-dessus, fait suivre une courbe à l’outil. Interpoler en espace cartésien — calculer la CI à chaque pas le long d’une droite — le fait voyager droit, ce qu’exige tout vrai pick-and-place. C’est un petit changement et c’est là que les singularités cessent d’être théoriques : une trajectoire droite en quasi-pleine extension exige des vitesses articulaires énormes.
Ajoutez une caméra et bouclez. Tout ici est en boucle ouverte : le bras va où on lui dit et ne vérifie jamais. Une caméra lisant un marqueur ArUco sur l’objet permet au bras de corriger l’erreur laissée par jeu et affaissement — et c’est ainsi qu’un bras bon marché devient précis.
Montez en gamme une fois le plafond atteint. Les segments alu suppriment l’essentiel de la flexion, les servos MG90S l’essentiel du jeu, et un bras 6 axes ajoute un poignet pour que l’angle d’approche de l’outil devienne votre choix. Rien ne change les maths : le solveur deux segments écrit ici est le même qu’utilise un meilleur bras, et c’est exactement pourquoi le cadre bon marché valait d’être construit d’abord.
Parcours du projet
Le parcours de construction
Suivez l'arbre technologique, des pièces jusqu'à un robot qui fonctionne. Chaque nœud se débloque quand ses prérequis sont terminés, et votre progression est enregistrée sur cet appareil.
0 / 13 terminés
Composants
- ContrôleurArduino UnoLa carte 8 bits indulgente par laquelle la plupart découvrent la robotique.
- PilotePCA9685 Servo DriverPilotez 16 servomoteurs sur deux broches I²C — la carte derrière la plupart des bras robotiques et hexapodes.
- ActionneurSG90 Servo MotorLe servo neuf grammes derrière la plupart des bras, pinces et directions de robots.
- Châssis4-DOF Robot Arm KitLe cadre acrylique ou métal qui fait de quatre servomoteurs un manipulateur base-épaule-coude-pince.
- AlimentationRobot Battery & Power PackLa différence entre un robot qui roule et un qui redémarre sans cesse.
Tutoriels de ce parcours
- Avancé · 22 min de lectureCinématique inverse d'un bras robotique à deux segmentsPourquoi un bras à deux segments a deux solutions, où il peut et ne peut pas atteindre, et ce qu'est vraiment une singularité.
- Intermédiaire · 18 min de lecturePiloter des servomoteurs avec le PCA9685 (pilote PWM I2C)Réglez la fréquence, traduisez l'angle en impulsion, pilotez seize servos sur deux broches I2C, bien alimentés et étalonnés.
Entraînez-vous avant de câbler
Réglez-le dans le simulateur interactif
Le parcours de construction passe par un labo dans le navigateur. Obtenez ici le bon comportement, puis reportez vos réglages sur le vrai robot.
Questions fréquentes
Comment fabriquer un bras robotique avec Arduino ?
Montez quatre servos dans un cadre 4 axes — base, épaule, coude et pince — et pilotez-les avec un PCA9685 en I²C pour que l'Arduino ne manque pas de broches PWM. Calibrez la plage angle-impulsion de chaque servo, puis donnez les points cibles à un solveur de cinématique inverse deux segments qui renvoie les angles épaule et coude. Ce parcours couvre toute la chaîne, et vous réglez la géométrie en simulateur avant de câbler quoi que ce soit.
Combien de servos faut-il pour un bras 4 axes ?
Quatre — un par degré de liberté : une base tournante, une épaule, un coude et une pince. Chaque servo exige sa propre voie PWM, et c'est exactement pourquoi un bras multi-articulations utilise un pilote PCA9685 au lieu de la poignée de PWM matériels de l'Arduino.
Faut-il un PCA9685 pour un bras robotique ?
C'est le bon outil, quoique pas strictement exigé. Quatre servos tourneront depuis un Arduino si vous les alimentez séparément, mais le PCA9685 libère les timers du microcontrôleur, pilote chaque articulation depuis deux broches I²C, et route le courant servo via sa propre alimentation V+ — ce qui tient le fort courant loin de votre logique et empêche la microcoupure de la carte.
Faut-il acheter les pièces avant de commencer ce projet ?
Non. La cinématique et la résolution de poses tournent dans le simulateur en navigateur, donc vous pouvez comprendre et explorer la portée du bras, ses deux solutions et ses poses inaccessibles avant tout achat. Seules les étapes finales — câblage, calibration et exécution de la CI — exigent le vrai Arduino, le PCA9685, les servos, le cadre et l'alimentation.
Comment la cinématique inverse est-elle utilisée dans un bras robotique ?
La cinématique directe dit où l'outil finit avec les angles articulaires ; la cinématique inverse fait l'inverse utile — avec un point cible, elle renvoie les angles qui l'atteignent. Pour ce bras l'épaule et le coude forment un solveur plan deux segments, la base oriente ce plan, et la pince fait la prise. Le simulateur montre le solveur au travail, y compris où une cible est hors d'atteinte.