Página principal

Arduino
CNC con piezas de DVD recicladas
Programas GRBL, Inkscape, Gcodetools, UniversalGcodeSender
Parte 4

En la primera parte de este montaje había realizado un CNC con un lenguaje propio. PARTE1
En la segunda parte de montaje, realizo una sencilla interface gráfica con Gambas (Visual Basic para linux). PARTE2
En la tercera parte mostré como utilizar el CNC con un programa comercial llamado Benbox. PARTE3
En esta cuarta entrega de está serie de artículos sobre CNC (plotters), explico como utilizar el programa Inkscape para crear ficheros con extensión ngc que pueden ser impresos con un programa bastante extendido llamado GRBL.

El programa mas popular a nivel general para manejar maquinas CNC es GRBL.
https://github.com/grbl/grbl

Este programa se encuentra en el arduino, y sirve para interpretar las ordenes en lenguaje GCODE.
Maneja los distintos motores paso a paso de la maquina CNC, pulsadores de fin de carrera si existe, y otros dispositivos..
https://reprap.org/wiki/G-code/es
Los comandos mas usados son:

 G-Codes

G-Codes pueden tener argumentos, algunos de los mas usados son:

Ejemplo:

G1 X5 Y-5 Z6 F3300.0 Mueve el lápiz o taladro <x,y,z>=<5,-5,6> con una velocidad de 3300.0)
G21 (unidades en mm)
G90 (colocar la posición actual como absoluta)
G92 X0 Y0 Z0 (la posición actual se coloca como xyz) <x,y,z>=<0,0,0>)

El programa GRBL está diseñado para maquinas CNC (3 ejes XYZ), pero en nuestro caso es un servo, por lo cual debemos modificar el programa.
Lo primero es descargar el fichero fuente de https://github.com/grbl/grbl  y sustituir el spindle_control.c por otro, en ficheros de programa se encuentra ya sustituido.
La información la saque de: https://www.instructables.com/id/How-to-Control-a-Servo-Using-GRBL/
Ahora los comandos utilizados para pintar son:
M03 S700   baja el lapiz.
M03 S1024  sube el lapiz.

También tenemos que retocar parte del código.
En primer lugar quiero cambiar la velocidad del puerto serie, esto es optativo, pero me aseguro la comunicación.
Editamos el fichero config_h y modificamos el BAUD_RATE , cambiamos a:
// Serial baud rate
#define BAUD_RATE 9600

Como yo tengo arduino nano, debo cambiar la configuración del programador en el fichero Makefile.
#Para arduino NANO
PROGRAMMER = -c stk500v1 -P /dev/ttyUSB0 -b 57600 -p atmega328p

Lo que viene ahora es para los que tengan una placa como la mía un poco particular, tiene los pins cambiados, lo normal es que no tengan que hacer esto.
En el fichero cpu_map_atmega328p.h cambiar la configuración de los pins.


/*  ORIGINAL
#define STEP_DDR        DDRD
#define STEP_PORT       PORTD
#define X_STEP_BIT      2  // Uno Digital Pin 2
#define Y_STEP_BIT      3  // Uno Digital Pin 3
#define Z_STEP_BIT      4  // Uno Digital Pin 4
*/
//SETA43
#define STEP_DDR        DDRD
#define STEP_PORT       PORTD
#define X_STEP_BIT     5
#define Y_STEP_BIT     6
#define Z_STEP_BIT     7

/*  ORIGINAL
#define DIRECTION_DDR     DDRD
#define DIRECTION_PORT    PORTD
#define X_DIRECTION_BIT   5  // Uno Digital Pin 5
#define Y_DIRECTION_BIT   6  // Uno Digital Pin 6
#define Z_DIRECTION_BIT   7  // Uno Digital Pin 7
*/
//SETA43
#define DIRECTION_DDR     DDRD
#define DIRECTION_PORT    PORTD
#define X_DIRECTION_BIT   2
#define Y_DIRECTION_BIT   3
#define Z_DIRECTION_BIT   4

Ya solo nos que compilar el programa GRBL con:  make.
Cargamos el programa en el arduino con:  make flash.

Ya con cualquier terminal serie podemos ver y cambiar la configuración del GRBL.
Yo suelo utilizar CuteCom o gtkterm , pero también sirve el terminal de arduino.
Para ver la configuración del GRBL que se almacena en la EEPROM del arduino debemos teclear la orden :$$
La configuración que tengo cambiada para mi es:

OK pwn spine ___SERVO____

Grbl 0.9j ['$' for help]

$0=10 (step pulse, usec)

$1=25 (step idle delay, msec)

$2=0 (step port invert mask:00000000)

$3=0 (dir port invert mask:00000000)

$4=0 (step enable invert, bool)

$5=0 (limit pins invert, bool)

$6=0 (probe pin invert, bool)

$10=3 (status report mask:00000011)

$11=0.010 (junction deviation, mm)

$12=0.002 (arc tolerance, mm)

$13=0 (report inches, bool)

$20=0 (soft limits, bool)

$21=0 (hard limits, bool)

$22=0 (homing cycle, bool)

$23=0 (homing dir invert mask:00000000)

$24=25.000 (homing feed, mm/min)

$25=500.000 (homing seek, mm/min)

$26=250 (homing debounce, msec)

$27=1.000 (homing pull-off, mm)

$100=5.200 (x, step/mm)

