Questo articolo è stato scritto da @Erez Zukerman
Mi piace molto usare il mio plotter iDraw 2.0, ma preferisco usarlo lentamente, quindi i miei plotter possono richiedere un po' di tempo. Ho usato la configurazione predefinita di Inkscape per un bel po', ma dovevo tenere il computer principale acceso e collegato al plotter quando funzionava. Non era l'ideale, quindi ho deciso di provare una configurazione "headless" usando un Raspberry Pi.
Si è rivelato molto più semplice di quanto pensassi, e anche divertente. Ecco cosa faremo:
●Configurare il Pi.
●Installare CNCjs e le sue dipendenze. Questo è ciò che useremo per controllare effettivamente il plotter, inviando GCode via cavo.
●Ci prenderemo anche un momento per configurare le cose in modo che CNCjs si avvii automaticamente all'avvio del Pi, senza che tu debba effettuare il login o fare nulla.
●Scopriremo come convertire i nostri SVG in GCode (con controllo della velocità della penna).
Nota: questo tutorial presuppone che tu abbia familiarità con la riga di comando di Linux. Se stai seguendo mesi o anni dopo la prima pubblicazione di questo tutorial, potresti incorrere in ogni sorta di errore lungo il percorso: è la natura del problema. Al momento in cui scrivo, il sistema descritto funzionava bene per me.
Iniziamo!
Configura il Pi
È meglio se puoi dedicare un Pi solo a questo progetto, in modo che sia il tuo "controller del plotter". In caso contrario, non preoccuparti: funzionerà comunque, ma potrebbe diventare meno pratico col tempo.
Un altro buon motivo per dedicare un Pi solo a questo progetto è che è possibile configurarlo da zero con impostazioni predefinite sensate. Ecco cosa ho fatto: ho preso una scheda SD da 32 GB e ho usato lo strumento ufficiale Raspberry Pi Imager per flasharla con Raspberry Pi OS.
Una cosa che lo strumento consente di fare, e che consiglio, è impostare alcune impostazioni predefinite fin da subito. Ho usato il programma di installazione per configurare quanto segue:
●Nome utente e password
●Un nome host locale per il controller del plotter (plotter.local nel mio caso)
●La mia chiave SSH pubblica, così da poter accedere subito alla macchina tramite SSH
●Il mio SSID/password WLAN, così che il Pi si connettesse alla mia rete all'avvio
Ho configurato tutto questo e poi ho lasciato che l'Imager facesse il suo lavoro. Una volta terminato, ho estratto la scheda microSD e l'ho inserita nel Pi. Solo per il primo avvio, ho collegato il Pi a una tastiera e un display, ma non era strettamente necessario. Il nome host plotter.local che ho scelto ha impiegato qualche istante per registrarsi sulla mia rete, quindi ho usato la tastiera e il display per ottenere l'IP corrente (eseguendo ifconfig dal terminale).
Mi sono connesso al computer tramite SSH ed era ora di passare al passaggio successivo: l'installazione di CNCjs
Installazione di CNCjs
Come puoi intuire dal nome, CNCjs è basato su Node. Quindi, per prima cosa, dobbiamo installare Node.
●Accesso 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 torna indietro tramite ssh. Questo carica NVM.
●Ora installiamo node:
○nvm install node
●Ottimo! È il momento di installare CNCjs:
○npm install -g cncjs
●Supponendo che tutto abbia funzionato bene fino a questo punto, eseguiamo CNCjs solo una volta. Questo creerà il nostro file di configurazione, ~/.cncrc:
○Dalla riga di comando, nella tua directory home, esegui cncjs
○Ctrl+C per estrarlo
●Ora sei l'orgoglioso proprietario di un nuovissimo ~/.cncrc, congratulazioni. Modifichiamolo, principalmente in modo da poter consentire l'accesso remoto:
○vi .cncrc
{
"allowRemoteAccess": true,
"state": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"secret": IL_TUO_SEGRETO QUI
}
La riga fondamentale da aggiungere qui è la prima, allowRemoteAccess.
●Esegui di nuovo cncjs sul Pi.
●Utilizzando il browser sul computer principale, vai su plotter.local:8000. Dovrebbe aprire CNCjs.

Successivamente, è il momento di collegare il plotter e verificare se CNCjs riesce a comunicare con esso.
●Collegare il plotter iDraw 2.0 alla porta USB del Pi.
●Accendere il plotter.
●In CNCjs, individuare il widget Connessione (in alto a sinistra per impostazione predefinita).
○Premere il pulsante Aggiorna sotto Porta.
○Aprire il menu a discesa e scegliere la porta.

●Fai clic su Apri. Se tutto ha funzionato, la console Gcode dovrebbe ora visualizzare del testo.

Muoviamo i motori!
●Utilizzando il widget Assi, premi + e - sui vari assi per muovere i motori. Puoi anche abilitare il "jogging da tastiera" e quindi usare i tasti freccia per muovere il plotter. Se inserisci una penna e la abbassiL'asse Z è come un costoso Etch-a-Sketch.

