miércoles, 28 de noviembre de 2018

Generar GCODE con Inkscape Laser Tool Plug-in GRBL

Página principal


Arduino
Inkscape Laser Tool Plug-in
GRBL, Universal GcodeSender
PARTE 5


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 la cuarta entrega de está serie de artículos sobre CNC (plotters), explico como utilizar el programa Inkscape para crear ficheros con extensión ngc y se utiliza la extensión Gcodetools.
En esta quinta entrega utilizo  también  Inscape, pero utilizo la extensión Laser Tool Plug-in.
https://jtechphotonics.com/?page_id=2012

En la parte de hardware (arduino) se utiliza una versión  del programa GRBL (grbl-servo-master) que tiene eliminado el eje Z y añade el control de un servo.
https://jtechphotonics.com/?page_id=2012
En programas se encuentra los programa compilados y las fuentes.


Ahora los comandos utilizados para pintar son:
M03 S30   baja el lapiz.
M05         sube el lapiz.


Código del dibujo de una línea en formato GCODE
M05 S0

G90
G21
G1 F3000
G1  X49.4661 Y48.9082
G4 P0
M03 S30
G4 P0
G1 F750.000000
G1  X0. Y-0.
G4 P0
M05 S0
G1 F3000
G1 X0 Y0

He visto que funciona perfectamente a velocidad de 115200 BAUD_RATE, por lo que se queda como está.
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 Laser Tool Plug-in para generar el código Gcode.
Nuestra superficie de pintado es de 50mmx50mm por lo que empezamos cambiando las propiedades del documento.


Creamos dos tipos de letras, una de single line y otra normal.


Pasamos las letras a trayecto.


En extensiones vamos a la extensión J Tech Photonics Laser Tools y generar el archivo en formato Gcode.




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





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
PARTE4

https://jtechphotonics.com/?page_id=2012
https://github.com/robottini/grbl-servo
http://akirasan.net/drawingbot-un-plotter-casero/

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/

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/

sábado, 17 de noviembre de 2018

Arduino CNC con piezas de DVD recicladas. Programa Benbox

Página principal


Arduino
CNC con piezas de DVD recicladas
programa Benbox
Parte 3

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 esta tercera parte mostraré como utilizar el CNC con un programa comercial llamado Benbox.
Existen multitud de páginas donde se puede descargar el programa.
Se ha utilizado principalmente para crear dibujos y letras con láser, funciona con muchos KIT chinos.
El programa Benbox solo funciona en Windows o en una máquina virtual con VirtualBox.
http://www.holdme.cn/thread-1566-1-1.html
https://mega.nz/#!u8RnBDRa!G39BvWg0dSnv0Iwr49dDxI_rFS3fQuSBxM0wBUSxZcQ
Lo primero que debemos es cargar el firmware en el arduino nano que nos trae el módulo.
Debemos seleccionar NANO(328p)/LX-Nano, el puerto correspondiente COM3...COM4 y pulsar OK.
En alguna ocasión no me ha funcionado a la primera.


Debemos configurar algunos parámetros del dispositivo, en mi caso lo he dejado de la siguiente manera.
En Speed he puesto 2000, pero en algunos casos puede ser mayor o menor.
Se puede ajustar la altura del rotulador con las opciones Pen Up y Pen Down .


Como mi placa es un poco peculiar debo cambiar los pin de conexión de los ejes X e Y.
Cada uno deberá poner los suyos. Lo normal para la mayoría de la gente será:
X_STEP=2 , X_DIR=5, Y_STEP=3, Y_DIR=6.
En PPM deberemos poner los pasos de cada eje.
En mi caso tiene diferente paso, he puesto 25.9 en eje X y 15.9 en eje Y.
El servo se encuentra en el pin 11 del arduino.




Ajuste de la posición del servo.



El resultado a diferentes velocidades.

AVISO. Después de bastantes pruebas he detectado que los motores se calientan.
Aunque funcione bastante bien, recomiendo que la alimentación de los motores solo se realice cuando se tenga que imprimir, de otra manera se calentarán los motores sin necesidad.
De lo descubierto con el calentamiento de motores se deduce que este programa no está diseñado para funcionar con los controladores de los motores paso a paso que tengo.

En la 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. Los resultados son inmejorables y con bastante calidad.

VIDEO DE FUNCIONAMIENTO


