Piloter une CNC avec Arduino et GRBL

Dans ce tutoriel, je vais vous expliquer comment piloter très simplement une CNC avec Arduino et GRBL. 

Nous verrons comment :

  • Installer GRBL
  • Installer Universal GCodeSender
  • Piloter des moteurs pas à pas
  • L’utilité d’un shield CNC

INSTALLATION DE GRBL
Le pilotage d’une CNC se fait à l’aide de séquences d’instructions en Gcode. GRBL est un outil pratique qui permet d’interpréter le Gcode et de piloter très simplement une CNC avec Arduino.
Pour commencer, assurez-vous d’avoir bien installé la dernière version de l’IDE Arduino (pour nous la version 1.6.9)
Téléchargez la dernière version .zip de GRBL sur github (pour nous la version 0.9)

GRBL1

Décompressez le dossier grbl-master.
Nous allons maintenant inclure GRBL aux bibliothèques Arduino. Pour cela, deux méthodes sont possibles :

  • Via le logiciel Arduino, cliquez sur Croquis puis Inclure une bibliothèque et Ajouter la bibliothèque .ZIP. Sélectionnez le dossier grbl situé dans le dossier grbl-master.

GRBL2

  • Autre méthode : Naviguez jusqu’à l’endroit où vous avez installé le logiciel Arduino (généralement dans C:\Program Files). Cliquez sur Arduino puis librairies et collez ici le dossier grbl situé dans le dossier grbl-master. Redémarrez ensuite l’IDE Arduino.

Pour implémenter GRBL sur l’Arduino, rien de plus simple ! Il suffit d’aller dans Fichier > Exemples > grbl > grbl-upload 

GRBL3

Téléversez ce script dans l’Arduino et voilà !
On peut configurer GRBL afin qu’il s’adapte aux réglages de notre CNC grâce au moniteur série. Pour cela, ouvrez le moniteur série (Outils > Moniteur série).
Réglez la vitesse à 115200 baud et sélectionnez nouvelle ligne. En tapant $$ vous verrez apparaître la configuration de GRBL.

 

Pour changer un réglage, tapez $ suivi du numéro du réglage et = la valeur. Par exemple, pour activer les soft limits : $20=1

Je vous renvoie vers ce site pour une explication détaillée des réglages possibles. Pour commencer, les modifications principales à effectuer sont :

  • $100, $101, $102 : le nombre de pas par mm pour chaque axe. Ceci dépend du type de châssis que vous avez choisi pour la CNC (courroie, vis…). Je vous renvoie ici pour un calculateur en ligne bien pratique !
  • $110, $111, $112 et $120, $121, $122 : définissent respectivement la vitesse en mm/min et l’accélération en mm/sec²

ENVOYER DU GCODE AVEC UNIVERSAL GCODE SENDER
Il existe de nombreux logiciels permettant d’envoyer du G code comme Universal GCode Sender, bCNC, Chilipeppr etc. Universal GCode Sender est l’un des plus faciles à manipuler, c’est donc celui-ci que j’ai choisi pour ce tutoriel.
Pour le télécharger, rendez-vous ici.
Décompressez le dossier et exécutez le fichier .jar pour lancer le programme (attention, il faut avoir installé Java sur votre ordinateur pour pouvoir exécuter un fichier .jar !)

GRBL5
Sélectionnez le port COM sur lequel est branché votre Arduino (pour moi COM21) et cliquez sur Open pour ouvrir la connexion.
Trois onglets sont à votre disposition :

  • Commands afin d’envoyer directement du G Code à la machine ou pour configurer GRBL comme avec le moniteur série (avec $$).
  • File Mode pour envoyer un fichier G Code à la CNC.
  • Machine Control pour piloter manuellement votre CNC.

Voyons voir de plus près le dernier onglet :

GRBL6

En cliquant sur les touches, vous pouvez faire tourner votre moteur pas à pas, en indiquant avec step size la distance parcourue pour un pas. C’est la manière la plus simple de vérifier que vos moteurs fonctionnent correctement avant de les fixer définitivement dans la CNC et de voir si vous avez bien configuré GRBL.

Une fois que tout fonctionne bien avec le pilotage manuel, vous pouvez aller dans File Mode et envoyer directement votre fichier G code.

Différents logiciels existent pour générer un fichier en G code à partir d’un dessin 2D ou 3D parmi lesquels Inkscape (2D) et Blender (3D).

 

PILOTER DES MOTEURS PAS A PAS

Avant de monter la CNC, il est important de faire un test avec chaque moteur.

