Este artículo es una contribución de @Erez Zukerman
Me gusta bastante usar mi plotter iDraw 2.0, pero prefiero hacerlo funcionar despacio, por lo que mis trazados pueden tardar un rato. Durante bastante tiempo usé la configuración de Inkscape tal como venía, pero tenía que mantener mi ordenador principal encendido y conectado al plotter mientras trabajaba. No era lo ideal, así que decidí ver si podía configurar un sistema «sin interfaz» usando una Raspberry Pi.
Resultó ser bastante más fácil de lo que pensaba, y también divertido. Esto es lo que haremos:
●Configurar la propia Pi.
●Instalar CNCjs y sus dependencias. Esto es lo que usaremos para controlar realmente el plotter, enviando GCode a través de la red.
●También dedicaremos un momento a configurar las cosas para que CNCjs se inicie automáticamente cada vez que la Pi arranque, sin que tengas que iniciar sesión ni hacer nada.
●Averiguar cómo convertir nuestros SVG a GCode (con control de la velocidad del bolígrafo).
Ten en cuenta que este tutorial supone que te sientes cómodo usando la línea de comandos de Linux. Si lo sigues meses o años después de su publicación original, podrías encontrarte con todo tipo de errores; esa es la naturaleza del asunto. En el momento de redactarlo, el sistema descrito me funcionaba bien.
¡Empecemos!
Configurar la Pi
Lo mejor es que puedas dedicar una Pi exclusivamente a este proyecto, para que sea tu «controlador del plotter». Si no, no pasa nada: seguirá funcionando, pero con el tiempo podría resultar menos práctico.
Otra buena razón para dedicar una Pi exclusivamente a este proyecto es que puedes configurarla desde cero con valores predeterminados adecuados. Eso es exactamente lo que hice: tomé una tarjeta SD de 32 GB y usé la herramienta oficial Raspberry Pi Imager para grabar en ella Raspberry Pi OS.
La herramienta permite hacer algo que recomiendo: configurar algunos valores predeterminados desde el principio. Usé el instalador para configurar lo siguiente:
●Mi nombre de usuario y contraseña
●Un nombre de host local para el controlador del plotter (plotter.local en mi caso)
●Mi clave SSH pública, para poder conectarme a la máquina mediante SSH de inmediato
●El SSID y la contraseña de mi WLAN, para que la Pi se conectara a mi red al arrancar
Configuré todo esto y luego dejé que Imager hiciera su trabajo. Cuando terminó, expulsé la tarjeta microSD y la inserté en la Pi. Solo para el primer arranque, conecté la Pi a un teclado y una pantalla, aunque no era estrictamente necesario. El nombre de host plotter.local que elegí tardó unos momentos en registrarse en mi red, así que usé el teclado y la pantalla para obtener la IP actual (ejecutando ifconfig desde la terminal).
Me conecté a la máquina mediante SSH y llegó el momento de pasar al siguiente paso: instalar CNCjs
Instalar CNCjs
Como puedes deducir por el nombre, CNCjs está basado en Node. Por lo tanto, primero tenemos que instalar Node.
●Conéctate al Pi mediante SSH
●Instalemos NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Sal del terminal y vuelve a conectarte mediante SSH. Esto carga NVM.
●Ahora instalemos Node:
○nvm install node
●¡Genial! Es hora de instalar CNCjs:
○npm install -g cncjs
●Suponiendo que todo haya funcionado bien hasta este punto, ejecutemos CNCjs una sola vez. Esto creará nuestro archivo de configuración, ~/.cncrc:
○Desde la línea de comandos, en tu directorio personal, ejecuta cncjs
○Pulsa Ctrl+C para salir
●Ahora eres el orgulloso propietario de un ~/.cncrc completamente nuevo; enhorabuena. Vamos a editarlo, principalmente para permitir el acceso remoto:
○vi .cncrc
{
"allowRemoteAccess": true,
"state": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"secret": YOUR_SECRET HERE
}
La línea crucial que hay que añadir aquí es la primera, allowRemoteAccess.
●Vuelve a ejecutar cncjs en el Pi.
●Usa el navegador de tu equipo principal para ir a plotter.local:8000. Debería abrir CNCjs.

A continuación, es hora de enchufar el trazador y comprobar si CNCjs puede comunicarse con él.
●Conecta el trazador iDraw 2.0 al puerto USB del Pi.
●Enciende el trazador.
●En CNCjs, localiza el widget Conexión (por defecto, en la esquina superior izquierda).
○Pulsa el botón Actualizar situado debajo de Puerto.
○Abre el menú desplegable y elige el puerto.

●Haz clic en Abrir. Si todo ha funcionado, la consola de Gcode debería mostrar ahora texto.

¡Movamos los motores!
●Usa el widget Ejes y pulsa + y - en los distintos ejes para mover los motores. También puedes activar el «desplazamiento con teclado» y usar las teclas de flecha para mover el trazador. Si colocas un bolígrafo y bajas el eje Z, es como un Etch-A-Sketch caro.

