Mostrando entradas con la etiqueta UniversalGcodeSender. Mostrar todas las entradas
Mostrando entradas con la etiqueta UniversalGcodeSender. Mostrar todas las entradas

viernes, 12 de junio de 2020

CNC Láser y dibujado con Ender 3

CNC
Láser y dibujado con Ender 3


Hace un par de años había realizado varios montajes de CNC con piezas de DVD recicladas  cnca.html.
Había utilizado una placa controladora que en su momento me costó alrededor de 8€.
La tenía un poco retirada, pero en la mente para hacer otros montajes.

El año pasado había comprado una impresora 3D Ender 3, de la cual estoy bastante satisfecho.
En mi idea de realizar algo más que crear piezas de plástico con la impresora se me vino a la cabeza la placa controladora que tengo en el cajón.
Existe la posibilidad de utilizar la electrónica que tiene la Ender 3, pero requiere abrir la impresora y modificar el firmware, eso no me gusta. Además es mucho más flexible utilizar el programa controlador GRBL , el cual funciona bastante bien en la mayoría de los casos.
Existe un kit con láser para transformar la ender 3 en grabadora laser, este vídeo lo explica.
 https://www.youtube.com/watch?v=K7X78C0qoxc
Para la realización de está práctica solo es necesario conseguir los cables que conecte la placa controladora a los motores de la Ender 3.
Casualmente entre los muchos cables que poseo de piezas recicladas estaban dichos cables, son conectores de 6 pin, de los cuales se utilizan 4 para los motores.
En un principio conecté los cables según la configuración normal que aparece en todos los esquemas.
1-1 , 2-2 , 3-3 , 4-4 . Pero esto no funcionó, hacía como que se activaban los motores pero los motores no se movían.
Después de mirar con el polímetro descubrí que las bobinas de los motores de Ender 3 no correspondían con la conexión normal.
La conexión correcta es 1-1 , 2-3 , 3-2 , 4-4 . Con lo cual los motores giraba perfectamente.

Con el programa Universal Gcode Sender realizamos todas las pruebas.
El principal cambio que debemos hacer para adaptar nuestro CNC es (x, step/mm) y (y, step/mm).
Para ver la configuración del GRBL que se almacena en la EEPROM del arduino debemos teclear la orden :$$
Para el caso de la Ender 3 el ajuste es el siguiente:
$100=5
$101=5
$102=25
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.
Como en mi CNC  no voy a conectar los interruptores de fin de carrera, tengo que ajustar el CNC a la posición inicial X=0 y Y=0. Se puede hacer a mano y luego pulsar en del botón de Reset Zero en el programa del  Universal Gcode Sender.
Unos de los motivos de no conectar los interrupciones de fin de carrera es que utilizamos el Limite de eje Z para la activación del láser.
El láser utilizado se compró en aliexpress LASER , es bastante barato y el kit incluye las gafas que no tengo.
Con la potencia de este láser no se puede pretender mucho, además no creo que llegue a 1W .
Las pruebas me dieron la razón, solo quemaba goma-eva o papel de seda, pero para las primeras experiencias me sirvió.



Conexión del láser a la placa CNC.

Existen varios programas para generar código GCODE desde una imagen o dibujo.
El más fácil es LaserGRBL solo funciona en Windows y es open source, se descarga de http://lasergrbl.com/.

LaserGRBL funcionando


Resultado de las diferentes pruebas.
Como podemos observar el anclaje del láser se realiza mediante un imán, por lo cual el desmontaje es muy fácil.

En Inkscape tenemos el Plug-In GcodeTools para generar código GCODE, es muy versátil, pero también bastante lioso de usar.
Un Plug-In  bastante más fácil de usar es Laser Tool Plug-In y se descarga de https://jtechphotonics.com/?page_id=2012 .
Está hecho para manejar un láser, pero también se puede modificar para realizar dibujos.
La colocación del rotulador es un tanto simple, una goma, lógicamente se puede colocar de otra forma bastante mejor, pero esto es una prueba rápida. Aprovechamos el eje Z para pintar.


En el siguiente vídeo explico la configuración he instalación del Plug-In en Inkscape.
https://youtu.be/R82LHou0MXo
Y como muestra de quemar goma-eva y dibujar muestro este otro vídeo.
https://youtu.be/H3ZqtLJVXoo

Con este láser no se puede quemar mucho, es de poca potencia, pero el montaje es una referencia para colocar un láser de mayor potencia.
Para los que quieran saber lo que puede quemar un láser ver este vídeo. https://www.youtube.com/watch?v=djRRxGXyACY

En la próxima entrega realizaré un circuito impreso con la Ender 3.
El entorno de trabajo ha sido Debian 9, salvo en la utilización del programa LaserGRBL  que solo funciona en Windows.

Saludos.
Juan Galaz


Bibliografía:

https://jtechphotonics.com/?page_id=2012
http://lasergrbl.com/

https://www.youtube.com/watch?v=532k6vX6oyo
https://www.youtube.com/watch?v=K7X78C0qoxc
https://www.youtube.com/watch?v=djRRxGXyACY

28/11/2018 - Arduino - Inkscape Laser Tool Plug-in, GRBL, Universal GcodeSender, PARTE 5.  CNCE
19/11/2018 - Arduino - CNC con piezas de DVD recicladas. GRBL, Inkscape, Gcodetools, UniversalGcodeSender. Parte 4. CNCD
15/11/2018 - Arduino - CNC con piezas de DVD recicladas. Parte 3. Programa Benbox. CNCC
13/11/2018 - Arduino - CNC con piezas de DVD recicladas. Parte 2. Interface realizada con Gambas. CNCB
09/11/2018 - Arduino - CNC con piezas de DVD recicladas. Parte 1 .CNCA

lunes, 19 de noviembre de 2018

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

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
  • G0 - Rapid Motion
  • G1 - Coordinated Motion
  • G2 - Arc - Clockwise
  • G3 - Arc - Counter Clockwise
  • G4 - Dwell
  • G10 - Create Coordinate System Offset from the Absolute one
  • G17 - Select XY plane (default)
  • G18 - Select XZ plane (not implemented)
  • G19 - Select YX plane (not implemented)
  • G20 - Inches as units
  • G21 - Millimeters as units
  • G28 - Home given Axes to maximum
  • G30 - Go Home via Intermediate Point (not implemented)
  • G31 - Single probe (not implemented)
  • G32 - Probe area (not implemented)
  • G53 - Set absolute coordinate system
  • G54-G59 - Use coordinate system from G10 P0-5
  • G90 - Absolute Positioning
  • G91 - Relative Positioning
  • G92 - Define current position on axes
  • G94 - Feed rate mode (not implemented)
  • G97 - Spindle speed rate
  • G161 - Home negative
  • G162 - Home positive
G-Codes pueden tener argumentos, algunos de los mas usados son:
  • X absolute position
  • Y absolute position
  • Z absolute position
  • A position (rotary around X)
  • B position (rotary around Y)
  • C position (rotary around Z)
  • U Relative axis parallel to X
  • V Relative axis parallel to Y
  • W Relative axis parallel to Z
  • M code (another "action" register or Machine code(*)) (otherwise referred to as a "Miscellaneous" function")
  • F feed rate
  • S spindle speed
  • N line number
  • R Arc radius or optional word passed to a subprogram/canned cycle
  • P Dwell time or optional word passed to a subprogram/canned cycle
  • T Tool selection
  • I Arc data X axis
  • J Arc data Y axis.
  • K Arc data Z axis, or optional word passed to a subprogram/canned cycle
  • D Cutter diameter/radius offset
  • H Tool length offset

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/