$101=3.200 (y, step/mm)

$102=250.000 (z, step/mm)

$110=2000.000 (x max rate, mm/min)

$111=2000.000 (y max rate, mm/min)

$112=2000.000 (z max rate, mm/min)

$120=300.000 (x accel, mm/sec^2)

$121=300.000 (y accel, mm/sec^2)

$122=300.000 (z accel, mm/sec^2)

$130=200.000 (x max travel, mm)

$131=200.000 (y max travel, mm)

$132=200.000 (z max travel, mm)

ok


El principal cambio que debemos hacer para adaptar nuestro plotter es (x, step/mm) y (y, step/mm).
Como el trayecto a recorrer (Eje X) es de 50 mm y se necesita 260 pasos, y para el eje Y se necesita 160 pasos (el mio es un caso particular al tener diferente tipo de pasos 260x160) el cálculo es el siguiente:
Eje X   260/50=5.2  
Eje Y   160/50=3.2
Cambiamos la configuración con las ordenes.
$100=5.2
$101=3.2
Las demás configuraciones debemos cambiarlas dependiendo el tipo de motor paso a paso que tengamos.
Normalmente funciona sin tocar nada mas, pero cambiando algún que otro parámetro veremos como aumenta la velocidad de pintado.
Ya podemos mandar ordenes a la placa.
Como en mi CNC (plotter) no tiene interruptores de fin de carrera, tengo que ajustar el CNC a la posición inicial X=0 y Y=0.
G0 X0 Y0
Ahora manualmente coloco el CNC al punto 0,0 .
Tenemos todo preparado para recibir ordenes con el formato Gcode.


Para crear los gráficos utilizamos el programa Inkscape , y la extensión Gcodetools para generar el código Gcode.
Nuestra superficie de pintado es de 50mmx50mm por lo que empezamos cambiando las propiedades del documento.


En el menú extensiones-> GcodeTools->Biblioteca de herramientas, seleccionamos graffiti.
En el menú extensiones-> GcodeTools->Puntos de orentación,  seleccionamos aplicar.



Editamos el diámetro a 1, la velocidad (feed) 4000, velocidad de bajada del lapiz (penetration feed) 1000.
Editamos las ordenes de pintado. M3 S700 para pintar y M3 S1024 para dejar de pintar. La orden Sxxx es el ángulo del servo.
Alineamos el punto de orientación para que coincida 0,0 a la parte inferior izquiedad, y el punto 100 al punto 100 de la rejilla.

Probamos a dibujar una línea y unas letras de trazado simple, extensiones-> Generar(Render)->Hershey Text.
Si usamos texto normal con fuentes normales deberemos pasarlas a trayectos. Trayecto-> Objeto a trayecto.



YA solo nos queda generar el código Gcode, extensiones-> GcodeTools->Trayecto a Gcode.



Al pulsar sobre aplicar en trayecto aGcode nos mostrará un aviso de que no existe ningún objeto seleccionado, y que generará todos los trayectos que existen.

Después de haber generado el código Gcode, debemos retocar un poco el fichero generado.
Quitando al final del fichero M2 y M5.




Ya tenemos el fichero en formato Gcode, ahora nos toca mandarlo al CNC, y esto lo hacemos con el programa  Universal Gcode Sender.


Cargamos el fichero con el nombre ejemplo.ngc y lo visualizamos.
Ya solo nos queda  pulsar el boton Send y ver como imprime el CNC (plotter)


Resultado de la impresión.



Otras pruebas de impresión.

PROGRAMAS

VIDEO DE FUNCIONAMIENTO

Todo el montaje y programación está realizado bajo Linux y con la distribución DEBIAN 9.

Saludos.
Juan Galaz


Bibliografía:
PARTE1
PARTE2
PARTE3

https://github.com/cnc-club/gcodetools
https://github.com/grbl/grbl
https://reprap.org/wiki/G-code/es
https://en.wikipedia.org/wiki/G-code
http://gcode.ws/
http://replicat.org/gcodes
http://diwo.bq.com/cnc-gcode-controller-instalacion-y-uso/
https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9
https://github.com/grbl/grbl/wiki/Using-Grbl
https://www.staticboards.es/blog/dominar-motor-paso-a-paso-con-grbl/

http://www.holdme.cn/thread-1566-1-1.html
https://mega.nz/#!u8RnBDRa!G39BvWg0dSnv0Iwr49dDxI_rFS3fQuSBxM0wBUSxZcQ
https://www.instructables.com/id/Configurando-La-Grabadora-Laser-Benbox-DIY/#CTDIJIHITCH84HX
http://www.electronoobs.com/eng_impresoras_eleksmaker_2.php

https://www.doovi.com/video/how-to-make-homework-writing-machine-at-home/sUdAwUOaPX0
https://www.luisllamas.es/motores-paso-paso-arduino-driver-a4988-drv8825/
https://es.aliexpress.com/item/3DV4-CNC-Shield-V4-engraving-machine-Nano-3-0-with-USB-A4988-Reprap-Stepper-Drivers-for/32809568484.html
http://wiki.keyestudio.com/index.php/Ks0096_keyestudio_CNC_Kit_/_CNC_Shield_V4.0_%2B_Nano_3.0%2B3pcs_a4988_Driver_/_GRBL_Compatible
http://osoyoo.com/2017/04/07/arduino-nano-cnc-shield-v4-0a4988/