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

Een iDraw 2.0-plotter en een Raspberry Pi instellen voor bediening zonder monitor

Dit artikel is geschreven door @Erez Zukerman

Ik werk graag met mijn iDraw 2.0-plotter, maar ik gebruik hem graag langzaam – daardoor kunnen mijn tekeningen behoorlijk wat tijd in beslag nemen. Ik heb lange tijd de standaardconfiguratie van Inkscape gebruikt, maar ik moest mijn hoofdcomputer aan laten staan en met de plotter verbonden houden terwijl die aan het werk was. Dat was niet ideaal – dus besloot ik te kijken of ik een “headless” configuratie met een Raspberry Pi kon opzetten.
Het bleek een stuk eenvoudiger en ook leuker dan ik had verwacht. Dit gaan we doen:
●De Pi zelf instellen.
●CNCjs en de bijbehorende afhankelijkheden installeren. Hiermee gaan we de plotter daadwerkelijk aansturen door GCode via het netwerk te versturen.
●We nemen ook even de tijd om alles zo in te stellen dat CNCjs automatisch start wanneer de Pi opstart, zonder dat je hoeft in te loggen of iets te doen.
●Uitzoeken hoe we onze SVG's naar GCode kunnen converteren (met controle over de pensnelheid).
Let op: deze tutorial gaat ervan uit dat je vertrouwd bent met de Linux-opdrachtregel. Als je deze handleiding maanden of jaren na de eerste publicatie volgt, kun je onderweg allerlei fouten tegenkomen – zo werkt dat nu eenmaal. Op het moment van schrijven werkte het beschreven systeem goed voor mij.
Laten we beginnen!

De Pi instellen

Het is het beste als je speciaal voor dit project een Pi kunt gebruiken, zodat die je “plottercontroller” is. Zo niet, geen zorgen – het werkt nog steeds, maar wordt na verloop van tijd misschien minder handig.
Een andere goede reden om speciaal voor dit project een Pi te gebruiken, is dat je die vanaf nul kunt instellen met logische standaardinstellingen. Dat heb ik dus gedaan: ik pakte een SD-kaart van 32 GB en gebruikte de officiële Raspberry Pi Imager-tool om Raspberry Pi OS erop te installeren.
Met deze tool kun je ook meteen enkele standaardinstellingen configureren, wat ik zou aanraden. Ik gebruikte het installatieprogramma om het volgende in te stellen:
●Mijn gebruikersnaam en wachtwoord
●Een lokale hostnaam voor de plottercontroller (in mijn geval plotter.local)
●Mijn openbare SSH-sleutel, zodat ik meteen via SSH verbinding kon maken met de machine
●Mijn WLAN-SSID en wachtwoord, zodat de Pi tijdens het opstarten verbinding met mijn netwerk zou maken
Ik heb dit allemaal geconfigureerd en de Imager vervolgens zijn werk laten doen. Toen dat klaar was, wierp ik de microSD-kaart uit en stopte ik die in de Pi. Alleen voor de eerste keer opstarten sloot ik de Pi aan op een toetsenbord en beeldscherm – maar strikt noodzakelijk was dat niet. De door mij gekozen hostnaam plotter.local had even tijd nodig om op mijn netwerk te worden geregistreerd, dus gebruikte ik het toetsenbord en beeldscherm om het huidige IP-adres op te zoeken (door ifconfig uit te voeren in de terminal).
Ik maakte via SSH verbinding met de machine en het was tijd om door te gaan naar de volgende stap: CNCjs installeren

CNCjs installeren

Zoals je misschien uit de naam kunt opmaken, is CNCjs gebaseerd op Node. We moeten Node dus eerst installeren.
●Maak via SSH verbinding met de Pi
●Laten we NVM installeren:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Sluit de terminal en maak opnieuw verbinding via SSH. Hiermee wordt NVM geladen.
●Laten we nu Node installeren:
○nvm install node
●Mooi! Tijd om CNCjs te installeren:
○npm install -g cncjs
●Als tot nu toe alles goed is gegaan, laten we CNCjs dan één keer uitvoeren. Hiermee maken we ons configuratiebestand ~/.cncrc:
○Voer vanaf de opdrachtregel, in je thuismap, cncjs uit
○Druk op Ctrl+C om het te verlaten
●Je bent nu de trotse eigenaar van een gloednieuw ~/.cncrc-bestand, gefeliciteerd. Laten we het bewerken, voornamelijk om externe toegang toe te staan:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": YOUR_SECRET HERE
}
De belangrijkste regel die je hier moet toevoegen is de eerste: allowRemoteAccess.
●Voer cncjs opnieuw uit op de Pi.
●Ga in de browser op je hoofdcomputer naar plotter.local:8000. CNCjs zou nu moeten openen.

