Dit artikel is bijgedragen door @Erez Zukerman
Ik vind het erg leuk om mijn iDraw 2.0 plotter te gebruiken, maar ik vind het fijn om hem langzaam te laten werken – dus mijn tekeningen kunnen even duren. Ik gebruikte de standaard Inkscape-instelling een tijdlang, maar ik moest mijn hoofdcomputer aan en verbonden houden met de plotter terwijl hij werkte. Dat was niet ideaal – dus besloot ik te kijken of ik een “headless” setup kon maken met een Raspberry Pi.
Het bleek een stuk makkelijker te zijn dan ik dacht, en ook leuk. Dit is wat we gaan doen:
●Stel de Pi zelf in.
●Installeer CNCjs en de benodigde afhankelijkheden. Dit is wat we gebruiken om de plotter daadwerkelijk te bedienen, door GCode via de kabel te sturen.
●We nemen ook even de tijd om alles zo in te stellen dat CNCjs automatisch start zodra de Pi opstart, zonder dat je hoeft in te loggen of iets te doen.
●Uitzoeken hoe we onze SVG’s kunnen omzetten naar GCode (met pen-snelheidsregeling).
Houd er rekening mee dat deze tutorial ervan uitgaat dat je comfortabel bent met het gebruik van de Linux-commandoregel. Als je dit maanden of jaren na de eerste publicatie volgt, kun je allerlei fouten tegenkomen – dat is nu eenmaal de aard van het beestje. Op het moment van schrijven werkte het systeem zoals beschreven goed voor mij.
Laten we beginnen!
Stel de Pi in
Het is het beste als je een Pi speciaal voor dit project kunt reserveren, zodat het jouw “plottercontroller” wordt. Zo niet, geen probleem – het werkt nog steeds, maar kan na verloop van tijd minder handig zijn.
Een andere goede reden om een Pi speciaal voor dit project te reserveren, is dat je hem vanaf nul kunt instellen met standaardwaarden die logisch zijn. Dus dat is precies wat ik deed: ik pakte een 32GB SD-kaart en gebruikte de officiële Raspberry Pi Imager-tool om deze te flashen met Raspberry Pi OS.
Een ding dat de tool je laat doen, en wat ik zou aanraden, is om meteen wat standaardinstellingen te configureren. Ik gebruikte de installer om het volgende in te stellen:
●Mijn gebruikersnaam en wachtwoord
●Een lokale hostname voor de plottercontroller (in mijn geval plotter.local)
●Mijn publieke SSH-sleutel, zodat ik meteen via SSH op de machine kon inloggen
●Mijn WLAN SSID/wachtwoord, zodat de Pi bij het opstarten verbinding maakt met mijn netwerk
Ik heb dit allemaal geconfigureerd en daarna de Imager zijn werk laten doen. Toen hij klaar was, heb ik de microSD-kaart eruit gehaald en in de Pi gestopt. Alleen voor de eerste keer opstarten heb ik de Pi verbonden met een toetsenbord en scherm – maar dat was niet strikt noodzakelijk. De hostname plotter.local die ik koos, duurde een paar momenten om te registreren op mijn netwerk, dus gebruikte ik het toetsenbord en scherm om het huidige IP-adres te achterhalen (door ifconfig uit te voeren in de terminal).
Ik heb via SSH verbinding gemaakt met de machine, en het was tijd om door te gaan naar de volgende stap: CNCjs installeren
Installeer CNCjs
Zoals je misschien al raadt uit de naam, is CNCjs gebaseerd op Node. Dus we moeten eerst Node installeren.
●SSH naar de Pi
●Laten we NVM installeren:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Sluit de terminal af en ssh opnieuw in. Dit laadt NVM.
●Laten we nu node installeren:
○nvm install node
●Geweldig! Tijd om CNCjs te installeren:
○npm install -g cncjs
●Als alles tot nu toe goed ging, laten we CNCjs één keer draaien. Dit maakt ons configuratiebestand ~/.cncrc aan:
○Voer vanaf de opdrachtregel, in je home directory, cncjs uit
○Druk op Ctrl+C om het te verlaten
●Je bent nu de trotse eigenaar van een gloednieuw ~/.cncrc, gefeliciteerd. Laten we het bewerken, vooral zodat we externe toegang kunnen toestaan:
○vi .cncrc
{
"allowRemoteAccess": true,
"state": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"secret": JOUW_GEHEIM_HIER
}
De cruciale regel om hier toe te voegen is de eerste, allowRemoteAccess.
●Start cncjs opnieuw op de Pi.
●Gebruik je browser op je hoofdcomputer en ga naar plotter.local:8000. Dit zou CNCjs moeten openen.

