Dieser Artikel wurde von @Erez Zukerman beigesteuert
Ich benutze meinen iDraw 2.0 Plotter sehr gern, aber ich lasse ihn langsam laufen – deshalb können meine Zeichnungen eine Weile dauern. Ich habe lange die Standard-Inkscape-Einrichtung genutzt, aber ich musste meinen Hauptcomputer eingeschaltet und mit dem Plotter verbunden lassen, während er arbeitete. Das war nicht ideal – also wollte ich sehen, ob ich eine „headless“ Einrichtung mit einem Raspberry Pi hinbekomme.
Es stellte sich als deutlich einfacher heraus, als ich dachte, und machte auch Spaß. Das werden wir tun:
●Den Pi selbst einrichten.
●CNCjs und seine Abhängigkeiten installieren. Das ist das Programm, mit dem wir den Plotter tatsächlich steuern, indem wir GCode über die Leitung senden.
●Wir nehmen uns auch einen Moment Zeit, um alles so einzurichten, dass CNCjs automatisch startet, sobald der Pi hochfährt, ohne dass du dich anmelden oder etwas tun musst.
●Herausfinden, wie wir unsere SVGs in GCode umwandeln (mit Stiftgeschwindigkeitssteuerung).
Bitte beachte, dass dieses Tutorial davon ausgeht, dass du dich mit der Linux-Kommandozeile wohlfühlst. Wenn du es Monate oder Jahre nach der Erstveröffentlichung durchführst, kannst du auf allerlei Fehler stoßen – das ist normal. Zum Zeitpunkt des Schreibens hat das beschriebene System bei mir gut funktioniert.
Lass uns anfangen!
Den Pi einrichten
Am besten ist es, wenn du einen Pi nur für dieses Projekt reservieren kannst, sodass er dein „Plotter-Controller“ ist. Wenn nicht, kein Problem – es funktioniert trotzdem, könnte aber mit der Zeit weniger bequem sein.
Ein weiterer guter Grund, einen Pi nur für dieses Projekt zu reservieren, ist, dass man ihn von Grund auf mit sinnvollen Standardwerten einrichten kann. Genau das habe ich gemacht: Ich habe eine 32GB SD-Karte genommen und mit dem offiziellen Raspberry Pi Imager Tool Raspberry Pi OS darauf geflasht.
Eine Sache, die das Tool ermöglicht und die ich empfehlen würde, ist, direkt ab Werk einige Standardwerte einzurichten. Ich habe den Installer genutzt, um Folgendes zu konfigurieren:
●Meinen Benutzernamen und mein Passwort
●Einen lokalen Hostnamen für den Plotter-Controller (in meinem Fall plotter.local)
●Meinen öffentlichen SSH-Schlüssel, damit ich sofort per SSH auf die Maschine zugreifen kann
●Meine WLAN-SSID/Passwort, damit sich der Pi beim Start mit meinem Netzwerk verbindet
Ich habe das alles konfiguriert und dann den Imager 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 mit einer Tastatur und einem Display verbunden – aber das war nicht unbedingt nötig. Der von mir gewählte Hostname plotter.local brauchte ein paar Momente, um sich in meinem Netzwerk zu registrieren, also habe ich die Tastatur und das Display genutzt, um die aktuelle IP abzurufen (indem ich ifconfig im Terminal ausgeführt habe).
Ich habe mich per SSH auf der Maschine angemeldet, und es war Zeit für den nächsten Schritt: CNCjs installieren
CNCjs installieren
Wie der Name schon sagt, basiert CNCjs auf Node. Deshalb müssen wir zuerst Node installieren.
●Per SSH auf den Pi verbinden
●Lass uns NVM installieren:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Terminal schließen und dann wieder per ssh verbinden. So wird NVM geladen.
●Jetzt installieren wir node:
○nvm install node
●Super! Zeit, CNCjs zu installieren:
○npm install -g cncjs
●Wenn bis hierhin alles gut gelaufen ist, starten wir CNCjs einmal, um unsere Konfigurationsdatei ~/.cncrc zu erstellen:
○Starte cncjs vom Terminal aus in deinem Home-Verzeichnis
○Mit Strg+C beenden
●Du bist jetzt stolzer Besitzer einer brandneuen ~/.cncrc, Glückwunsch. Lass uns diese bearbeiten, hauptsächlich um den Fernzugriff zu erlauben:
○vi .cncrc
{
"allowRemoteAccess": true,
"state": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"secret": DEIN_GEHEIMNIS_HIER
}
Die entscheidende Zeile, die hier hinzugefügt werden muss, ist die erste, allowRemoteAccess.
●Starte cncjs auf dem Pi erneut.
●Benutze deinen Browser auf deinem Hauptgerät und gehe zu plotter.local:8000. Es sollte CNCjs öffnen.

