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 lineas 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/