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 monitor

Questo articolo è stato scritto 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 un bel po' ho usato la configurazione predefinita di Inkscape, ma dovevo tenere acceso il mio 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 tutto un po' più semplice di quanto pensassi, oltre che divertente. Ecco cosa faremo:
●Configurare il Pi stesso.
●Installare CNCjs e le relative dipendenze. È ciò che useremo per controllare effettivamente il plotter, inviando GCode tramite la rete.
●Dedicheremo anche un momento alla configurazione di CNCjs affinché si avvii automaticamente ogni volta che il Pi viene avviato, senza che tu debba accedere o fare altro.
●Capire come convertire i nostri SVG in GCode, con controllo della velocità della penna.
Nota che questo tutorial presuppone una certa familiarità con la riga di comando di Linux. Se lo segui a distanza di mesi o anni dalla sua pubblicazione iniziale, potresti incontrare ogni sorta di errore lungo il percorso: è nella natura del gioco. Al momento della stesura, il sistema descritto funzionava bene per me.
Cominciamo!

Configura il Pi

È meglio poter 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 ciò 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.
Uno degli aspetti che lo strumento consente di configurare, e che consiglio, è impostare alcune opzioni predefinite direttamente. 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ì da poter accedere subito alla macchina tramite SSH
●Il nome SSID e la password della mia WLAN, così il Pi si connettesse alla mia rete all'avvio
Ho configurato tutto questo e poi ho lasciato che Imager facesse il suo lavoro. Al termine, 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 registrarsi sulla mia rete, quindi ho usato tastiera e display per recuperare l'IP corrente, eseguendo ifconfig dal terminale.
Ho effettuato l'accesso 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. Quindi dobbiamo prima installare Node.
●Accedi tramite SSH al Pi
●Installiamo NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Esci dal terminale e poi accedi 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 tua directory home, esegui cncjs
○Esci premendo Ctrl+C
●Ora sei il fiero proprietario di un nuovissimo ~/.cncrc, congratulazioni. Modifichiamolo, principalmente 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.
●Esegui nuovamente cncjs sul Pi.
●Usando il browser del tuo computer principale, vai su plotter.local:8000. Dovrebbe aprirsi CNCjs.

Ora è il momento di collegare il plotter e verificare se CNCjs riesce a comunicare con esso.
●Collega il plotter iDraw 2.0 alla porta USB del Pi.
●Accendi il plotter.
●In CNCjs, individua il widget Connessione (per impostazione predefinita nell'angolo in alto a sinistra).
○Premi il pulsante Aggiorna sotto Porta.
○Apri il menu a discesa e scegli la porta.

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

Muoviamo i motori!


●Usando il widget Assi, premi + e - sui vari assi per spostare i motori. Puoi anche attivare il «jogging da tastierino» e usare i tasti freccia per spostare il plotter. Se inserisci una penna e abbassi l'asse Z, è come avere un Etch-A-Sketch costoso.


Una nota: la posizione 0 sull'asse Y è opposta a quella che potresti aspettarti: si trova nella parte inferiore dell'area di disegno. Ci torneremo più avanti.

Avviare CNCjs all'avvio

Proseguendo, ora vogliamo tornare automaticamente a questo punto ideale ogni volta che il Pi si riavvia, senza che tu debba fare nulla. Quindi:
●Tornando alla sessione SSH sul Pi, arresta CNCjs premendo Ctrl-C.
●Assicurati che sia davvero arrestato aggiornando il browser (plotter.local:8000, supponendo che questo sia il nome host configurato sopra). A questo punto 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 venga caricato.
●Crea uno script di avvio: pm2 startup. Questo comando mostrerà un comando da eseguire con sudo; fallo.
●Salva l'elenco dei processi: pm2 save
●Riavvia il Pi per verificare se ha funzionato: sudo reboot
●Aspetta che si riavvii, forse 3-5 minuti, poi apri http://plotter.local:8000/ per verificare se riesci nuovamente ad accedere a CNCjs. Se hai fatto tutto correttamente, dovrebbe tornare subito operativo.
Vittoria! Ci siamo quasi: CNCjs è ormai 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 utility da riga di comando.
Una grande differenza è che ora impostiamo lo zero 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 è salvata in un file che chiamano «file di configurazione». È semplicemente un file YAML. Ecco un buon file di configurazione da cui partire; puoi copiare e incollare questo contenuto nel file flavor.yaml sulla tua macchina:
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 lento, potresti volerlo modificare
  G00 Z0 ; penna sollevata
  G92 X0 Y0 ; considera la posizione corrente 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 notare 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 impostare 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 po’ laborioso digitare tutto ogni volta, quindi ho creato questo piccolo script per rendere le cose più comode:
#!/bin/bash
# Utilizzo: ./run-juicy.sh input.svg [speed]
# Se la velocità non viene specificata, il valore predefinito è 600

# Verifica che sia stato fornito almeno un argomento

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

inputfile="$1"

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

# Costruisci il nome del file del gusto
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 più file con gusti diversi, ciascuno con una diversa velocità di esecuzione, e specificare facilmente la velocità passando il numero corrispondente al nome del file del gusto.
Ora che hai un file GCode, è il momento di caricarlo e tracciare!

Carica il GCode e traccia

CNCjs ci offre due modi per fornire 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).
In teoria quest’ultima opzione sembra interessante, ma non ha molto senso: ogni tracciato richiede comunque qualche 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 verifiche di sicurezza:
●Ci viene ricordato ancora una volta (…) che il tracciato inizierà dall’angolo inferiore sinistro del foglio.
●Possiamo vedere le misure su entrambi gli assi X e Y. Vale la pena dedicare un momento alla 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 non ne sarebbero affatto contenti.
Supponendo che la penna sia nell’angolo inferiore sinistro del foglio e che le misure siano corrette, è il momento di tracciare! Premi il pulsante Riproduci 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.