How to Set Up an iDraw 2.0 Plotter and a Raspberry Pi for Headless Operation

Comment configurer un traceur iDraw 2.0 et un Raspberry Pi pour un fonctionnement sans interface graphique

Cet article a été proposé par @Erez Zukerman

J’aime beaucoup utiliser mon traceur iDraw 2.0, mais je préfère le faire fonctionner lentement — mes tracés peuvent donc prendre un certain temps. J’ai utilisé pendant assez longtemps la configuration Inkscape par défaut, mais je devais laisser mon ordinateur principal allumé et connecté au traceur pendant son fonctionnement. Ce n’était pas idéal — j’ai donc décidé de voir si je pouvais mettre en place une configuration « sans tête » à l’aide d’un Raspberry Pi.
Il s’est avéré que c’était beaucoup plus simple que je ne le pensais, et amusant aussi. Voici ce que nous allons faire :
●Configurer le Pi lui-même.
●Installer CNCjs et ses dépendances. C’est ce que nous utiliserons pour contrôler réellement le traceur, en envoyant du GCode sur le réseau.
●Nous prendrons également un moment pour faire en sorte que CNCjs démarre automatiquement chaque fois que le Pi démarre, sans que vous ayez besoin de vous connecter ou de faire quoi que ce soit.
●Comprendre comment convertir nos fichiers SVG en GCode (avec contrôle de la vitesse du stylo).
Veuillez noter que ce tutoriel suppose que vous êtes à l’aise avec la ligne de commande Linux. Si vous le suivez plusieurs mois ou plusieurs années après sa première publication, vous risquez de rencontrer toutes sortes d’erreurs en cours de route — c’est dans la nature du problème. Au moment de la rédaction, le système décrit fonctionnait bien pour moi.
C’est parti !

Configurer le Pi

L’idéal est de pouvoir consacrer un Pi à ce projet, afin qu’il serve de « contrôleur du traceur ». Sinon, pas d’inquiétude : cela fonctionnera quand même, mais ce sera peut-être moins pratique à la longue.
Autre bonne raison de consacrer un Pi à ce projet : vous pouvez le configurer à partir de zéro avec des paramètres par défaut pertinents. C’est exactement ce que j’ai fait : j’ai pris une carte SD de 32 Go et utilisé l’outil officiel Raspberry Pi Imager pour y installer Raspberry Pi OS.
L’outil permet notamment de définir quelques paramètres par défaut dès le départ, ce que je vous recommande. J’ai utilisé l’installateur pour configurer les éléments suivants :
●Mon nom d’utilisateur et mon mot de passe
●Un nom d’hôte local pour le contrôleur du traceur (plotter.local dans mon cas)
●Ma clé SSH publique, afin de pouvoir me connecter immédiatement à la machine via SSH
●Le SSID et le mot de passe de mon réseau WLAN, afin que le Pi puisse s’y connecter au démarrage
J’ai configuré tout cela, puis j’ai laissé l’Imager faire son travail. Une fois terminé, j’ai éjecté la carte microSD et je l’ai insérée dans le Pi. Pour le premier démarrage uniquement, j’ai connecté le Pi à un clavier et à un écran — mais ce n’était pas strictement nécessaire. Le nom d’hôte plotter.local que j’avais choisi a mis quelques instants à être enregistré sur mon réseau ; j’ai donc utilisé le clavier et l’écran pour récupérer l’adresse IP actuelle (en exécutant ifconfig dans le terminal).
Je me suis connecté à la machine et il était temps de passer à l’étape suivante : installer CNCjs

Installer CNCjs

Comme son nom l’indique, CNCjs est basé sur Node. Nous devons donc commencer par installer Node.
●Connectez-vous au Pi en SSH
●Installons NVM :
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Quittez le terminal, puis reconnectez-vous en SSH. Cela charge NVM.
●Installons maintenant node :
○nvm install node
●Parfait ! Il est temps d’installer CNCjs :
○npm install -g cncjs
●En supposant que tout se soit bien passé jusqu’ici, exécutons CNCjs une seule fois. Cela créera notre fichier de configuration, ~/.cncrc :
○Depuis la ligne de commande, dans votre répertoire personnel, exécutez cncjs
○Quittez-le avec Ctrl+C
●Vous possédez maintenant un tout nouveau fichier ~/.cncrc, félicitations. Modifions-le, principalement pour autoriser l’accès à distance :
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": VOTRE_SECRET ICI
}
La ligne cruciale à ajouter ici est la première, allowRemoteAccess.
●Relancez cncjs sur le Pi.
●Dans le navigateur de votre machine principale, accédez à plotter.local:8000. CNCjs devrait s’ouvrir.

