niubit dev

Un espacio de contenidos "tech" dedicado a los desarrolladores más inquietos.

Introducción al reciclaje tecnológico con un plóter construido con motores lineales extraídos de viejas unidades DVD desechadas. Parte II: El software.

Introducción

Continuamos con el artículo del mes pasado en el que construimos un robot cartesiano con dos motores lineales de unidades DVD abandonadas. Esta vez partimos de la máquina ya construida. Vamos a ocuparnos ahora de todo el software necesario tanto para generar los ficheros de impresión como para controlar la máquina.

Todo lo relativo al software es si cabe más complicado aún que el apartado hardware que vimos el mes anterior. Al tratarse este tipo de montajes de algo no estandarizado, cuesta encontrar la combinación de software que encaje y permita manejar nuestra configuración de piezas. Vamos a necesitar tres clases de software:

  • Firmware para el Arduino Nano
  • Programas para generar los ficheros gcode
  • Programa para enviar los ficheros gcode

Veamos cada cosa por separado.

Firmware Arduino

En general el firmware que se utiliza para controlar máquinas CNC con tres motores es el proyecto de software libre GRBL. Nuestro montaje sin embargo sustituye el motor Z por un servo. Para esta disposición, existe una versión modificada de GRBL llamada MIGRBL. Para instalarla en el Arduino Nano que pincharemos en la placa CNC Shield seguiremos estos pasos:

  1. Instalamos/abrimos Arduino IDE.
  2. Descargamos el firmware modificado MIGRBL de este enlace.
  3. Seleccionamos el comando de menú Programa > Incluir Librería > Añadir biblioteca .ZIP...
  4. En el cuadro de diálogo de selección de ficheros, seleccionamos el fichero MIGRBL.zip que habíamos bajado en el paso 2 (advertencia, en otros tutoriales encontrados en internet, se dan instrucciones para corregir los pines de control de los motores; el fichero enlazado en este artículo, ya incluye dichas modificaciones).
  5. Seguimos la siguiente ruta del menú para abrir el fichero de carga del firmware: Archivo > Ejemplos > MIGRBL > grblUpload
  6. Seleccionamos la placa Arduino Nano en el menú: Herramientas > Placa > Arduino AVR Boards > Arduino Nano
  7. Seleccionamos el procesador que lleve nuestro modelo de Arduino Nano. Puede ser el ATmega328P o el ATmega168P. En el caso de los clones de Arduino Nano, suele ser necesario elegir el modelo ATmega328P (Old Bootloader)
  8. Conectamos el Arduino con un cable USB al ordenador.
  9. Seleccionamos el puerto detectado en el menú: Herramientas > Puerto
  10. Pulsamos el botón Subir y comprobamos la evolución de la carga del firmware en Arduino.

Programa para generar los ficheros gcode

Nuestro plóter ya estará listo para recibir ficheros gcode, pero antes tenemos que ser capaces de generarlos.

Lo habitual es empezar con un fichero de dibujo vectorial. Más concretamente el formato que se suele utilizar es el SVG. Si partiéramos de un fichero tipo mapa de bit (PNG, JPG, BMP, etc.), existen utilidades para vectorizar estos ficheros, pero no vamos a entrar en ello. Por ejemplo nuestro punto de partida es el siguiente fichero SVG que respresenta un cuadrado de 15mm de lado.

Uno de los programas más utilizados para la edición de SVGs es Inkscape. Una cosa importante a tener en cuenta son las dimensiones del dibujo y las coordenadas o posición del mismo. Esto es así porque nuestra máquina tiene un área de trabajo muy reducida (40x40mm) y no dispone de sensores de fin de carrera en los extremos del recorrido de los motores (aunque sería sencillo instalarlos y la CNC Shield que hemos utilizado está preparada para ello). Así, será importante no salirse del cuadrado imaginario de 40x40mm en la esquina superior izquierda del área de dibujo. De hecho se recomienda ajustar el área de dibujo a esas dimensiones (File > Document Properties... > Custom size) como hemos hecho con el fichero anterior, para estar seguros.

Lo siguiente será convertir el SVG a gcode. Existen incluso utilidades online para hacerlo. De hecho las primeras pruebas las hicimos con el sitio jscut. El problema de este sitio es que las órdenes para mover el cabezal arriba y abajo las hace con comandos propios para manejar un motor paso a paso y no un servo como hemos instalado en nuestra máquina. A pesar de ello, y dado que los ficheros gcode son de texto y fáciles de interpretar, resulta factible generar los gcode con esta utilidad y luego editar el fichero resultante para reemplazar los comandos gcode para accionar el motor del eje Z por los comandos para desplazar el servo. Vamos a verlo con un ejemplo. Seguiremos estos pasos:

  1. Descargamos el fichero SVG del ejemplo desde este enlace.
  2. Accedemos a http://jscut.org/jscut.html
  3. Seleccionamos Open SVG y cargamos nuestro fichero SVG con el cuadrado.
  4. Seleccionamos el cuadrado haciendo clic en algún punto de su perímetro (veremos como su contenido se vuelve azul).
  5. Pulsamos el botón Create Operation arriba a la izquierda.
  6. En la línea que aparece justo debajo del botón anterior, abrimos el desplegable que inicialmente muestra Pocket y lo sustituimos por Engrave.
  7. Hacemos click en Generate.
  8. Pulsamos en Save GCODE (barra de menú superior). Le damos nombre al fichero y pulsamos el botón Local file para descargar.