Als nächstes ist es Zeit, den Plotter anzuschließen und zu sehen, ob CNCjs mit ihm kommunizieren kann.
●Verbinde den iDraw 2.0 Plotter mit dem USB-Anschluss des Pi.
●Schalte den Plotter ein.
●Finde in CNCjs das Verbindungs-Widget (standardmäßig oben links).
○Drücke die Aktualisieren-Taste unter Port.
○Öffne das Dropdown-Menü und wähle den Port aus.

●Klicke auf Öffnen. Wenn alles funktioniert hat, sollte die Gcode-Konsole jetzt Text anzeigen.

Lass uns die Motoren bewegen!
●Benutze das Achsen-Widget, drücke + und - an den verschiedenen Achsen, um die Motoren zu bewegen. Du kannst auch „Tastatur-Jogging“ aktivieren und dann die Pfeiltasten benutzen, um den Plotter zu bewegen. Wenn du einen Stift einsetzt und die Z-Achse absenkst, ist es wie ein teures Etch-a-Sketch.

Eine Anmerkung: Die 0-Position auf der Y-Achse ist das Gegenteil von dem, was du vielleicht erwartest: Sie befindet sich unten im Zeichenbereich. Darauf kommen wir später zurück.
CNCjs beim Booten starten lassen
Weiter geht’s, wir wollen jetzt, dass wir immer wieder an diesen perfekten Punkt zurückkehren, wenn der Pi neu startet, ohne dass du etwas tun musst. Also:
●Zurück in der SSH-Sitzung auf dem Pi, CNCjs mit Strg-C beenden.
●Stelle sicher, dass es wirklich beendet ist, indem du den Browser aktualisierst (plotter.local:8000, vorausgesetzt, das ist der oben konfigurierte Hostname). Das sollte jetzt fehlschlagen.
●Installiere pm2 auf dem Pi: npm install -g pm2
●Starte CNCjs mit pm2: pm2 start cncjs --name cncjs
●Stelle sicher, dass es wirklich gestartet ist und wie erwartet funktioniert: Warte ein paar Momente, dann gehe zu plotter.local:8000 und überprüfe, ob es lädt.
●Erstelle ein Startskript: pm2 startup. Das gibt dir einen Befehl aus, den du mit sudo ausführen musst, also mach das.
●Speichere die Prozessliste: pm2 save
●Starte den Pi neu, um zu sehen, 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 sehen, ob du CNCjs wieder erreichen kannst. Wenn du alles richtig gemacht hast, sollte es einfach wieder starten.
Sieg! Wir sind fast fertig – CNCjs ist jetzt komplett eingerichtet. Aber um etwas zu plotten, müssen wir ihm eine GCode-Datei zuführen – es kann SVGs nicht nativ verarbeiten.
Erstelle eine Pipeline zur Umwandlung von SVGs in Gcode
Um unser SVG in Gcode umzuwandeln, verwenden wir Juicy-Gcode, ein kleines Kommandozeilen-Tool.
Eine große Änderung hier ist, dass wir relativ zur unteren linken Ecke deines Papiers nullen, nicht zur oberen rechten! An diese Änderung muss man sich erst gewöhnen. Ich werde dich später nochmal daran erinnern.
●Lade auf deiner Hauptmaschine die Juicy-Gcode-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 Start-Flavor-Datei, die du in flavor.yaml auf deiner Maschine kopieren/einfügen kannst:
begin: |
G21 ; Einheiten auf Millimeter setzen
G17 ; Ebenenauswahl auf XY setzen
G90 ; Absolute Positionierung einstellen
F600 ; Geschwindigkeit auf 600 mm/min setzen – das ist wirklich langsam, du kannst das bearbeiten
G00 Z0 ; Stift hoch
G92 X0 Y0 ; aktuelle Position als 0,0 betrachten – das ist die UNTERE LINKE Ecke
end: |
G0Z0 ; Stift hoch
G00 X0 Y0 Z0
toolon: |
G0Z6 ; Stift auf Papier
tooloff: |
G0Z0 ; Stift hoch
Ein paar wichtige Dinge zu dieser Flavor-Datei:
●Ich lasse den Plotter mit 600 mm/min laufen, was sehr langsam ist. Du möchtest das je nach deinen Stiften und Vorlieben vielleicht beschleunigen.
●Die andere bemerkenswerte Zeile ist die, die mit G92 beginnt. In dieser Zeile sagen wir dem Plotter: „Wo auch immer du dich gerade befindest, das ist dein Zuhause“. Um also einen Plot zu kalibrieren, erwarten wir, dass du den Plotterkopf manuell (und vorsichtig) in die untere linke Ecke des Papiers bewegst.
Du solltest deine Papiergröße korrekt in der SVG einstellen, das ist wichtig.
Um Juicy-Gcode auszuführen, sieht der Befehl ungefähr so aus:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Das ist jedes Mal etwas umständlich zu tippen, deshalb habe ich dieses kleine Skript gemacht, um es etwas bequemer zu machen:
#!/bin/bash
# Verwendung: ./run-juicy.sh input.svg [speed]
# Wenn keine Geschwindigkeit angegeben ist, wird standardmäßig 600 verwendet
# Prüfe, ob mindestens ein Argument angegeben wurde
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; dann
echo "Verwendung: $0 <input-svg> [speed]"
echo " Wenn keine Geschwindigkeit angegeben ist, wird standardmäßig 600 verwendet"
exit 1
fi
inputfile="$1"
# Setze die Standardgeschwindigkeit auf 600, falls nicht angegeben
speed="${2:-600}"
# Erstelle den Namen der Flavor-Datei
flavor_file="flavor-${speed}mm-speed.yaml"
# Erzeuge den Ausgabedateinamen, indem die .svg-Erweiterung durch .gcode ersetzt wird
outputfile="${inputfile%.*}.gcode"
# Führe den juicy-gcode-Befehl aus
juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Du kannst jetzt mehrere verschiedene Flavor-Dateien haben, jede mit einer anderen Laufgeschwindigkeit, und die Geschwindigkeit einfach angeben, indem du die Zahl übergibst, die zum Dateinamen der Flavor-Datei passt.
Jetzt, wo du eine GCode-Datei hast, ist es Zeit, sie hochzuladen und zu plotten!
Lade den GCode hoch und plotte
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 (so dass der Plotter startet, sobald eine GCode-Datei dort abgelegt wird).
Letzteres klingt in der Theorie cool, macht aber nicht wirklich viel Sinn: Jeder Plot erfordert sowieso eine manuelle Einrichtung. Wir müssen das Papier platzieren, den Stift einsetzen usw. Für mich macht es daher viel mehr Sinn, die Datei manuell über den Browser hochzuladen.
Sobald du das gemacht 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 auf beiden Achsen, X und Y. Es lohnt sich, einen Moment zu nehmen, um dies zu lesen und zu überprüfen, ob sie deinen Plotbereich nicht überschreiten. Wenn doch, gibt es ein Problem mit deiner SVG – starte das Plotten nicht, sonst wären deine Servos ziemlich unglücklich.
Vorausgesetzt, dein Stift befindet sich in der unteren linken Ecke deines Papiers und die Maße stimmen, ist es Zeit zu plotten! Drücke den Play-Button und beobachte deinen Plotter. Du kannst jetzt deinen Computer ausschalten oder in einen anderen Raum tragen, während der Pi und der Plotter arbeiten. Sieg!