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 scherm

Dit artikel is bijgedragen door @Erez Zukerman

Ik werk graag met mijn iDraw 2.0-plotter, maar ik laat hem graag langzaam draaien - en daarom kunnen mijn tekeningen een tijdje duren. Ik heb de standaardconfiguratie van Inkscape geruime tijd gebruikt, maar ik moest mijn hoofdcomputer ingeschakeld en op de plotter aangesloten 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 het netwerk te verzenden.
●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 hoeft te doen.
●Uitzoeken hoe we onze SVG's naar GCode kunnen converteren (met regeling van de pen­snelheid).
Houd er rekening mee dat deze tutorial ervan uitgaat 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 gaat dat nu eenmaal. Op het moment van schrijven werkte het beschreven systeem bij mij goed.
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 probleem - 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 helemaal opnieuw kunt instellen met logische standaardinstellingen. Dat is precies wat ik heb gedaan: ik pakte een SD-kaart van 32 GB en gebruikte de officiële Raspberry Pi Imager-tool om Raspberry Pi OS erop te zetten.
Met de tool kun je ook meteen enkele standaardinstellingen configureren. Dat raad ik aan. 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/wachtwoord, zodat de Pi tijdens het opstarten verbinding kon maken met mijn netwerk
Ik heb dit allemaal ingesteld en vervolgens de Imager zijn werk laten doen. Toen het klaar was, wierp ik de microSD-kaart uit en plaatste ik die in de Pi. Alleen voor de eerste keer opstarten heb ik de Pi op een toetsenbord en beeldscherm aangesloten - maar strikt noodzakelijk was dat niet. Het duurde een paar momenten voordat de door mij gekozen hostnaam plotter.local op mijn netwerk geregistreerd was, dus gebruikte ik het toetsenbord en beeldscherm om het huidige IP-adres op te vragen (door ifconfig uit te voeren in de terminal).
Ik had via SSH verbinding gemaakt met de machine en het was tijd om naar de volgende stap te gaan: 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 opnieuw verbinding via SSH. Hierdoor 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, voeren we CNCjs één keer uit. Hiermee wordt ons configuratiebestand ~/.cncrc aangemaakt:
○Voer vanaf de opdrachtregel in je home-directory cncjs uit
○Druk op Ctrl+C om het programma af te sluiten
●Je bent nu de trotse eigenaar van een gloednieuwe ~/.cncrc, gefeliciteerd. Laten we deze 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 op je hoofdmachine met je browser 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 Connection (standaard in de linkerbovenhoek).
○Klik op de knop Refresh onder Port.
○Open het vervolgkeuzemenu en kies de poort.

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

Laten we de motoren bewegen!


●Gebruik de widget Axes en druk op + en - bij de verschillende assen om de motoren te verplaatsen. Je kunt ook 'keypad jogging' inschakelen en vervolgens de pijltoetsen gebruiken om de plotter te verplaatsen. Als je een pen plaatst en de Z-as laat zakken, lijkt het op een dure Etch-a-Sketch.


Een opmerking: de 0-positie op de Y-as is het tegenovergestelde van wat je misschien verwacht: deze bevindt zich onderaan het plotgebied. Hier komen we later op terug.

CNCjs bij het opstarten uitvoeren

Nu gaan we verder: we willen telkens wanneer de Pi opnieuw opstart weer op deze ideale plek uitkomen, zonder dat je iets hoeft te doen. Dus:
●Ga terug naar de SSH-sessie op de Pi en stop CNCjs door op Ctrl-C te drukken.
●Controleer of het echt is gestopt door de browser te vernieuwen (plotter.local:8000, ervan uitgaande dat dit de hierboven geconfigureerde hostnaam is). Dit zou nu moeten mislukken.
●Installeer op de Pi pm2: npm install -g pm2
●Start CNCjs met pm2: pm2 start cncjs --name cncjs
●Controleer of het echt is gestart en werkt zoals verwacht: wacht enkele ogenblikken en ga vervolgens naar plotter.local:8000 om te controleren of de pagina wordt geladen.
●Maak een opstartscript: 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 is opgestart, misschien 3-5 minuten, en ga dan naar http://plotter.local:8000/ om te controleren of je CNCjs weer kunt openen. Als je het goed hebt gedaan, zou het gewoon weer moeten werken.
Gelukt! 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 standaard verwerkt.

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

Om onze SVG naar G-code te converteren, gaan we Juicy-Gcode gebruiken, een klein opdrachtregelprogramma.
Een grote verandering is dat we nu de oorsprong ten opzichte van de hoek linksonder van je papier instellen, en niet ten opzichte van rechtsboven! 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 zij 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 erg langzaam, je wilt dit misschien aanpassen
  G00 Z0 ; pen omhoog
  G92 X0 Y0 ; huidige positie beschouwen als 0,0 -- dit is de HOEK LINKSONDER
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 flavorbestand:
●Ik laat de plotter draaien op 600 mm/min, wat erg langzaam is. Afhankelijk van je pennen en voorkeuren wil je dit misschien verhogen.
●De andere opmerkelijke regel is degene die met G92 begint. In 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 hoek linksonder 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 een mondvol om telkens te moeten 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 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 uitvoeringsbestand 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 uitvoeringen hebben, elk met een andere uitvoersnelheid, en de snelheid eenvoudig opgeven door het getal door te geven dat overeenkomt met de bestandsnaam van het uitvoeringsbestand.
Nu je een GCode-bestand hebt, is het tijd om het te uploaden en te plotten!

De 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 bewaakte map instellen (zodat de plotter begint te werken zodra er een GCode-bestand in verschijnt).
Dat laatste klinkt in theorie cool, maar is niet echt logisch: Voor elk 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.
Zodra je dat hebt gedaan, zoom je uit om het voorbeeld te bekijken. 

Dit geeft ons een paar belangrijke controles op de juistheid:
●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. Het is de moeite waard om even de tijd te nemen 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 er niet mee te plotten, anders zouden je servo's behoorlijk ongelukkig worden.
Ervan uitgaande dat je pen zich in de linkerbenedenhoek van je papier bevindt en de afmetingen kloppen, is het tijd om te plotten! Klik op de knop Afspelen en bekijk je plotter. Je kunt je computer nu uitschakelen of naar een andere kamer brengen terwijl de Pi en de plotter hun werk doen. Overwinning!

Terug naar blog

Laat een reactie achter

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