Con esto habremos obtenido un fichero gcode como el que se puede conseguir desde este enlace. Si lo abrimos con un editor veremos algo como esto:

G21 ; Set units to mm
G90 ; Absolute positioning
G1 Z2.54 F2540 ; Move to clearance level

; Rapid to initial position
G1 X27.5 Y-12.5 F2540
G1 Z0
; plunge
G1 Z-3.1750 F127
; cut
G1 X12.5 Y-12.5 F1016
G1 X12.5 Y-27.5
G1 X27.5 Y-27.5
G1 X27.5 Y-12.5
; Retract
G1 Z2.54 F2540
M2

Como vemos consta de una serie de códigos y parámetros numéricos. La lista de comandos gcode puede encontrarse en sitios como éste (o este otro más detallado). Vemos que el programa se compone de las siguientes fases:

  1. Inicialización y elevación del cabezal.
  2. Movimiento a la posición inicial (esquina superior derecha del cuadrado).
  3. Descenso del cabezal.
  4. Desplazamiento del cabezal a lo largo de los cuatro lados del cuadrado.
  5. Elevación del cabezal y fin del programa.

Esta secuencia gcode se ha generado con la idea de ser enviada a una máquina de CNC con una cabeza taladradora. Así vemos en el paso 3 que el cabezal desciende 3,175mm por debajo de la superficie de la pieza a taladrar. En nuestra máquina, estos comandos de tipo G1 Z no van a funcionar dado que no tenemos montado el motor Z. En su lugar tenemos el servo que se maneja con comandos M, en concreto los siguientes:

  • M3 S65 ; Eleva el cabezal.
  • M5 ; Desciende el cabezal.

Así pues sólo tenemos que Buscar/reemplazar los comandos tipo G1 Z de la siguiente manera:

  • G1 Z2.54 F2540 -> M3 S65
  • G1 Z0 -> [Este comando simplemente lo borramos, es decir sustituimos por la cadena vacía]
  • G1 Z-3.1750 F127 -> M5

También desactivaremos el comando M2 final que apaga la máquina, ya que si nó no funciona el último comando para levantar el cabezal.

El fichero gcode resultante será:

G21 ; Set units to mm
G90 ; Absolute positioning
M3 S65 ; Move to clearance level

; Rapid to initial position
G1 X27.5 Y-12.5 F2540
; plunge
M5
; cut
G1 X12.5 Y-12.5 F1016
G1 X12.5 Y-27.5
G1 X27.5 Y-27.5
G1 X27.5 Y-12.5
; Retract
M3 S65
;M2

Por fin tenemos un fichero gcode válido para nuestro plóter. Es hora de enviarlo a nuestra máquina.

Otra opción que se suele utilizar para generar ficheros gcode es la extensión MIGRBL de Inkscape. Aquí proponemos una versión modificada por nosotros, dado que la original invertía los comandos para levantar o bajar el carro portalápiz. Vamos a detallar el proceso de instalación:

  1. Descargar la extensión desde este enlace.
  2. Instalar la versión 0.48.5 de Inkscape. La extensión da error en la última versión en el momento de escribir este artículo (1.1).
  3. Descomprimir el contenido de la extensión descargada en el punto 1.
  4. Copiar los dos ficheros que hay dentro del directorio resultante a la carpeta de extensiones de Inkscape (C:\Program Files (x86)\Inkscape\share\extensions en Windows; ~/.config/inkscape/extensions en Linux).

Una vez instalada la extensión, al abrir Inkscape nos aparecerá una nueva entrada en el menú Extensions:

Si ejecutamos esa entrada tras haber abierto el fichero SVG que queremos trazar, nos aparecerá un pequeño cuadro de diálogo que configuraremos como sigue:

Respecto de lo que ahí vemos, sólo tendremos que modificar la ruta donde queremos que se genere el fichero gcode y el nombre del mismo que se creará al pulsar Aplicar.

Cuando utilicemos esta extensión para generar los gcodes, es importante convertir todos los elementos que queramos trazar con el plóter a trayectos. Para ello, seleccionaremos dichos elementos y haremos uso del comando Objeto a trayecto del menú Trayecto:

Programa para enviar los ficheros gcode

