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

Cómo configurar un plotter iDraw 2.0 y una Raspberry Pi para operación sin monitor

Este artículo es una contribución de @Erez Zukerman

Disfruto bastante usar mi plotter iDraw 2.0, pero me gusta hacerlo despacio, así que mis trazados pueden tardar un rato. Usé la configuración predeterminada de Inkscape durante bastante tiempo, pero tenía que mantener mi computadora principal encendida y conectada al plotter mientras trabajaba. Esto no era ideal, así que decidí ver si podía configurar un sistema “headless” usando una Raspberry Pi.
Resultó ser bastante más fácil de lo que pensaba, y también divertido. Esto es lo que vamos a hacer:
●Configurar la Pi en sí.
●Instalar CNCjs y sus dependencias. Esto es lo que usaremos para controlar realmente el plotter, enviando GCode por cable.
●También tomaremos un momento para configurar las cosas para que CNCjs se inicie automáticamente cada vez que la Pi arranque, sin que tengas que iniciar sesión o hacer nada.
●Descubrir cómo convertir nuestros SVG a GCode (con control de velocidad del bolígrafo).
Ten en cuenta que este tutorial asume 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, podrías encontrarte con todo tipo de errores en el camino; esa es la naturaleza del asunto. Al momento de escribir, el sistema descrito funcionó bien para mí.
¡Empecemos!

Configura la Pi

Es mejor si puedes dedicar una Pi solo para este proyecto, para que sea tu “controlador del plotter”. Si no, no te preocupes, igual funcionará, pero podría ser menos conveniente con el tiempo.
Otra buena razón para dedicar una Pi solo a este proyecto es que puedes configurarla desde cero con valores predeterminados que tengan sentido. Así que eso fue justo lo que hice: tomé una tarjeta SD de 32GB y usé la herramienta oficial Raspberry Pi Imager para grabarla con Raspberry Pi OS.
Una cosa que la herramienta te permite hacer, y que recomendaría, es 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 pública SSH, para poder acceder por SSH a la máquina de inmediato
●Mi SSID/contraseña de WLAN, para que la Pi se conectara a mi red al arrancar
Configuré todo esto y luego dejé que el 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, pero esto 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é por SSH a la máquina, y era momento de pasar al siguiente paso: instalar CNCjs

Instalar CNCjs

Como puedes imaginar por el nombre, CNCjs está basado en Node. Así que primero necesitamos instalar Node.
●Conéctate por SSH al Pi
●Vamos a instalar NVM:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●Sal del terminal y vuelve a entrar por ssh. Esto carga NVM.
●Ahora instalemos node:
○nvm install node
●¡Genial! Es hora de instalar CNCjs:
○npm install -g cncjs
●Asumiendo que todo funcionó bien hasta este punto, ejecutemos CNCjs solo una vez. Esto creará nuestro archivo de configuración, ~/.cncrc:
○Desde la línea de comandos, en tu directorio home, ejecuta cncjs
○Ctrl+C para salir
●Ahora eres el orgulloso propietario de un nuevo ~/.cncrc, felicidades. Vamos a editarlo, principalmente para permitir el acceso remoto:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": TU_SECRETO_AQUÍ
}
La línea crucial para agregar aquí es la primera, allowRemoteAccess.
●Ejecuta cncjs en el Pi nuevamente.
●Usando tu navegador en tu máquina principal, ve a plotter.local:8000. Debería abrir CNCjs.

Ahora, es momento de conectar el plotter y ver si CNCjs puede comunicarse con él.
●Conecta el plotter iDraw 2.0 al puerto USB del Pi.
●Enciende el plotter.
●En CNCjs, localiza el widget de Conexión (esquina superior izquierda por defecto).
○Presiona el botón Actualizar debajo de Puerto.
○Abre el menú desplegable y elige el puerto.

●Haz clic en Abrir. Si todo funcionó, la consola de Gcode debería mostrar algo de texto.

¡Vamos a mover los motores!


●Usando el widget de Ejes, presiona + y - en los distintos ejes para mover los motores. También puedes activar el “jogging con teclado numérico” y luego usar las flechas para mover el plotter. Si colocas un bolígrafo y bajas el eje Z, es como un Etch-a-Sketch caro.


Una nota es que la posición 0 en el eje Y es lo opuesto a lo que podrías esperar: va hacia la parte inferior del área de dibujo. Volveremos a esto más adelante.

Haz que CNCjs se ejecute al iniciar

