Dieser Artikel wurde von @Erez Zukerman beigesteuert.
Ich arbeite sehr gerne mit meinem iDraw 2.0-Plotter, aber ich lasse ihn gerne langsam laufen - deshalb können meine Zeichnungen eine Weile dauern. Eine ganze Zeit lang habe ich die standardmäßige Inkscape-Einrichtung verwendet, musste dabei aber meinen Hauptcomputer eingeschaltet und mit dem Plotter verbunden lassen, während dieser arbeitete. Das war nicht ideal - daher wollte ich herausfinden, ob ich eine „headless“ Einrichtung mit einem Raspberry Pi realisieren konnte.
Es stellte sich heraus, dass es deutlich einfacher war, als ich gedacht hatte, und außerdem viel Spaß gemacht hat. Das werden wir tun:
●Den Pi selbst einrichten.
●CNCjs und seine Abhängigkeiten installieren. Damit steuern wir den Plotter tatsächlich, indem wir GCode über das Netzwerk senden.
●Wir nehmen uns außerdem einen Moment Zeit, um alles so einzurichten, dass CNCjs bei jedem Start des Pi automatisch startet, ohne dass du dich anmelden oder etwas tun musst.
●Herausfinden, wie wir unsere SVGs in GCode umwandeln (mit Steuerung der Stiftgeschwindigkeit).
Bitte beachte, dass dieses Tutorial voraussetzt, dass du dich mit der Linux-Befehlszeile auskennst. Wenn du diese Anleitung Monate oder Jahre nach ihrer Erstveröffentlichung nachvollziehst, können unterwegs alle möglichen Fehler auftreten - das liegt in der Natur der Sache. Zum Zeitpunkt der Erstellung funktionierte das beschriebene System für mich gut.
Los geht's!
Den Pi einrichten
Am besten verwendest du einen Pi ausschließlich für dieses Projekt, damit er deine „Plottersteuerung“ ist. Falls nicht, ist das kein Problem - es funktioniert trotzdem, könnte aber mit der Zeit weniger praktisch sein.
Ein weiterer guter Grund, einen Pi ausschließlich für dieses Projekt zu verwenden, ist, dass man ihn von Grund auf mit sinnvollen Standardeinstellungen einrichten kann. Genau das habe ich getan: Ich habe eine 32-GB-SD-Karte genommen und sie mit dem offiziellen Raspberry Pi Imager mit Raspberry Pi OS beschrieben.
Eine sinnvolle Option des Tools, die ich empfehlen würde, ist, direkt einige Standardeinstellungen festzulegen. Mit dem Installationsprogramm habe ich Folgendes konfiguriert:
●Meinen Benutzernamen und mein Passwort
●Einen lokalen Hostnamen für die Plottersteuerung (in meinem Fall plotter.local)
●Meinen öffentlichen SSH-Schlüssel, damit ich mich sofort per SSH mit dem Computer verbinden konnte
●Meine WLAN-SSID und mein Passwort, damit der Pi beim Start eine Verbindung zu meinem Netzwerk herstellen konnte
Ich habe das alles konfiguriert und dann den Imager seine Arbeit machen lassen. Als er fertig war, habe ich die microSD-Karte ausgeworfen und in den Pi gesteckt. Nur für den ersten Start habe ich den Pi an eine Tastatur und einen Bildschirm angeschlossen - das war jedoch nicht unbedingt nötig. Der von mir gewählte Hostname plotter.local benötigte einige Momente, um sich in meinem Netzwerk zu registrieren, daher habe ich über Tastatur und Bildschirm die aktuelle IP-Adresse abgerufen (indem ich im Terminal ifconfig ausgeführt habe).
Ich stellte eine SSH-Verbindung zum Gerät her, und es war Zeit, mit dem nächsten Schritt fortzufahren: CNCjs installieren
CNCjs installieren
Wie der Name schon vermuten lässt, basiert CNCjs auf Node. Daher müssen wir zunächst Node installieren.
●Stelle per SSH eine Verbindung zum Pi her.
●Installieren wir NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Beende das Terminal und stelle anschließend erneut eine SSH-Verbindung her. Dadurch wird NVM geladen.
●Jetzt installieren wir Node:
○nvm install node
●Großartig! Zeit, CNCjs zu installieren:
○npm install -g cncjs
●Wenn bis hierhin alles funktioniert hat, führen wir CNCjs einmal aus. Dadurch wird unsere Konfigurationsdatei ~/.cncrc erstellt:
○Führe in deinem Home-Verzeichnis über die Befehlszeile cncjs aus.
○Beende den Vorgang mit Strg+C.
●Jetzt besitzt du eine brandneue ~/.cncrc-Datei – herzlichen Glückwunsch. Wir bearbeiten sie, hauptsächlich damit wir den Fernzugriff erlauben können:
○vi .cncrc
{
"allowRemoteAccess": true,
"state": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"secret": YOUR_SECRET HERE
}
Die entscheidende Zeile, die hier hinzugefügt werden muss, ist die erste: allowRemoteAccess.
●Führe cncjs auf dem Pi erneut aus.
●Öffne auf deinem Hauptrechner im Browser plotter.local:8000. CNCjs sollte geöffnet werden.

