Suite à un soucis technique un sujet qui traite du robot scribe de F4HDK a été perdu.
Heureusement nous pouvons retranscrire ici les données les plus intéressantes :
ROBOT SCRIBE V2 en date du 26 mai 2013
Ce que F4HDK avait écrit :
Mes tests précédents m’ont permis de voir que les servomoteurs de modélismes ne sont pas suffisamment précis, et comportent trop de jeu mécanique, pour pouvoir réaliser une opération aussi précise que l’écriture sur une aussi grande surface. L’électronique des servos standard ou remplacée ne change rien au problème. Comme je suis têtu, je n’ai pas voulu rester sur un échec. J’ai donc revu ma copie en remplaçant les servomoteurs par des moteurs pas à pas, beaucoup plus adaptés et très simples à mettre en oeuvre.
Video:
Photos:
Mécanique – Structure :
La mécanique initiale, entièrement réalisée à partir de pièces Lynxmotion, n’était pas suffisamment robuste, pas suffisamment rigide.
J’ai donc renforcé ça, en changeant toute la partie bras et épaule, qui est la plus critique, et qui doit donc être la plus rigide possible. L’ensemble est réalisé avec de la tôle aluminium de 3mm (c’est surdimensionné, mais j’avais ça en stock), et des entretoises découpées dans des profilé alu rond. Le tout est assemblé avec des tiges filetées et écrous M3 (parfois un peu juste, j’aurai du passer à du M4). Les articulations sont réalisées à partir de petits roulements à bille, les logements des roulements étant de simples trous de 8mm directement réalisés dans la tôle, comme pour les articulations Lynxmotion standard.
La partie avant-bras est moins critique, et on peut accepter plus de flexibilité. Il faut également privilégier la légèreté pour cette partie (qui contribue fortement à l’inertie). J’ai donc conservé des pièces Lynxmotion.
Mécanique – Moteurs :
L’emplacement des moteurs est volontairement fixe, y compris le moteur du coude, pour alléger au maximum les parties mobiles ; c’est nécessaire pour obtenir des mouvements rapides, avec des moteurs bas de gamme peu coupleux. Le moteur du coude est donc centré sur l’axe de l’épaule. La transmission se fait par courroie crantée. La longueur du bras est donc déterminée par les longueur de courroie standard disponibles. Il y a 1 seul étage de réduction pour chaque moteur, de rapport 4.4 (10 dents côté moteur et 44 dents côté articulation). C’est suffisant vu le faible couple demandé.
Les 2 articulations offrent un débattement important, sur plus de 270 deg. Cela permet d’inverser le coude, et donc d’utiliser 2 outils différents de part et d’autre du poignet : stylo ou gomme.
Le poignet est réalisé avec un servo standard. Cette articulation n’a pas besoin d’être précise, contrairement au coude et à l’épaule. Elle est quand même renforcée par un roulement à bille à l’arrière du servo, pour limiter le jeu mécanique important.
Electronique :
L’électronique est assez simple, et réduite au minimum:
* Une platine microcontrôleur Mbed (que je possédais déjà) à base de ARM Cortex M3.
* Deux contrôleurs de moteur pas à pas « easy driver » de Sparkfun à base de A3967.
* Un régulateur de tension 5V à découpage
* Un potentiomètre pour régler manuellement la vitesse d’exécution des mouvements (par logiciel).*
* 1 sortie servo pour le poignet.
* 2 entrées tout ou rien pour les switch de fin de course des 2 articulation (indispensable pour avoir une référence, un zéro, avec des moteurs pas à pas).
2 remarques sur l’électronique :
* j’ai été très impressionné par les progrès réalisés dans les contrôleurs de moteurs pas à pas. Ca faisait 15 ans que je ne m’étais pas intéressé à ce genre de sujet. Aujourd’hui, pour une somme dérisoire, on a un contrôleur de moteur pas à pas complet (A3967), pour moteurs bi-polaires, avec pont en H intégré, ne nécessitant pas de diodes de roues libre externe, optimisé en dissipation thermique, régulé en courant, et surtout gérant les micro-steps. C’est un progrès énorme qui facilite beaucoup l’utilisation de moteurs pas à pas.
* L’ensemble de l’électronique est alimentée en 24V, malgré les moteurs 12V. Cela permet de vaincre plus facilement le fort effet inductif des moteurs. A haute vitesse, la régulation en courant converge plus rapidement, et cela permet de conserver un couple important à haute vitesse. C’est une méthode assez courante pour l’alimentation des moteurs pas à pas.
Logique/programmation :
Autant le dire tout de suite, c’est un projet beaucoup plus simple que BOB3 et BOB4 en terme de programmation.
Comme à mon habitude, j'ai tout codé intégralement tout seul, sans reprendre de code ou de librairie extérieure. Même la "police de caractère" est inventée.
Au global, les mouvements sont réalisés à vitesse 2D constante. La vitesse est réglable directement par le potentiomètre.
En résumé, voici la liste des fonctions codées, en partant du bas niveau vers le haut niveau :
* Génération des tops de chacun des 2 moteurs par interruption, à une période donnée. En même temps, la fonction mets à jour la position angulaire des moteurs. La période est fonction de la vitesse angulaire visée. Fonction appelée jusqu’à ~1000 fois par seconde.
* Mise à jour de la période des 2 interruptions ci-dessus, en fonction de la position angulaire visée, de la position angulaire actuelle, pour chacune des 2 articulations, et de la vitesse d’exécution (réglable par le potentiomètre). En gros, on élabore une consigne de vitesse angulaire.
* Calcul trigonométrique de cinématique inverse pour établir la position angulaire visée des 2 articulations, en fonction de la position 2D (X, Y) visée. Fonction appelée jusqu’à 200 fois par seconde.
* Fonctions graphiques « line » ou « circle » : elles décomposent le trait ou arc de cercle à tracer en segments de ~1mm. Ces segments ne sont en théorie pas réalisés par de vrais segments, car parcourus à vitesse angulaire de moteur constante. Mais 1mm est suffisamment petit pour que l’approximation soit parfaitement acceptable.
* Fonction « printf ». A partir du code ASCII du caractère à écrire, de la « police de caractères » stockée en mémoire, de la taille et de la position 2D du caractère, élaboration des consignes de de segments/arc de cercle.
* En plus de tout ça, à l’initialisation, une fonction vient apprendre les butées de fin de course.
Il me reste encore des trucs à peaufinner, mais le résultat me convient déjà!
F4HDK