Drawbot 🤖
Ce système positionne le crayon à l’aide d’un système de double triangulation : le robot connaît la distance séparant les moteurs, la longueurs des courroies ainsi que le déplacement de la courroie lorsqu'un tour de moteur est fait. En conséquence avec quelques équations mathématiques, hors de ma portée , le positionnement du stylo est calculable.
Pour réaliser ce joujou, j'ai imprimé de nombreuses pièces, utilisé des composants d'imprimante 3D comme des moteurs, carte électronique et installé le tout sur une grande planche en bois.
Support en bois
J'ai utilisé une planche d'aggloméré mesurant 47,5×68.5 cm comme base pour fixer tout les éléments du robot. La surface à dessiner est une feuille A4, 21×29.7cm.
Electronique
Ce robot dessinateur est un dérivé d'imprimante 3D, les différents composants utilisés sont les mêmes : carte de pilotage, moteurs, courroies, poulies… et même firmware !
Ramps
Pour commencer, la carte électronique de pilotage des moteurs est un clone chinois d'une Ramp 1.4 dont le design est libre et open source. Elle est fréquemment utilisée dans les imprimantes 3D DIY : basée sur un Arduino Mega 256 et surmontée d'un shield, elle est capable de piloter 5 moteurs pas à pas, un lit chauffant, 2 buses, des capteurs de fin de courses et pleins de GPIOs…
Drivers
Pour piloter ces moteurs, il faut des “drivers” installés sur le shield de l'Arduino. Ces composants transforment les ordres de commandes sortant de l'Arduino en signaux de puissance vers les moteurs. Il existe de nombreux modèles sur le marché, j'ai choisi des modèles basiques : DRV8825. Ils coûtent quelques euros pièces et gèrent les microsteps pour effectuer des rotations plus fines que le pas de base du moteur.
Ils s'insèrent dans les connecteurs femelles du shield, il y autant de driver que de moteurs à piloter, donc 2.
Capteurs de fin de course
Makelangelo, le programme que j'utilise pour faire dessiner le robot, préconise de mettre des capteurs de fin de course pour faciliter le positionnement de la position initiale du stylo. Je reviendrais plus tard sur la partie logicielle. Ceux ci sont utilisés pour déterminer la position la plus basse du stylo, c'est à dire, les valeurs maximales de X
et Y
. A noter la différence avec les imprimantes 3D où ce sont les valeurs minimums qui sont recherchées lors de la phase d'initialisation.
Le modèle de capteur que j'ai utilisé est largement utilisé dans les imprimantes 3D et est libre et open source. Une caractéristique intéressante de ce design est la présence d'une LED qui s'allume lorsque le contact est appuyé : c'est très pratique pour vérifier leur bon fonctionnement. Ils sont de type Normaly Closed, c'est à dire fermé lorsque l'interrupteur n'est pas
Les endstops sont montés sur les pins X-MAX
et Y-MAX
de la RAMPS, voir la doc pour plus de détails.
Pour vérifier leurs bonnes connections, il faut utiliser la commande M119
et appuyer dessus pour constater si les valeurs changent.
Alimentation
L'alimentation électrique de l'ensemble est réalisée avec un adaptateur secteur de 12V, 1A.
Lors de la connexion en USB, il faut d'abord connecter le câble USB puis l'adaptateur secteur. Dans le cas contraire, macOS ne reconnaît pas l'Arduino.
Transmission
2 moteurs pas à pas entrainent des courroies pour déplacer le crayon sur la feuille de dessin.
Les moteurs sont des modèles NEMA 17, avec un pas de 1.8° :
Ils entrainent des courroies crantées de type GT2 :
Des poulies à 20 dents sont montées sur les axes des moteurs pour déplacer sans glissement les courroies :
Pour fixer les 2 moteurs pas à pas, j'ai modifé 2 supports pour ajouter les butées de fin de courses puis je les ai imprimé en PLA. Ces pièces sont fixées dans les coins supérieurs droit et gauche de la planche en bois. J'ai remarqué que les moteurs chauffaient un peu lorsque le robot dessine mais la chaleur dégagée n'est pas très importante.
Le support de butée ne sont pas symétriques car le microrupteur n'est pas centré sur le PCB. Ainsi, le support de gauche est plus étroit que le droit :
J'ai dessiné une rainure afin que les soudures au dessous du PCB ne provoque pas d'inclinaison parasite de celui ci. Le support de droite est plus long afin de décaller le capteur de butée dans l'alignement de la roue du moteur.
Gondole
La pièce liant le stylo aux courroies s'appelle la gondole, je l'ai imprimée en 3D comme la plupart des pièces de ce robot. J'ai publié sur Printables les modèles que j'ai adapté : j'ai de plus utilisé des grosses piles LR20 comme contres poids.
Le stylo ou crayon est bloqué à l'aide d'une petite vis se trouvant en dessous du trou du stylo. Ce dernier est de taille importante pour accueillir n'importe quel type de crayon. Idéal pour différents types de dessins .
La dernière pièce électronique est un servo miniature qui permet de lever et baisser le crayon contre la feuille de papier à l'aide d'une petite pièce en plastique appelé doigt. Elle est composée d'un moteur qui asservit un position : un ordre électrique lui indique de quel angle il doit tourner et il appliquera un effort pour garder cette position si elle venait à bouger. Ce moteur ne tourne pas en continu contrairement à ce que nous avons l'habitude de voir. Cette pièce est extrêmement utilisée en modélisme pour piloter la direction d'une voiture ou un gouvernail de bateau.
A chaque changement de crayon, il faut réajuster l'enfoncement de la mine du stylo. En effet, si celle ci (le triangle vert sur la photo ci dessous) est trop avancée, le doigt du servo (en magenta ci dessous) ne sera pas suffisamment long pour la soulever de la feuille, si elle est trop reculée, elle ne touchera pas la surface à dessiner.
La vis de serrage du stylo est entourée en rouge sur la photo ci-dessus.
Contrepoids
Afin que les poulies ne patinent pas en entrainant les courroies, des contrepoids sont installés sur la gondole ainsi qu'au bout des courroies. Ceux-ci sont réalisés avec des piles LR20 (les très grosses piles rondes) installées dans des supports imprimés en 3D. Un disque rond est fixé à la base de la courroie afin d'appuyer sur la lame du capteur de fin de course lorsque le robot recherche sa position initiale.
Le support de pile du modèle initial de ce robot dessinateur ne prévoyait pas un pièce appuyant sur des butées de fin de course, je l'ai donc redessiné et ajouté à mes modifications sur Printables.
L'assemblage des pièces imprimées est le suivant : une vis M3 permet de fixer ensemble le support de pile, la bague de butée et la fixation de courroie. Pour le montage, il faut commencer par mettre la pile dans son support, puis passer la bague permettant de la bloquer et terminer par passer une vis M3 dans les trous de du support de pile, de la bague de butée ainsi que du crabe de fixation de courroie.
Pilotage de l'imprimante
Un logiciel sur un ordinateur est nécessaire pour transformer les svg ou images en ordre de déplacement pour le microcontrôleur.
Plusieurs solutions logicielles existent, j'ai testé dans un premier temps polargraphcontroller avec le firmware associé : l'interface est très riche mais fouillie et difficile à prendre en main. Les dessins sont longs à réaliser car l'ordinateur attend la fin de chaque mouvement de la tête pour transmettre le suivant ce qui produit des déplacements saccadés ainsi qu'un temps de dessin long.
Puis je me suis interressé à Makelangelo-software qui présente une interface plus simple et s'appuie sur le firmware Marlin utilisé dans les imprimantes 3D : les déplacements sont beaucoup plus fluides et rapides car les ordres sont notamment envoyés à l'avance ce qui permet au microcontrôleur d'optimiser les vitesses des moteurs, leurs accélérations etc… la littérature sur le sujet est très intérressante !
La compilation de Marlin est un peu plus compliquée que pour polargraphcontroller mais offre une configurabilité bien supérieure. L'auteur de Makelangelo-software décrit sur son site comment paramétrer Marlin pour un robot dessinateur. Plutôt que de paraphraser son article, je vais décrire mon paramétrage en fonction des dimensions de mon robot, toutes les sources sont disponibles sur mon gitlab. Pour commencer, le type de carte Reprap utilisé se déclare avec :
#define MOTHERBOARD BOARD_RAMPS_14_EFB
Les drivers utilisés pour les moteurs sont de type DRV8825, valoriser alors le bloc suivant :
#define X_DRIVER_TYPE DRV8825 #define Y_DRIVER_TYPE DRV8825 #define Z_DRIVER_TYPE DRV8825
Les endstops sont de type NC, le paramétrage est le suivant :
#define X_MAX_ENDSTOP_INVERTING true #define Y_MAX_ENDSTOP_INVERTING true
J'ai diminué la vitesse et l'accélération par défaut car les contrepoids ne sont pas suffisement lourds pour éviter que les courroies ne sautent lors des changements d'allures ou de directions :
#define DEFAULT_AXIS_STEPS_PER_UNIT { 160, 160, 160 } #define DEFAULT_MAX_FEEDRATE { 3000, 3000, 3000 } #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1000 } #define DEFAULT_ACCELERATION 300 #define DEFAULT_RETRACT_ACCELERATION 3000 #define DEFAULT_TRAVEL_ACCELERATION 300
La partie la plus compliquée est le paramétrage de la taille du “plateau” en définissant la largeur, hauteur du plateau ainsi que la longueur des courroies :
X_BED_SIZE
: distance entre les 2 axes des moteurs, en vert sur la photo ci contre ⇒ 355 mm;Y_BED_SIZE
: mesure entre l'axe du moteur et le haut de la gondole dans la position la plus basse, il faut prendre en compte la taille du contre poids de la gondole, en vert ⇒ 500 mm;POLARGRAPH_MAX_BELT_LEN
: longueur de la courroie entre la poulie et le crayon, en violet ⇒ 505 mm
J'ai essayé plusieurs dimensions avant de réussir à faire un trait droit et un rond rond, cette FAQ m'a permis de régler ma machine.
Voici les valeurs finales que j'ai :
#define POLARGRAPH_MAX_BELT_LEN 450 #define X_BED_SIZE 328 #define Y_BED_SIZE 500 #define Y_BED_OFFSET -15 #define X_MIN_POS ( - (X_BED_SIZE/2) ) #define Y_MIN_POS ( - (Y_BED_SIZE/2) + Y_BED_OFFSET ) #define X_MAX_POS ( X_BED_SIZE/2 ) #define Y_MAX_POS ( Y_BED_SIZE/2 + Y_BED_OFFSET ) #define MANUAL_X_HOME_POS 0 #define MANUAL_Y_HOME_POS (-169 + Y_BED_OFFSET)
la valeur de MANUAL_Y_HOME_POS
se calcule avec la formule suivante : $\mathit{Y\_MAX\_POS}-\sqrt{POLARGRAPH\_MAX\_BELT\_LEN^2-(\frac{X\_BED\_SIZE}{2})^2}$
Dans Makelangelo-software, il faut configurer la taille de la feuille de papier A4 avec une marge de 10% :
Maintenant que tout est configuré, les dessins peuvent commencer !
Charger dans Makelangelo un SVG pour le dessiner tel quel ou ouvrir une image pour appliquer dessus différents filtres et lancer l'impression.
Sites
Voici quelques sites pour générer ou transformer des images en SVG pour Makelangelo :