Pour le montage, on aura besoin de :

  • Une carte Arduino
  • Un moteur pas à pas : pour nous un NEMA 17
  • Un contrôleur moteur adapté au moteur : le nôtre est le DRV8825 mais on peut également choisir un autre modèle (comme l’EasyDriver ou l’A4988)

Voici la configuration de l’Arduino pour GRBL :

GRBL9

 

Pour l’instant, nous n’avons besoin que des pins relatifs au step et à la direction pour chaque moteur. Par exemple pour l’axe X, on n’utilisera que les pins 2 et 5.

 

schema montage

Connectez le moteur à votre contrôleur moteur (en vous référant à la notice du contrôleur choisi pour connaître la configuration des pins). Vous pouvez-vous appuyer sur le schéma ci-dessus pour le DRV8825.

Connectez également les pins 2 et 5 à step et dir sur le contrôleur moteur.

Une fois que tout est connecté et alimenté, lancez Universal Gcode Sender et vous pouvez commencer à piloter votre moteur !

 

L’UTILITE D’UN SHIELD CNC 

Une autre méthode pour simplifier le câblage est d’utiliser un shield CNC Protoneer très pratique car il se fixe directement sur l’Arduino.

GRBL 8

(source)

Le shield CNC s’imbrique directement sur l’Arduino Uno. Il y a un emplacement prévu pour 4 contrôleurs moteurs du même type que le DRV8825.

Il suffit donc de clipser le contrôleur moteur et de connecter le moteur grâce aux pins situés à côté du contrôleur. Une fois le shield alimenté et l’Arduino connectée à l’ordinateur, le moteur peut tourner !

L’interface du shield permet également de gérer très simplement les capteurs de fin de course, les différents moteurs ainsi que les réglages comme le microstepping en ayant un minimum de fils ! Vous pouvez trouver plus de détails ici.