Siguiendo adelante, ahora queremos volver a este punto ideal cada vez que el Pi se reinicie, sin que tengas que hacer nada. Así que:
●De vuelta en la sesión SSH al Pi, termina CNCjs presionando Ctrl-C.
●Asegúrate de que realmente esté apagado refrescando el navegador (plotter.local:8000, asumiendo que ese es el nombre de host que configuraste arriba). Esto ahora debería fallar.
●En el Pi, instala pm2: npm install -g pm2
●Inicia CNCjs con pm2: pm2 start cncjs --name cncjs
●Asegúrate de que realmente haya iniciado y funcione como esperas: Espera unos momentos, luego ve a plotter.local:8000 y verifica que cargue.
●Crea un script de inicio: pm2 startup. Esto generará un comando que necesitas ejecutar con sudo, así que hazlo.
●Guarda la lista de procesos: pm2 save
●Reinicia el Pi para ver si funcionó: sudo reboot
●Espera a que vuelva a estar activo, tal vez 3-5 minutos, luego entra a http://plotter.local:8000/ para ver si puedes acceder a CNCjs de nuevo. Si lo hiciste bien, debería volver a estar activo inmediatamente.
¡Victoria! Ya casi terminamos – CNCjs ya está configurado. Pero para plotear algo, necesitamos alimentarlo con un archivo GCode – no maneja SVGs de forma nativa.

Crea una cadena para convertir SVGs 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 gran cambio aquí es que estamos poniendo en cero relativo a la esquina inferior izquierda de tu papel, ¡no a la esquina superior derecha! Este cambio puede requerir un poco de acostumbramiento. Te lo recordaré más adelante.
●En tu máquina principal, descarga el binario de la versión de Juicy-Gcode para tu sistema operativo: https://github.com/domoszlai/juicy-gcode/releases
●La configuración de Juicy-Gcode se guarda en algo que llaman un “archivo flavor”. Esto es solo un archivo yaml. Aquí tienes un buen archivo flavor inicial, puedes copiar/pegar esto en flavor.yaml en tu máquina:
begin: |
  G21 ; Establecer unidades en milímetros
  G17 ; Selección de plano a XY
  G90 ; Establecer posicionamiento absoluto
  F600  ; Establecer velocidad a 600 mm/min -- esto es muy lento, puede que quieras editarlo
  G00 Z0 ; bolígrafo arriba
  G92 X0 Y0 ; considera la posición actual como 0,0 -- esta es la esquina INFERIOR IZQUIERDA
end: |
  G0Z0 ; bolígrafo arriba
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; bolígrafo abajo sobre el papel
tooloff: |
  G0Z0 ; bolígrafo arriba
  
Un par de cosas importantes a tener en cuenta sobre este archivo de configuración:
●Hago funcionar el plotter a 600mm/min, que es muy lento. Puede que quieras acelerar esto, dependiendo de tus bolígrafos y preferencias.
●La otra línea notable es la que comienza con G92. En esta línea, le estamos diciendo al plotter "dondequiera que estés ahora mismo, ese es el hogar". Así que para calibrar un plot, esperamos que muevas manualmente (y con cuidado) la cabeza del plotter a la esquina inferior izquierda del papel.
Es importante que el tamaño de su papel esté configurado correctamente en el SVG.
Para ejecutar Juicy-Gcode, el comando es algo así:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
Eso es un poco largo para escribir cada vez, así que hice este pequeño script para que sea un poco más conveniente:
#!/bin/bash
# Uso: ./run-juicy.sh input.svg [speed]
# Si no se proporciona la velocidad, el valor predeterminado es 600

# Verificar si se proporciona 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 tipo
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 puede tener varios archivos de diferentes tipos, 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 tipo.
Ahora que tiene un archivo GCode, ¡es hora de subirlo y trazar!

Suba el GCode y trace

CNCjs nos ofrece dos formas de cargar un archivo GCode: podemos subirlo a través del navegador haciendo clic en “Subir G-code”, o podemos configurar un directorio de vigilancia (para que cada vez que un archivo GCode aparezca allí, el plotter comience a funcionar).
Lo último suena bien en teoría, pero no tiene mucho sentido: cada trazado requiere algo de configuración manual de todos modos. Tenemos que colocar el papel, instalar el bolígrafo, etc. Así que para mí, tiene mucho más sentido subir el archivo manualmente a través del navegador.
Una vez que haga eso, aleje el zoom para ver la vista previa. 

Esto nos da un par de verificaciones importantes de sentido común:
●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 y Y. Vale la pena tomarse un momento para leer esto y verificar que no excedan el área de trazado. Si lo hacen, hay un problema con su SVG: no comience a trazarlo o sus servos estarán bastante descontentos.
Suponiendo que su bolígrafo está en la esquina inferior izquierda de su papel y las medidas tienen sentido, ¡es hora de trazar! Presione el botón Reproducir y observe su plotter. Ahora puede apagar su computadora o llevarla a otra habitación mientras el Pi y el plotter trabajan. ¡Victoria!

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.