Saludos.
Juan Galaz


Bibliografía:
PARTE1
PARTE2
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/

martes, 13 de noviembre de 2018

Arduino CNC con piezas de DVD recicladas. Interface realizada con Gambas. Parte 2

Página principal


Arduino
CNC con piezas de DVD recicladas
Interface realizada con Gambas
Parte 2


En la primera parte de este montaje había realizado un CNC con un lenguaje propio. PARTE1
En esta segunda parte de montaje, realizo una sencilla interface gráfica con Gambas (Visual Basic para linux).
El tener que introducir todas las líneas una por una de forma manual , puede resultar agotador.
Con este programa se simplifica la realización de texto y líneas.
El programa  es sencillo, solo dispone de 4 líneas de palabras y 3 rectángulos para imprimir.
Se puede cambiar las coordenadas y su tamaño.
Las letras solo tienen una resolución 5*8  en forma de línea, no es mucho pero para este CNC sirve.
Como ejemplo la letra N tiene la siguiente descripción:
78, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 0, 4, 0, 4, 7
78- Código Ascii de N
0,0,0 reservados
línea de 0, 0 al 0, 7
línea de 0, 7 al 4, 0
línea de 4, 0 al 4, 7

Como no quería complicarme mucho, solo he realizado las letras en mayúsculas.


Interface gráfico.

Recomiendo no ajustar mucho los elementos a los márgenes, puede no pintar bien los extremos debido a un ajuste preciso del CNC.

Para una tercera parte mostraré como utilizar el CNC con programa comercial bastante mas potente.



VIDEO DE FUNCIONAMIENTO

PROGRAMA GAMBAS



Saludos.
Juan Galaz


Bibliografía:
PARTE1
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/

viernes, 9 de noviembre de 2018

Arduino CNC con piezas de DVD recicladas Parte 1

Página principal


Arduino
CNC con piezas de DVD recicladas
Parte 1


En este montaje voy a realizar un CNC con arduino y piezas recicladas de un DVD.
Para decir la verdad, es mas un plóter que un CNC de fabricar piezas, pero el mecanismo es el mismo.
Antes de nada,debo decir que no pretendo enseñar nada, existen numeroso manuales que lo explican mucho mejor de lo que yo pudiese explicar.
En esta primera parte he creado yo mismo todo el programa del arduino , creando mi propio lenguaje de control del CNC. Hubiese sido fácil montar el circuito he instalar los programas que existe ya hechos, y ver como funciona el CNC. Yo pretendo hacer todo desde cero, para así comprender todo mejor.
Empecemos por el principio, existe multitud de videos en internet donde se muestra como fabricar cnc con piezas de DVD.
https://www.doovi.com/video/how-to-make-homework-writing-machine-at-home/sUdAwUOaPX0
Solo con escribir en un buscador las palabras : cnc - dvd - arduino, os saldrá cientos de enlaces.
Un lugar que está muy bien explicado el funcionamiento de los motores paso a paso es:
https://www.luisllamas.es/motores-paso-paso-arduino-driver-a4988-drv8825/
Hace unos meses había pedido por internet un módulo controlador de motores paso a paso , pero no me decidía a probar el circuito, hasta está semana que me sentía con fuerzas.
https://es.aliexpress.com/item/3DV4-CNC-Shield-V4-engraving-machine-Nano-3-0-with-USB-A4988-Reprap-Stepper-Drivers-for/32809568484.html


Tiene todo lo necesario para monta el CNC, un arduino nano y tres A4988 para controlar los motores paso a paso.
Por el precio de 8,6€, creo que no se pueda pedir mas.
Había realizado algún montaje con el chip L293d, pero con estos módulos A4988 el circuito está mas conseguido, e incluso se puede controlar la intensidad que podemos mandar al los motores.
Existen algunas páginas donde explica el funcionamiento del módulo:
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/
Pero después de un montón de pruebas, descubrí que en este modelo de placa estaban cambiados los pin de conexión de los módulos A4988.
Debiéndose configurar de la siguiente manera:
#define EN1  8
#define X_DIR     2       //X axis   direction control of stepper motor
#define Y_DIR     3       //y axis   direction control of stepper motor
#define Z_DIR     4       //z axis   direction control of stepper motor
#define X_STP     5       //x axis  stepper control
#define Y_STP     6       //y axis  stepper control
#define Z_STP     7       //z axis  stepper control
Que cada uno mire su configuración de placa, a mi me costo tiempo descubrir el motivo de que no me funcionase.

