Introduction: Mini Traceur CNC Basé Sur Lecteurs DVD Et Arduino

Cet Instructable a été réalisé pour faire part d’un retour d’expérience sur la réalisation d’un mini traceur CNC à base de lecteurs DVD et d’un Arduino Uno. Il est fait état ici des problèmes rencontrés, des solutions apportées ou de l'impasse dans laquelle se trouve le projet.

Les objectifs initiaux du projet étaient les suivants :

  • Expérimenter les principes et les outils logiciels nécessaires à la réalisation d’un traceur CNC afin d’être capable de réaliser des CNC Laser ou CNC fraiseuse.
  • Maîtriser l’usage des moteurs pas à pas et comprendre le fonctionnement d’un interpréteur G-code

Dans cet Instructable on ne retrouvera pas le détail de la réalisation. En effet tous ces éléments sont déjà documentés dans plusieurs sites sur internet. Toutefois j’indique ci-après les liens des sites qui m’ont servi pour la réalisation de ce projet.

Dans le projet le choix s‘est porté sur l’utilisation de vieux lecteurs de DVD afin de récupérer les moteurs pas à pas et et les axes, et d’un Arduino Uno de façon à avoir un coût minimum.

Supplies

1 x Arduino UNO

1 x Carte AdaFruit Motor Shield V1

2 x lecteurs de DVD

1 x servomoteur

Step 1: Mécanique

L’idée de la partie mécanique du projet a été reprise du site suivant.

L'ensemble a été modélisé sous FreeCad. FreeCad est un logiciel de CAO 3D gratuit que j'utilise maintenant depuis quelques mois en association avec une imprimante 3D.

L'ensemble est classiquement conçu à partir de 2 plaques de MDF positionnées à angle droit l’une par rapport à l’autre, les différentes pièces de fixation ont été réalisées en impression 3D.

Les dimensions du tracé sont limitées à 37mm sur 37mm

Step 2: Interface Mécanique Avec Les Têtes Des Lecteurs DVD

Les lecteurs DVD récupérés n'étant pas tous identiques, l'interface entre la tête de lecture des lecteurs et d'une part la platine porte papier et d'autre part le porte crayon ont fait l'objet de la réalisation de platine interface spécifique de façon à créer une interface plane. Ces pièces interface ont été imprimés en 3D et coller sur les têtes de lecture.

Concernant le porte papier, une plaque avec 4 plots (pour rendre le support papier amovible) venant se positionner sur la platine interface, a été imprimé en 3D. Par contre la surface n'étant pas parfaitement plane, due aux stries liées à l'impression 3D, une plaque métallique découpée dans un boitier de lecteur DVD démonté a été collée sur la pièce imprimée amovible .

Concernant le porte crayon, une plaque avec des systèmes vis-écrous (pour rendre le support crayon amovible) a été imprimé en 3D.

Step 3: Support Crayon

Une des difficultés de la partie matérielle est liée à la bonne pression du crayon sur le papier. En effet une pression trop forte provoque des sauts de pas car génère des frottements trop forts et le moteur pas à pas a du mal à entraîner le chariot qui supporte le crayon, une pression trop faible provoque des zones où le crayon n’écrit pas car l'horizontalité su support n'est pas parfaite. Le réglage de la bonne pression du ressort est délicate.

D'autre part, lors des changements de direction du traceur, le crayon a tendance a ne pas suivre immédiatement du à un manque de rigidité de l'ensemble tête de lecture du lecteur DVD et du support crayon.

Le système de support crayon est à revoir pour rigidifier l'ensemble.

Step 4: Hardware Électronique

Le choix de l'Arduino Uno impose une interface entre l’Arduino et les moteurs

Il existe au minimum les solutions suivantes :

  • une Carte AdaFruit Motor Shield V1
  • une Carte AdaFruit Motor Shield V2 commandée en I2C
  • des composants L293D

Pour des raisons de simplicité et de coût la carte shield V1 (version la plus ancienne) a été retenue.

On peut trouver des infos sur cette carte ici et ici

Attention : risque de court circuit entre la carte Shield et le connecteur USB de l’Arduino UNO. J'ai du placer une cale plastique d'un mm d'épaisseur entre le connecteur USB et le Shield.