Ensuite, il est temps de brancher le traceur et de vérifier si CNCjs peut communiquer avec lui.
●Connectez le traceur iDraw 2.0 au port USB du Pi.
●Allumez le traceur.
●Dans CNCjs, repérez le widget Connection (situé par défaut dans l’angle supérieur gauche).
○Cliquez sur le bouton Refresh sous Port.
○Ouvrez la liste déroulante et choisissez le port.

●Cliquez sur Open. Si tout a fonctionné, la console Gcode devrait maintenant afficher du texte.

Déplaçons les moteurs !


●À l’aide du widget Axes, appuyez sur + et - sur les différents axes pour déplacer les moteurs. Vous pouvez également activer le « déplacement au clavier », puis utiliser les touches fléchées pour déplacer le traceur. Si vous insérez un stylo et abaissez l’axe Z, c’est comme un Etch-A-Sketch coûteux.


À noter : la position 0 sur l’axe Y est à l’opposé de ce à quoi vous pourriez vous attendre : elle se trouve en bas de la zone de tracé. Nous y reviendrons plus tard.

Lancer CNCjs au démarrage

Poursuivons : nous voulons maintenant retrouver automatiquement cette configuration idéale à chaque redémarrage du Pi, sans que vous ayez à intervenir. Alors :
●De retour dans la session SSH sur le Pi, arrêtez CNCjs en appuyant sur Ctrl-C.
●Vérifiez qu’il est bien arrêté en actualisant le navigateur (plotter.local:8000, en supposant qu’il s’agit du nom d’hôte configuré précédemment). La page devrait maintenant être inaccessible.
●Sur le Pi, installez pm2 : npm install -g pm2
●Démarrez CNCjs avec pm2 : pm2 start cncjs --name cncjs
●Vérifiez qu’il a bien démarré et qu’il fonctionne comme prévu : attendez quelques instants, puis accédez à plotter.local:8000 et vérifiez que la page se charge.
●Créez un script de démarrage : pm2 startup. Cette commande affichera une autre commande que vous devrez exécuter avec sudo ; faites-le.
●Enregistrez la liste des processus : pm2 save
●Redémarrez le Pi pour vérifier que cela a fonctionné : sudo reboot
●Attendez qu’il redémarre, peut-être 3 à 5 minutes, puis accédez à http://plotter.local:8000/ pour vérifier si vous pouvez de nouveau utiliser CNCjs. Si tout s’est bien passé, il devrait simplement être de nouveau disponible.
Victoire ! Nous y sommes presque : CNCjs est maintenant entièrement configuré. Mais pour tracer quelque chose, nous devons lui fournir un fichier GCode : il ne gère pas nativement les SVG.

Créer une chaîne de traitement pour convertir des SVG en Gcode

Pour convertir notre SVG en Gcode, nous allons utiliser Juicy-Gcode, un petit utilitaire en ligne de commande.
Un changement important ici est que nous définissons le point zéro par rapport au coin inférieur gauche de votre papier, et non au coin supérieur droit ! Il vous faudra peut-être un peu de temps pour vous habituer à ce changement. Je vous le rappellerai plus tard.
●Sur votre machine principale, téléchargez le binaire de la version de Juicy-Gcode correspondant à votre système d’exploitation : https://github.com/domoszlai/juicy-gcode/releases
●La configuration de Juicy-Gcode est enregistrée dans un fichier qu’ils appellent un « fichier de paramètres ». Il s’agit simplement d’un fichier YAML. Voici un bon fichier de départ ; vous pouvez copier-coller ceci dans flavor.yaml sur votre machine :
begin: |
  G21 ; définir les unités en millimètres
  G17 ; définir la sélection du plan sur XY
  G90 ; définir le positionnement absolu
  F600  ; définir la vitesse à 600 mm/min -- c’est vraiment lent, vous voudrez peut-être modifier cette valeur
  G00 Z0 ; stylo levé
  G92 X0 Y0 ; considérer la position actuelle comme 0,0 -- il s’agit du coin INFÉRIEUR GAUCHE