Enviar los ficheros gcode al plóter puede ser tan sencillo como volcar su contenido a través de la conexión serie de Arduino (el firmware trabaja a 115200 baud). Por ejemplo desde Linux podríamos hacer:

$ sudo stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb
$ cat cuadrado_mod2.gcode > /dev/ttyUSB0

Pero existen programas que nos aportan funcionalidades como por ejemplo poder previsualizar los desplazamientos del trazador. Esto resulta muy conveniente al no disponer nuestra máquina de detectores de final de carrera. La previsualización nos ayudará a saber cómo tenemos que disponer los ejes antes de enviar el fichero. Uno de los programas que nosotros hemos utilizado es UGS Platform. Es un programa Java y por tanto multiplataforma. Lo descargamos de su sitio web y lo instalamos simplemente descomprimiendo el fichero bajado. Para ejecutarlo sólo tenemos que abrir el lanzador que hay en el directorio bin (el exe en Windows y el fichero sin extensión en Linux). Aparecerá una ventana como la siguiente:

Lo primero que tenemos que hacer es configurar la conexión serie con el Arduino Nano (naturalmente deberemos tenerlo conectado al ordenador mediante un cable USB). Seleccionaremos GRBL como el tipo de firmware, el puerto en que se haya montado el Arduino Nano en nuestro ordenador (en el caso de Windows tendrá la forma de COMn y en el de Linux /dev/ttyUSBn) y ajustamos la velocidad a 115200 baud. Tras hacer estos ajustes pulsamos el botón que representa dos clavijas de enchufe a punto de conectarse que hay a la izquierda de estos desplegables. A partir de ese momento podremos comandar el plóter desde el programa. Podemos por ejemplo probar a desplazar los ejes X e Y. Los desplazamientos pueden ser un poco descontrolados dado que todavía no hemos calibrado nuestro trazador. Para calibrar necesitamos medir sobre nuestros motores los siguientes parámetros (indicamos a continuación como ejemplo los valores de nuestros dos motores, que resultaron iguales, pero habrá que sustituir por los que tengamos en nuestro caso):

Variable Magnitud Valor
A Recorrido lineal del motor 40mm
B Paso del husillo 3mm/rev
C Ángulo de cada paso (típica en estos motores, aunque habría que comprobarlo) 18º
D Subdivisión de paso configurada en drivers 1/8

Con los valores anteriores utilizamos la siguiente fórmula para obtener los pasos que tiene que dar el motor para avanzar un milímetro: 360/(B*C*D)

En nuestro caso este valor que vamos a llamar E, toma el valor 53,33 pasos/mm.

Volvemos a la aplicación UGS y abrimos el menú Machine > Firmware Settings. Veremos la siguiente ventana:

En ella tenemos que ajustar los siguientes cuatro parámetros con los valores obtenidos o calculados anteriormente de la siguiente forma (hay que recordar que en nuestro caso los dos motores son idénticos, pero en caso de utilizar dos motores distintos, habrá que tener en cuenta si el parámetro corresponde al eje X o Y para introducir el valor adecuado:

  • $100: X-axis travel resolution: E
  • $101: Y-axis travel resolution: E
  • $130: X-axis maximum travel: A
  • $131: Y-axis maximum travel: A

Finalmente guardamos los valores en la memoria interna del Arduino Nano pulsando Save.

Ya podemos abrir el fichero gcode utilizando el comando File > Open.... Al hacerlo se representará en el área de visualización el trazo a seguir por el plóter. En este momento se vuelve importante observar el punto de origen de trazado así como las dimensiones máximas de la figura a trazar respecto de dicho punto de partida. Éstas no podrán exceder el recorrido máximo de nuestro plóter (en nuestro caso el valor A=40mm). De hacerlo, y dado que no hay instalados finales de carrera, veremos como los husillos empiezan a saltar de posición. Habrá que desplazar manualmente los dos motores para asegurar ese desplazamiento máximo que el plóter vaya a hacer. Dependerá de cómo hemos generado el gcode, el eje Y suele variar entre moverse en rango negativo o positivo. Por ejemplo los dos gcodes siguientes han sido generados con jscut (izquierda) y con la extensión MIGRBL de Inkscape (derecha):

Como vemos, en el caso izquierdo, todo el dibujo se encuentra en la zona negativa del eje Y. En el derecho es al revés. Así, antes de lanzar el dibujo izquierdo deberemos desplazar el eje X hacia el extremo izquierdo y el Y hacia el extremo inferior. Para trazar el dibujo derecho, desplazaremos igualmente el eje X hacia el extremo izquierdo y el Y hacia el extremos superior.

Es importante pulsar el botón Reset Zero para asimilar la posición de partida que acabamos de realizar sobre los motores con el (0, 0) del dibujo. Tras ello ya podemos enviar el fichero pulsando el botón Send (con la típica forma del símbolo Play).

Esta página web utiliza cookies para que sea posible mejorar tu experiencia de navegación.