Les caractéristiques des moteurs pas à pas contenus dans les lecteurs DVD sont difficiles à trouver.

Après essais le nombre de pas par tour a été évalué à 20.

Les moteurs sont alimentés au travers de la carte Shield. Le courant demandé nécessite de passer par une alimentation extérieure de 6,6 volts. Pour cela le strap de la carte Shield situé près du connecteur d'alimentation doit être retiré.

Un soin particulier doit être pris pour souder les fils sur les moteurs pas à pas

Step 5: Chaîne Logicielle

L'ensemble des logiciels nécessaires ou utiles pour pouvoir dessiner avec le traceur sont :

  • Inkscape : permet de réaliser un dessin au format fichier SVG et de le transformer en G-code
  • Camotics : permet de représenter le dessin à partir du fichier G-code à l’écran afin de s’assurer que le transfert en Gcode a été réalisé correctement
  • Processing : transfère G-code vers Arduino (basé sur le sketch GCTRL) et par analyse des informations revenant de l’Arduino réalise un tracé du dessin sur le PC. Cela permet de s’assurer que l’interpréteur a bien interprété le fichier G-code.
  • Interpréteur Arduiino qui récupère les instructions G-code et pilote le Traceur (basé sur le sketch fourni par MarginallyClever)

Une autre option pour interpréter les G-code existe : GRBL (Programme C pour interpréter le G-code) qui n’a pas été retenu dans ce projet. Le but étant de comprendre le fonctionnement de l’interpréteur.

Step 6: Commandes Gcode Prise En Compte Par Le Système

G00 & G01: Contrôle des mouvements rectilignes

  • G00 : En théorie : Déplacement rapide, dans le système, mouvement identique à G01
  • G01 : Déplacement Linéaire

Usage

  • G00 Xnnn Ynnn Znnn
  • G01 Xnnn Ynnn Znnn

Paramètres

Tous les paramètres ne nécessitent pas d'être utilisés, mais au moins un doit être utilisé. Si d’autres paramètres sont utilisés ils seront ignorés.

  • Xnnn L'axe X bouge sur sa position pour atteindre la position finale
  • Ynnn L'axe Y bouge sur sa position pour atteindre la position finale
  • Znnn L'axe Z bouge sur sa position pour atteindre la position finale

