Dieser Artikel wurde von @Erez Zukerman verfasst.
Ich benutze meinen iDraw 2.0-Plotter sehr gerne, lasse ihn aber gerne langsam laufen – daher können meine Plots eine Weile dauern. Ich habe die vorkonfigurierte Inkscape-Konfiguration eine ganze Weile verwendet, musste aber meinen Hauptcomputer eingeschaltet und mit dem Plotter verbunden lassen, während er lief. Das war nicht ideal – also beschloss ich, ein „Headless“-Setup mit einem Raspberry Pi zu testen.
Es war deutlich einfacher als gedacht und hat auch Spaß gemacht. So gehen wir vor:
●Richten Sie den Pi selbst ein.
● Installieren Sie CNCjs und dessen Abhängigkeiten. Damit steuern wir den Plotter, indem wir GCode über die Leitung senden.
●Wir nehmen uns auch einen Moment Zeit, um alles so einzurichten, dass CNCjs beim Booten des Pi automatisch gestartet wird, ohne dass Sie sich anmelden oder irgendetwas tun müssen.
●Finden Sie heraus, wie Sie unsere SVGs in GCode konvertieren (mit Stiftgeschwindigkeitssteuerung).
Bitte beachten Sie, dass dieses Tutorial voraussetzt, dass Sie mit der Linux-Kommandozeile vertraut sind. Wenn Sie Monate oder Jahre nach der Erstveröffentlichung weitermachen, können Sie auf verschiedene Fehler stoßen – das liegt in der Natur der Sache. Zum Zeitpunkt des Schreibens funktionierte das beschriebene System bei mir gut.
Lasst uns beginnen!
Einrichten des Pi
Am besten ist es, wenn Sie einen Pi nur für dieses Projekt reservieren können, sodass er Ihr „Plotter-Controller“ ist. Falls nicht, kein Problem – er funktioniert zwar trotzdem, wird aber mit der Zeit möglicherweise weniger praktisch sein.
Ein weiterer guter Grund, einen Pi nur 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 mir eine 32-GB-SD-Karte geschnappt und sie mit dem offiziellen Raspberry Pi Imager-Tool mit dem Raspberry Pi OS geflasht.
Mit dem Tool können Sie – und das empfehle ich – direkt nach der Installation einige Standardeinstellungen vornehmen. Ich habe das Installationsprogramm verwendet, um Folgendes zu konfigurieren:
●Mein Benutzername und Passwort
●Ein lokaler Hostname für den Plotter-Controller (in meinem Fall plotter.local)
●Mein öffentlicher SSH-Schlüssel, damit ich mich sofort per SSH mit dem Rechner verbinden konnte
●Meine WLAN-SSID/mein Passwort, damit sich der Pi beim Booten mit meinem Netzwerk verbindet
Ich habe alles konfiguriert und dann den Imager seine Arbeit machen lassen. Anschließend habe ich die microSD-Karte ausgeworfen und in den Pi gesteckt. Nur für den ersten Bootvorgang habe ich den Pi an eine Tastatur und ein Display angeschlossen – das war aber nicht unbedingt notwendig. Der von mir gewählte Hostname plotter.local benötigte einige Augenblicke, um sich in meinem Netzwerk zu registrieren, daher habe ich die Tastatur und das Display verwendet, um die aktuelle IP abzurufen (durch Ausführen von ifconfig im Terminal).
Ich habe mich per SSH mit der Maschine verbunden und es war Zeit, mit dem nächsten Schritt fortzufahren: CNCjs installieren
Installieren Sie CNCjs
Wie der Name schon vermuten lässt, basiert CNCjs auf Node. Daher müssen wir zunächst Node installieren.
●SSH in den Pi
●Lasst uns NVM installieren:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Beenden Sie das Terminal und melden Sie sich per SSH erneut an. Dadurch wird NVM geladen.
●Jetzt installieren wir den Knoten:
○nvm-Installationsknoten
●Super! Zeit, CNCjs zu installieren:
○npm install -g cncjs
●Angenommen, alles hat bis hierhin gut funktioniert, führen wir CNCjs einmal aus. Dadurch wird unsere Konfigurationsdatei ~/.cncrc erstellt:
○ Führen Sie in Ihrem Home-Verzeichnis in der Befehlszeile cncjs aus.
○Strg+C raus
● Sie sind nun stolzer Besitzer einer brandneuen Datei ~/.cncrc, herzlichen Glückwunsch! Bearbeiten wir sie, vor allem, um den Fernzugriff zu ermöglichen:
○vi .cncrc
{
"allowRemoteAccess": wahr,
"Zustand": {
"allowAnonymousUsageDataCollection": falsch,
"checkForUpdates": wahr,
"Controller": {
"Ausnahme": {
"Fehler ignorieren": falsch
}
}
},
"Geheimnis": IHR_GEHEIMNIS HIER
}
Die entscheidende Zeile, die hier hinzugefügt werden muss, ist die erste, allowRemoteAccess.
●Führen Sie cncjs erneut auf dem Pi aus.
● Rufen Sie im Browser Ihres Hauptcomputers die Datei plotter.local:8000 auf. CNCjs sollte angezeigt werden.