43 réflexions au sujet de « Piloter une CNC avec Arduino et GRBL »

    • Bonjour super tuto.
      Je debute dans l’arduino mais j’ai quand meme des connaissance dans l’electronique
      Mais j’ai un souci :
      pour l’insertion du programme dans l’arduino pas de souci ça fonctionnne
      Le probleme est que j’ai fait le branchement avec le A4988 mais rien ne ce passe le moteur ne bouge pas (normalement on doit l’entendre vibre et on ne peut pas le faire bouge a la main quand il est en fonction).
      J’est 4 A4988 que j’ai commander avec le cnc shield v3, et moteur nema 17
      J’ai essayer avec le schema en branchent l’arduino et le A4988 mais rien de bouge.
      Par contre avec le easy driver v4 ça focntionne .
      on peut faire bouger avec les fleches.
      c’est bizzare non?
      c’est pour mon projet pour commander un moteur pas a pas et pouvoir le faire bouger avec un joystick de type keyes sjoys ou joystick shield et cela en autonome sans passer par lordi bien sur.
      Si quelqu’un a une ide ou schema et code arduino.
      Merci pour ce précieux aide

  1. Bonjour,
    Excellent tuto. J’ai testé GRBL avec moteurs pas à pas et c’est super, et simple à paramétrer. J’ai un robot cartésien avec trois moteur à courant continu et retour codeur. Existe t’il un « GRBL » pouvant sortir du 0/10 Volts sur chaque axe et gérer le positionnement par retour codeur?
    Merci.

    • Bonjour,

      Le 0-10V dépend de votre tension d’alimentation du shield GRBL. Pour la partie codeur, il va falloir la coder dans le script GRBL de l’Arduino.

      Fabien

  2. Merci pour ce tutoriel. Je vais enfin réaliser mon petit projet. La programmation est elle compliqué avec arduino car je suis novice dans ce domaine. Est ce que Gcodesender gérer des fichiers steps de logiciel 3D ?

  3. Bonjour,
    Très intéressé par votre tuto pour piloter une CNC avec Arduino, j’ai suivi pas à pas la suite des opérations, tout s’est bien passé mais je coince avec l’installation de Universal GCode Sender. J’ai bien téléchargé le fichier .zip et dézipé normalement mais je ne trouve pas le fichier .jar , il y a bien quelques fichiers *.jar dans les dossiers mais j’ai beau cliquer dessus rien ne se passe. J’ai réinstallé la dernière version de Java pour Windows10 64 bits ,mais toujours impossible de visualiser la fenêtre Universal GcodeSender.
    Pouvez-vous m’aider …

  4. Problème résolu pour Universal GCode Sender
    Concerne mon dernier post du 14/06 , erreur de débutant , pour l’installation de UGS sur la page de Github.com j’ai cliqué sur le bouton Download en haut à droite de la page or il fallait descendre jusqu’à Stable builds et clic sur la version 1.09.
    Après unzip j’ai un fichier start-windows.bat qui me lance UGS.
    Reste plus qu’à tester l’ensemble avec Arduino et son CNC Shield.

    • Salut michael,
      J’ai eu le même problème que toi, pour le résoudre remplace ton Arduino méga 2560 par une simple carte Arduino uno, et là tout fonctionne avec Grbl v09. Je n’ai pas d’explication mais dans mon cas ça marche. J’ai installé sur ma carte Arduino le shield Protoneer pour faciliter les connexions moteurs et je pilote le tout avec Universal G Code Sender, ça marche super bien.
      Charlie

  5. bonjour,
    Super tuto ,je viens de terminer la fabrication d’une « mini CNC » avec 2 lecteurs DVD .
    Le pilotage sous Universal GCode Sender 1.0.9 fonctionne bien manuellement avec une arduino uno .
    Par contre, comment configurer le logiciel en fonction de ces moteurs ? je n’ai pas de données techniques (steps,tension,…)
    ça à l’ air tellement simple sur les videos ,mais personne n’ en parle en français de plus .
    merci pour votre aide

  6. salut
    j’ai comme projet fin d’étude la création d’une machine cnc avec arduino uno et grbl et c’est la premiére fois.j’ai pas compris d’est ce que je doit faire pour la programmation de l’arduino et sa relation avec le G-code!!svp vous pouvez m’aider!!!!

  7. Bonjour,
    je suis à la recherche du schéma de câblage entre carte SNS SHIELD et contrôleur moteur TB6600 si quelqu’un pouvait me donner un coup de main cela super sympa
    merci et bonne journée

    • Bonsoir,

      Quelle information est contenue dans le fichier Excel et comment est elle stockée ?

      En général on part d’un modèle 3D que l’on exporte au format stl (découpé en triangle) puis on transmet ce fichier stl à un logiciel qui découpera le modèle 3D en tranches et le convertira en code machine : gcode.

      Le code g-code sera finalement interprété par l’intermédiaire de grbl

  8. Bonjour, je n’y connais pas grand chose aux arduino, cet article est très clair et bien fait. Pouvez-vous m’expliquer ce que sont les ports COM, notemmant quand vous dites « le port COM sur lequel votre arduino est branché », y-a-til une connexion autre que le port USB, le port COM est-il physique ou virtuel. ?

    Merci

    • Bonjour, les ports COM correspondent aux différents ports usb sur votre pc. Il faut trouver celui sur lequel vous avez branché votre arduino. Pour cela, le moyen le plus simple est d’utiliser la fonction blink dans les exemples et d’essayer de l’uploader sur l’arduino. Vous testez tous les ports et quand ça marche vous saurez quel port est le bon.

  9. Bonjour, excellent tout ça ! J’avoue que depuis deux jours je traîne sur tout ce qui touche au CNC et Ardurino, Je n’ai aucune connaissance en électronique et j’ai toujours eu peur des calcules complexes. Avec ce descriptif je suis donc tout à fait dans mon élément…
    Je vais surement faire le test avec le descriptif très bien détaillé comme il est dit partout. Je prendrais exactement les même pièces ou ne le ferait pas.
    Mais mon ambition est déjà débordante et je vise la réalisation d’un modèle assez puissant pouvant supporter de la résistance (modèle pour découper du bois en faible épaisseur, 5mm environ)…
    Si quelqu’un a déjà optimisé ce montage dans ce sens ça serait sympa de m’éviter de faire des erreurs décourageantes. Mais j’en suis pas encore là il faut bien le dire. D’abord le modèle comme décrit dans l’article et la joie d’avoir construit mon premier robot !

    Un grand merci à Riassa pour avoir partagé sa passion avec réussite.

    Marc

    • Bonjour, est ce que vous êtes à l’aise en anglais ? Parce que j’ai en tête un vidéo qui peut vous interesser. Elle n’est pas commentée mais son auteur est un étudiant (très sympathique au passage) qui a rédigé un rapport très complet en Anglais et qui le partage volontier si vous accepter de partager sa vidéo sur les réseau sociaux ou d’en parler à des proches. Si vous voulez y jeter un oeil, voilà le lien : https://www.youtube.com/watch?v=FWM-Di2xk2M
      Lisez la description

    • bonjour
      j’ai une machine cnc avec 3 moteur pas a pas è iser driver j’ai dèja travaillè avec le mème principe que vous ,le problème j’ai besion d’une bèbliothèque G-code

  10. Bonjour,
    Je remarque qu’il y a plusieurs type de moteur NEMA 17 avec des voltages différents. Celui provosé ici est de 2.8V pourtant le courant fournis est du 12V. La regulation driver stepper se fait au niveau tension(amp) et non courant(volt). Je ne comprends pas comment adjuster ou pourquoi cela ne semble pas important. Je comprends qu’un moteur de 12V@0.4Amp est equivalent a in moteur 2.4V@2Amp (4.8W). Mais si on lui injecte du 12V limité a 2amp, cela fait 24W. Quelqu’un peut m’expliquer?

    • Bonjour Julien,
      Pour répondre a ton interrogation, c’est assez simple. Ton moteur 2.4v@2Amp(4.8w) ne doit jamais en moyenne dépasser ce seuil.
      Alors??? pourquoi lui imposer un voltage plus élevé?
      C’est que ce moteur a une inductance X, ce qui veux dire que ce même moteur étant alimenter en courant alternatif et que pour accélérer sa vitesse, la fréquence du courant alternatif doit augmenté dans la même proportion. C’est la que l’inductance X joue un rôle, en diminuant le courant inversement proportionne a la fréquence. C’est a ce moment, pour retrouver la dissipation maximum tolérer par le moteur le driver joue un rôle en régularisant le courant par l’augmentation du voltage,
      Voila a quoi sert une partie d’un driver de moteur pas a pas. L’ajustement qui est incorporer au driver, sert a ajuster le courant aux spécifications du moteur. C’est pour cette raison qu’un moteur, s’il tourne a sa vitesse maximum, a ce moment, le voltage peut triplé pour qu’il puisse avoir son torque initiale ou son courant maximum , mais sans jamais le dépasser .

  11. Bonjour, tuto excellent pour y retrouver ses petits. Après des jours à chercher enfin des information complètes et claires. Ca relance l’envie !
    Je vois qu’il y a pas mal de personnes qui comme moi ont envie de se lancer dans la construction d’une CNC sans connaissances en électronique. C’est pourquoi je poste ici.
    Je ne sais pas si mon idée est bonne, mais je dispose de place à Paris et j’ai toujours aimé les projets collaboratifs. Vous me voyez venir ? hé oui, même si je vais me lancer de toute façon, je pense qu’à deux ou plusieurs c’est toujours mieux lorsque l’on se trouve face à une situation momentanée d’échec non résolu. (ça peut arriver et ça arrivera)…
    Donc, ma proposition est de construire une CNC « géante » entre novices et soutenu par des expérimentateur confirmés et d’autres blogues à recettes fantastiques. Mais j’avoue c’est ici seulement que je me suis réellement décidé à lancé le projet !
    Je réponds à tous les mails et souhaite démarrer le projet cet été.

    Merci encore pour ce fabuleux tuto qui en aura décidé plus d’un !

    Silver

  12. Bonjour,
    Je suis nouveau – Je trouve que le tuto est très bien fait félicitation- Je dispose donc d’une carte ARDUINO UNO avec une cnc shield et j’ai pu telechagrer le grbl et l’UniversalGcodeSender- j’utilise Windows 10.

    Le Problème c’est qu’au moment de l’exécution de l’UniversalGcodeSender rien ne se passe simplement il m’affiche les sous dossiers de l’UniversalGcodeSender.
    je ne sais pas si c’est un problème de compatibilité ou autre chose- le JAVA est biensure installé.
    Remarque
    sur un autre PC windows 7, ca marche . .
    Merci d’avance

  13. Bonjour je ne suis pas capable de voir le universal-G-Code sender.
    J’ai un Mac et lorsque je télécharge le document ZIP il est automatiquement décompresser. j’ai trouver un fichier .jar mais lorsque je l’ouvre il apparait
    Last login: Sun Nov 26 16:17:56 on ttys000
    iMac-de-Benoit:~ benoitlaroche2$ /Users/benoitlaroche2/Downloads/Universal-G-Code-Sender-master/new-module-archetype/README ; exit;
    /Users/benoitlaroche2/Downloads/Universal-G-Code-Sender-master/new-module-archetype/README: line 1: mvn: command not found
    From: can’t read /var/mail/this
    /Users/benoitlaroche2/Downloads/Universal-G-Code-Sender-master/new-module-archetype/README: line 3: ugs-platform: command not found
    /Users/benoitlaroche2/Downloads/Universal-G-Code-Sender-master/new-module-archetype/README: line 3: To: command not found
    /Users/benoitlaroche2/Downloads/Universal-G-Code-Sender-master/new-module-archetype/README: line 10: syntax error near unexpected token `newline’
    /Users/benoitlaroche2/Downloads/Universal-G-Code-Sender-master/new-module-archetype/README: line 10: ` -DartifactId=’
    logout
    Saving session…
    …copying shared history…
    …saving history…truncating history files…
    …completed.

    [Opération terminée]
    et je ne peux voir ce que vous avez à l’écran.
    J’ai essayer aussi d’ouvrir terminal et écrire les lignes
    sudo mkdir /var/lock
    sudo chmod 777 /var/lock
    Mais tout de suite après avoir écrit la première ligne il me demande une clé?
    Pouvez -vous me guider ou je peux avoir de l’info

    Merci
    Benoit

  14. bonjour, est il possible d envoyer une serie de commande en automatique, sans ordinateur

    style
    faire un referencement de l axe x
    puis envoyer 50mm
    puis revenir en position origine

    le tout avec une gestion de l accelleration de l axe

    ce n’est pas pour piloter une cnc, mais une machine autonome
    merci

    • pour cella, vous n’avez pas besoin de grgl ni de Universal G Code Sender. un simple programme dans l’Arduino suffira.
      genre:
      si « action »
      fermer axe x
      accélération jusqu’à Vmax
      Vmax jusqu’à 50mm-Vmax
      décélération (Vmax=distance restante) jusqu’à Vmin
      arrêt quand distance=50mm

      même chose pour le retour avec Vinverse.

      puis retour au début pour recommencer…

      j’ai fait ça pour une porte coulissante avec en plus la gestion obstacle dans le passage.

  15. Bonjour, et merci pour votre tuto, il est limpide.
    Je cherche une info que je ne trouve nulle part.
    J’aimerai construire un robot traceur qui peut écrire sur un tableau un texte qu’on tape sur une appli Android (ou autre) via une connexion Bluetooth. (Hc06)

    Ma question concerne le G-code. je voudrais savoir si le g-code peut être interprété directement par arduino ? Sans passer par un logiciel « sender ». L’idée étant d’envoyer une chaîne de caractères par Bluetooth, que mon programme arduino la lise, caractère par caractere, et que, en fonction de la lettre qu’il trouve, il déclenche une fonction dans laquelle il y aurai le gcode correspondant.
    Est ce que l’installation de la librairie grbl suffit à ce que du gcode tapé dans un programme arduino soit interprété et Déclenche les moteurs de mon traceur ?

  16. bonjour
    bien en français merci
    hélas je suis très mauvais aussi en informatique
    je n’arrive pas a installer le logiciel sur Arduino
    (Arduino : 1.6.11 (Windows 7), Carte : « Arduino/Genuino Uno »)
    quand je clique sur Croquis puis Inclure une bibliothèque et Ajouter la bibliothèque .ZIP je peut que sélectionnez le dossier grbl-master.zip ( même si je met tous fichier )
    message d’erreure
    « Le dossier spécifié ne contiens pas de bibliothèque valide »

  17. bonjour
    supers bien le tuto et bien expliqué et en français merci
    pour l’installation de Universal GCode Sender ça pose problème J’ai bien téléchargé le fichier .zip et dézipé normalement mais je ne trouve pas le fichier .jar
    et toujours impossible de visualiser la fenêtre Universal GcodeSender.
    help ??

  18. Bonsoir
    super tuto et merci pour le travail de partage.
    Une question : pourquoi quand j’envoi un petit fichier(400 ligne) en Gcode ce dernier met presque 30 minute a se charger
    Merci de votre reponse
    Salutations

  19. Bonjour. Merci pour l’article bien utile.

    J’ai une question. Avec quel code c,c++ peut on piloter les moteurs sans faire du g code? J’ai un carte grbl, plus facile pour installation, mais peut on la bypasser et piloter chaque moteur avec du code c?

    Une idée?

  20. Bonjour,
    Tout nouveau sur ce site, et tout nouveau dans le monde des (IMP et CNC).
    La mécanique de la CNC ne me pose pas trop de problème.
    La ou je recontre un trés gros problème c’est la partie électronique voir firmware.
    Le téléverssement de GRBL dans l’arduino se fait correctement.
    Le soucis et le suivante les axes Y et Z fonctionne trés biens, par contre l’axe X fonctionne que dans un seul sens , que ce soit avec les touches du clavier ou les touches X- et X+, dans la fenêtre Machine status: Works Position et Machine Position indique bien le défilement en négatif et positif en fonction des touches utilisées.
    – PC portable _win 10_64 bits.
    – Logiciel installé: GRBL pour arduino uno_ arduino version 1.8.4
    – Universal Gcode version 2.0
    -Grbl Controler version 3.5.1
    -Carte adrduino uno+CNC Shield _Prontoner version 3.00
    Merci
    Salutation

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *