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 gebruik zonder monitor en toetsenbord

Dit artikel is geschreven door @Erez Zukerman

Ik gebruik mijn iDraw 2.0-plotter graag, maar ik laat hem langzaam werken – en daarom kunnen mijn tekeningen nogal wat tijd in beslag nemen. Ik heb de standaardconfiguratie van Inkscape lange tijd 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 dan ik had gedacht, en ook nog leuk. Dit gaan we doen:
●De Pi zelf instellen.
●CNCjs en de bijbehorende afhankelijkheden installeren. Dit gebruiken we om de plotter daadwerkelijk te besturen door GCode via de kabel 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 regeling van de pen­snelheid).
Let op: in deze handleiding wordt ervan uitgegaan dat je vertrouwd bent met de Linux-opdrachtregel. Als je dit 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 voor mij goed.
Laten we beginnen!

De Pi instellen

Het is het beste als je een Pi speciaal voor dit project kunt gebruiken, zodat het je “plottercontroller” is. 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 gebruiken, is dat je hem 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 er Raspberry Pi OS op te zetten.
Met de tool kun je onder andere meteen enkele standaardinstellingen configureren. Dat raad ik aan. Ik heb het installatieprogramma gebruikt 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/wachtwoord, zodat de Pi bij het opstarten verbinding met mijn netwerk zou maken
Ik heb dit allemaal ingesteld en de Imager vervolgens zijn werk laten doen. Toen dat klaar was, heb ik de microSD-kaart uitgeworpen en in de Pi geplaatst. Alleen voor de eerste keer opstarten heb ik de Pi op een toetsenbord en beeldscherm aangesloten – maar dat was niet strikt noodzakelijk. Het duurde even voordat de door mij gekozen hostnaam plotter.local op mijn netwerk was geregistreerd, dus heb ik het toetsenbord en beeldscherm gebruikt om het huidige IP-adres op te vragen (door ifconfig in de terminal uit te voeren).
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 al 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 af en maak vervolgens 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 alles tot nu toe goed is gegaan, laten we CNCjs dan één keer uitvoeren. Hiermee wordt ons configuratiebestand, ~/.cncrc, aangemaakt:
○Voer vanaf de opdrachtregel in je thuismap cncjs uit
○Sluit het af met Ctrl+C
●Je bent nu de trotse eigenaar van een gloednieuw ~/.cncrc-bestand, gefeliciteerd. Laten we het bewerken, voornamelijk zodat we externe toegang kunnen toestaan:
○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 moeten verschijnen.

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 widget Verbinding (standaard in de linkerbovenhoek).
○Klik op de knop Vernieuwen onder Poort.
○Open de vervolgkeuzelijst en kies de poort.

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

Laten we de motoren bewegen!


●Gebruik de widget Assen en druk op + en - bij de verschillende assen om de motoren te verplaatsen. Je kunt ook ‘keypad jogging’ 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: deze gaat naar de onderkant van het plotgebied. Hier komen we later op terug.

CNCjs laten uitvoeren bij het opstarten

We gaan meteen verder. We willen deze ideale situatie voortaan bereiken wanneer de Pi opnieuw opstart, zonder dat je iets hoeft te doen. Dus:
●Ga terug naar de SSH-sessie op 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 ingesteld). 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 vervolgens naar plotter.local:8000 om te zien of de pagina wordt geladen.
●Maak een opstartscriptt: 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 zien of het gewerkt heeft: sudo reboot
●Wacht tot het weer beschikbaar is, misschien 3-5 minuten, en ga dan naar http://plotter.local:8000/ om te zien of je CNCjs weer kunt openen. Als je het goed hebt gedaan, zou het meteen weer beschikbaar moeten zijn.
Overwinning! We zijn er bijna – CNCjs is nu helemaal ingesteld. Maar om iets te plotten, moeten we het een G-codebestand geven – SVG's worden niet rechtstreeks ondersteund.

Maak een pipeline voor het converteren van SVG's naar G-code

Om onze SVG naar G-code te converteren, gebruiken we Juicy-Gcode, een klein opdrachtregelprogramma.
Een grote verandering is dat we nu ten opzichte van de linkeronderhoek van je papier nulstellen, in plaats van de rechterbovenhoek! Aan deze verandering moet je misschien even wennen. Ik zal je er later nogmaals aan herinneren.
●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 iets wat ze een “flavorbestand” noemen. Dit is gewoon een YAML-bestand. Hier is een goed startpunt; je kunt dit naar flavor.yaml op je machine kopiëren/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 LINKERONDERHOEK
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. In deze regel vertellen we de plotter: “waar je nu ook bent, dat is de thuispositie”. Om een plot te kalibreren, verwachten we dus dat je de plotterkop handmatig (en voorzichtig) naar de linkeronderhoek van het papier beweegt.
Je moet de papierafmetingen correct instellen 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 een hele mond vol om elke keer 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

# Controleren of 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"

# Standaardsnelheid instellen op 600 als deze niet is opgegeven
speed="${2:-600}"

# De naam van het variantbestand samenstellen
flavor_file="flavor-${speed}mm-speed.yaml"

# De uitvoerbestandsnaam genereren door de extensie .svg te vervangen door .gcode
outputfile="${inputfile%.*}.gcode"

# De opdracht juicy-gcode uitvoeren

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

GCode uploaden en plotten

CNCjs biedt ons twee manieren om een GCode-bestand aan te leveren: we kunnen het via de browser uploaden door op ‘Upload G-code’ te klikken, of we kunnen een controlemap instellen (zodat de plotter begint te werken zodra er een GCode-bestand 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. Daarom is het voor mij veel logischer om het bestand handmatig via de browser te uploaden.
Zodra je dat hebt gedaan, zoom je uit om het voorbeeld te bekijken. 

Dit geeft ons een paar belangrijke controles:
●We worden er nogmaals (…) aan herinnerd dat de plot vanaf de hoek linksonder van ons papier begint.
●We zien metingen 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 niet met plotten, anders zouden je servo's daar behoorlijk ongelukkig van worden.
Ervan uitgaande dat je pen zich in de hoek linksonder van je papier bevindt en de afmetingen kloppen, is het tijd om te plotten! Klik op de knop Afspelen en kijk naar je plotter. Je kunt je computer nu uitschakelen of naar een andere kamer meenemen terwijl de Pi en de plotter hun werk doen. Overwinning!

Terug naar de blog

Laat een reactie achter

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