Vervolgens 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 Connection-widget (standaard linksboven).
○Druk op de Vernieuw-knop onder Poort.
○Open het dropdownmenu en kies de poort.

●Klik op Open. Als alles werkte, zou de Gcode-console nu wat tekst moeten tonen.

Laten we de motoren bewegen!
●Gebruik de Axes-widget, druk op + en - op de verschillende assen om de motoren te bewegen. Je kunt ook “keypad jogging” inschakelen en dan de pijltjestoetsen gebruiken om de plotter te verplaatsen. Als je een pen erin steekt en de Z-as verlaagt, is het net een dure Etch-a-Sketch.

Een opmerking is dat de 0-positie op de Y-as het tegenovergestelde is van wat je zou verwachten: het gaat naar de onderkant van het plotgebied. Hier komen we later op terug.
Zorg dat CNCjs automatisch start bij het opstarten
We gaan verder en willen nu dat we altijd terugkomen in deze ideale positie wanneer de Pi opnieuw opstart, zonder dat je iets hoeft te doen. Dus:
●Terug in de SSH-sessie naar de Pi, stop CNCjs door op Ctrl-C te drukken.
●Zorg dat het echt gestopt is door de browser te verversen (plotter.local:8000, ervan uitgaande dat dat de hostname is die je hierboven hebt ingesteld). Dit zou nu moeten mislukken.
●Installeer pm2 op de Pi: npm install -g pm2
●Start CNCjs met pm2: pm2 start cncjs --name cncjs
●Zorg dat het echt gestart is en werkt zoals je verwacht: wacht een paar momenten, ga dan naar plotter.local:8000 en kijk of het laadt.
●Maak een opstartscript: pm2 startup. Dit geeft een commando dat je met sudo moet uitvoeren, dus doe dat.
●Sla de proceslijst op: pm2 save
●Herstart de Pi om te zien of het werkte: sudo reboot
●Wacht tot het weer opstart, misschien 3-5 minuten, en ga dan naar http://plotter.local:8000/ om te zien of je CNCjs weer kunt bereiken. Als je het goed hebt gedaan, zou het meteen weer moeten opstarten.
Overwinning! We zijn er bijna – CNCjs is nu helemaal ingesteld. Maar om iets te plotten, moeten we het voeden met een GCode-bestand – het kan SVG's niet native verwerken.
Maak een pijplijn voor het converteren van SVG's naar Gcode
Om onze SVG naar Gcode te converteren, gaan we Juicy-Gcode gebruiken, een kleine commandoregeltool.
Een grote verandering hier is dat we nulstellen ten opzichte van de linkerbenedenhoek van je papier, niet de rechterbovenhoek! Deze verandering kan even wennen zijn. Ik zal je er later nog eens aan herinneren.
●Download op je hoofdcomputer de Juicy-Gcode release binary voor je besturingssysteem: https://github.com/domoszlai/juicy-gcode/releases
●Juicy-Gcode configuratie wordt opgeslagen in iets wat ze een "flavor file" noemen. Dit is gewoon een yaml-bestand. Hier is een goed start flavor-bestand, je kunt dit kopiëren/plakken in flavor.yaml op je machine:
begin: |
G21 ; Stel eenheden in op millimeters
G17 ; Stel vlakselectie in op XY
G90 ; Stel absolute positionering in
F600 ; Stel snelheid in op 600 mm/min -- dit is erg langzaam, je wilt dit misschien aanpassen
G00 Z0 ; pen omhoog
G92 X0 Y0 ; beschouw de huidige positie 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 merken over dit flavor-bestand:
●Ik laat de plotter lopen op 600 mm/min, wat erg langzaam is. Je wilt dit misschien versnellen, afhankelijk van je pennen en voorkeuren.
●De andere opvallende regel is degene die begint met G92. In deze regel vertellen we de plotter "waar je nu ook bent, dat is thuis". Dus om een plot te kalibreren, verwachten we dat je de plotterkop handmatig (en voorzichtig) naar de linkerbenedenhoek van het papier beweegt.
Je wilt dat je papierformaat correct is ingesteld in de SVG, dat is belangrijk.
Om Juicy-Gcode uit te voeren, ziet het commando er ongeveer zo uit:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Dat is elke keer een mondvol om uit te typen, dus ik heb dit kleine script gemaakt om het wat gemakkelijker te maken:
#!/bin/bash
# Gebruik: ./run-juicy.sh input.svg [snelheid]
# Als snelheid niet is opgegeven, is de standaard 600
# Controleer of er ten minste één argument is opgegeven
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Gebruik: $0 <input-svg> [snelheid]"
echo " Als snelheid niet is opgegeven, is de standaard 600"
exit 1
fi
inputfile="$1"
# Stel de standaard snelheid in op 600 als deze niet is opgegeven
speed="${2:-600}"
# Bouw de naam van het smaakbestand op
flavor_file="flavor-${speed}mm-speed.yaml"
# Genereer de uitvoernaam door de .svg-extensie te vervangen door .gcode
outputfile="${inputfile%.*}.gcode"
# Voer het juicy-gcode-commando uit
juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Je kunt nu meerdere verschillende smaakbestanden hebben, elk met een andere runsnelheid, en gemakkelijk de snelheid specificeren door het nummer door te geven dat overeenkomt met de bestandsnaam van het smaakbestand.
Nu je een GCode-bestand hebt, is het tijd om te uploaden en te plotten!
Upload de GCode en plot
CNCjs geeft ons twee manieren om een GCode-bestand in te voeren: we kunnen het uploaden via de browser door op “Upload G-code” te klikken, of we kunnen een watch-directory instellen (zodat wanneer er een GCode-bestand in verschijnt, de plotter automatisch begint te werken).
Dat klinkt in theorie leuk, maar heeft niet veel zin: elk plot vereist toch wat handmatige voorbereiding. We moeten het papier plaatsen, de pen installeren, enzovoort. Dus voor mij is het veel logischer om het bestand handmatig via de browser te uploaden.
Als je dat gedaan hebt, zoom dan uit om de preview te zien.

Dit geeft ons een paar belangrijke controles om zeker van te zijn:
●We worden er nogmaals aan herinnerd (…) dat het plot zal beginnen vanuit de linkerbenedenhoek van ons papier.
●We zien de afmetingen op zowel de X- als Y-as. Het is de moeite waard om hier even naar te kijken en te controleren of ze niet groter zijn dan je plotgebied. Als dat wel zo is, is er een probleem met je SVG – begin dan niet met plotten, want je servo’s zullen niet blij zijn.
Als je pen zich in de linkerbenedenhoek van je papier bevindt en de afmetingen kloppen, is het tijd om te plotten! Druk op de Afspelen-knop en kijk naar je plotter. Je kunt nu je computer uitschakelen of naar een andere kamer verplaatsen terwijl de Pi en de plotter aan het werk zijn. Overwinning!