Exemples

  • G00 X12 (Déplacer l'axe X de 12mm)
  • G01 X90.6 Y13.8 (Déplacer l'axes X de 90.6mm l'axe Y de 13.8mm)

G02 & G03: Contrôle des mouvements des arcs de Cercles

  • G02 : Déplacement en arc de cercle dans le sens des aiguilles d'une montre
  • G03 : Déplacement en arc de cercle dans le sens inverse des aiguilles d'une montre

Usage

  • G02 Xnnn Ynnn Innn Jnnn (Cercle dans le sens des aiguilles d'une montre)
  • G03 Xnnn Ynnn Innn Jnnn (Cercle dans le sens inverse des aiguilles d'une montre)

Paramètres

  • Xnnn L'axe X bouge sur sa position pour atteindre la position finale
  • Ynnn L'axe Y bouge sur sa position pour atteindre la position finale
  • Innn La coordonnée X du centre de l’arc de cercle
  • Jnnn La coordonnée Y du centre de l’arc de cercle

Exemples

  • G02 X90.6 Y13.8 I5 J10 (Déplacement dans le sens des aiguilles d'une montre à partir du point actuel vers le point (X=90.6, Y=13.8), avec un point central à (X=5, Y=10))
  • G03 X90.6 Y13.8 I5 J10 (Déplacement dans le sens inverse des aiguilles d'une montre à partir du point actuel vers le point (X=90.6,Y=13.8), avec un point central à (X=5, Y=10))

G04: Attente

Paramètre

Pnn Temps à attendre, en secondes

Exemple :

G04 P2 (Dans ce cas, rien ne se passe pendant 2 secondes)


Les 3 fonctions "G" qui suivent ont été implémentées dans le programme mais le fonctionnement n'a pas été vérifié.

G90: Position Absolue

Exemple:

G90 (Toutes les coordonnées exécutées à partir de maintenant sont calculées par rapport à l'origine de la machine)

G91: Position Relative

Exemple:

G91 (Toutes les coordonnées exécutées à partir de maintenant sont calculées par rapport à la dernière position)

G92: Permet la programmation du point zéro absolu, en réinitialisant la position actuelle aux valeurs spécifiées. (Aucun mouvement physique se produira)

Paramètres

Ces Commandes peuvent être utilisées sans paramètres additionnels.

  • Xnnn Définit la nouvelle position de l'axe X
  • Ynnn Définit la nouvelle position de l'axe Y
  • Znnn Définit la nouvelle position de l'axe Z

Exemple

G92 X10 (Permet la programmation du point zéro absolu, en réinitialisant la position actuelle aux valeurs spécifiées. Ici le X de la machine passe en coordonnée 10. Aucun mouvement physique se produira)

Un G92 sans coordonnées définira tous les axes à 0.

M18: Arrêt de tous les moteurs

Exemple:

M18 : Arrête tous les moteurs et permet de les tourner librement à la main

M100 : Envoi d’un message d’aide

M114: Envoi la position courante des axes au terminal série

Toutes les commandes doivent se terminer par un retour à la ligne pour pouvoir être interprétées.

Step 7: Mode Opératoire Inkscape

La version d'Inkscape utilisée est la 1.0.2-2

Je me suis inspiré des sites suivants pour comprendre comment transformer un dessin en G-code

Format de la surface de travail

S’assurer que le format (en mm ou cm) de votre page contenant vos chemins dessinés soit inférieur ou égal à la surface de travail de la machine CNC . Dans ce qui suit, on considérera que le format de la page Inkscape correspond au format de la surface d’impression.

Fichier –> Propriétés du document (voir photo)

Format du dessin

S’assurer que le dessin Inkscape, soit vectorisé ou en chemin

Ajuster l’épaisseur de contour des chemins de sorte qu’elle corresponde au rayon de l’outil de la machine CNC

Points d'orientation

Il s’agit de choisir les origines pour gérer les déplacements de l’outil selon le tracé du dessin.

Extensions –> GcodeTools –> Points d’orientation

Laisser tous les réglages par défaut et indiquer une valeur pour « Profondeur sur l’axe Z ».

Cliquer sur « Appliquer », en restant sur l’onglet « Orientation »

Un rectangle avec deux triplets de coordonnées en mm (x ; y ; z) en bas à gauche de la page apparaît.

Ne modifier pas et ne déplacer pas le premier triplet du coin inférieur gauche (0.0 ; 0.0 ; 0.0) car il indique l’origine la feuille pour l’usinage. En revanche, il est conseillé d’agrandir proportionnellement (touche Ctrl maintenue enfoncée) le rectangle (sans désolidariser ses composants) afin de placer la pointe de la flèche du second triplet sur le coin inférieur droit de votre page tout en veillant à ce que la flèche du premier triplet (0.0 ; 0.0 ; 0.0) pointe toujours exactement sur le coin inférieur gauche.

Réajuster les valeurs du second triplet à l’aide de l’outil d'édition de texte

Bibliothèque d'outils

Cette étape consiste à choisir l’outil que vous utiliserez pour l’usinage.

Extensions –> GcodeTools –> Bibliothèque d’outils

Cliquer sur « Appliquer », en restant sur l’onglet « Bibliothèque d’outils »

Un cadre apparaît alors sur la page. Parfois, il apparaît en dehors du cadre de le page, très au-dessus. Si nécessaire, repositionner-le correctement en le déplaçant à l'intérieur du cadre de la page à l'endroit qui vous convient. Vous pouvez aussi l’agrandir pour mieux lire les indications mais il faut qu’il reste positionné dans le cadre de la page. Ce cadre contient différents paramètres modifiables par l’outil d'édition de texte.

Génération du gcode

Extensions –> GcodeTools –> Chemin vers Gcode

Cliquer sur « Appliquer », en restant sur l'onglet « Chemin vers G-code ».

On obtient un tracé bleu et vert avec des flèches bleues représentant le parcours de l’outil.

Simultanément, le fichier d’instructions G-code au format .ngc est créé à l’emplacement indiqué ci-avant.

Problème rencontré mais non résolu :

Il semble que le tracé Gcode produit par Inkscape présente des anomalies au niveau des arcs lors de l'utilisation des fonctions G02 et G03.
En effet, la distance entre le centre de l’arc (défini par les coordonnées I et J d'une commande G02 ou G03) et le point de départ défini par les coordonnées de fin de l’instruction Gcode précédente (rayon d’entrée) doit être égale la distance entre le centre de l’arc et le point d’arrivée défini par les coordonnées de l’instruction G02 ou G03 (rayon de sortie). Or sur de nombreux exemples que j'ai pu réaliser montrent que ces rayons ne sont pas toujours égaux. Cela a pour conséquence des décrochages dans le tracé des arcs.

Vérification du G_code

Ensuite grâce au logiciel Camotics pour pouvez vérifier que le G-code produit correspond bien au dessin demandé.

Le G_code utilisé pouvant provenir d'autres sources que Inkscape il peut être utile de modifier le Gcode pour le mettre en conformité. En effet le nombre de commande reconnu par l’interpréteur « maison » étant limité , il est nécessaire de vérifier le contenu du fichier Gcode pour le rendre compatible aux commandes interprétables par le programme Arduino et de s'assurer que la valeur de l'axe Z est négative pour la partie dessinée et positive pour la partie déplacement de la tête. Pour ce faire le fichier G-code peut être lu et modifié avec n'importe quel éditeur de texte, personnellement j'utilise Bloc-Notes de Windows.

Step 8: ​Sketch Arduino « Mini Traceur CNC »

Le sketch a été inspiré du site: MarginallyClever

Par rapport aux sketchs cités ci-dessus, plusieurs ajouts ou modifications ont été apportés:

  • Gestion des moteurs
  • Gestion du servo
  • Modification de l'algorhitme du tracé des segments de droite
  • Modification de l'algorhitme du tracé des arcs
  • Retour d'information vers le sketch Processing pour le tracé des dessins sur l'écran du PC

La gestion des moteurs utilise la librairie « AFMotor.h » compatible avec la Carte AdaFruit Motor Shield V1

Les variables suivantes peuvent être modifiées :

  • La vitesse de déplacement de la tête :

"vitesseDeplacement" : fixé à 250 mais peut varier en fonction des moteurs

  • Les angles du servo en fonction du système utilisé pour monter et baisser le crayon

"penZUp" : fixé à 110 → Angle servomoteur, crayon relevé

"penZDown" : fixé à 150 → Angle servomoteur, crayon baissé

  • Le nombre de pas par millimètre en fonction du type de vis actionné ar les moteurs pas à pas :

"StepsPerMillimeterX" : fixé à 6 → Le moteur tourne de 6 pas pour faire avancer l’axe de 1mm

"StepsPerMillimeterY" : fixé à 6

  • La taille maximum du dessin en fonction des caractéristique mécanique du traceur :

"Xmax" : fixé à 37

"Ymax" : fixé à 37

  • La précision du tracé des arcs. En effet le tracé des arcs étant une succession de segment de droite, la longueur des segment détermine la précision du tracé

"mm_par_segment" --> détermine la longueur d'un segment

Valeur minimum --> 1 mm

si valeur inférieure à 1 le sketch décrit une ligne droite au lieu d'un arc entre le point de départ de l’arc et son point d’arrivée

La gestion des commandes G90 et G91 (position absolue et relative) est implémentée dans le sketch mais n’a pas été vérifiée.

La gestion de la vitesse d’avancement au travers des codes « F » dans les commandes G est implémentée mais n’a pas été testée. La commande de la vitesse d’avancement est fixe dans le sketch.

Les principales fonctions du sketch sont :

drawLine

Utilise l'algorithme de tracé de segment de Bresenham

De plus cette fonction transmet à Prcessing les coordonnées du segment .

arc

L’algorithme consiste à découper l’arc en une série de segments à tracer. L’algorithme est le suivant :

  • calcul du rayon de l’arc entre le point d’entrée de l’arc (donné par les coordonnées de la fonction gcode précédente) et les coordonnées du centre du cercle.
  • Calcul de l’angle de l’arc entre le point d’entrée de l’arc et le point de sortie
  • Calcul de la longueur de l’arc
  • En fonction de la longueur pré-déterminée d’un segment, calcul du nombre de segments.
  • Calcul de l’angle élémentaire correspondant à un segment en divisant l’angle de l’arc par le nombre de segment
  • Calcul des coordonnées de fin chaque segment élémentaire
  • Tracé du segment avec la fonction drawLine
  • après le dernier segment, tracé du segment permettant de relier le point d’arrivée

Cet algorithme suppose que le rayon entre le centre de l’arc et le point de départ soit le même que le rayon entre le centre de l’arc et le point d’arrivée. Si ce n’est pas le cas le dernier segment permettant de relier le point d’arrivée ne sera pas dans l’alignement de l’arc. Ce cas se présente lorsque l’on utilise la génération de G-code du logiciel Inkscape.

L’algorithme fonctionne correctement pour des angles compris entre 0 et PI. Pour des angles supérieurs à PI, l’algorithme dessine l’arc dans le sens contraire pour rejoindre le point final.

processCommand

A partir du contenu du buffer d’entrée préalablement lu à partir de la liaison série, et recherche les commandes Gcode (G ou M) et lance les fonctions concernées.

Step 9: Sketch Processing « CNC_2axes "

Coté PC, un programme est utilisé pour :

  • Lire le fichier Gcode et envoyer les lignes de commande une par une à l’arduino. Une fois la ligne reçue et exécutée par l’arduino, celui ci renvoie un « OK » à Processing qui peut alors envoyer la ligne suivante.
  • Dessiner sur l’écran du PC le dessin réalisé par le traceur. A chaque segment dessiné par le traceur, l’arduino envoie à Processing les coordonnées X et Y (début et fin) du segment dessiné. Processing le reproduit alors à l’écran

Ce programme fonctionne avec l'IDE "Processing" qui est une environnement de travail basé sur le langage Java. On peut trouver les bases de Processing ici.

On trouve sur Internet un sketch nommé "GCRTL" souvent utilisé pour des applications de traceur comme celle-ci. Le sketch présenté ici en est largement issu mais a été modifié pour d'une part retiré des fonctions qui n'était pas utilisé dans ce projet et pour ajouter la fonction de représentation du dessin à l'écran.

On peut trouver le fichier d'origine ici

Le sketch a été inspiré des sites suivants :

Step 10: Tracer Votre Premier Dessin Avec Le Traceur

Avant de faire votre premier tracé :

  • Assurez vous que les chariots sont à l’origine.
  • Vérifiez que rien n’entrave les mouvements des axes
  • Placez une feuille sur la zone de dessin

Si le sketch « Mini traceur CNC » n’est pas chargé dans l’Arduino, ouvrir l’IDE Arduino, charger le sketch .

Relier le PC et l’Arduino par un câble USB (liaison Processing et Arduino)

Lancer Processing3 IDE sur le PC avec le fichier « processing.exe » et charger le fichier « CNC_2axes.pde »,

→ Fichier → Ouvrir → CNC_2axes.pde

→ Cliquer sur l’icône « Exécuter »

Appuyez sur ‘p’. Sélectionnez le port série sur lequel est branché votre Arduino dans la boite de dialogue qui s’affiche.

Appuyez ensuite sur ‘g’ pour sélectionner le fichier gcode à tracer.

Le tracé démarre dès la sélection du fichier (vous pouvez l’interrompre en appuyant sur ‘x’).

C’est parti 🙂


Il est possible de débugger le tracé Gcode sans utiliser le traceur. Il suffit pour cela de brancher un arduino seul sur la liaison série, suivre les instructions précédentes et le chemin que doit parcourir la tête apparaîtra sur l’écran du PC.

Utilisation du traceur en manuel

Il est possible d’envoyer des commandes G-code ligne à ligne directement au traceur sans passer par Processing.

Pour cela, le sketch Processing doit être arrêté pour pouvoir donner la main au Terminal Série de l’IDE Arduino.

Avant d’entrer une commande :

  • Assurez vous que les chariots sont à l’origine.
  • Vérifiez que rien n’entrave les mouvements des axes
  • Placez une feuille sur la zone de dessin

Dans ce cas dans la ligne supérieure du moniteur série, entrer la fonction G-code de votre choix et taper sur "Entrée". Le traceur doit exécuter la commande.

Dans ce mode les commandes "C1" et "C-1" sont aussi disponibles pour activer ou non le crayon

  • C1 : Lever crayon
  • C-1 : Baisser crayon