Esquema de la placa, puede no coincidir en alguna conexión con el modelo que tengáis vosotros.

Para este montaje solo se utiliza los controladores de los ejes X e Y, además del pin 11 para conectar el servo que maneja el rotulador.
Debemos tener una alimentación entre 7.5 y 12V para alimentar los motores de paso a paso. El servo se alimenta de los 5V del propio arduino.

Detalle del módulo.

En la parte mecánica se encuentra las dos piezas de dos DVD reciclados, unidas entre si por la parte del lector mediante pegamento térmico.

Detalle de la unión de los dos mecanismos.

Una vez unido los dos mecanismos reciclados procedentes de DVDs, me di cuenta que el tornillo de arrastre tenía diferente paso.
El uno tenía 260 pasos y el otro 160 para recorrer todo el trayecto, fue un detalle del cual no me dí cuenta hasta que lo tuve montado.
Para este montaje da igual la precisión, no cambia nada el proyecto, lo único es que debemos tenerlo presente en la programación.


Detalle del mecanismo del pintado.

El mecanismo de control del mecanismo de pintado es sencilla.
El tapón de un rotulador cortado a modo de guía pegado al servo.
El mecanismo de un compás que atrapa al rotulador.
Una goma elástica que mantiene la tensión con el rotulador, y una pajita y un alambre que hace de transmisión del servo al rotulador.
El rotulador utilizado es un STABILO, el mejor que he encontrado.
Si tiene algo de holgura se coloca un pequeño canutillo hecha con otra pajita de mayor tamaño.
Existe otro problema en este CNC, no existe detector de final de recorrido. Cuando se alimenta por primera vez el CNC no sabe en que posición está. Si utilizamos la orden de reset el mecanismo intentara ir todo lo que pueda a la posición de cero, pero al existir una especie  de embrague  puede quedar  desajustado, como  indico en la foto.

Tuve que tomar una decisión, si utilizamos el comando reset, perdemos 15 vueltas en cada eje.
Existe otro método, el manual, arrastrar manualmente a los puntos iniciales 0,0.
Ahora con el comando SET0 hacer este punto como punto inicial 0,0 .

Terminada la parte mecánica, la mas fácil, nos toca el programa en el arduino.
El planteamiento es la de un CNC que recibe ordenes desde un terminal serie, o desde un programa.
He creado un lenguaje de ordenes que entiende el CNC, y estas son las ordenes que comprende el CNC.

Orden
Acción
CNC
El CNC responde OK
GOTOX
Mueve el lápiz a la coordenada X
GOTOY
Mueve el lápiz a la coordenada Y
GOTOXY
Mueve el lápiz a la coordenada X,Y
PAINT 1/0
1 baja el lápiz, 0 sube el lápiz
RESET
Intenta colocar el cursor al punto inicial, de pierde 15 pasos.
SET0
El punto actual lo toma como punto 0,0
LINE x,y,xx,yy
Baja el lapiz , dibuja la línea, al finalizar sube el lapiz.
LINEC x,xx,y,yy
Es como LINE, pero debemos bajar el lapiz para pintar,sirve para linea continuadas.
STEPX+1
Incrementa en un paso el eje X.
STEPY+1
Incrementa en un paso el eje Y.
STEPX-1
Decrementa en un paso el eje X.
STEPY-1 Decrementa en un paso el eje Y.



Las ordenes se pueden escribir en mayúsculas o minúsculas, el programa transforma todo en mayúsculas.
Solo puede existir un espacio o coma entre cada parametro de una orden, de otra forma no entendará la orden.
Si se escribe cualquier otro comando, devolvera ERROR.
Como el arduino del CNC no tiene demasiado buffer, debemos esperar un END de la anterior orden antes de mandar la siguiente orden al CNC.
Existe una rutina en el dibujado de una línea, que busca el punto mas cercano al actual para el inicio de la línea, ayuda mucho en la velocidad de pintado de línea.

Si queremos mandar una orden, desde el propio terminal del arduino se manda la orden. Ejemplo  line 10,10,200,150 .
He creado un programa que manda una serie de ordenes desde un fichero, de esta forma es mucho mas fácil realizar ordenes sucesivas.
Todo está realizado en Linux en la distibución Debian 9.4 .

