Choix - Composants
Choix - Composants
Choix - Composants
Matthieu Vigne
Ce document propose une liste de composants pour les projets Mécatro: un robot suiveur de ligne et un
pendule inverse style Segway. Le choix des composants est principalement guidé par la contrainte suivante: la
recherche d’un système plug-and-play ne nécessitant aucune soudure ni branchements par connecteurs Dupont
non polarisés (pour limiter les erreurs, débranchements intempestifs. . . ).
Microcontroleur
L’élément central du robot est bien sur son processeur. Deux choix classiques s’offrent à nous: Raspberry Pi
ou Arduino. Je privilégie le choix d’une Arduino, bien plus simple à prendre en main: pas besoin de s’embêter
avec une image linux, une installation de dépendance, un environnement de développement et une chaine
de compilation. . . Quoi que bien plus limitée, les performances d’une Arduino sont bien suffisantes pour ce
projet. De plus, l’ecosystème Arduino en terme de robotique est plus développé que celui de la Raspberry
Pi. Une Raspberry Pi pourra toujours être rajoutée par la suite, selon un schéma maître-esclave classique:
la Raspberry effectue les calculs haut-niveau complexes (telle que le traitement de données de caméra ou
LIDAR) et envoie des ordres à une Arduino responsable de controler en bas-niveau les actionneurs et capteurs
sensores
du robot.
depuración
Le seul inconvénient que je vois à l’utilisation d’une Arduino est un debug plus compliqué: pour une Raspberry,
équipé d’un système de fichier, réaliser une télémétrie (enregistrement de données pour analyse ultérieure)
est très simple et ne pose pas de limite pratique. Une Arduino a l’inverse ne dispose pas de mémoire : les
données doivent donc être streamés vers un PC hôte, avec une limitation de bande passante et de temps de
traitement plus significative. L’ajout d’un module WiFi pourra être envisagée pour le cas du pendule inverse,
où l’utilisation d’un cable pour le debug serait peu pratique.
1
Adafruit, qui le nomme Stemma QT : il s’agit du même connecteur, les deux sont directement compatible.
Enfin, d’autres cartes peuvent être trouvés chez Seedstudio, sous le nom de Grove - à noter que le connecteur
est différent et nécessite un cable d’inferface
Une autre différence est à mentionner: les niveaux de tension utilisées. Arduino fonctionne classiquement
sur un niveau 5V, mais de nombreux composants modernes, ainsi que les processeurs style Raspberry Pi,
fonctionnent de 3.3V. Un grand nombre de capteurs sont compatibles avec les deux niveaux de tension,
mais ce n’est pas le cas de tous, et c’est un point qu’il convient de vérifier: un composant 5V opéré en
3.3V ne fonctionnera pas, tandis qu’un composant 3.3V, s’il est branché en 5V, va tout simplement griller !
En pratique, la carte Sparkfun Redboard peut opérer en 3.3V ou 5V au niveau de ses GPIO - par contre,
l’interface I2C QWIIC est toujours en 3.3V. A l’inverse, le système Grove était à l’origine prévu pour des
composants 5V, même si bon nombre de composants sont compatibles avec les deux niveaux. C’est un point à
vérifier pour chaque composant ; en cas de besoin, de convertisseurs de niveau logique comme celui-là existent
bien entendu.
Motorisation
Une fois le processeur choisi, l’élément le plus structurant dans la conception d’un robot est le choix de
sa motorisation: celui-ci va en effet dimensionner la conception mécanique (moteur, taille des roues. . . ) et
électrique (controleur de moteur, codeur, batterie).
ocio
Trois grandes familles de moteurs existent dans le domaine de la robotique de loisir:
con escobillas
• les moteurs à courant continu à balais: ce dont de loin les plus simples, les moins chers et les moins
eficientes
performants. L’absence de besoin de commutation ou de régulation de courant rend leur controle basique
très simple (un simple relai peut les faire tourner) ; leurs performances sont cependant médiocres, en
partie due à la faible qualité des réducteurs bon-marchés utilisés en sortie (un moteur classique tournant
à plusieurs milliers de tour minute nécessite un réducteur de rapport de réduction élevé).
• les moteurs pas à pas: principalement utilisé dans des applications à faible charge, ils permettent un
poco par
positionnement précis mais délivrent peu de couple. Ces moteurs sont utilisés partout en impression 3D,
car ils permettent un positionnement simple sans nécessiter de capteurs. Appliqué à un robot mobile
cependant, leur faible couple limitera l’accélération du système. De plus, étant par nature controlés en
position, ils ne nécessitent pas d’asservissement, ce qui rend obsolète toute une partie du projet.
• les moteurs à courant continue sans balais: évolution sigificative des versions sans balais, ils offrent
peso - potencia
des performances bien supérieurs (avec des rapports poids-puissance plus de 10x supérieurs, quand on
prend en compte le réducteur nécessaire aux moteurs à balais). Ils sont aussi beaucoup plus cher (tant
le moteur que l’électronique de puissance), et encore peu disponible en tant que composants standards
pour la robotique de loisir (même si cette technologie se démocratise ces dernières années). Leur controle
est logiquement bien plus complexe (même si un controleur de moteur intégrer peut l’effectuer en mode
boite noire).
Pour commencer par quelque chose de simple, les projets seront à base demoteur à courant continue. Il
convient donc de choisir un moteur, controleur de moteur et codeur adapté. Ce choix se révèle assez ardu, et
finalement très empirique, à cause d’un simple phénomène: les frottements dans la transmission. Les moteurs
à balais nécessitent un fort rapport de réduction, l’ensemble moteur + réducteur, appelé motoréducteur, est
souvent vendu d’un seul bloc. Or, pour des petits moteurs, peu baratos
onéreux, le rendement des réducteurs est
muy bajo asi que
souvent très faible, ce qui peu poser des problèmes à faible couple / faible vitesse. Ainsi, par le passé, je me
suis souvent trouvé obligé de sur-dimensionner les moteurs, et d’essayer plusieurs modèles par essai-erreur
jusqu’à en trouver un aux performances satisfaisantes.
Pour palier cette limitation, je propose de séparer au maximum l’inter-dépendance entre composants. Une
possibilité serait en effet de choisir un motoréducteur équipé d’un encodeur intégré, puis de prendre un
controleur de moteur tout juste adapté en terme de puissance. Mais alors, si le moteur s’avère insuiffisant,
c’est l’entièreté du système qu’il faut revoir, avec potentiellement des difficultés d’intégration du nouveau
codeur / controleur. A l’inverse, je propose d’utiliser un unique codeur externe, et un controleur de moteur de
puissance suffisante pour s’adapteur à n’importe quel moteur de taille raisonnable. Ainsi, le motoréducteur est
2
isolé, et pourra facilement être changé par la suite (tant dans la phase de design initiale que comme potentiel
d’amélioration, si les élèves veulent équiper leur robot de moteurs plus puissants / rapides. A noter qu’un
vrai gap technologique serait franchis avec l’utilisation de moteur sans balais, mais cela demande une étude
plus approfondie).
Moteur et roue
Le choix du moteur dépend évidemment de la roue utilisée, celle-ci agissant comme un rapport de réduction.
Je propose d’utiliser les roues en plastique de Pololu: il s’agit de toute une gamme de roue en plastique,
avec un pneu en caoutchouc, avec un très bon rapport qualité-prix: l’adhérence est décente, et les roues
tournent autour de 5€ l’unité. Ces roues existent en plusieurs diamètre (de 37 à 100mm), et peuvent se
monter facilement sur différents diamètres d’arbres grace à des moyeux en aluminium: ainsi, il est facile de
changer de taille de roue si nécessaire.
Mon expérience personnelle me pousse à privilégier un motoréducteur avec
un rapport de réduction plus faible, afin de limiter les pertes de rendement
dans le réducteur. Ainsi, une roue de faible diamètre est à privilégier ; une
limite apparait cependant lié à la taille du moteur: je vise des moteurs
faisant un diamètre de l’ordre de 40mm, aussi, une roue de 70mm semble
adaptée (permettant une hauteur de chassis de l’ordre de 15mm).
3
MFA ; bon nombre sont distribués sur Gotronic ou Robotshop, qui sont des bons endroits où commencer à
chercher.
De facon assez arbitraire, je propose de commencer par la gamme de moteur 37mm de Pololu: il s’agit du
même moteur monté sur un réducteur à engrenages droits. Très peu cher, mon expérience reste celle d’un
randement assez moyen - moins bon que ce que j’ai pu trouver chez des moteurs avec train épicycloidal de
Servocity par exemple - mais, je pense, suffisant pour réaliser ces projets. Plus précisemment, je propose de
prendre
• le 4742 avec un rapport de réduction de 30 pour la voiture: 330rpm a vide, 280rpm, 1.8kgm.com @ max
efficiency
• le 4743 avec un rapport de réduction de 50 pour le pendule inverse:, 100 rpm, 10kg.cm @ max power
Controleur de moteur
Le point suivant consiste à trouver des controlleurs de moteur capables de s’adapter à différents moteurs.
Concrètement, la variable principale est le courant maximum disponible: pour cette taille de moteur, on
s’intéresse comme ordre de grandeur avec un courant continue moyen de l’ordre d’1A, avec d’éventuelle pointes
autour de 5A.
Il existe des cartes intégrant un microcontroleur avec un pont en H : ainsi, l’asservissement peut être fait en
déporté sur cette carte. L’intérêt pédagogique d’un tel système me semble cependant beaucoup plus faible:
finalement, le problème de controle est déjà résolu, et la seule difficulté éventuelle réside dans la communication
avec cet esclave. Aussi, c’est un simple pont de H que je cherche.
Mon choix se porte sur le Cytron 10A 7-30V Dual
Channel DC Motor Driver Shield pour plusieurs
raisons:
• il fournit une puissance plus que suffisante (10A
continu, 30A pic!) pour un prix très faible: 30€
pour deux moteurs. Ceci est tout simplement
du à une conception moderne avec des transis-
tors MOS performants: à titre de comparaison,
des controleurs utilisant le vénérable L298, sorti
en 2000, ne propose que 2A continue, 4A pic -
pourtant, il est vendu (monté sur circuit) entre
5€ et 30€ ! A noter que le fait que le controleur
puisse monter bien plus haut en puissance n’est
pas un problème: en pratique, c’est la résis-
tance du moteur qui limitera le courant ; le
controle se fait par modulation du rapport cy-
clique (duty cycle) du pont en H, et non par
injection de courant.
• le format shield est très pratique: pas besoin
de cables ; il fournit de plus une alimentation
directe à l’Arduino. Autre fonctionnalité sym-
patique, des boutons sur la carte permettent
de tester le branchement du moteur “à la main”
sans avoir besoin de code.
• le controleur est un simple pont en H, sans
intermédiaire (contrairement au controleur de
moteur QWIIC). Ainsi, l’utilisateur pilote di-
rectement, depuis l’Arduino, le signal PWM du Figure 4: Cytron 10A 7-30V Dual Channel DC Motor
moteur. Ceci permet un controle du courant en- Driver Shield
voyé sans aucune latence - plus précisemment,
4
le temps de réponse du signal de controle est
directement celui de la fréquence de modulation (10kHz-20kHz), prévu pour être bien supérieur à celui
du moteur. Pédagogiquement, je trouve ca bien plus intéressant de pouvoir détailler ce qui se passe, au
lieu d’une “boite noire”
Codeur
codificador
Le dernier point à traiter pour la motorisation est le capteur mesurant l’angle du moteur, le codeur rotatif.
eje sortant à l’arrière
Une première solution consiste à monter un codeur incrémental (hall ou optique) sur un axe
du moteur. Bien que très pratique niveau intégration, cette solution présente trois inconvénients majeurs:
• le codeur incrémental est à brancher sur 4 broches de l’Arduino (alim + signaux A/B) avec des
connecteurs Dupont, alors que notre but est d’éviter tout problème de cablage.
• le fait de devoir compter les pas prend de la puissance de calcul à l’Arduino - ce qui peut être non
négligeable pour des vitesses de rotation élevés (à 12bit 300rpm, on parle de 20000 interruptions /
seconde / codeur)
• le codeur étant intégré au moteur, changer de moteur oblige à changer de codeur ; de plus, tous les
moteurs ne sont pas équipés d’axe arrière, réduisant le choix disponible
Pour ces raisons, je privilégie le choix d’un codeur externe, à
monter sur l’arbre directement, et disposant d’une interface
I2C, pour être utilisé simplement au sein du système QWIIC.
elegida- la seule trouvée en réalité - est le codeur
La solution retenue
magnétique AS5600. Il s’agit d’un codeur absolu simple tour
12bit communiquant en I2C. Bien que sa forte compacité et son
faible prix soient des atouts majeurs, il vient avec deux petits |
inconvénients:
• il utilise un connecteur Grove et non QWIIC, nécessitant
un cable d’interface.
• l’adresse I2C n’est pas régable, ce qui signifie que deux
codeurs ne peuvent pas opérer sur le même réseau.
L’utilisation d’un multiplexeur I2C est donc nécessaire.
Ce codeur nécessite un aimant polarisé radialement, fixé sur Figure 5: Codeur magnétique AS5600
l’axe moteur. La fixation peut se faire à l’aide du même moyeu
que pour la roue. Ces aimants sont très peu onéreux, quoi que
difficile à trouver par un revendeur européen. Je propose le site Néerlandais magnetenspecialist pour des
aimants de 6x2.5mm à environ 0.50€ l’aimant.
Alimentation
TODO: batterie NiMH ou LiPo ?
Capteurs
Enfin, il reste à choisir les capteurs spécifiques aux taches de chaque robot - les codeurs, commun aux deux
robots, ont déjà été évoqués.
5
pour expérimenter de l’estimation et du controle de lacet. L’IMU ne présente par ailleurs pas d’inconvénient
majeurs: elle présente un niveau de défauts et de bruit un peu supérieur à la gamme LSM6D d’ST, une autre
alternative, mais cette dernière n’a pas de gyroscope - et je ne pense pas que la différence soit très significative.
100Hz, ou encore lire les codeurs une itération sur deux en alternance.
6
Bilan
La Figure 8 résume le fonctionnement général et l’inter-connection des éléments du robot. Le tabeau en
Figure 7 quand à lui, résume les pièces à commander pour chaque robot, ainsi que le revendeur et le prix
associé. J’arrive actuellement autour de 380€ par projet - en ajoutant la quncailleries et les pièces d’interface
nécessaires à droite à gauche, l’ensemble devrait tenir dans l’enveloppe des 500€.
Voiture
Moteur pololu 37mm 4742 Pololu OpenCircuit 56158 32.45 2 64.9
Suiveur de ligne Sparkfun Mouser ??? 32 1 32
Breakout board qwiic Sparkfun Gotronic 36658 2.1 1 2.1
Total : 370.09
Pendule
Moteur pololu 37mm 4743 Pololu Lextronic POL4743 40.8 2 81.6
IMU ICM-20948 Sparkfun Gotronic 37279 22.7 1 22.7
Total : 375.39
7
Batterie
Moteur DC
NiMH or LiPo ?
Sparkfun Redboard
Arduino clone 3.3V/5V
I2C 3.3V (QWIIC)
ICM-20948
9DOF IMU
Line follower
- SEN-13582