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

Come configurare un plotter iDraw 2.0 e un Raspberry Pi per il funzionamento senza interfaccia utente

Questo articolo è stato realizzato da @Erez Zukerman

Mi piace molto usare il mio plotter iDraw 2.0, ma preferisco farlo funzionare lentamente, quindi i miei disegni possono richiedere un po’ di tempo. Per parecchio tempo ho usato la configurazione predefinita di Inkscape, ma dovevo tenere acceso il computer principale e collegato al plotter mentre lavorava. Non era l’ideale, quindi ho deciso di vedere se riuscivo a configurare un sistema “headless” usando un Raspberry Pi.
Si è rivelato molto più semplice di quanto pensassi, oltre che divertente. Ecco cosa faremo:
●Configurare il Pi.
●Installare CNCjs e le relative dipendenze. È ciò che useremo per controllare effettivamente il plotter, inviando il GCode tramite la rete.
●Dedicheremo anche un momento a configurare CNCjs in modo che si avvii automaticamente ogni volta che il Pi si avvia, senza che tu debba effettuare l’accesso o fare altro.
●Capire come convertire i nostri SVG in GCode (con il controllo della velocità della penna).
Tieni presente che questo tutorial presuppone una certa dimestichezza con la riga di comando di Linux. Se lo segui mesi o anni dopo la sua pubblicazione iniziale, potresti imbatterti in ogni sorta di errore lungo il percorso: è nella natura del mezzo. Al momento della stesura, il sistema descritto funzionava bene per me.
Cominciamo!

Configura il Pi

È meglio, se possibile, dedicare un Pi esclusivamente a questo progetto, così sarà il tuo “controller del plotter”. In caso contrario, nessun problema: funzionerà comunque, ma col tempo potrebbe essere meno pratico.
Un altro buon motivo per dedicare un Pi esclusivamente a questo progetto è che puoi configurarlo da zero con impostazioni predefinite sensate. Ed è proprio quello che ho fatto: ho preso una scheda SD da 32 GB e ho usato lo strumento ufficiale Raspberry Pi Imager per installarvi Raspberry Pi OS.
Una cosa che lo strumento permette di fare, e che consiglio, è configurare alcune impostazioni predefinite fin dall’inizio. Ho usato il programma di installazione per configurare quanto segue:
●Il mio nome utente e la mia password
●Un nome host locale per il controller del plotter (nel mio caso, plotter.local)
●La mia chiave SSH pubblica, così potessi accedere subito alla macchina tramite SSH
●Il SSID e la password della mia WLAN, così il Pi potesse connettersi alla mia rete all’avvio
Ho configurato tutto questo e poi ho lasciato che Imager facesse il suo lavoro. Quando ha finito, ho espulso la scheda microSD e l’ho inserita nel Pi. Solo per il primo avvio, ho collegato il Pi a una tastiera e a un display, ma non era strettamente necessario. Il nome host plotter.local che avevo scelto ha impiegato qualche istante per essere registrato sulla mia rete, quindi ho usato la tastiera e il display per recuperare l’IP attuale (eseguendo ifconfig dal terminale).
Ho effettuato l’accesso tramite SSH alla macchina ed era il momento di passare al passaggio successivo: installare CNCjs

Installare CNCjs

Come si può intuire dal nome, CNCjs è basato su Node. Per prima cosa dobbiamo quindi installare Node.
●Accedete tramite SSH al Pi
●Installiamo NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Uscite dal terminale e poi accedete nuovamente tramite SSH. In questo modo viene caricato NVM.
●Ora installiamo node:
○nvm install node
●Ottimo! È il momento di installare CNCjs:
○npm install -g cncjs
●Supponendo che fin qui tutto abbia funzionato, eseguiamo CNCjs una sola volta. Questo creerà il nostro file di configurazione, ~/.cncrc:
○Dalla riga di comando, nella directory home, eseguite cncjs
○Premete Ctrl+C per uscire
●Ora siete i fieri proprietari di un file ~/.cncrc nuovo di zecca, congratulazioni. Modifichiamolo, soprattutto per consentire l’accesso remoto:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": YOUR_SECRET HERE
}
La riga fondamentale da aggiungere qui è la prima, allowRemoteAccess.
●Eseguite nuovamente cncjs sul Pi.
●Usando il browser del computer principale, visitate plotter.local:8000. Dovrebbe aprirsi CNCjs.