Nu is het tijd om de plotter aan te sluiten en te kijken of CNCjs ermee kan communiceren.
●Sluit de iDraw 2.0-plotter aan op de USB-poort van de Pi.
●Zet de plotter aan.
●Zoek in CNCjs de widget Verbinding (standaard linksboven).
○Klik op de knop Vernieuwen onder Poort.
○Open de vervolgkeuzelijst en kies de poort.

●Klik op Openen. Als alles goed is gegaan, zou de G-codeconsole nu tekst moeten weergeven.

Laten we de motoren verplaatsen!


●Gebruik de widget Assen en klik op + en - bij de verschillende assen om de motoren te verplaatsen. Je kunt ook ‘toetsenbordverplaatsing’ inschakelen en vervolgens de pijltjestoetsen gebruiken om de plotter te verplaatsen. Als je een pen plaatst en de Z-as laat zakken, is het net een dure Etch A Sketch.


Eén opmerking: de 0-positie op de Y-as is het tegenovergestelde van wat je misschien verwacht: de pen gaat naar de onderkant van het tekengebied. Hier komen we later op terug.

CNCjs automatisch starten bij het opstarten

We gaan meteen verder. We willen deze ideale situatie weer bereiken wanneer de Pi opnieuw opstart, zonder dat je iets hoeft te doen. Dus:
●Ga in de SSH-sessie naar de Pi en stop CNCjs met Ctrl-C.
●Controleer of het echt is gestopt door de browser te vernieuwen (plotter.local:8000, ervan uitgaande dat dit de hostnaam is die je hierboven hebt geconfigureerd). Dit zou nu moeten mislukken.
●Installeer pm2 op de Pi: npm install -g pm2
●Start CNCjs met pm2: pm2 start cncjs --name cncjs
●Controleer of het echt is gestart en werkt zoals verwacht: wacht even en ga dan naar plotter.local:8000 om te zien of de pagina wordt geladen.
●Maak een opstartscrip t: pm2 startup. Dit geeft een opdracht die je met sudo moet uitvoeren; doe dat dus.
●Sla de proceslijst op: pm2 save
●Start de Pi opnieuw op om te controleren of het heeft gewerkt: sudo reboot
●Wacht tot het weer beschikbaar is, misschien 3–5 minuten, en ga dan naar http://plotter.local:8000/ om te kijken of je CNCjs weer kunt openen. Als je het goed hebt gedaan, zou het gewoon weer beschikbaar moeten zijn.
Hoera! We zijn er bijna – CNCjs is nu helemaal ingesteld. Maar om iets te plotten, moeten we het een GCode-bestand geven – SVG's worden niet standaard ondersteund.

Maak een pipeline om SVG's naar Gcode te converteren

Om onze SVG naar Gcode te converteren, gebruiken we Juicy-Gcode, een klein opdrachtregelprogramma.
Een grote verandering is dat we nu nulstellen ten opzichte van de linkerbenedenhoek van je papier, en niet de rechterbovenhoek! Aan deze verandering moet je misschien even wennen. Ik herinner je er later nogmaals aan.
●Download op je hoofdcomputer het Juicy-Gcode-releasebestand voor je besturingssysteem: https://github.com/domoszlai/juicy-gcode/releases
●De Juicy-Gcode-configuratie wordt opgeslagen in een zogenaamd „flavorbestand”. Dit is gewoon een yaml-bestand. Hier is een goed startpunt; je kunt dit kopiëren en in flavor.yaml op je machine plakken:
begin: |
  G21 ; Eenheden instellen op millimeters
  G17 ; Vlakselectie instellen op XY
  G90 ; Absolute positionering instellen
  F600  ; Snelheid instellen op 600 mm/min -- dit is echt langzaam, mogelijk wil je dit aanpassen
  G00 Z0 ; pen omhoog
  G92 X0 Y0 ; huidige positie beschouwen als 0,0 -- dit is de LINKERBENEDENHOEK