Als Nächstes ist es an der Zeit, den Plotter anzuschließen und zu prüfen, ob CNCjs mit ihm kommunizieren kann.
●Schließen Sie den iDraw 2.0-Plotter an den USB-Anschluss des Pi an.
●Schalten Sie den Plotter ein.
● Suchen Sie in CNCjs das Verbindungs-Widget (standardmäßig in der oberen linken Ecke).
○ Klicken Sie unter „Port“ auf die Schaltfläche „Aktualisieren“.
○Öffnen Sie das Dropdown-Menü und wählen Sie den Port aus.

● Klicken Sie auf „Öffnen“. Wenn alles funktioniert hat, sollte die Gcode-Konsole nun Text anzeigen.

Lasst uns die Motoren bewegen!
● Drücken Sie im Achsen-Widget + und - auf den verschiedenen Achsen, um die Motoren zu bewegen. Sie können auch „Keypad-Jogging“ aktivieren und dann mit den Pfeiltasten den Plotter bewegen. Wenn Sie einen Stift einstecken und die Z-Achse absenken, wirkt es wie ein teures Etch-a-Sketch.

Beachten Sie, dass die 0-Position auf der Y-Achse das Gegenteil von dem ist, was Sie vielleicht erwarten: Sie befindet sich am unteren Rand des Diagrammbereichs. Wir werden später darauf zurückkommen.
CNCjs beim Booten ausführen
Wir möchten nun bei jedem Neustart des Pi diesen optimalen Wert wieder erreichen, ohne dass Sie etwas tun müssen. Also:
● Zurück in der SSH-Sitzung zum Pi beenden Sie CNCjs durch Drücken von Strg+C.
●Stellen Sie sicher, dass es wirklich nicht mehr funktioniert, indem Sie den Browser aktualisieren (plotter.local:8000, vorausgesetzt, das ist der oben konfigurierte Hostname). Dies sollte nun fehlschlagen.
●Installieren Sie pm2 auf dem Pi: npm install -g pm2
● CNCjs mit pm2 starten: pm2 start cncjs --name cncjs
●Stellen Sie sicher, dass es wirklich gestartet wurde und wie erwartet funktioniert: Warten Sie einige Augenblicke, gehen Sie dann zu plotter.local:8000 und prüfen Sie, ob es geladen wird.
● Erstellen Sie ein Startskript: pm2 startup. Es gibt einen Befehl aus, den Sie per sudo ausführen müssen. Führen Sie diesen aus.
●Speichern der Prozessliste: pm2 save
●Starten Sie den Pi neu, um zu sehen, ob es funktioniert hat: sudo reboot
● Warten Sie etwa 3–5 Minuten, bis es wieder verfügbar ist, und rufen Sie dann http://plotter.local:8000/ auf, um zu prüfen, ob CNCjs wieder verfügbar ist. Wenn Sie alles richtig gemacht haben, sollte es sofort wieder verfügbar sein.
Erfolg! Wir haben es fast geschafft – CNCjs ist nun vollständig eingerichtet. Um etwas zu plotten, müssen wir es jedoch mit einer GCode-Datei füttern – SVGs werden nicht nativ verarbeitet.
Erstellen Sie eine Pipeline zum Konvertieren von SVGs in Gcode
Um unser SVG in Gcode zu konvertieren, verwenden wir Juicy-Gcode, ein kleines Befehlszeilenprogramm.
Eine große Änderung besteht darin, dass wir den Nullpunkt auf die untere linke Ecke Ihres Papiers setzen, nicht auf die obere rechte! Diese Änderung kann etwas gewöhnungsbedürftig sein. Ich werde Sie später noch einmal daran erinnern.
●Laden Sie auf Ihrem Hauptcomputer die Juicy-Gcode-Release-Binärdatei für Ihr Betriebssystem herunter: https://github.com/domoszlai/juicy-gcode/releases
Die Juicy-Gcode-Konfiguration wird in einer sogenannten „Flavor-Datei“ gespeichert. Dies ist lediglich eine YAML-Datei. Hier ist eine gute Ausgangsdatei, die Sie in die Datei flavor.yaml auf Ihrem Rechner kopieren und einfügen können:
Beginn: |
G21; Einheiten auf Millimeter einstellen
G17; Ebenenauswahl auf XY einstellen
G90; Absolute Positionierung einstellen
F600 ; Geschwindigkeit auf 600 mm/min einstellen - das ist wirklich langsam, Sie möchten vielleicht bearbeiten
G00 Z0; Stift hoch
G92 X0 Y0; aktuelle Position als 0,0 betrachten – dies ist die untere LINKE Ecke
Ende: |
G0Z0; Stift hoch
G00 X0 Y0 Z0
Werkzeug: |
G0Z6; Stift auf Papier
Werkzeug aus: |
G0Z0; Stift hoch
Ein paar wichtige Dinge, die Sie zu dieser Flavor-Datei beachten sollten:
●Ich lasse den Plotter mit 600 mm/min laufen, was sehr langsam ist. Je nach Stiften und Vorlieben können Sie die Geschwindigkeit erhöhen.
Die andere wichtige Zeile ist die, die mit G92 beginnt. In dieser Zeile sagen wir dem Plotter: „Wo immer Sie sich gerade befinden, ist Ihr Zuhause.“ Um einen Plot zu kalibrieren, müssen Sie den Plotterkopf manuell (und vorsichtig) in die untere linke Ecke des Papiers bewegen.
Sie möchten, dass Ihre Papiergröße im SVG richtig eingestellt ist. Das ist wichtig.
Um Juicy-Gcode auszuführen, sieht der Befehl ungefähr so aus:
juicy-gcode -f Geschmack.yaml Bild.svg -o Bild.gcode
Das ist jedes Mal ein ganz schöner Brocken, den man eintippen muss, deshalb habe ich dieses kleine Skript erstellt, um es etwas bequemer zu machen:
#!/bin/bash
# Verwendung: ./run-juicy.sh input.svg [Geschwindigkeit]
# Wenn keine Geschwindigkeit angegeben ist, wird standardmäßig 600 verwendet
# Prüfen, ob mindestens ein Argument angegeben ist
wenn [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; dann
echo "Verwendung: $0 <input-svg> [Geschwindigkeit]"
echo "Wenn keine Geschwindigkeit angegeben ist, wird standardmäßig 600 verwendet."
Ausfahrt 1
fi
Eingabedatei="$1"
# Stellen Sie die Standardgeschwindigkeit auf 600 ein, falls nicht angegeben
Geschwindigkeit="${2:-600}"
# Erstellen Sie den Flavor-Dateinamen
flavor_file="Geschmack-${Geschwindigkeit}mm-Geschwindigkeit.yaml"
# Generieren Sie den Ausgabedateinamen, indem Sie die Erweiterung .svg durch .gcode ersetzen
Ausgabedatei="${Eingabedatei%.*}.gcode"
# Führen Sie den Befehl juicy-gcode aus
juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Sie können jetzt mehrere verschiedene Flavor-Dateien mit jeweils unterschiedlicher Ausführungsgeschwindigkeit haben und die Geschwindigkeit einfach angeben, indem Sie die Zahl übergeben, die dem Dateinamen der Flavor-Datei entspricht.
Nachdem Sie nun eine GCode-Datei haben, ist es Zeit zum Hochladen und Plotten!
Laden Sie den GCode hoch und plotten Sie
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 jedes Mal startet, wenn eine GCode-Datei dort eingeht).
Letzteres klingt zwar in der Theorie gut, ergibt aber wenig Sinn: Jeder Plot erfordert ohnehin manuelle Vorbereitungen. Wir müssen das Papier platzieren, den Stift installieren usw. Daher ist es für mich viel sinnvoller, die Datei manuell über den Browser hochzuladen.
Sobald Sie das getan haben, zoomen Sie heraus, um die Vorschau anzuzeigen.

Dies gibt uns einige wichtige Plausibilitätsprüfungen:
●Wir werden noch einmal daran erinnert (…), dass die Handlung in der unteren linken Ecke unseres Papiers beginnt.
●Wir sehen Messungen auf der X- und Y-Achse. Es lohnt sich, dies kurz zu lesen und sicherzustellen, dass die Werte Ihren Plotbereich nicht überschreiten. Andernfalls liegt ein Problem mit Ihrem SVG vor. Beginnen Sie nicht mit dem Plotten, da Ihre Servos sonst Probleme bekommen.
Angenommen, dein Stift liegt in der unteren linken Ecke deines Papiers und die Maße stimmen, dann ist es Zeit zum Plotten! Drücke die Play-Taste und beobachte deinen Plotter. Du kannst deinen Computer jetzt herunterfahren oder in einen anderen Raum tragen, während Pi und Plotter arbeiten. Erfolg!