Ora è il momento di collegare il plotter e verificare se CNCjs riesce a comunicare con esso.
●Collegate il plotter iDraw 2.0 alla porta USB del Pi.
●Accendete il plotter.
●In CNCjs, individuate il widget Connessione (per impostazione predefinita nell’angolo in alto a sinistra).
○Premete il pulsante Aggiorna sotto Porta.
○Aprite il menu a discesa e scegliete la porta.

●Fate clic su Apri. Se tutto ha funzionato, la console G-code dovrebbe ora mostrare del testo.

Muoviamo i motori!


●Usando il widget Assi, premete + e - sui vari assi per spostare i motori. Potete anche attivare il “jogging da tastierino” e usare i tasti freccia per spostare il plotter. Se inserite una penna e abbassate l’asse Z, è come avere un Etch A Sketch costoso.


Una nota: la posizione 0 sull’asse Y è l’opposto di ciò che potreste aspettarvi: si trova nella parte inferiore dell’area del tracciato. Torneremo su questo più avanti.

Avviare CNCjs all’avvio

Procedendo, ora vogliamo poter tornare automaticamente a questo punto ottimale ogni volta che il Pi si riavvia, senza dover fare nulla. Quindi:
●Tornate alla sessione SSH sul Pi e terminate CNCjs premendo Ctrl-C.
●Assicurati che sia davvero arrestato aggiornando il browser (plotter.local:8000, supponendo che questo sia il nome host configurato in precedenza). Ora dovrebbe non funzionare.
●Sul Pi, installa pm2: npm install -g pm2
●Avvia CNCjs con pm2: pm2 start cncjs --name cncjs
●Assicurati che sia stato davvero avviato e funzioni come previsto: attendi qualche istante, poi vai su plotter.local:8000 e verifica che la pagina venga caricata.
●Crea uno script di avvio: pm2 startup. Verrà mostrato un comando da eseguire con sudo; fallo.
●Salva l'elenco dei processi: pm2 save
●Riavvia il Pi per verificare che funzioni: sudo reboot
●Attendi che si riavvii, magari 3-5 minuti, poi apri http://plotter.local:8000/ per verificare se riesci ad accedere di nuovo a CNCjs. Se hai fatto tutto correttamente, dovrebbe tornare subito disponibile.
Vittoria! Ci siamo quasi: CNCjs è ora completamente configurato. Ma per tracciare qualcosa dobbiamo fornirgli un file GCode: non gestisce nativamente gli SVG.

Crea una pipeline per convertire gli SVG in Gcode

Per convertire il nostro SVG in Gcode, useremo Juicy-Gcode, una piccola utilità da riga di comando.
Una grande differenza è che ora azzeriamo la posizione rispetto all'angolo in basso a sinistra del foglio, non a quello in alto a destra! Potrebbe volerci un po' per abituarsi a questo cambiamento. Te lo ricorderò più avanti.
●Sul computer principale, scarica il binario della versione di Juicy-Gcode per il tuo sistema operativo: https://github.com/domoszlai/juicy-gcode/releases
●La configurazione di Juicy-Gcode viene salvata in un cosiddetto «file di configurazione». È semplicemente un file YAML. Ecco un buon file di configurazione da cui iniziare; puoi copiare/incollare questo contenuto in flavor.yaml sul tuo computer:
begin: |
  G21 ; imposta le unità in millimetri
  G17 ; imposta la selezione del piano su XY
  G90 ; imposta il posizionamento assoluto
  F600  ; imposta la velocità a 600 mm/min -- è davvero bassa, potresti voler modificare questo valore
  G00 Z0 ; penna sollevata
  G92 X0 Y0 ; considera la posizione attuale come 0,0 -- questo è l'angolo IN BASSO A SINISTRA
