1. Introduction

Ma première idée était de faire un traceur, c’est un sytème permettant d’imprimer à l’aide d’un stylo fixé sur deux axes x et y. Mais le problème est que la construction est assez longue et compliquée j’ai donc trouvé un autre système nécessitant beaucoup moins de matériel et de constructions: Le polargraphe aussi appelé V-plotter. Il est composé de deux moteurs pas a pas, deux courroies et une base pour fixer un stylo. Il utilise la combinaison des moteurs et de la gravité pour déplacer le stylo sur la feuille.

2. Matériel et méthodes

- Une alimentation 12v 2 A
- 2 42BYG Stepper Motor nema 17 (et un servo-moteur que je n'ai finalement pas utilisé)
- 2 courroies
- Une planche mdf 90x90x1cm
- des plombs de pêcheur
- Un raspberry
- Un Adafruit DC & Stepper Motor HAT for Raspberry Pi - Mini Kit
Grâce a un ami qui a une imprimante 3d j’ai pu imprimer la reste de mes composant:
- Deux support pour fixer les moteurs
- 3 contrepoids
- Une base pour tenir le stylo

La base pour le stylo et les trois contrepoids sans la courroie

Le panneau et les deux moteurs

La construction finie

Les mesures

La surface d'impression optimale (trouvé sur un site)

J’ai commence par m’intéresser à comment faire tourner les « stepper motors ». Ma première tentative était d’utiliser des chip pololu A4988 Stepper Motor Driver Carrier mais je n’ai même pas réussis à faire passer du courant dans le moteur. La seconde tentative étais d’acheter les hat adafruit pour moteur pas pas. Le problème est que les moteurs que j’avais achetés étaient de mauvaise qualité et qu’ils n’étaient pas compatible avec le hat adafruit car ils avaient un voltage et un ampérage trop faible pour un nema17(norme pour définir la taille du moteur). Je me suis donc retrouvé avec 2 cartes adafruit brulées. A ce moment j’étais bloqué et j’ai décidé de m’attaquer à la construction de la structure.

Vu que j’étais bloqué pour faire tourner les moteurs correctement je suis allé demander conseil au magasin zigobot. Il m’a d’abord dit que l’alimentation étais fausse, j’ai donc racheté un alimentation mais cela n’as rien changé. Je suis retourné et c’est la qu’il a réalisé que les moteurs était de mauvaise qualité. J’ai donc racheté des moteurs de bonne qualité. A partir de la les choses ont été plus simples, les moteurs tournaient correctement sans bruler de cartes. C’est la que j’ai commencé les tests. Mon premier code me permettais de faire tourner un moteur a la fois je pouvais donc dessiner des traits uniquement en faisant des petits zig-zag. j’ai ensuite découvert la fonction thread avec laquelle je peux faire tourner les moteurs en même temps.

chaque moteur doit recevoir 4 données:
-le nombres de pas par revolution
-le nombre de pas a faire
-la vitesse
-la direction

J’ai attaque la chose comme ceci: j’ai dessiné un système d’axe sur le panneau. Le stylo partira donc toujours du centre (homing). mon but est de pouvoir lui donner un point sous la forme x;y pour qu’il y aille en partant du centre. pour cela j’ai du calculer de combien chaque moteur dois tirer ou lâcher la courroie. La courroie est enfant l’hypoténuse de la longueur x et y, le premier calcul définit la longueur que la courroie doit atteindre. Mais ce que je veux obtenir c’est de combien je dois diminuer ou augmenter la courroie à partir de sa longueur originale, je calcule alors la valeur absolue de la soustraction entre la longueur a atteindre et la longueur originale. (le moteur n’accepte pas de valeurs négatives, il faut lui dire de tourner dans l’autre sens. Ensuite j’ai calculé de combien un tour complet de moteur déplace la courroie, afin de convertir un nombre de pas en centimètres. Le nombre de pas que fait un moteur pour un tour complet est modifiable et je l'ai fixé a 200.

Calcul de la longueur des courroies pour un point (x;y) donné:
(a-x)²+(b-y)²= longueur de la courroie coté droit
(a+x)²+(b-y)²= longueur de la courroie coté gauche
Dans le code:
h1 = sqrt((480+x)**2+(410-y)**2)
h2 = sqrt((480-x)**2+(410-y)**2)



Ici je détermine la distance que la courroie doit parcourir et la transforme de centimètres en pas(steps).
steps = int(abs(630-h1)/40*200)
steps2 = int(abs(630-h2)/40*200)

Le gros problème de mon travail est le suivant: Lorsque les moteurs ont le même nombre de tour a faire tout va bien, mais lorsque l’un doit tourner de 20 degrés et l’autre de 10 ils ne vont pas s’arrêter en même temps. Le stylo atteindra la bonne position dans tout les cas mais le tracé entre le point de départ et d’arrivée ne sera pas droit, il faut donc accélérer le premier moteur. A première vue le problème partait simple, on pense qu’il suffit de faire tourner le premier moteur deux fois plus vite que l’autre. Mais ce rapport ne fonctionne pas et pour s’approcher d’un trait droit il faut qu’il tourne jusqu’a 6 fois plus vite. Malgré tout mes essais je n’ai pas réussi à trouver une formule qui fonctionne dans chaque cas. Mais la formule qui s’approche le plus de l’idéal est la suivante.

Vitesse Moteur A = (déplacement de la courroie A divisé par déplacement de la courroie B) fois 10
Vitesse Moteur B = (déplacement de la courroie B divisé par déplacement de la courroie A) fois 10

Pour déterminer la direction dans la quelle les moteurs doivent tourner en fonction de ou se situe le point d'arrivée il suffit de déterminer quel angle la courroie B fait par rapport a l'axe x lorsqu'elle est au homing: toute droite a dessiner ayant moin d'angle aura besoin que le moteur A relâche de la courroie. Dans la situation inverse ou l'on veut dessiner un trait avec plus grand angle il faudra que le moteur A tire la courroie.

Finalement je dois préciser que mon code s'exécute en tapant la commande "python thirdtest.py" et qu'il me permet uniquement de dessiner dans le premier cadran du graphe. Ce n'est pas faute de n'être pas capable mais lorsque j'ai réalisé que dessiner un droite réellement droite étais plus compliqué que ce que je pensais, j'ai décider de me focaliser sur ça et je pouvais très bien le faire avec un cadran. Il est aussi possible de recouvrir tout la surface en travaillant que dans le cadran 1: il suffit juste de déplacer le homing tout en bas a gauche de la surface et changer les longueur a et b.

Voici ce que j'ai écrit dans le code pour cela(B= backwards F=forwards): if x < y :

       dir = B
dir2 = F

if x > y :

       dir = F
dir2 = F

if x == y :

       dir = F
dir2 = F

3. Résultats

4. Discussion

La première photo de résultat illustre le passage de l'utilisation d'un moteur a la fois a l'utilisation des deux moteurs en même temps grâce au threads. Les zigzags représentent quand les moteurs tournaient chacun leur tour. Dans les deux autres résultats obtenus nous pouvons voir que le stylo arrive toujours a l'endroit donné. L'axe y a une légère erreur d'échelle sûrement due au fait que plus le stylo monte plus les courroies sont tendues et donc moins les traits son précis. Ensuite il y'a le trait entre le point de départ et d'arrivée qui parfois est juste et d'autre fois non. Le trait sur l'axe y est précis car les deux moteurs tournent le même nombre de pas à la même vitesse. Mais les autres traits illustrent le problème de vitesse que j'exposais avant. L'angle formé est du au fait qu'un moteur à arrêté de tourner car il a atteint sa position finale avant l'autre le petit trait est donc un arc de cercle ayant comme rayon la distance au moteur arrêté. Mais avant que le trait fasse un angle il dessine un courbe qui progressivement s'éloigne du tracé qu'elle doit faire(trait au crayon gris) et ceci m'as fait beaucoup réfléchir: Je n'arrive pas a expliquer ce comportement mais je peux en conclure que la vitesse ne doit pas être linéaire afin corriger cette courbe. Il faut donc que la vitesse augmente au fur a mesure du trait car jusqu'a presque la moitié du trait elle est juste.

5. Conclusion

J'ai choisit ce projet car il m'intéressais beaucoup, et je ne me suis pas trop soucié du travail qu'il demandait. Le travail était donc un peu trop complexe mais je me suis pas découragé par ce que j'avais vraiment envie de finir ce projet. Malheureusement je n'ai pas réussis a accomplir totalement mon but mais je pense que j'ai beaucoup appris et que maintenant, avec un peu plus de temps à disposition, je serai capable de continuer a améliorer ce projet. De plus je sais que ce projet a aussi été fait par d'autre personnes et je pourrai donc reprendre leur code et l'adapter a mon installation. Malgré le problème des moteurs qui m'as mit beaucoup de temps a régler tout le reste s'est bien passé car j'ai mieux pu évaluer le temps nécessaire que pour le premier projet. J'ai particulièrement apprécié le coté méchanique et le fait que je voyais vraiment le résultat de ce que je faisait sur le raspberry sur un papier