Una cosa da notare è che la posizione 0 sull'asse Y è l'opposto di quanto ci si potrebbe aspettare: va in fondo all'area del grafico. Torneremo su questo argomento più avanti.
Fare in modo che CNCjs funzioni all'avvio
Procedendo, ora vogliamo tornare a questo punto ottimale ogni volta che il Pi si riavvia, senza che l'utente debba fare nulla. Quindi:
●Torna alla sessione SSH sul Pi, termina CNCjs premendo Ctrl-C.
●Assicurati che sia davvero inattivo aggiornando il browser (plotter.local:8000, supponendo che sia il nome host configurato sopra). Ora questo non dovrebbe funzionare.
●Sul Pi, installa pm2: npm install -g pm2
●Avvia CNCjs con pm2: pm2 start cncjs --name cncjs
●Assicurati che sia effettivamente avviato e funzioni come previsto: attendi qualche istante, quindi vai su plotter.local:8000 e verifica che si carichi.
●Crea uno script di avvio: pm2 startup. Questo ti mostrerà un comando che devi digitare sudo, quindi eseguilo.
●Salva l'elenco dei processi: pm2 save
●Riavvia il Pi per vedere se ha funzionato: sudo reboot
●Attendi che torni attivo, forse 3-5 minuti, quindi clicca su http://plotter.local:8000/ per vedere se riesci a riavviare CNCjs. Se hai fatto tutto correttamente, dovrebbe tornare subito attivo.
Vittoria! Ci siamo quasi: CNCjs è ora configurato. Ma per tracciare qualcosa, dobbiamo alimentarlo con un file GCode: non gestisce nativamente gli SVG.
Creare 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 modifica qui è che stiamo azzerando rispetto all'angolo in basso a sinistra del foglio, non in alto a destra! Questa modifica potrebbe richiedere un po' di tempo per abituarsi. Te lo ricorderò più tardi.
●Sul tuo computer principale, scarica il binario di rilascio di Juicy-Gcode per il tuo sistema operativo: https://github.com/domoszlai/juicy-gcode/releases
●La configurazione di Juicy-Gcode è salvata in qualcosa che chiamano "file flavor". Questo è solo un file yaml. Ecco un buon file flavor di partenza, puoi copiarlo/incollarlo in flavor.yaml sul tuo computer:
begin: |
G21 ; Imposta unità su millimetri
G17 ; Imposta selezione piano su XY
G90 ; Imposta posizionamento assoluto
F600 ; Imposta la velocità a 600 mm/min: è molto lenta, potresti volerla modificare
G00 Z0; penna su
G92 X0 Y0; considera la posizione corrente come 0,0: questo è l'angolo INFERIORE SINISTRO
end: |
G0Z0; penna su
G00 X0 Y0 Z0
toolon: |
G0Z6; penna giù sulla carta
tooloff: |
G0Z0; penna su
Un paio di cose importanti da notare su questo file di esempio:
●Faccio funzionare il plotter a 600 mm/min, che è molto lento. Potresti volerlo accelerare, 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 plotter, ci aspettiamo che tu sposti manualmente (e delicatamente) la testina del plotter nell'angolo in basso a sinistra del foglio.
È importante che il formato del foglio sia impostato correttamente nell'SVG.
Per eseguire Juicy-Gcode, il comando è simile a questo:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
È un po' lungo da digitare ogni volta, quindi ho creato questo piccolo script per rendere le cose un po' più comode:
#!/bin/bash
# Utilizzo: ./run-juicy.sh input.svg [velocità]
# Se la velocità non è specificata, il valore predefinito è 600
# Verifica se è stato fornito almeno un argomento
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Utilizzo: $0 <input-svg> [velocità]"
echo "Se la velocità non è specificata, il valore predefinito è 600"
exit 1
fi
inputfile="$1"
# Imposta la velocità predefinita a 600 se non specificata
speed="${2:-600}"
# Genera il nome del file 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 sapore diversi, ognuno con una diversa velocità di esecuzione, e specificare facilmente la velocità passando il numero che corrisponde al nome del file di sapore.
Ora che hai un file GCode, è il momento di caricarlo e tracciarlo!
Carica il GCode e traccialo
CNCjs ci offre due modi per caricare un file GCode: possiamo caricarlo tramite il browser cliccando su "Carica G-code", oppure possiamo impostare una directory di controllo (in modo che ogni volta che viene visualizzato un file GCode, il plotter inizi a funzionare).
Quest'ultima opzione sembra interessante in teoria, ma non ha molto senso: ogni tracciamento richiede comunque una configurazione manuale. Dobbiamo posizionare la carta, installare la penna, ecc. Quindi, per me, ha molto più senso caricare manualmente il file tramite il browser.
Una voltaFatto questo, rimpicciolisci per vedere l'anteprima.

Questo ci fornisce un paio di importanti controlli di integrità:
●Ci viene ricordato ancora una volta (…) che il grafico inizierà dall'angolo in basso a sinistra del nostro foglio.
●Possiamo vedere le misure sia sull'asse X che sull'asse Y. Vale la pena prendersi un momento per leggere questo e verificare che non superino l'area del grafico. In tal caso, c'è un problema con il tuo SVG: non iniziare a tracciarlo, altrimenti i tuoi servocomandi non saranno contenti.
Supponendo che la penna sia nell'angolo in basso a sinistra del foglio e che le misure siano corrette, è ora di tracciare! Premi il pulsante Play e osserva il tuo plotter. Ora puoi spegnere il computer o portarlo in un'altra stanza mentre il Pi e il plotter lavorano. Vittoria!