En la parte segunda de este montaje realizo un pequeño programa en Gambas que facilita la creación de letras.


VIDEO DE FUNCIONAMIENTO

PROGRAMA ARDUINO

PROGRAMA LINUX


Saludos.
Juan Galaz


Bibliografía:
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/

viernes, 19 de octubre de 2018

Problemas que te pueden pasar después de instalar Debian 9


Página principal

Problemas que te pueden pasar después de instalar Debian 9




Debian 9.3 no funciona con adaptadores externos de USB Wifi.
Lo primero debemos estar seguro que hemos instalado los firmware. Por defecto en Debian no instala los firmware (ubuntu instala todos), debemos instalarlos previamente los paquetes mediante Synaptic.
Solución:
Añadir en /etc/NetworkManager/NetworkManager.conf 
 [device]
wifi.scan-rand-mac-address=no

Hago reiniciar las redes con:

/etc/init.d/network-manager restart
/etc/init.d/networking restart

Ahora funciona, ya puedo probar todos mis adaptadores USB-WIFI


En el caso que tengáis varios linux en diferentes particiones, os pasará un error en la próxima vez que entréis en la otra distribución.
Esto es debido que el linux cuando se instala, formatea por defecto la partición de intercambio swap. Pero resulta que le cambia la identificación de nombre, que es como reconoce linux las particiones. Al reiniciar el primer linux, no encuentra el nombre partición que dio el, y se pasa 1:30 minutos pensando.
Este es el sintoma:
ERROR de Running /scripts/local-premount 
Running /scripts/local-premount ... Begin: Waiting for suspend/resume device ... Begin: Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.
Running /scripts/local-block ... done.

Gave up waiting for suspend/resume device.

La forma de arreglarlo siendo root es mediante la orden:
update-initramfs -u
 
o
update-initramfs -u -k all

Probar una u otra y ahora lo normal es que se arregle.
Yo también cambio el fichero /etc/fstab , quito la etiqueta y lo sustituyo por la referencia directa,lo prefiero.

# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdb5 during installation
/dev/sdb5 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda9 during installation
/dev/sda9 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0


La tarjeta gráfica que tengo:
VGA compatible controller: NVIDIA Corporation C61 [GeForce 7025 / nForce 630a] (rev a2)
En principio Debian 9.x instala por defecto el controlador libre nouveau.
Pero resulta que no es demasiado estable con aplicaciones 3D, y lo normal es que se cuelgue.
Debemos instalar el controlador propietario de Nvidia.
echo -e "blacklist nouveau" > /etc/modprobe.d/fbdev-blacklist.conf
echo -e "options nouveau modeset=0" > /etc/modprobe.d/modesetting.conf

echo "deb http://deb.debian.org/debian stretch main contrib non-free " >> /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian stretch main" >> /etc/apt/sources.list
apt-get update
apt-get install nvidia-detect
apt-get install linux-headers-$(uname -r) nvidia-legacy-304xx-driver
Reiniciamos el ordenador y se soluciona los cuelgues.


El entorno de escritorio PLASMA (KDE) , no funciona o funciona raro.
Resulta que el entorno gráfico utiliza muchos efectos en 3D, y mi tarjeta no es muy compatible con el OpenGL, el resultado es el mal funcionamiento de PLASMA.
La solución es cambiar el Método de renderizado a Xrender.
Desde otro entorno de escritorio, por ejemplo MATE, entrar en el:
  • Centro de control.
  • Preferencias del sistema KDE.
  • Tema espacio de trabajo.
  • Compositor.