end: |
  G0Z0 ; penna sollevata
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; penna abbassata sul foglio
tooloff: |
  G0Z0 ; penna sollevata
  
Alcune cose importanti da sapere su questo file di configurazione:
●Uso il plotter a 600 mm/min, una velocità molto bassa. Potresti volerla aumentare, a seconda delle tue penne e delle tue preferenze.
●L'altra riga degna di nota è quella che inizia con G92. In questa riga diciamo al plotter «ovunque tu sia in questo momento, quella è casa». Quindi, per calibrare un disegno, ci aspettiamo che tu sposti manualmente (e delicatamente) la testina del plotter nell'angolo in basso a sinistra del foglio.
È importante configurare correttamente le dimensioni del foglio nell’SVG.
Per eseguire Juicy-Gcode, il comando è simile a questo:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
È un comando un po’ troppo lungo da digitare ogni volta, quindi ho creato questo piccolo script per rendere le cose più pratiche:
#!/bin/bash
# Uso: ./run-juicy.sh input.svg [speed]
# Se la velocità non viene fornita, il valore predefinito è 600

# Verifica che sia stato fornito almeno un argomento

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Uso: $0 <input-svg> [speed]"
echo " Se la velocità non viene fornita, il valore predefinito è 600"
exit 1
fi

inputfile="$1"

# Imposta la velocità predefinita su 600 se non viene fornita
speed="${2:-600}"

# Crea il nome del file della variante
flavor_file="flavor-[speed]mm-speed.yaml"

# Genera il nome del file di output sostituendo l’estensione .svg con .gcode
outputfile="${inputfile%.*}.gcode"

# Esegui il comando juicy-gcode

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Ora puoi avere diversi file di varianti, ciascuno con una velocità di esecuzione diversa, e specificare facilmente la velocità passando il numero corrispondente al nome del file della variante.
Ora che hai un file GCode, è il momento di caricarlo e tracciare!

Carica il GCode e traccia

CNCjs ci offre due modi per inserire un file GCode: possiamo caricarlo tramite il browser facendo clic su “Carica G-code”, oppure possiamo configurare una directory monitorata (in modo che, ogni volta che vi compare un file GCode, il plotter inizi a lavorare).
Quest’ultima opzione sembra interessante in teoria, ma non ha molto senso: ogni tracciato richiede comunque un po’ di configurazione manuale. Dobbiamo posizionare il foglio, installare la penna, ecc. Quindi, per me, ha molto più senso caricare manualmente il file tramite il browser.
Dopo averlo fatto, riduci lo zoom per visualizzare l’anteprima. 

Questo ci offre un paio di importanti controlli di coerenza:
●Ci viene ricordato ancora una volta (…) che il tracciato inizierà dall’angolo in basso a sinistra del foglio.
●Possiamo vedere le misure su entrambi gli assi X e Y. Vale la pena dedicare un momento alla loro lettura e verificare che non superino l’area di tracciamento. In caso contrario, c’è un problema con il tuo SVG: non iniziare a tracciarlo, altrimenti i tuoi servomotori ne sarebbero piuttosto scontenti.
Supponendo che la penna si trovi nell’angolo in basso a sinistra del foglio e che le misure siano corrette, è il momento di tracciare! Premi il pulsante Play e osserva il plotter. Ora puoi spegnere il computer o portarlo in un’altra stanza mentre il Pi e il plotter lavorano. Vittoria!

Torna al blog

Lascia un commento

Tieni presente che i commenti devono essere approvati prima di essere pubblicati.