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 nutze 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-Einstellungen verwendet, musste aber meinen Hauptcomputer an und mit dem Plotter verbunden lassen, während er arbeitete. Das war nicht ideal – also wollte ich sehen, ob ich eine „headless“ Lösung mit einem Raspberry Pi einrichten kann.
Es stellte sich als deutlich einfacher heraus, als ich dachte, und machte auch Spaß. Das werden wir tun:
●Richte den Pi selbst ein.
●Installiere CNCjs und seine Abhängigkeiten. 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.
●Finde heraus, 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 funktionierte das beschriebene System bei mir gut.
Lass uns anfangen!

Richte den Pi ein

Am besten kannst du einen Pi nur für dieses Projekt reservieren, sodass er dein „Plotter-Controller“ ist. Wenn nicht, kein Problem – es funktioniert trotzdem, ist aber auf Dauer vielleicht weniger bequem.
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)
●Mein öffentlicher SSH-Schlüssel, damit ich sofort per SSH auf die Maschine zugreifen kann
●Mein WLAN-SSID/Passwort, damit sich der Pi beim Start mit meinem Netzwerk verbindet
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 mit einer Tastatur und einem Display verbunden – das war aber 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, mit dem nächsten Schritt fortzufahren: 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
●Lassen Sie uns NVM installieren:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Verlassen Sie das Terminal und melden Sie sich dann wieder per ssh an. 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:
○Starten Sie cncjs vom Kommandozeilenprompt in Ihrem Home-Verzeichnis
○Mit Strg+C beenden
●Sie sind jetzt stolzer Besitzer einer brandneuen ~/.cncrc, Glückwunsch. Lassen Sie uns diese bearbeiten, hauptsächlich um den Fernzugriff zu erlauben:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": IHR_GEHEIMNIS_HIER
}
Die entscheidende Zeile, die hier hinzugefügt werden muss, ist die erste, allowRemoteAccess.
●Starten Sie cncjs auf dem Pi erneut.
●Öffnen Sie in Ihrem Browser auf Ihrem Hauptrechner plotter.local:8000. Es sollte CNCjs geladen werden.

Als nächstes stecken wir den Plotter ein und prüfen, ob CNCjs mit ihm kommunizieren kann.
●Verbinden Sie den iDraw 2.0 Plotter mit dem USB-Anschluss des Pi.
●Schalten Sie den Plotter ein.
●Suchen Sie in CNCjs das Verbindungs-Widget (standardmäßig oben links).
○Klicken Sie auf die Schaltfläche Aktualisieren unter Port.
○Öffnen Sie das Dropdown-Menü und wählen Sie den Port aus.

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

Lassen Sie uns die Motoren bewegen!


●Verwenden Sie das Achsen-Widget, um mit + und - an den verschiedenen Achsen die Motoren zu bewegen. Sie können auch „Tastatur-Jogging“ aktivieren und dann die Pfeiltasten benutzen, um den Plotter zu steuern. Wenn Sie einen Stift einspannen und die Z-Achse absenken, ist das wie ein teures Etch-a-Sketch.


Eine Anmerkung: Die 0-Position auf der Y-Achse ist das Gegenteil von dem, was man erwarten würde: Sie befindet sich unten im Zeichenbereich. Darauf kommen wir später noch zurück.

CNCjs so einrichten, dass es beim Start automatisch läuft

Weiter geht’s, wir wollen jetzt, dass wir nach jedem Neustart des Pi automatisch wieder an diesen perfekten Punkt 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 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.
Geschafft! Wir sind fast fertig – CNCjs ist jetzt komplett eingerichtet. Aber um etwas zu plotten, müssen wir ihm eine GCode-Datei geben – es kann SVGs nicht nativ verarbeiten.

Erstelle eine Pipeline, um SVGs in Gcode umzuwandeln

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 anheben
  G92 X0 Y0 ; aktuelle Position als 0,0 betrachten – das ist die UNTERE LINKE Ecke
end: |
  G0Z0 ; Stift anheben
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; Stift auf das Papier absenken
tooloff: |
  G0Z0 ; Stift anheben
  
Ein paar wichtige Dinge, die man über diese Flavor-Datei wissen sollte:
●Ich lasse den Plotter mit 600 mm/min laufen, was sehr langsam ist. Je nach deinen Stiften und Vorlieben möchtest du das 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 im SVG korrekt eingestellt haben, 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 geschrieben, um die Sache 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 „Upload G-code“ 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 getan hast, zoome heraus, um die Vorschau zu sehen. 

Das gibt uns ein paar wichtige Plausibilitätsprüfungen:
●Es wird uns 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, einen Moment zu nehmen, um diese zu lesen und zu überprüfen, ob sie deinen Plotbereich nicht überschreiten. Wenn doch, gibt es ein Problem mit deinem SVG – starte das Plotten nicht, sonst wären deine Servos ziemlich unglücklich.
Angenommen, dein Stift befindet sich in der unteren linken Ecke deines Papiers und die Maße sind sinnvoll, 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!

Zurück zum Blog

Einen Kommentar hinterlassen

Bitte beachten Sie, dass Kommentare genehmigt werden müssen, bevor sie veröffentlicht werden.