Drawbot 🤖

12/2021 J'ai fabriqué un robot qui dessine sur une feuille de papier à l'aide d'un crayon comme nous le faisons à la main : il est déplacé via de 2 courroies entraînées par 2 moteurs pas à pas. Un mini servo permet de lever le crayon lorsqu'il faut passer d'une ligne à une autre.


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 :S, 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.

Drawbot

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.

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 !

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…

Arduino Mega 256
Ramp 1.4

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.

Driver DRV8825

Ils s'insèrent dans les connecteurs femelles du shield, il y autant de driver que de moteurs à piloter, donc 2.

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

Capteur de fin de course

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.

L'alimentation électrique de l'ensemble est réalisée avec un adaptateur secteur de 12V, 1A.

Alimentation 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.

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° :

Moteur pas à pas Nema 17

Ils entrainent des courroies crantées de type GT2 :

Courroie GT2

Des poulies à 20 dents sont montées sur les axes des moteurs pour déplacer sans glissement les courroies :

Poulie crantée

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.

Support de moteur Nema 17

Le support de butée ne sont pas symétriques car le micro-rupteur n'est pas centré sur le PCB. Ainsi, le support de gauche est plus étroit que le droit :

Support de moteur Nema 17 gauche

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.

Support de moteur Nema 17 droit
Support de moteur Nema 17 droit

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.

Vue de dessus de la gondole
Vue de profil de la gondole

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 8-).

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.

Mini servo

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.

profil de la gondole

La vis de serrage du stylo est entourée en rouge sur la photo ci-dessus.

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.

modélisation des pièces en 3D
pièces du contrepoids
Contre poids de courroies

Un logiciel sur un ordinateur est nécessaire pour transformer les svg ou images en ordre de déplacement pour le micro-contrô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 micro controleur d'optimiser les vitesses des moteurs, leurs accélérations etc… la littérature sur le sujet est très intérressante !

Makelangelo-software

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.

Dimensions

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% :

Makelangelo-software A4

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.

Boxxy
Random

Voici quelques sites pour générer ou transformer des images en SVG pour Makelangelo :

  • realisations/drawbot.txt
  • Dernière modification: 2023/12/02 23:34
  • par admin