end: |
  G0Z0 ; stylo levé
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; stylo abaissé sur le papier
tooloff: |
  G0Z0 ; stylo levé
  
Quelques points importants à noter concernant ce fichier de paramètres :
●J’utilise le traceur à 600 mm/min, ce qui est très lent. Vous voudrez peut-être accélérer cette vitesse, selon vos stylos et vos préférences.
●L’autre ligne notable est celle qui commence par G92. Sur cette ligne, nous indiquons au traceur « où que vous soyez actuellement, c’est ici le point d’origine ». Pour calibrer un tracé, nous vous demandons donc de déplacer manuellement (et délicatement) la tête du traceur jusqu’au coin inférieur gauche du papier.
Vous devez configurer correctement le format du papier dans le SVG, c’est important.
Pour exécuter Juicy-Gcode, la commande ressemble à ceci :
juicy-gcode -f flavor.yaml image.svg -o image.gcode
C’est un peu long à saisir à chaque fois, alors j’ai créé ce petit script pour rendre les choses plus pratiques :
#!/bin/bash
# Usage: ./run-juicy.sh input.svg [speed]
# Si la vitesse n’est pas fournie, la valeur par défaut est 600

# Vérifier qu’au moins un argument est fourni

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Usage: $0 <input-svg> [speed]"
echo " Si la vitesse n’est pas fournie, la valeur par défaut est 600"
exit 1
fi

inputfile="$1"

# Définir la vitesse par défaut à 600 si elle n’est pas fournie
speed="${2:-600}"

# Construire le nom du fichier de style
flavor_file="flavor-${speed}mm-speed.yaml"

# Générer le nom du fichier de sortie en remplaçant l’extension .svg par .gcode
outputfile="${inputfile%.*}.gcode"

# Exécuter la commande juicy-gcode

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Vous pouvez maintenant avoir plusieurs fichiers de styles différents, chacun avec une vitesse d’exécution différente, et spécifier facilement la vitesse en transmettant le nombre correspondant au nom du fichier de style.
Maintenant que vous avez un fichier GCode, il est temps de le téléverser et de lancer le traçage !

Téléverser le GCode et tracer

CNCjs nous offre deux façons d’envoyer un fichier GCode : nous pouvons le téléverser via le navigateur en cliquant sur « Upload G-code », ou configurer un répertoire surveillé (afin que, dès qu’un fichier GCode y apparaît, le traceur commence à fonctionner).
Cette dernière option semble intéressante en théorie, mais n’a pas vraiment de sens : chaque tracé nécessite de toute façon une configuration manuelle. Nous devons placer le papier, installer le stylo, etc. Pour ma part, il est donc beaucoup plus logique de téléverser manuellement le fichier via le navigateur.
Une fois cela fait, dézoomez pour voir l’aperçu. 

Cela nous donne quelques vérifications importantes de cohérence :
●On nous rappelle une fois de plus (…) que le tracé commencera dans le coin inférieur gauche de notre feuille.
●Nous pouvons voir les mesures sur les axes X et Y. Cela vaut la peine de prendre un moment pour les lire et vérifier qu’elles ne dépassent pas votre zone de traçage. Si c’est le cas, il y a un problème avec votre SVG : ne lancez pas le traçage, sinon vos servomoteurs ne vont pas apprécier.
En supposant que votre stylo se trouve dans le coin inférieur gauche de votre feuille et que les mesures sont cohérentes, il est temps de tracer ! Cliquez sur le bouton Play et observez votre traceur. Vous pouvez maintenant éteindre votre ordinateur ou l’emporter dans une autre pièce pendant que le Pi et le traceur travaillent. Victoire !

Retour au blog

Laisser un commentaire

Veuillez noter que les commentaires doivent être approuvés avant leur publication.