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

So richten Sie einen iDraw 2.0-Plotter und einen Raspberry Pi für den Headless-Betrieb ein

Dieser Artikel wurde von @Erez Zukerman beigesteuert.

Ich arbeite sehr gern mit meinem iDraw 2.0-Plotter, aber ich lasse ihn gern langsam laufen – daher 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 – also beschloss ich herauszufinden, 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 hat es Spaß gemacht. 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 gestartet wird, 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 mit der Linux-Kommandozeile vertraut bist. Wenn du die 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 hat das beschriebene System für mich gut funktioniert.
Fangen wir an!

Den Pi einrichten

Am besten verwendest du einen Pi ausschließlich für dieses Projekt, damit er deine „Plottersteuerung“ ist. Falls das nicht möglich ist, ist das kein Problem – es funktioniert trotzdem, ist auf Dauer aber möglicherweise weniger komfortabel.
Ein weiterer guter Grund, einen Pi ausschließlich für dieses Projekt zu verwenden, ist, dass du ihn von Grund auf mit sinnvollen Standardeinstellungen einrichten kannst. Genau das habe ich getan: Ich habe eine 32-GB-SD-Karte genommen und sie mit dem offiziellen Raspberry Pi Imager-Tool mit Raspberry Pi OS beschrieben.
Eine Funktion des Tools, die ich empfehlen würde, ist das Einrichten einiger Standardeinstellungen direkt ab Werk. Ich habe den Installer verwendet, um Folgendes zu konfigurieren:
●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 Gerät verbinden konnte
●Meine WLAN-SSID und mein Passwort, damit der Pi beim Start eine Verbindung zu meinem Netzwerk herstellt
Ich habe 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 mit einer Tastatur und einem Display verbunden – unbedingt notwendig war das jedoch nicht. Der von mir gewählte Hostname plotter.local brauchte einige Momente, bis er in meinem Netzwerk registriert war, daher habe ich Tastatur und Display verwendet, um die aktuelle IP-Adresse abzurufen (indem ich im Terminal ifconfig ausgeführt habe).
Ich hatte mich mit dem Rechner verbunden, und nun war es Zeit für den nächsten Schritt: CNCjs installieren

CNCjs installieren

Wie der Name schon vermuten lässt, basiert CNCjs auf Node. Daher müssen wir zunächst Node installieren.
●Stellen Sie eine SSH-Verbindung zum Pi her.
●Installieren wir NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Beenden Sie das Terminal und stellen Sie 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 gut funktioniert hat, führen wir CNCjs einmalig aus. Dadurch wird unsere Konfigurationsdatei ~/.cncrc erstellt:
○Führen Sie über die Befehlszeile in Ihrem Home-Verzeichnis cncjs aus.
○Beenden Sie den Vorgang mit Strg+C.
●Sie sind nun stolzer Besitzer einer brandneuen ~/.cncrc – herzlichen Glückwunsch. Bearbeiten wir 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ühren Sie CNCjs auf dem Pi erneut aus.
●Rufen Sie auf Ihrem Hauptrechner im Browser plotter.local:8000 auf. CNCjs sollte geöffnet werden.

Als Nächstes schließen wir den Plotter an und prüfen, ob CNCjs mit ihm kommunizieren kann.
●Verbinden Sie den iDraw 2.0-Plotter mit dem USB-Port des Pi.
●Schalten Sie den Plotter ein.
●Suchen Sie in CNCjs das Widget „Verbindung“ (standardmäßig oben links).
○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 G-Code-Konsole nun Text anzeigen.

Bewegen wir die Motoren!


●Verwenden Sie das Widget „Achsen“ und klicken Sie bei den verschiedenen Achsen auf + und -, um die Motoren zu bewegen. Sie können auch „Tastatursteuerung“ aktivieren und anschließend die Pfeiltasten verwenden, um den Plotter zu bewegen. Wenn Sie einen Stift einsetzen und die Z-Achse absenken, ist das wie ein teures Etch A Sketch.


Eine Anmerkung: Die Position 0 auf der Y-Achse liegt entgegen Ihren Erwartungen am unteren Rand des Zeichenbereichs. Darauf kommen wir später zurück.

CNCjs beim Systemstart ausführen

Weiter geht’s: Wir möchten bei jedem Neustart des Pi wieder in diesen optimalen Zustand gelangen, ohne dass Sie etwas tun müssen. Also:
●Zurück in der SSH-Sitzung zum Pi beenden Sie CNCjs mit Strg-C.
●Stelle sicher, dass es wirklich beendet wurde, indem du den Browser aktualisierst (plotter.local:8000, sofern dies der oben konfigurierte Hostname ist). 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 und rufe dann plotter.local:8000 auf, um zu prüfen, ob die Seite geladen wird.
●Erstelle ein Startskript: pm2 startup. Dadurch wird ein Befehl ausgegeben, den du mit sudo ausführen musst – tue das.
●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 – möglicherweise 3–5 Minuten – und rufe dann http://plotter.local:8000/ auf, um zu prüfen, ob CNCjs wieder erreichbar ist. Wenn du alles richtig gemacht hast, sollte es direkt wieder verfügbar sein.
Geschafft! Wir sind fast am Ziel – CNCjs ist jetzt vollständig eingerichtet. Um etwas zu plotten, müssen wir es jedoch mit einer GCode-Datei versorgen, da es SVGs nicht nativ verarbeitet.

