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 lasciare acceso il computer principale e collegato al plotter durante il lavoro. Non era l'ideale, quindi ho deciso di vedere se riuscivo a configurare un sistema “headless” usando un Raspberry Pi.
Si è rivelato tutto molto 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 rete.
●Dedicheremo anche un momento a configurare CNCjs in modo che si avvii automaticamente ogni volta che il Pi si accende, senza che tu debba effettuare l'accesso o fare altro.
●Capire come convertire i nostri SVG in GCode (con 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, potresti incontrare ogni sorta di errore lungo il percorso: è nella natura del problema. 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 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.
Lo strumento consente anche di impostare alcuni valori predefiniti fin dall'inizio; te lo consiglio. Ho usato il programma di installazione per configurare quanto segue:
●Il mio nome utente e la password
●Un nome host locale per il controller del plotter (nel mio caso plotter.local)
●La mia chiave SSH pubblica, così potessi collegarmi 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. 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 momento per registrarsi sulla mia rete, quindi ho usato la tastiera e il display per recuperare l'IP attuale (eseguendo ifconfig dal terminale).
Ho effettuato l'accesso alla macchina tramite SSH ed era il momento di passare al passaggio successivo: installare CNCjs
Installa CNCjs
Come puoi intuire dal nome, CNCjs è basato su Node. Quindi dobbiamo prima installare Node.
●Accedi al Pi tramite SSH
●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! È ora di installare CNCjs:
○npm install -g cncjs
●Supponendo che finora tutto abbia funzionato correttamente, eseguiamo CNCjs una sola volta. In questo modo verrà creato il file di configurazione ~/.cncrc:
○Dalla riga di comando, nella tua directory home, esegui cncjs
○Esci premendo Ctrl+C
●Ora possiedi orgogliosamente un nuovissimo ~/.cncrc, 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.
●Esegui di nuovo cncjs sul Pi.
●Usando il browser del 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, nella console G-code dovrebbe ora comparire del testo.

Facciamo muovere i motori!
●Usando il widget degli assi, premi + e - sui vari assi per spostare i motori. Puoi anche abilitare il "movimento da tastierino" e poi usare i tasti freccia per spostare il plotter. Se inserisci una penna e abbassi l'asse Z, è come un Etch-A-Sketch costoso.

Una cosa da notare è che 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.
Fai eseguire CNCjs all'avvio
Andando avanti, ora vogliamo tornare a questo punto ideale ogni volta che il Pi si riavvia, senza che tu debba fare nulla. Quindi:
●Torna alla sessione SSH sul Pi e termina CNCjs premendo Ctrl-C.
●Assicurati che sia davvero terminato aggiornando il browser (plotter.local:8000, supponendo che questo sia il nome host configurato sopra). 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 che 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. Questo comando restituirà un comando che dovrai 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, magari 3-5 minuti, poi visita http://plotter.local:8000/ per verificare se riesci ad accedere di nuovo a CNCjs. Se hai eseguito correttamente i passaggi, 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.
Un cambiamento importante è che ora impostiamo lo zero rispetto all'angolo inferiore sinistro del foglio, non a quello superiore destro! 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 qualcosa che chiamano «file di configurazione». È semplicemente un file YAML. Ecco un buon punto di partenza: puoi copiare e 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 volerla modificare
G00 Z0 ; penna sollevata
G92 X0 Y0 ; considera la posizione attuale come 0,0 -- questo è l'angolo INFERIORE SINISTRO
end: |
G0Z0 ; penna sollevata
G00 X0 Y0 Z0
toolon: |
G0Z6 ; penna abbassata sul foglio
tooloff: |
G0Z0 ; penna sollevata
Un paio di 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 adesso, quella è la posizione iniziale». Quindi, per calibrare un disegno, ci aspettiamo che tu sposti manualmente (e delicatamente) la testina del plotter nell'angolo inferiore sinistro del foglio.
È importante impostare correttamente le dimensioni del foglio nell’SVG.
Per eseguire Juicy-Gcode, il comando è simile al seguente:
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 un po’ più comode:
#!/bin/bash
# Utilizzo: ./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 "Utilizzo: $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 di flavor
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 di flavor diversi, ciascuno con una velocità di esecuzione diversa, e specificare facilmente la velocità passando il numero corrispondente al nome del file di flavor.
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 “Upload G-code”, oppure possiamo configurare una directory monitorata (in modo che, ogni volta che vi compare un file GCode, il plotter inizi a funzionare).
In teoria quest’ultima opzione sembra interessante, ma non ha molto senso: ogni tracciato richiede comunque una configurazione manuale. Dobbiamo posizionare il foglio, installare la penna, ecc. Quindi, secondo me, ha molto più senso caricare manualmente il file tramite il browser.
Dopo averlo fatto, riduci lo zoom per vedere l’anteprima.

Questo ci offre un paio di importanti controlli di sicurezza:
●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 soffermarsi un momento a leggerle 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 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!