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 écran

Cet article a été rédigé 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 interface » à l’aide d’un Raspberry Pi.
Cela s’est révélé bien plus facile que je ne le pensais, et c’était aussi amusant. 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 par le réseau.
●Nous prendrons également un moment pour configurer CNCjs afin qu’il démarre automatiquement à chaque démarrage du Pi, sans que vous ayez besoin de vous connecter ou de faire quoi que ce soit.
●Déterminer 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 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 des choses. Au moment de la rédaction, le système décrit fonctionnait bien pour moi.
Commençons !

Configurer le Pi

Il est préférable 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 avec le temps.
Une autre bonne raison de consacrer un Pi à ce projet est de pouvoir le configurer depuis zéro avec des paramètres par défaut adaptés. 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 flasher Raspberry Pi OS.
L’outil permet notamment de configurer des 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 se connecte à mon réseau 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 absolument nécessaire. Le nom d’hôte plotter.local que j’avais choisi a mis quelques instants à être reconnu sur mon réseau ; j’ai donc utilisé le clavier et l’écran pour relever l’adresse IP actuelle (en exécutant ifconfig dans le terminal).
Je me suis connecté à la machine en SSH, et il était temps de passer à l’étape suivante : installer CNCjs

Installer CNCjs

Comme son nom le suggère, 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
●Super ! Il est temps d’installer CNCjs :
○npm install -g cncjs
●En supposant que tout s’est bien déroulé 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
○Appuyez sur Ctrl+C pour en sortir
●Vous êtes maintenant l’heureux propriétaire d’un tout nouveau ~/.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’afficher.

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 Connexion (en haut à gauche par défaut).
○Cliquez sur le bouton Actualiser sous Port.
○Ouvrez le menu déroulant et choisissez le port.

●Cliquez sur Ouvrir. Si tout s’est bien passé, 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 avec le pavé numérique », 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 ce réglage idéal à chaque redémarrage du Pi, sans que vous ayez à intervenir. Donc :
●Dans la session SSH du 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é ci-dessus). L’accès devrait maintenant échouer.
●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 commande que vous devrez exécuter avec sudo ; faites-le.
●Enregistrez la liste des processus : pm2 save
●Redémarrez le Pi pour vérifier si 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 vous avez tout fait correctement, il devrait redémarrer normalement.
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 un pipeline pour convertir des SVG en Gcode

Pour convertir notre SVG en Gcode, nous allons utiliser Juicy-Gcode, un petit utilitaire en ligne de commande.
La principale différence ici est que nous définissons l’origine 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 y habituer. 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 de configuration appelé « flavor file ». Il s’agit simplement d’un fichier YAML. Voici un bon fichier de configuration de départ ; vous pouvez copier-coller son contenu 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 configuration :
●J’utilise le traceur à 600 mm/min, ce qui est très lent. Vous voudrez peut-être augmenter cette vitesse, selon vos stylos et vos préférences.
●L’autre ligne notable est celle qui commence par G92. Dans cette ligne, nous indiquons au traceur « où que vous soyez actuellement, considérez cet endroit comme l’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 effectivement définir correctement le format de votre 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 un peu plus pratiques :
#!/bin/bash
# Utilisation : ./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 " If speed is not provided, defaults to 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 profil
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 désormais avoir plusieurs fichiers de profils différents, chacun avec une vitesse d’exécution différente, et spécifier facilement la vitesse en transmettant le nombre qui correspond au nom du fichier de profil.
Maintenant que vous avez un fichier GCode, il est temps de le téléverser et de lancer le tracé !

Téléverser le GCode et tracer

CNCjs nous offre deux façons d’importer un fichier GCode : nous pouvons le téléverser via le navigateur en cliquant sur « Téléverser le G-code », ou nous pouvons 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 moi, il est donc bien plus logique de téléverser manuellement le fichier via le navigateur.
Une fois cela fait, effectuez un zoom arrière 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 tracé. Si c’est le cas, il y a un problème avec votre SVG - ne commencez pas à le tracer, 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 Lecture et regardez votre traceur. Vous pouvez maintenant éteindre votre ordinateur ou le transporter 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.