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

Hoe stel je een iDraw 2.0 plotter en een Raspberry Pi in voor headless gebruik

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 lopen – dus mijn tekeningen kunnen even duren. Ik gebruikte lange tijd de standaard Inkscape-instelling, maar ik moest mijn hoofdcomputer aan en verbonden met de plotter houden 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 gaan 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 voor mij goed.
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.
Iets wat de tool je laat doen, en wat ik zou aanraden, is om meteen enkele 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 het 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 beeldscherm – maar dit was niet strikt noodzakelijk. De hostname plotter.local die ik koos, duurde een paar momenten om op mijn netwerk geregistreerd te worden, dus gebruikte ik het toetsenbord en beeldscherm om het huidige IP-adres te achterhalen (door ifconfig vanuit de terminal uit te voeren).
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 aan 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 tot nu toe alles goed is gegaan, laten we CNCjs één keer draaien. Dit maakt ons configuratiebestand ~/.cncrc aan:
○Start vanaf de opdrachtregel in je home directory cncjs
○Druk op Ctrl+C om het te verlaten
●Je bent nu de trotse eigenaar van een gloednieuw ~/.cncrc, gefeliciteerd. Laten we het bewerken, vooral om externe toegang toe te staan:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": JOUW_GEHEIM_HIER
}
De cruciale regel die je hier moet toevoegen is de eerste, allowRemoteAccess.
●Start cncjs opnieuw op de Pi.
●Ga met je browser op je hoofdcomputer naar plotter.local:8000. CNCjs zou nu 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 goed is gegaan, zou de Gcode-console nu wat tekst moeten tonen.

Laten we de motoren bewegen!


●Gebruik de Axes-widget en 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: de 0-positie op de Y-as is het tegenovergestelde 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

Laten we verder gaan; we willen nu dat we altijd terugkeren naar deze ideale stand zodra de Pi opnieuw opstart, zonder dat jij iets hoeft te doen. Dus:
●Ga in de SSH-sessie naar de Pi en 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 aan: 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 gelukt is: 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 pipeline om SVG's naar Gcode te converteren

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! Hieraan wennen kan even duren. Ik zal je er later nog aan herinneren.
●Download op je hoofdmachine de Juicy-Gcode release binary voor je besturingssysteem: https://github.com/domoszlai/juicy-gcode/releases
●Juicy-Gcode configuratie wordt opgeslagen in iets dat ze een "flavor-bestand" 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 kunt dit 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 te typen, dus ik heb dit kleine script gemaakt om het wat makkelijker te maken:
#!/bin/bash
# Gebruik: ./run-juicy.sh input.svg [speed]
# Als snelheid niet is opgegeven, is de standaard 600

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

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; dan
echo "Gebruik: $0 <input-svg> [speed]"
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 mee 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 biedt 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 zodra 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 begint 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 buiten je plotgebied vallen. Als dat wel zo is, is er een probleem met je SVG – begin dan niet met plotten, want je servo’s zouden daar niet blij mee 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!

Terug naar de blog

Laat een reactie achter

Houd er rekening mee dat opmerkingen goedgekeurd moeten worden voordat ze worden gepubliceerd.