end: |
  G0Z0 ; pen omhoog
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; pen omlaag op papier
tooloff: |
  G0Z0 ; pen omhoog
  
Een paar belangrijke dingen om op te letten bij dit flavorbestand:
●Ik laat de plotter draaien op 600 mm/min, wat erg langzaam is. Afhankelijk van je pennen en voorkeuren wil je dit misschien versnellen.
●De andere opmerkelijke regel is degene die met G92 begint. Met deze regel vertellen we de plotter: „waar je nu ook bent, dat is thuis”. Om een plot te kalibreren, verwachten we dat je de plotterkop handmatig (en voorzichtig) naar de linkerbenedenhoek van het papier verplaatst.
Zorg er wel voor dat het papierformaat correct is ingesteld in de SVG; dit is belangrijk.
Om Juicy-Gcode uit te voeren, ziet de opdracht er ongeveer zo uit:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Dat is nogal wat om telkens opnieuw in te typen, dus heb ik dit kleine script gemaakt om het wat handiger te maken:
#!/bin/bash
# Gebruik: ./run-juicy.sh input.svg [speed]
# Als de snelheid niet is opgegeven, is de standaardwaarde 600

# Controleer of er ten minste één argument is opgegeven

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Gebruik: $0 <input-svg> [speed]"
echo " Als de snelheid niet is opgegeven, is de standaardwaarde 600"
exit 1
fi

inputfile="$1"

# Stel de standaardsnelheid in op 600 als deze niet is opgegeven
speed="${2:-600}"

# Stel de naam van het variantbestand samen
flavor_file="flavor-${speed}mm-speed.yaml"

# Genereer de naam van het uitvoerbestand door de extensie .svg te vervangen door .gcode
outputfile="${inputfile%.*}.gcode"

# Voer de opdracht juicy-gcode uit

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Je kunt nu meerdere bestanden met verschillende varianten hebben, elk met een andere uitvoersnelheid, en de snelheid eenvoudig opgeven door het getal te gebruiken dat overeenkomt met de bestandsnaam van de variant.
Nu je een G-codebestand hebt, is het tijd om het te uploaden en te plotten!

Upload de G-code en plot

CNCjs biedt ons twee manieren om een G-codebestand in te voeren: we kunnen het via de browser uploaden door op “G-code uploaden” te klikken, of we kunnen een bewaakte map instellen (zodat de plotter automatisch begint te werken zodra er een G-codebestand in verschijnt).
Dat laatste klinkt in theorie leuk, maar is niet echt logisch: voor elke plot is toch enige handmatige voorbereiding nodig. We moeten het papier plaatsen, de pen installeren, enzovoort. Voor mij is het daarom veel logischer om het bestand handmatig via de browser te uploaden.
Zoom daarna uit om het voorbeeld te bekijken. 

Dit geeft ons een paar belangrijke controles om te zien of alles klopt:
●We worden er nogmaals aan herinnerd (…) dat het plotten begint in de linkerbenedenhoek van ons papier.
●We krijgen metingen te zien op zowel de X- als de Y-as. Neem even de tijd om dit te lezen en te controleren of ze je plotgebied niet overschrijden. Als dat wel zo is, is er een probleem met je SVG. Begin dan niet met plotten, anders zouden je servo's daar behoorlijk ongelukkig van worden.
Als je pen zich in de linkerbenedenhoek van je papier bevindt en de metingen kloppen, is het tijd om te plotten! Klik op de knop Afspelen en kijk naar je plotter. Je kunt nu je computer afsluiten of naar een andere kamer meenemen terwijl de Pi en de plotter hun werk doen. Overwinning!

Terug naar blog

Plaats een opmerking

Let op: reacties moeten worden goedgekeurd voordat ze worden gepubliceerd.