Ahora podremos entrar en PLASMA.
Debemos ser honesto, por lo menos en KDE se puede cambiar la forma de renderizado para hacerlo por software. En Gnome no he podido deshabilitar la aceleración gráfica por hardware, por lo que no he podido hacerlo funcionar (me parece increíble hasta donde llego Gnome). :(

Saludos
Juan

martes, 16 de octubre de 2018

Caja de tienda con lector de código de barras

Página principal


Gambas
Caja de tienda
con
lector de código de barras


Teniendo un lector de código de barras, se me pasó por la cabeza hacer una registro de caja de tienda.
Para una fácil realización del programa, lo he realizado en Gambas (V.Basic para Linux).
El programa debía almacenar productos con los códigos de barras, nombre del producto y precio.
Cuando se lee el código de barras, busca en su registro el correspondiente código, si existe añade el precio al ticket. Si no existe el código, abre un dialogo para dar de alta el producto.
También tiene un registro de los movimientos, para una posible revisión.
El registro de los diferentes productos se realiza en un fichero de tipo *.csv , el cual puede abrirse con un editor de textos  o con una hoja de cálculo. Tener cuidado en no introducir ENTER sin motivo, da error al cargar el programa.

Si tenéis que imprimir etiquetas de código de barras os recomiendo ver el artículo:
http://seta43.blogspot.com/2018/10/crear-etiquetas-de-codigo-de-barras-con.html

El programa es simple, y cumple su función, no pretendo nada mas.





VIDEO DE FUNCIONAMIENTO





PROGRAMA



Saludos
Juan Galaz

Bibliografía:

http://seta43.blogspot.com/2018/10/crear-etiquetas-de-codigo-de-barras-con.html

miércoles, 10 de octubre de 2018

Arduino Sensor de temperatura Modelo KNEISSEL 433MHz

Página principal

Arduino
Sensor de temperatura
Modelo KNEISSEL
433MHz
xsetaseta@gmail.com

Continuando con el proyecto de receptores de sensores comerciales externos , ahora nos toca el modelo KNEISSEL.


El programa se basa en el anterior, lo único que cada fabricante codifica los datos de forma diferente.
En este caso la onda de  datos mandados tienen este formato:

Como vemos los bit mandados son 24.
En este modelo se mandan los grados divididos, por una parte los decimales y por otro los grados.

El arduino transforma estas ondas en datos decimales que son mandados al PC por medio del interface  serie mediante el USB.
Datos transmitidos :   1,22,2,196,24
Datos:
  • 1-canal.
  • 2-grados.
  • 3-decimal.
  • 4-El primer byte mandado.
  • 5-bits recibidos, deberán siempre ser 24.


Realizado en Gambas (Visual Basic para Linux)

Dispongo de dos sensores y no he podido comprobar si realmente están bien programado la detección de canales.
Lo curioso es que no existe un conmutador para cambiar el número de canal.
Para este modelo solo he realizado el programa en Gambas.

PROGRAMA


Hasta pronto.
JUAN GALAZ

Bibliografía:

receptores de sensores comerciales externos
setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

domingo, 7 de octubre de 2018

Arduino Sensor de temperatura Modelo prinston 433MHz

Página principal

Arduino
Sensor de temperatura
Modelo prinston
433MHz
xsetaseta@gmail.com

Continuando con el proyecto de receptores de sensores comerciales externos , ahora nos toca el modelo prinston.


El programa se basa en el anterior, lo único que cada fabricante codifica los datos de forma diferente.
En este caso la onda de  datos mandados tienen este formato:

Como vemos los bit mandados son 36.
Los primeros 14 bit contienen codificación propia y estado de batería.
los siguientes 2 bit corresponden al canal,
La temperatura son los siguientes 12 bits,
Y el porcentaje de humedad utiliza 8 bits.

El arduino transforma estas ondas en datos decimales que son mandados al PC por medio del interface  serie mediante el USB.
Datos transmitidos :    Canal,02,Grados,00232,Humedad,024,Control,9003


Realizado en Gambas (Visual Basic para Linux)


Con las librerías wxwidgets en Windows y Linux.

PROGRAMA


Hasta pronto.
JUAN GALAZ

Bibliografía:

receptores de sensores comerciales externos
setacom.html
hantek.html
https://fetzerch.github.io/2014/11/15/reveng433/
https://es.aliexpress.com/item/1pair-2pcs-433mhz-rf-transmitter-and-receiver-kit-For-Wireless-Power-switch-socket-remote-control-LED/32311933574.html?spm=a2g0s.9042311.0.0.lWlrua

martes, 2 de octubre de 2018

Crear etiquetas de código de barras con gLabels

Crear etiquetas con gLabels

Por necesidad estuve el otro día buscando programas para hacer etiquetas de código de barras. Las etiquetas debían de ser reconocidas por el lector  MX009-2MA7C .
El programa debía funcionar en Linux, y el mejor programa que encontré fue gLabels.
Este programa tiene la posibilidad que utilizando una hoja de textos crear etiquetas con sus datos.
He creado este vídeo a modo de tutorial, espero que les guste.



Saludos.
Juan Galaz

domingo, 30 de septiembre de 2018

wxwidgets - Base de datos de libros SQLite - Lector código de barras MX009-2MA7C

Informática

wxwidgets
 Base de datos de libros
SQLite
Lector código de barras
MX009-2MA7C

Este artículo es una continuación de wxwidgets-Base de datos de libros-SQLite .
A pocos días de la realización de la base de datos de libros, por casualidades del destino, me dejaron un lector de código de barras MX009-2MA7C.
El lector funciona como un teclado mas, traslada el código de barras a código numérico, tecleando el código como si fuera un teclado, ademas de pulsar ENTER.
En pocos minutos añadí una entrada de texto (en verde), donde el lector introduce el código y lo busca en la base de datos.

El programa con el cambio realizado.


Probando el lector de código de barras.

Da gusto ver como en 1 segundo te busca el libro en la base de datos, después de leer el código de barras.
El programa lo he compilado solo en Linux, en cualquier momento lo compilo también en Windows.
Solo tienes que copiar el fichero ejecutable en el directorio donde está la base de datos  libros.sqlite .

PROGRAMA


Saludos.
Juan Galaz

viernes, 28 de septiembre de 2018

wxwidgets Base de datos de libros SQLite

Informática

wxwidgets
 Base de datos de libros
SQLite


Buscando por internet encontré una base de datos de libros, estaba realizada para access microsoft. Era del programa abies 2 que se utilizaba para una gestión de  bibliotecas escolares.
La página del proyecto es http://www.abies.es/web/ , ahora el proyecto se basa en web, por lo que faltan en mi base de datos muchos libros desde hace 10 años hasta ahora.
Me puse manos a la obra y la base de datos en formato mdb la pase a formato sqlite.
La base de datos consta de 388.000 libros, 200.000 autores, y 50.000 editoriales.
Por lo que podéis ver es bastante grande, era una experiencia nueva trabajar con tanta cantidad de libros, por lo que lo tome como un reto.
En primer lugar hice pruebas con los autores, y me dí cuenta que era un problema las mayúsculas y  los acentos, en las búsquedas.
Había autores que los habían escrito de diferentes formas, Garcia, García, GARCIA, GARCÍA.
En MySQL había una solución, pero en SQLite no funcionaba.
Esto era un problema en las búsquedas, por lo que tome la solución mas drástica, poner todo en mayúsculas y quitar acentos.
También me pasó con las editoriales, por lo que también pasé todo a mayúsculas y quitar acentos.
El programa lo he realizado solo para consultas, por lo que no se puede añadir nada a la base de datos.
Anteriormente había realizado el mismo programa en Gambas (Visual Basic para Linux):
                01/08/2018 - Gambas -Base de datos de libros con SQLite. LIBROS
Existe una librería llamada  wxSQLite, pero no he querido utilizarla.
He utilizado parte del código realizado en el programa hecho para consola para no complicarme mucho.
El programa se realiza en Linux, y cuando funciona bien se intenta compilar en Windows.
El problema ocurre al utilizar las diferentes versiones de las librerías wxwidgets.


Funcionando Linux.


Funcionando en Windows.


Funcionando en Linux pero con Wine.

La base de datos consta de 3 tablas o bases de datos, Fondos,Autores,Editoriales.
La base de datos principal es Fondos, en esta se encuentran los los libros con su  IdAutor y IDEDITORIAL, que son numeros enteros.
Los  campos IdAutor y IDEDITORIAL enlazan a las bases de datos o tablas, de Autores y Editoriales, donde se encuentran los nombres de cada autor y editorial.
En resumen son 3 bases de datos con datos enlazados o datos vinculados.

PROGRAMA


Saludos.
Juan Galaz




Como curiosidad existe una página web donde se encuentra una base de datos de libros inmensa.
REBECA: registros bibliográficos para bibliotecas públicas españolas


Bibliografía:

https://poesiabinaria.net/2015/03/usando-sqlite-en-nuestros-programas-en-cc/
http://apuntes-para-no-olvidar.blogspot.com/2012/01/conectar-con-una-bd-de-sqlite-en-c.html
http://www.aprendoencasa.com/index.php/2014/02/12/base-de-datos-sqlite-con-el-lenguaje-de-programacin-c/