Una cosa: la posición 0 del eje Y es la opuesta a la que podrías esperar: se desplaza hasta la parte inferior del área de trazado. Volveremos a esto más adelante.
Configurar CNCjs para que se ejecute al arrancar
Siguiendo con el proceso, ahora queremos volver a este punto ideal cada vez que el Pi se reinicie, sin que tengas que hacer nada. Así que:
●Vuelve a la sesión SSH del Pi y detén CNCjs pulsando Ctrl-C.
●Asegúrate de que realmente se haya detenido actualizando el navegador (plotter.local:8000, suponiendo que ese sea el nombre de host que configuraste antes). Ahora debería fallar.
●En la Pi, instala pm2: npm install -g pm2
●Inicia CNCjs con pm2: pm2 start cncjs --name cncjs
●Asegúrate de que realmente se haya iniciado y funcione como esperas: espera unos instantes, luego ve a plotter.local:8000 y comprueba que se carga.
●Crea un script de inicio: pm2 startup. Esto mostrará un comando que debes ejecutar con sudo; hazlo.
●Guarda la lista de procesos: pm2 save
●Reinicia la Pi para comprobar si funcionó: sudo reboot
●Espera a que vuelva a iniciarse, quizá entre 3 y 5 minutos, y luego accede a http://plotter.local:8000/ para comprobar si puedes volver a usar CNCjs. Si lo has hecho bien, debería volver a estar disponible.
¡Victoria! Ya casi hemos terminado: CNCjs está completamente configurado. Pero, para trazar algo, tenemos que proporcionarle un archivo GCode; no admite SVG de forma nativa.
Crea un flujo de trabajo para convertir SVG a Gcode
Para convertir nuestro SVG a Gcode, vamos a usar Juicy-Gcode, que es una pequeña utilidad de línea de comandos.
Un cambio importante aquí es que ahora establecemos el cero con respecto a la esquina inferior izquierda del papel, no a la esquina superior derecha. Este cambio puede requerir un poco de adaptación. Te lo recordaré más adelante.
●En tu máquina principal, descarga el binario de la versión de Juicy-Gcode correspondiente a tu sistema operativo: https://github.com/domoszlai/juicy-gcode/releases
●La configuración de Juicy-Gcode se guarda en algo que llaman un «archivo de configuración». Es simplemente un archivo YAML. Aquí tienes un buen archivo de configuración para empezar; puedes copiarlo y pegarlo en flavor.yaml en tu máquina:
begin: |
G21 ; Establecer las unidades en milímetros
G17 ; Establecer la selección del plano en XY
G90 ; Establecer el posicionamiento absoluto
F600 ; Establecer la velocidad en 600 mm/min -- es realmente lento, quizá quieras editarlo
G00 Z0 ; pluma arriba
G92 X0 Y0 ; considerar la posición actual como 0,0 -- esta es la esquina INFERIOR IZQUIERDA
end: |
G0Z0 ; pluma arriba
G00 X0 Y0 Z0
toolon: |
G0Z6 ; pluma abajo sobre el papel
tooloff: |
G0Z0 ; pluma arriba
Un par de cosas importantes que debes tener en cuenta sobre este archivo de configuración:
●Yo ejecuto el trazador a 600 mm/min, lo cual es muy lento. Quizá quieras aumentar esta velocidad, según tus bolígrafos y preferencias.
●La otra línea destacable es la que empieza con G92. En esta línea, le estamos diciendo al trazador «dondequiera que estés ahora mismo, eso es el origen». Así que, para calibrar un trazado, esperamos que muevas manualmente (y con cuidado) el cabezal del trazador hasta la esquina inferior izquierda del papel.
Es importante configurar correctamente el tamaño del papel en el SVG.
Para ejecutar Juicy-Gcode, el comando tiene un aspecto similar a este:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Es demasiado largo para escribirlo cada vez, así que hice este pequeño script para que resultara un poco más cómodo:
#!/bin/bash
# Uso: ./run-juicy.sh input.svg [speed]
# Si no se proporciona la velocidad, el valor predeterminado es 600
# Comprobar que se haya proporcionado al menos un argumento
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "Uso: $0 <input-svg> [speed]"
echo " Si no se proporciona la velocidad, el valor predeterminado es 600"
exit 1
fi
inputfile="$1"
# Establecer la velocidad predeterminada en 600 si no se proporciona
speed="${2:-600}"
# Construir el nombre del archivo de sabor
flavor_file="flavor-${speed}mm-speed.yaml"
# Generar el nombre del archivo de salida reemplazando la extensión .svg por .gcode
outputfile="${inputfile%.*}.gcode"
# Ejecutar el comando juicy-gcode
juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
Ahora puedes tener varios archivos de sabores diferentes, cada uno con una velocidad de ejecución distinta, y especificar fácilmente la velocidad pasando el número que coincide con el nombre del archivo de sabor.
Ahora que tienes un archivo GCode, ¡es hora de cargarlo y trazar!
Carga el GCode y traza
CNCjs nos ofrece dos formas de introducir un archivo GCode: podemos cargarlo mediante el navegador haciendo clic en «Cargar G-code», o configurar un directorio supervisado (de modo que, cada vez que aparezca un archivo GCode en él, el trazador empiece a funcionar).
Lo segundo suena bien en teoría, pero no tiene demasiado sentido: De todos modos, cada trazado requiere cierta configuración manual. Tenemos que colocar el papel, instalar el lápiz, etc. Así que, para mí, tiene mucho más sentido cargar manualmente el archivo mediante el navegador.
Una vez hecho esto, aleja el zoom para ver la vista previa.

Esto nos proporciona un par de comprobaciones importantes:
●Se nos recuerda una vez más (…) que el trazado comenzará desde la esquina inferior izquierda de nuestro papel.
●Podemos ver las medidas en los ejes X e Y. Vale la pena tomarse un momento para leerlas y verificar que no superen el área de trazado. Si lo hacen, hay un problema con tu SVG; no empieces a trazarlo o tus servomotores no estarán nada contentos.
Suponiendo que el lápiz está en la esquina inferior izquierda del papel y que las medidas tienen sentido, ¡es hora de trazar! Pulsa el botón Reproducir y observa el trazador. Ahora puedes apagar el ordenador o llevarlo a otra habitación mientras la Raspberry Pi y el trazador trabajan. ¡Victoria!