Als Nächstes ist es an der Zeit, den Plotter anzuschließen und zu prüfen, ob CNCjs mit ihm kommunizieren kann.
●Verbinde den iDraw 2.0-Plotter mit dem USB-Anschluss des Pi.
●Schalte den Plotter ein.
●Suche in CNCjs das Widget „Verbindung“ (standardmäßig oben links).
○Klicke unter „Port“ auf die Schaltfläche „Aktualisieren“.
○Öffne das Dropdown-Menü und wähle den Port aus.

●Klicke auf „Öffnen“. Wenn alles funktioniert hat, sollte die G-Code-Konsole nun Text anzeigen.

Bewegen wir die Motoren!
●Verwende das Widget „Achsen“ und klicke bei den verschiedenen Achsen auf + und -, um die Motoren zu bewegen. Du kannst auch „Tastatursteuerung“ aktivieren und dann die Pfeiltasten verwenden, um den Plotter zu bewegen. Wenn du einen Stift einsetzt und die Z-Achse absenkst, ist das wie ein teures Etch A Sketch.

Ein Hinweis: Die Position 0 auf der Y-Achse liegt entgegen der erwarteten Richtung: Sie befindet sich am unteren Rand des Zeichenbereichs. Darauf kommen wir später zurück.
CNCjs beim Systemstart ausführen
Weiter geht's: Wir möchten nach jedem Neustart des Pi automatisch wieder an diesen idealen Punkt gelangen, ohne dass du etwas tun musst. Also:
●Zurück in der SSH-Sitzung zum Pi beendest du CNCjs mit Strg-C.
●Stelle sicher, dass es wirklich beendet ist, indem du den Browser aktualisierst (plotter.local:8000, vorausgesetzt, dies ist der oben konfigurierte Hostname). Dies sollte nun fehlschlagen.
●Installiere pm2 auf dem Pi: npm install -g pm2
●Starte CNCjs mit pm2: pm2 start cncjs --name cncjs
●Stelle sicher, dass es tatsächlich gestartet wurde und wie erwartet funktioniert: Warte einige Augenblicke, rufe dann plotter.local:8000 auf und prüfe, ob die Seite geladen wird.
●Erstelle ein Startskript: pm2 startup. Dadurch wird ein Befehl ausgegeben, den du mit sudo ausführen musst; führe ihn also aus.
●Speichere die Prozessliste: pm2 save
●Starte den Pi neu, um zu prüfen, ob es funktioniert hat: sudo reboot
●Warte, bis es wieder hochgefahren ist, vielleicht 3–5 Minuten, und rufe dann http://plotter.local:8000/ auf, um zu prüfen, ob du CNCjs wieder erreichen kannst. Wenn du alles richtig gemacht hast, sollte es sofort wieder verfügbar sein.
Geschafft! Wir sind fast so weit – CNCjs ist jetzt vollständig eingerichtet. Um etwas zu plotten, müssen wir ihm jedoch eine GCode-Datei zuführen – SVGs verarbeitet es nicht nativ.
Eine Pipeline zum Umwandeln von SVGs in GCode erstellen
Um unser SVG in GCode umzuwandeln, verwenden wir Juicy-Gcode, ein kleines Befehlszeilenprogramm.
Eine große Änderung besteht darin, dass wir den Nullpunkt relativ zur unteren linken Ecke deines Papiers setzen, nicht zur oberen rechten! An diese Änderung musst du dich vielleicht erst etwas gewöhnen. Ich werde dich später noch einmal daran erinnern.
●Lade auf deinem Hauptrechner die Juicy-Gcode-Release-Binärdatei für dein Betriebssystem herunter: https://github.com/domoszlai/juicy-gcode/releases
●Die Juicy-Gcode-Konfiguration wird in einer sogenannten „Flavor-Datei“ gespeichert. Das ist einfach eine YAML-Datei. Hier ist eine gute Ausgangsdatei. Du kannst sie in flavor.yaml auf deinem Rechner kopieren/einfügen:
begin: |
G21 ; Einheiten auf Millimeter festlegen
G17 ; Ebenenauswahl auf XY festlegen
G90 ; Absolute Positionierung festlegen
F600 ; Geschwindigkeit auf 600 mm/min festlegen -- das ist wirklich langsam, du möchtest dies vielleicht bearbeiten
G00 Z0 ; Stift angehoben
G92 X0 Y0 ; aktuelle Position als 0,0 festlegen -- dies ist die UNTERE LINKE Ecke
end: |
G0Z0 ; Stift angehoben
G00 X0 Y0 Z0
toolon: |
G0Z6 ; Stift auf das Papier abgesenkt
tooloff: |
G0Z0 ; Stift angehoben
Ein paar wichtige Dinge, die du zu dieser Flavor-Datei wissen solltest:
●Ich betreibe den Plotter mit 600 mm/min, was sehr langsam ist. Je nach Stiften und persönlichen Vorlieben möchtest du die Geschwindigkeit vielleicht erhöhen.
●Die andere bemerkenswerte Zeile ist die, die mit G92 beginnt. In dieser Zeile teilen wir dem Plotter mit: „Wo auch immer du dich gerade befindest, das ist deine Ausgangsposition.“ Um einen Plot zu kalibrieren, erwarten wir, dass du den Plotterkopf manuell und vorsichtig in die untere linke Ecke des Papiers bewegst.
Die Papiergröße muss in der SVG korrekt eingestellt sein, das ist wichtig.
Der Befehl zum Ausführen von Juicy-Gcode sieht ungefähr so aus:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Das ist jedes Mal etwas umständlich einzutippen, daher habe ich dieses kleine Skript erstellt, um die Sache etwas bequemer zu machen:
#!/bin/bash
# Verwendung: ./run-juicy.sh input.svg [speed]
# Falls die Geschwindigkeit nicht angegeben wurde, wird standardmäßig 600 verwendet
# Überprüfen, ob mindestens ein Argument angegeben wurde
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"
# Die Standardgeschwindigkeit auf 600 setzen, falls sie nicht angegeben wurde
speed="${2:-600}"
# Den Namen der Variantendatei zusammensetzen
flavor_file="flavor-${speed}mm-speed.yaml"
# Ausgabedateinamen erzeugen, indem die .svg-Erweiterung durch .gcode ersetzt wird
outputfile="${inputfile%.*}.gcode"
# Den juicy-gcode-Befehl ausführen
juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Du kannst jetzt mehrere Dateien mit unterschiedlichen Varianten haben, jeweils mit einer anderen Laufgeschwindigkeit, und die Geschwindigkeit einfach angeben, indem du die passende Zahl übergibst, die dem Dateinamen der Variantendatei entspricht.
Nachdem du nun eine GCode-Datei hast, ist es Zeit, sie hochzuladen und zu plotten!
GCode hochladen und plotten
CNCjs bietet uns zwei Möglichkeiten, eine GCode-Datei einzuspeisen: Wir können sie über den Browser hochladen, indem wir auf „G-Code hochladen“ klicken, oder wir können ein Überwachungsverzeichnis einrichten (sodass der Plotter automatisch startet, sobald eine GCode-Datei darin erscheint).
Letzteres klingt in der Theorie cool, ergibt aber nicht besonders viel Sinn: Jeder Plot erfordert ohnehin eine manuelle Einrichtung. Wir müssen das Papier platzieren, den Stift einsetzen usw. Daher ist es für mich viel sinnvoller, die Datei manuell über den Browser hochzuladen.
Wenn du das getan hast, zoome heraus, um die Vorschau zu sehen.

Das gibt uns ein paar wichtige Plausibilitätsprüfungen:
●Wir werden noch einmal (…) daran erinnert, dass der Plot in der unteren linken Ecke unseres Papiers beginnt.
●Wir sehen die Maße sowohl auf der X- als auch auf der Y-Achse. Es lohnt sich, kurz innezuhalten, dies zu lesen und zu überprüfen, ob sie deinen Plotbereich nicht überschreiten. Falls doch, stimmt etwas mit deiner SVG-Datei nicht - beginne nicht mit dem Plotten, sonst wären deine Servos ziemlich unglücklich.
Vorausgesetzt, dein Stift befindet sich an der unteren linken Ecke deines Papiers und die Maße sind plausibel, ist es Zeit zum Plotten! Klicke auf die Wiedergabe-Schaltfläche und beobachte deinen Plotter. Du kannst deinen Computer jetzt herunterfahren oder in einen anderen Raum mitnehmen, während der Pi und der Plotter arbeiten. Sieg!