Erstelle eine Pipeline zur Umwandlung von SVG in Gcode

Um unser SVG in Gcode umzuwandeln, verwenden wir Juicy-Gcode, ein kleines Befehlszeilenprogramm.
Eine große Änderung besteht darin, dass wir jetzt relativ zur unteren linken Ecke deines Papiers nullen, nicht zur oberen rechten! An diese Änderung musst du dich möglicherweise erst 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. Dabei handelt es sich einfach um eine YAML-Datei. Hier ist eine gute Ausgangsdatei, die du auf deinem Rechner in flavor.yaml kopieren/einfügen kannst:
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, möglicherweise möchtest du den Wert ändern
  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 dem Papier abgesenkt
tooloff: |
  G0Z0 ; Stift angehoben
  
Ein paar wichtige Hinweise zu dieser Flavor-Datei:
●Ich betreibe den Plotter mit 600 mm/min, was sehr langsam ist. Je nach Stiften und persönlichen Vorlieben möchtest du die Geschwindigkeit möglicherweise erhöhen.
●Die andere bemerkenswerte Zeile ist diejenige, die mit G92 beginnt. In dieser Zeile teilen wir dem Plotter mit: „Egal, wo du dich gerade befindest, das ist jetzt die Home-Position.“ Um einen Plot zu kalibrieren, musst du den Plotterkopf daher manuell (und vorsichtig) in die untere linke Ecke des Papiers bewegen.
Du solltest die Papiergröße in der SVG-Datei korrekt einstellen; 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 jedes Mal einzutippen, ist etwas umständlich, daher habe ich dieses kleine Skript erstellt, um die Sache etwas bequemer zu machen:
#!/bin/bash
# Verwendung: ./run-juicy.sh input.svg [speed]
# Falls keine Geschwindigkeit angegeben ist, wird standardmäßig 600 verwendet

# Prüfen, ob mindestens ein Argument angegeben wurde

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Verwendung: $0 <input-svg> [speed]"
echo " Falls keine Geschwindigkeit angegeben ist, wird standardmäßig 600 verwendet"
exit 1
fi

inputfile="$1"

# Standardgeschwindigkeit auf 600 setzen, falls keine angegeben wurde
speed="${2:-600}"

# Den Namen der Varianten-Datei zusammensetzen
flavor_file="flavor-${speed}mm-speed.yaml"

# Ausgabedateinamen erzeugen, indem die .svg-Erweiterung durch .gcode ersetzt wird
outputfile="${inputfile%.*}.gcode"

# Den Befehl juicy-gcode ausführen

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Du kannst jetzt mehrere Dateien mit unterschiedlichen Geschwindigkeitsvarianten haben, jeweils mit einer anderen Laufgeschwindigkeit, und die Geschwindigkeit einfach angeben, indem du die Zahl übergibst, die dem Dateinamen der Varianten-Datei entspricht.
Da du jetzt 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 zuzuführen: Wir können sie über den Browser hochladen, indem wir auf „Upload G-code“ klicken, oder wir richten ein Überwachungsverzeichnis ein (sodass der Plotter jedes Mal mit dem Plotten beginnt, sobald eine GCode-Datei darin auftaucht).
Letzteres klingt in der Theorie cool, ergibt aber nicht besonders viel Sinn: Für jeden Plot ist ohnehin eine manuelle Einrichtung erforderlich. Wir müssen das Papier platzieren, den Stift einsetzen usw. Daher ergibt es für mich viel mehr Sinn, die Datei manuell über den Browser hochzuladen.
Zoome anschließend heraus, um die Vorschau zu sehen. 

Das liefert uns ein paar wichtige Plausibilitätsprüfungen:
●Wir werden noch einmal daran erinnert (…), dass der Plotvorgang an 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, dies kurz zu überprüfen und sicherzustellen, dass sie deinen Plotbereich nicht überschreiten. Falls doch, stimmt etwas mit deiner SVG-Datei nicht – starte den Plotvorgang nicht, sonst wären deine Servos ziemlich unglücklich.
Unter der Annahme, dass sich dein Stift an der unteren linken Ecke deines Papiers befindet und die Maße stimmen, ist es Zeit zum Plotten! Klicke auf die Schaltfläche „Play“ und beobachte deinen Plotter. Du kannst deinen Computer jetzt herunterfahren oder in einen anderen Raum mitnehmen, während der Pi und der Plotter ihre Arbeit erledigen. Sieg!

Zurück zum Blog

Kommentar hinterlassen

Bitte beachten Sie, dass Kommentare vor ihrer Veröffentlichung genehmigt werden müssen.