del Chaqueta Mens Gruesa Chaqueta Acolchada Estilo Invierno Aire Viento del Blau A del Hombre Capucha Parka Caliente para Chaqueta De Libre La Piel Prueba Simple Acolchada con Al De Acolchada tqwItRxrE
¿No sería increíble que pudieses crear tu propia maquina robotizada casera?
Siempre has tenido ganas de montar una, estoy seguro.
Hoy voy a enseñarte el software que necesitas para convertir un sencillo Arduino en una controladora para tus motores paso a paso.
No hay nada que nos fascine más que tener nuestro propia máquina controlada por ordenador. Yo mismo me paso horas asombrado mirando como se mueve la impresora 3D.
En este mega post vas a aprender todo lo que necesitas para configurar tu propia máquina.
La teoría es sencilla. Necesitas unos motores paso a paso, unas correas, unas poleas, unos drivers y un Arduino que controle todo.
Pero cuando te pones a buscar motor paso a paso es cuando la cosa se complica. Que si hay que mandar un pulso, que si el driver va a 12V, que si la interrupción del timer…
Te encuentras con una cantidad enorme de datos, técnicas, y lo que es peor, líneas y líneas de código fuente.
Por eso existe GRBL
Hablar el mismo lenguaje que el motor paso a paso
La teoría de los motores paso a paso es sencilla. Cuando el Arduino manda un pulso al driver del motor, este avanza un pasito.
Esta técnica es muy popular en las máquinas robotizadas porque como sabes cuantos pulsos has enviado, sabes cuánto ha avanzado la máquina.
Lo que necesitas es pasar de un lenguaje de pulsos, a algo más sencillo de explicar, como son las coordenadas de los motores.
Por decirlo de alguna manera, cuando hablamos con el motor, le decimos: quiero que avances 200 pulsos. Pero asi es difícil saber lo que va a hacer la máquina exáctamente.
Lo que queremos es decir avanza 10 centímetros. Mucho más útil.
Lenguaje G-CODE
La forma más o menos estándard de comunicarse con un robot es usando el lenguaje G Code. Es un sencillo sistema de texto con los movimientos de la máquina. Es uno de los formatos más veteranos, ya que su primera versión se remonta a los años 50.
CNC y G-Code
Las máquinas robotizadas se denominan CNC, y viene de “Computador de Control Numérico”. Es la forma común para no decir “maquina robotizada con motores”.
El lenguaje universal de las máquinas CNC se llama G-Code. Es un fichero de texto con todos los movimientos de la máquina.
No voy a entrar en los detalles del g code, pero para que os hagáis una idea, os voy a poner unos comandos de ejemplo:
G00 X0Y0Z0
Esto nos lleva a la posición 0,0,0
G01 Z1 F5
Esto avanza lentamente la altura 1 mm, a la velocidad de 5 mm/minuto (feed rate)
G00
es avance rápido.
Avanza todos los ejes de tal forma que llegue lo antes posible.
¿Qué ocurre en ese caso? Que la velocidad de movimiento es la máxima, pero los movimientos no van en línea recta. Si los motores X e Y avanzan la velocidad máxima (por ejemplo, a 200 mm por minuto) la máquina hace una linea de 45º, hasta que uno de los motores llega al borde.
Este comando se usa cuando la CNC no está cortando, y queremos mover el cabezal a una posición concreta, y no nos importa la ruta que tome, sólo la velocidad.
G01
es avance en línea recta. Se usa cuando estamos cortando y si que nos importa la ruta que tome la máquina.
Si queremos que la máquina haga una línea recta, uno de los motores tiene que ir más lento que el otro, para que se mantenga por el rumbo que queremos.
Lo mejor es verlo con esta infografía (no seáis muy malos conmigo):
La buena noticia es que no tenemos que escribir el G Code a mano. La mayoría de programas tienen formas de exportar y generar G Code por nosotros.
Puedes diseñar sus logotipos en Adobe Illustrator, Corel Draw o Inkscape (si quieres tener todo Open Source) y exportar a G-code usando un plugin.
Si estás usando una impresora 3D, programas como Cura o Slic3r, precisamente lo que hacen es convertir tu modelo 3D en un programa de G-Code que luego enviamos a la impresora.
Aqui te dejo un completo tutorial para generar código G-Code desde un logotipo, usando Ink Scape
GRBL aparece en la escena del Arduino
El autor original del firmware GRBL es el noruego Simen Svale Skogsrud. En el 2007 se encontró exáctamente con el mismo problema que tienes ahora: cómo controlar un motor paso a paso. Así que decidió investigar, diseñar un planificador (usando el software mathematica) y comenzó a desarrollar para Arduino, que estaba haciéndose popular en aquel tiempo. Además está basado en el chip de Atmel AVR (que estoy seguro que no sabías que se diseñó en Noruega!)
Poco tiempo después de publicar el código, Sonny Jeon estaba buscando una forma de controlar sus motores, y descubrió este firmware. En menos de un año, se convirtió en uno de los principales desarrolladores del firmware.
Puedes ver este hangout con Sonny Jeon, contando su experiencia con el firmware, ideas para futuros desarrollos, etc.
Porqué deberías usar GRBL
Todo el mundo tiene un Arduino cerca para cacharraear y probar. Y el entorno de desarrollo es popular y muy documentado.
GRBL es un firmware que está funcionando en muchos proyectos, con una base de usuarios importante. Si tienes dudas o algo no te funciona, va a ser muy fácil encontrar ayuda.
Asi que, con un Arduino, una placa preparada para CNC (hablaremos de esto en muy poco tiempo!), unos drivers como los Pololu A4988 o los más potentes DRV8825, y unos motores paso a paso, ya tienes toda la electrónica para empezar.
Una comunidad enorme
GRBL está presente en multitud de proyectos y es sencillo encontrar mucha gente que te puede ayudar.
¿Qué proyectos usan GRBL?
La lista es enorme, y no voy a intentar hacer un recopilación de proyectos que usan GRBL. Es un poco excesivo.
Pero voy a destacar el más popular de todos: la CNC Shapeoko. Esta CNC tiene un precio muy asequible, sobre los $1000, y tiene una comunidad muy potente detrás. Es bastante normal ver una Shapeoko en los fablabs más conocidos.
Si quieres algo más lowcost, un proyecto muy barato (menos de $60) es Cartesio, un plotter que hace unos dibujos artísticos muy buenos, con unas piezas impresas en 3D, dos motores paso a paso y un servo.
¿Quieres una aceleración suave? Este es tu firmware
La primera vez que pensamos en mover motores paso a paso, nos imaginamos el arduino enviando un pulso para mover el motor. Pero aquí hay un problema: la inercia.
Cuando el motor está parado, cuesta mucho trabajo hacer que la máquina pase de estar en reposo a estar en movimiento. Por este motivo, tenemos que ir acelerando poco a poco (igual que cuando arrancamos el coche).
Al principio del movimiento, el firmware va subiendo la velocidad poco a poco hasta llegar a la velocidad deseada, y ahí se mantiene hasta que va llegando al final del movimiento. Entonces va decelerando poco a poco hasta que se para, o comienza un nuevo segmento.
Lo que hace el GRBL es convertir cada movimiento en una lista de trapecios.
Este es el núcleo del algoritmo de GRBL. Despedazar los movimientos en trapecios para cada motor. Dividir los movimientos en una lista de líneas rectas y calcular la aceleración y frenada de cada segmento, en cada eje.
La lista de trapecios se envían a la parte más importante del programa, la interrupción de timer, donde se transforman esos trapecios en pulsos, a una velocidad perfectamente definida para que los motores se muevan de forma coordinada. Todo esto se tiene que ejecutar de forma perfectamente sincronizada.
Qué es el Look Ahead Planning y porqué lo necesitas
Hablamos de la aceleración en un movimiento sencillo, pero el GRBL va un paso más allá y calcula las aceleraciones según los movimientos futuros de la máquina. Una característica fundamental para que las líneas y las curvas sean suaves y fluidas.
El G-Code nos define los movimientos línea a línea. Avanza tantos centímetros a la derecha, ahora avanza en otra dirección, y así hasta terminar de cortar nuestra pieza
Imagínate que el programa le dice que avance en linea recta a toda velocidad durante un buen rato. El cabezal de la máquina irá a toda pastilla hasta el final.
Entonces pueden pasar 2 cosas.
La primera opción es que el siguiente movimiento sea un giro brusco, por ejemplo, en una esquina. El cabezal tiene que empezar a frenar mucho antes de llegar al la esquina, si no, con la inercia, se pasará de frenada y nos quedará una marca fea.
¿Pero qué pasa si la en vez de un giro brusco, la línea continua pero con una mínima diferencia? Por ejemplo, si solo nos desviamos unos grados de nuestro rumbo. Entonces no hace falta frenar, el cabezal puede mantener la velocidad y todo irá más suave. Incluso las marcas serán más limpias.
Lo que hace GRBL es leer las siguientes líneas del programa, y recalcular la lista de trapecios y sus aceleraciones, teniendo en cuenta los siguientes movimientos. De esta forma, el cabezal frenará antes, porque conoce lo que le va a venir más adelante.
Recalcular la aceleración
GRBL lee los siguientes movimientos de la máquina, y ajusta la aceleración y frenada para que todo vaya suave y fluido.
Adaptive Multi-Axis Step Smoothing
GRBL usa el algoritmo de Bresenham para calcular el movimiento de los ejes. Los que sepan algo de programación gráfica conocerán este popular algoritmo. Lo que hace GRBL es subdividir los movimientos rectos, y suavizarlos (como el antialias de los videojuegos, pero aplicado a CNC). Esto se nota especialmente cuando un eje es dominante en el movimiento. El único problema es que ahora hay una velocidad mínima de avance. Si tu máquina necesita ir muy despacio (1 mm por minuto o algo asi) entonces no podrás usar esta técnica, pero bueno, tu movimiento ya será suave de todos modos
Linux y Máquinas CNC
Estoy seguro que en algún momento te has preguntado porqué no usar un procesador más potente para mover una CNC. Por ejemplo, porqué no usar una Raspberry Pi para hacer los cálculos.
El problema está en cómo linux maneja el tiempo.
En un procesador más avanzado (que ejecuta linux), es el kernel quién gestiona la interrupción del timer, y bloquea el acceso al resto de programas. Y esto es algo positivo, ya que es lo que permite que podamos usar las Raspberry Pi o un ordenador normal. Si un programa logra tomar el control de esta interrupción, es posible que bloquee todo. Y cuando digo todo, digo absolutamente todo: el ratón, la tarjeta de video, la conexión de internet, etc. Por eso el kernel nos protege para que eso no ocurra.
El kernel de linux asigna un tiempo a cada programa. El servidor web, el gestor de ventanas, etc. Según la CPU disponible, y los recursos que están usando en ese momento, permite ejecutar un programa u otro.
Por este motivo, dependemos del resto de programas para garantizar que todo se llama a tiempo. Si un programa pide mucha CPU, el kernel haría que nuestro programa funcionase más lento. Y si estamos cortando un círculo con la CNC, puede que perdamos pasos, y el circulo se parezca más a un huevo.
En todo lo que tiene que ver con motores usamos un procesador tipo Arduino. Técnicamente lo llamamos de tiempo real, porque si programas para que se lance una interrupción cada 100 milisegundos, va a hacerlo exactamente en ese momento.
Linux
Las máquinas con linux no sirven para controlar una máquina CNC por la forma en la que gestiona la multitarea.
Marlin para la Impresora 3D
Estoy seguro que has escuchado alguna vez sobre el firmware Marlin para las impresoras 3D. Es el firmware más usado para la RAMPS 1.4, por ejemplo.
Pues si miras el código, sobre todo la parte de movimientos, verás que el Marlin no es más que un GRBL con vitaminas.
La base es la misma. Lo que han añadido los programadores es toda la gestión de temperaturas, lo que mantiene el extrusor caliente mientras hacemos la pieza. También han metido la parte del menú y la pantalla LCD, que es un trabajo importante.
Además de eso, el GCODE tiene una sección de comandos, M (de “machine”). Por decirlo de alguna manera, cada máquina tiene sus peculiaridades. Por ejemplo, una máquina puede necesitar que hagamos un pitido. En el caso de Marlin, han programado el comando M300.
M300 S300 P1000
Aqui tienes la lista de comandos GCODE que se usan en Marlin y en los firmwares más comunes de impresoras 3D.
Versión compatible con Arduino Mega
El firmware GRBL está pensado para trabajar con Arduino Uno. Todos los pines de salida está ocupados, y el pobre, ya no puede más.
Pero si estás pensando en usar 4 ejes, y necesitas más potencia, hay versiones adaptadas para Arduino Mega.
Yo no las he probado, tengo que decirlo, pero me parece interesante mencionar este enlace: https://github.com/dguerizec/grbl-Mega-4axis
Ahora te toca Instalar GRBL
GRBL mantiene toda su configuración en la memoria EEPROM, que es una memoria permanente que llevan los procesadores. Puede pasar que en algún caso, los datos que ya estaban almacenado en el arduino, afecte a la configuración por defecto. Si has usado el Arduino antes, es aconsejable borrar la memoria EEPROM.
Compilar GRBL
Este proyecto está muy testeado y ya ha pasado por varias revisiones completas. Afortunadamente, el código se compila sin problema desde el IDE de Arduino.
Lo primero de todo es descargar el código fuente de GRBL desde github.com y descompirir el ZIP
Lo que vamos a hacer es agregar el GRBL como una librería. Para ello, añadimos la carpeta grbl
desde el menú add library en el IDE de Arduino.
Una vez hagamos esto, si queremos compilar el GRBL, tenemos que ir al menú de programas de ejemplo de Arduino, y buscar el grbl (sí, al agregar la librería, te agrega automáticamente el GRBL como programa de ejemplo!)
Recuerda que hay que seleccionar la placa Arduino Uno! (GRBL por defecto viene preparado para esta placa)
Y antes de compilar, seleccionamos el puerto serie donde tenemos conectado el Arduino.
Ya está! Le damos a compilar y upload, y nos subirá el nuevo firmware a nuestro Arduino.
Ahora podremos ver si está correctamente configurado, simplemente conectándonos al puerto serie (recuerda que la velocidad es de 115200 baudios)
Compilar GRBL desde línea de comandos (para usuarios expertos)
Si estás usando linux, no es necesario que compiles desde Arduino, puedes hacerlo desde línea de comandos, siempre que tengas instalado el avr-gcc (el compilador de c para AVR) y el paquete avr-libc. Para enviar el binaro a nuestro arduino usaremos avrdude. La propia distribución de GRBL incluye las instrucciones para compilar todo.
Blues Patch de Hombre Snapback Azul khaki para béisbol Gorra Full Apparel Dress Vans aqAPqmake clean
make grbl.hex
sudo avrdude -p m328p -D -P /dev/ttyUSB0 -c arduino -b 115200 -U flash:w:grbl.hex
Cómo Configurar GRBL
Para comunicarnos con el GRBL, lo podemos hacer directamente a través de un terminal serie, como minicom. Pero si preferimos algo más gráfico, podemos usar el programa Universal-G-Code-Sender
Otro programa que está muy de moda es el bCNC. En windows es algo más complicado de instalar porque funciona con python, y hay que instalar alguna libería. Te lo recomiendo sólo si eres un usuario experimentado.
Si utilizas windows, para conectarte por primera vez y ver si el GRBL funciona, te recomiendo usar putty. Es un ejecutable muy sencillo que nos abre el puerto serie sin tener que instalar nada.
Esta es una aplicacion en Java que nos permite enviar ficheros gcode e interactuar con nuestra CNC de forma sencilla.
GRBL interpreta directamente G-CODE, pero para configurar tu CNC, el intérprete incluye una serie de comandos especiales.
$$
: Esto nos muestra una lista con todos los parámetros que podemos configurar.
Lo primero es ajustar los pasos por milímetro. Esto es, cuantos pasos tiene que enviar el Arduino al motor para que tu CNC avance 1 mm.
Vamos a hacer los cálculos. El motor stepper normalmente es de 200 pasos. Esto quiere decir que con 200 pasos, el motor da una vuelta completa.
Necesitamos el paso de nuestra varilla roscada. Una varilla de 8mm tiene un paso de 1.25mm. Esto quiere decir, que en cada vuelta, avanza 1.25mm (tienes que mirar el paso de la varilla que has comprado)
Si es de 8mm, con 200 pasos avanzaremos esos 1.25 mm.
Los drivers suelen tener micropasos. Esto es, que dividen 1 paso completo, en 16 pequeños avances, para que el movimiento sea más suave y fluido. Asi que, si tenemos una varilla roscada de 8mm, con un motor de 200 pasos, a 16 micropasos, la fórmula seria :
(200*16) / 1.25 = 2560 pasos!
De este modo, para configurar el eje X, escribiremos:
$101 = 2560
Sencillo verdad! Y además, automáticamente queda almacenado en la memoria EEPROM.
El siguiente valor que vamos a cambiar es la velocidad por defecto. Esto depende muchísimo de nuestra máquina. Si está bien engrasada, si usa husillos o patines lineales, etc.
$4
es para la velocidad de avance. Imaginad que estamos cortando madera con la máquina, o metacrilato con el láser. Con este comando calibramos la velocidad máxima a la que podemos realizar este corte (el comando G1
en gcode). Esto quiere decir que, aunque el gcode diga que vamos a cortar a 1000mm por minuto, nosotros nunca pasaremos de 500mm/min.
Con esto nos aseguramos que el taladro no se va a romper cuando está cortando, porque pusimos demasiada velocidad en el gcode, o que el láser va a pasar demasiado rápido sobre el metacrilato, por poner un ejemplo.
$5
es la velocidad de búsqueda. Esto es el movimiento cuando la maquina no está cortando (el comando G0
en gcode). Por ejemplo, cuando le decimos que vaya a una posición antes de bajar para cortar.
Obiamente, podemos ir más rápido cuando la maquina no está cortando, que cuando estamos cortando.
Lo mejor es bajar la velocidad, como a 50 mm/min. Probamos, y vamos subiendo.
Si nos pasamos, lo que va a ocurrir es que el motor no es capaz de ir tan rápido, y se bloqueará. Asi que tenemos que ir buscando la velocidad adecuada.
Si estamos cortando, lo que nos va a pasar es que se va a romper la fresa, o el láser no va a quemar suficientemente. Pero depende también del material, y de la fresa que estemos usando.
A mi me ha pasado que una máquina parece que está bien calibrada, pero cuando se calienta, por ejemplo, o al funcionar durante una hora, la fricción hace que le cueste más esfuerzo a los motores moverse, y acaban bloqueados.
Mi consejo personal aquí es que si estás empezando, no vayas a lo más rápido posible. Primero acostúmbrate a usar la CNC y céntrate en que el resultado del corte sea bueno y limpio. No pasa nada porque tarde una hora más en terminar. Cuando esto lo tengas dominado, ya irás subiendo velocidad. Pero tendrás un resultado anterior para comparar si te merece la pena ir más rápido.
Si quieres profundizar en las opciones que hay disponibles, en este enlace tienes toda la información sobre cómo configurar GRBL
de hombre para verde claro running Pearl Izumi Muñequera EnxSzCCXqEn la propia página del projecto también tenéis una lista de programas para usar GRBL.
Lista de comandos de GRBL
$$ (mostrar los parámetros de GRBL)
$# (mostrar los parametros #)
$G (mostrar el estado del parseador de GCODE)
$I (mostar la informacion del firmware, build, etc)
$N (mostrar los bloques de inicio)
$x=value (almacenar un valor el la EEPROM)
$Nx=line (almacenar un bloque de inicio)
$C (comprobar el modo actual de GCODE)
$X (desactivar el bloqueo de alarma)
$H (hacer un ciclo homing)
! (pausar el avance)
~ (reiniciar un ciclo o el continuar despues de la pausa)
? (mostrar el estado actual, posicion, etc)
ctrl-x (reiniciar GRBL)
Qué es y cómo configurar el Homing
Una de las operaciones más importantes en una CNC es el Home. Cuando encendemos la máquina, el Arduino no tiene ni idea de donde está y no sabe desde donde tiene que empezar a contar.
Para poder hacer esto, tenemos que incluir unos botones que nos indican donde está exáctamente el principio del movimiento.
La máquina se mueve despacio hasta que hace click en el botón, y entonces sabe que tiene que empezar desde ese punto. Por este motivo, los botones se denominan límites.
Homing es el proceso de buscar estos botones y poner la posición en cero.
GRBL comienza buscando la Z máxima (para subir el cabezal si tenemos una fresadora), y asi nos podemos mover tranquilamente sin saber que vamos a tocar nada. Después buscamos el eje X y el eje Y.
Nota sobre los límites
GRBL por defecto espera unos límites que conecten los pines de la placa a GND.
Hay que comprobar que los configuramos de esta forma:
Cuando no está pulsado, el pin debería de medir 5V.
Cuando está pulsado, el pin debería de medir 0V.
La mayoría de los límites (microswitches) tienen 3 patas que se llaman: C (common), NO (normally open), NC (normally closed).
Deberías de usar C y NO, y dejar la patilla NC sin conectar.
Si activamos el Homing, la máquina estará bloqueada hasta que hagamos el Homing! Esto es importante saberlo. Yo me pasé un buen rato enviando comandos sin recibir respuesta (forever alone!). Con esto nos defendemos de error de posicionamiento.
Para activar el Homing, usaremos el comando $22=1
, para ejecutar el homing, usamos el comando $H
.
En una CNC casera, ajustar los límites de la X y la Y no es tan crítico, pero el límite de la Z es muy importante. Nos dice dónde está la punta de la fresa. Y tiene que estar exáctamente en la posición adecuada si quieres que los cortes tengan la profundidad que has configurado. Mi consejo es invertir un poco en un sensor inductivo (si tenemos algo de metal) o un sensor capacitivo para que detecte siempre la Z en el mismo punto. Yo he perdido incontables horas de pruebas y ajustes por culpa de esto.
Os dejo aquí un vídeo en castellano para configurar el GRBL paso a paso.
Conectando los drivers a mano
Si usas una placa tipo Arduino CNC Shield, no tienes más que conectar los drivers en el lugar adecuado.
Pero quizás estás montando tu propio proyecto, y vas a conectar los drivers mediante cables, porque quieres probar antes, o por el motivo que sea.
En ese caso, te dejo el esquema de cómo conectar los pines del Arduino Uno, al driver de los motores, limites, etc.
Cómo Hackear el GRBL y hacer tus propios comandos
Huy, aquí ya nos metemos en el siguiente nivel.
Si realmente quieres llevar tu proyecto al siguiente nivel, y tienes algo de conocimientos de programación, puedes ir un paso más allá y escribir comandos de GCODE específicos para tu proyecto.
¿A qué me refiero? igual que la impresora 3D tiene comandos para encender y apagar el extrusor o la cama caliente, tu robot puede necesitar un comando especial para que empiece a bailar o para que se autodestruya (muahahaha!)
¿Cómo puedes hacerlo? Muy sencillo.
En el código del grbl hay un fichero de texto, gcode.c, donde se analizan los comandos que vamos recibiendo.
Si miras la parte donde se analizan los comandos de tipo M (de machine), ves que tiene un gran case donde va configurando los valores. Como es muy especifico de la máquina, hay muy pocos.
Ahí es donde meteremos nuestras garras.
Si quieres hacer algo especifico, tienes que asignarte un numero, por ejemplo, el 1234, y escribir:
case 1234:
{
}
Ahi meteríamos el código de lo que queremos ejecutar cuando recibimos el G-CODE M1234
,por ejemplo, encender un pin de Arduino, o lo que se te ocurra. (ya te veo pensando la cantidad de cosas que puedes hacer con este truco!)
Como os he dicho, esto ya depende de vuestro proyecto, y de vuestra capacidad para programar. La ventaja del GRBL es que ya hace todo lo demás, como el parseado de los comandos o la lectura del puerto serie.
Ahora te toca a tí
Madre mía!!!
Si has llegado hasta el final del artículo, entonces sí que tienes ganas de usar GRBL y montar tu CNC casera.
Asi que ya sabes, sólo necesitas unos perfiles de aluminio, unos motores paso a paso, un Arduino, una controladora, y ganas de montar tu propia máquina.
¿Porqué no escribes un comentario y nos cuentas qué te ha parecido? Tu opinión es lo más importante para mejorar el blog y los contenidos futuros.
Por ejemplo, si ya conocías el GRBL, o si ya tienes una CNC, nos puedes contar tu experiencia.
Y si además, este post te ha ayudado a decidirte sobre tu próxima CNC, tienes que decirlo!
Un saludo y nos vemos en el próximo artículo!!!
294 commentarios
has probado el comando M3 para encender y M5 para apagar?
un saludo!
Siempre he querido montar una CNC, he comprado una cortadora laser este mes de las baratas y tal vez me anime a ver si puedo crear algo que se le parezca. La controladora que lleva esta maquina es bastante malilla, y viene de fabrica con un Corel Draw del 2003 pirata chino que necesita una llave USB para funcionar!
Es realmente irónico que necesites una llave para ejecutar un programa pirata. No me importaría cambiarla por algo que sea mas util y fácil de usar. Me leeré el articulo con calma
pues nada, le metes un arduino uno y el grbl y veras que cambio!
dentro de unos dias voy a tener disponible una novedad para que puedas tener una controladora chula
hola compre una cnc china y no logro hacerla funcionar ,me podrías echar una mano ?? gracias
Hola,
jeje, comprar en el chino es lo que tiene, que luego se desentiende
Un saludo.
HOLA AS LOGRADO ECHAR A ANDAR LA CNC
MUY BUENO PERO AUN NO PUEDO ABRIR LA APLICACIÓN GRBL,ALGUIEN ME PUEDE AYUDAR?
has podido subir el firmware desde el arduino?
Gran artículo (en muchos sentidos ) me lo guardo para futuros experimentos.
gracias dani!! espero ansioso esos experimentos!
Muy buen articulo. Yo he construido mi cnc casera pero tengo unos problemas que no he podido solucionar. Hice la prueba manual de los tres ejes y funcionan bien. Cuando traté de hacer un dibujo, la maquina empieza con una linea diagonal y luego levanta el eje z pero lo deja a unos mm del papel y continúa haciendo el dibujo en el aire. He revisado la velocidad y la aceleración para ver si está perdiendo pasos, pero está bien. Agradecería su ayuda.
pues me parece que el gcode no baja el boligrafo
mira por un comando del tipo G1Z.. (goto z)
si no, pon aqui las lineas iniciales del GCODE y lo revisamos
saludos!
Buenos dias Javier. Muchas gracias por responder. De programación en Gcode no se nada. En las instrucciones que he podido ver están $0=25 supongo que corresponde a uno de los ejes y el número de pasos por mm. $1=25, $2=25, los otros dos números corresponden a los otros dos ejes. De pronto $1=25 puede ser eje Z. Agradezco su valiosa ayuda. Guillermo.
hola me puedes ayudar con una cnc china que compre y no logro hacerla funciona ?? gracias
Has pensado que el eje Z te funciona al revés. En lugar de bajar sube. Por eso te hace el posicionamiento en el papel y el dibujo al aire.
¡Va directo a mis marcadores! ?
a ver cuando te animas y montas un robotillo hombre!
lo dejaremos como proyecto para el recuncho
Hola javier co estas espero que eates bien, me he animado en hacer una frezadora cnc para ella estoy usando nema17 un arduinonuno y una cnc shield con pululo drv8825 geacias a Dios todl anda muy bie ecepto el eje Z, no consigo por nada del mundo que se mueba solo somba y nada nada de moverse si me puedes ayudar te lo agradeseria en el arma ya que le he hechado tantas ganas al proyecto!!
Me lo anoto como idea. Escribir un tutorial-guia para montar una fresadora desde cero!
No sé si ya solucionaste. De todos modos concta la salida que no funciona a un motor que si lo hace y también prueba una salida que funcione bien al motor que no avanza (el z) con eso puedes descartar que sea el motor el que esté dando problemas y si el motor que funciona ya no lo hace entonces significa que no tienes bien conectados los pines o es muy alta la velocidad que tienes programada
Genial, aprovecho para preguntarte por que se me ha quedado la duda (o varias).
Y el driver en todo esto donde va? Es el que recibe los pulsos que genera el arduino tras convertir los gcodes y habla con el motor? Y si quiero alimentar unos motores gordos que tengan mucho par, tendré que meter algo porque me imagino que no los alimentas directo del arduino (salvo que quieras tener un arduino tostado) no?
efectivamente
Estilo Hombre Piel Chaqueta Aire del Blau Acolchada A Invierno del para Libre La Mens Al Viento con Simple Acolchada De Capucha del Prueba Acolchada Caliente Chaqueta Parka Gruesa De Chaqueta aqui tenemos que hablar de la diferencia entre “señal” y “potencia”. El arduino solo enciende y apaga unos pines, pero apenas permite pasar corriente.
El driver lo que hace es, por un lado está conectado al arduino, pero por el otro, está conectado a una fuente de alimentación potente. Cuando el arduino le envia el pulso, el driver permite pasar la corriente al motor.
Por eso, aunque tengas unos mega motores, se pueden mover con un sencillo arduino. Solo necesitas unos drivers potentes.
Me guardo la idea para un futuro articulo sobre drivers.
Excelente artículo, gran introducción a este tipo de programación. Mi pregunta es, existe alguna colección de hacks para GRBL? Sería interesante saber lo que hace otra gente.
Felicitaciones y a seguir así.
la verdad es que la lista de proyectos es enorme!!! estuve pensando en poner unos cuantos, pero el articulo se alargaba ya exageradamente
gracias!
¡Estupendo artículo Javier!
Gracias por el tiempo que le has dedicado.
gracias a ti por dedicar tiempo a visitarnos! un saludo.
…cuantos motores puedo mover con arduino uno? con la shield que estas diseñando veo que podemos mover 4 drivers… algún servo y algún dc? estas preparando un megatutorial sobre la placa ? con la arduino mega y la ramps podemos mover 5 y algún servo…no sería interesante hackear la ramps para mover mas nemas y servos?
Una duda, en el post indicas “Necesitamos el paso de nuestra varilla roscada. Si es de 8mm, con 200 pasos avanzaremos esos 8 mm. Dividiendo tenemos que 25 pasos avanza 1 mm.” , creo que el avance de una varilla de 8mm grueso o métrica 8 es de 1,25mm a completar una vuelta, por lo que el cálculo sería 160 pasos avanzamos 1,00 mm
si m4 el paso es de 0.70 > 1mm avance es 285 pasos
si m5 el paso es de 0.80 > 1mm avance es 250 pasos
si m6 el paso es de 1 > 1mm avance es 200 pasos
http://www.gewinde-normen.de/en/iso-coarse-thread.html
En el caso de correas, la proporción paso avance sería relativo al diámetro de la polea, si diámetro polea de gt2 de 20 dientes es de 17mm el avance sería 200/17 = 11,76 pasos/milímetro. Es correcto??
Gran articulo!!!
Hola alberto!
El avance de la polea es Pi veces el diámetro. Asi que seria 200/(17*Pi) = 3.74 pasos, avanza 1 mm.
Si tienes reductora, tendrias que hacer una regla de 3 para calcular cuanto se mueve el eje cuando la polea del motor da una vuelta completa, y luego dividir por los pasos de una vuelta completa.
Estupendo artículo, super detallado! Me han gustado mucho las secciones con trucos y “gotchas” para que los demás no tengamos que tropezar en las mismas piedras que ya has tropezado tú.
Sabes si hay gente usando GRBL para robots autónomos? En plan bípedos o cuadrúpedos.
no te puedo decir exáctamente si un projecto concreto usa GRBL, pero me imagino que si. Digamos que usas el Arduino para controlar los motores, y usas algo de “alto nivel”, como una raspberry pi para enviarle los comandos por el puerto serie.
Cono de Gorro para Invierno Punto bebé Gorro Sombrero Hat Alian Invierno bebé Beige Correa sólido de Lana Color Baby Punto wfgRqnAaPuedes hacer algo tipo python o asi, y no meterte con temas más complejos a nivel pulsos, etc. El articulo va por ahí.
Cando dis que Marlin é un GRBL con vitaminas queres dicir que é un fork de GRBL? Non coñecía GRBL, pero Marlin destaca pola súa robustez e ter a maior cota de instalacións en impresoras 3D.
No tema de que GNU/Linux non é bo para xestionar unha CNC ou steppers hai que afondar un pouco máis, pois existen versións e módulos de kernel RT para procesamento en tempo real que xunto con librerías de xestión de GPIO como WiringPi poden comandar unha impresora 3D / CNC.
Con todo, coincido que é máis lóxico delegar o control dos motores e funcionalidade crítica a módulos como Arduino + Drivers con custe reducido e tempo real sen capa de sistema operativo.
Agora si, hai que ter coidado porque a tendencia é engadir máis dispositivos complexos como displays ou interfaces de rede que sobrecargan con tarefas non críticas ao pobre Arduino que incluso chegan a invalidar o sistema RT.
Pero iso é outro conto. De momento toca montarse unha CNC e probar GRBL!
Bestial o artigo, felicitacións!
Non sei se 100% fork, pero a meirande parte si. De feito o pon nos headers.
Cando queiras, probamos GRBL no Recuncho!
Grazas.
Las CNC eran el sueño de cualquier maker, y ahora están al alcance de cualquiera. Es muy interesante todo lo que cuentas sobre el smoothing y el look ahead. Dan ganas de estudiar el código! Jajajaja. Una vez más, chapeau
el codigo no es nada complicado. Una lista de trapecios que se leen durante la interrupción del timer.
Gracias por visitarnos!
muy buen artículo! me lo guardo
muchas gracias!! espero que te sea útil. Y si montas algo, pásate por aquí para contarlo
Gran articulo, ya que me a sacado de un problema de pérdida de pulsos por el exceso de velocidad.
Si alguna ves pudieras explicar el GRBL de 22 programas y el de 132 sus diferencias y cual es mejor y para que te lo agradeceria.
Un gran saludo y estare pendiente de tu blog.
Saludos y un gran abrazo por tu entusiasmo.
hola! gracias por el comentario
qué es exáctamente el grbl de 22 programas? no lo acabo de entender…
Buenas.
Gracias por el blog, me ha servido de gran ayuda. No he hecho ninguna CNC casera o impresora 3D. He creado un sistema de tomas fotográficas automático. Solamente controlo los ejes X e Y, puesto que el Z sería, por así decirlo, la cámara.
Mi duda es como retrasar el movimiento durante 5 segundos. Me explico: eje X, se mueve 100 mm (G0 X100), ahora quiero que se vuelva a mover otra vez, pero entre ambos movimientos quiero que haya un lapso de tiempos de 5 segundos. ¿Se puede hacer? ¿Cómo sería?
Hola!
Genial que este post te haya servido para tu proyecto.
El comando para que la máquina espere es G4, que en ingles se lama dwell
El parametro es P y los milisegundos
Asi que para que el comando quede esperando 5 segundos, tienes que meter un G4 P5000
Espero que te sirva!
http://reprap.org/wiki/G-code#M116:_Wait
Hola, gracias por este tutorial muy bien explicado.
He montado todo con arduino uno, cnc shield y A4988, pero no logro hacer girar unos motores que saque de impresoras, tengo motores de 4, de 5 y 6 cables, identifique las bobinas y lo conecte a la salida del eje x, luego desde el gcode sender le doy que mueva 100 pasos el eje x y no va, queda haciendo ruido.
Te consulto, si mido el voltaje de uno de los 4 pines de la salida del eje x mientras el programa está moviendo el eje no debería cambiar entre 0 y 12v?
Hola,
Si queda haciendo ruido, asi como si temblase, puede ser por los pasos por milimetro. Prueba a bajarselo. Baja tambien la velocidad, por ejemplo G1X100F10, o G1X100F100
Efectivamente, el voltaje debería de variar entre 0 y 12V, pero mejor miralo con el osciloscopio, porque el multimetro puede que varíe demasiado rápido.
Un saludo.
la mejor forma de verificar cuales son las bobinas del motor es tomando una punta cualquiera e ir uniendo con las otras puntas al mismo tiempo que se gira el motor con la mano se sentira que el motor se vuelve mas duro cuando se ha encontrado la bobina correcta marcas esos dos cables y haces el mismo proceso para encontrar la otra bobina con la cual harias 4 cables
Hola no entendí una cosa, par amodificar el programa GRBL, dices que puedo “encender y apagar” pines GPIO de arduino, pero eso es en el soft de la pc o en el programa que cargas en ARDUINO?
Porque la verdad soy nuevo en el tema arduino, se programación de microcontroladores pic en assembler y basic, programación en phyton de rpi pero arduino nada y por lógica entendería que primero debo modificar el programa que cargo en el arduino y luego en soft de windows
Hola,
Si eres completamente nuevo, te aconsejo hacer alguna práctica antes de meterte con el GRBL a este nivel.
Pero puedes aprovechar lo que ya tienes
Los comandos para encender y apagar el taladro, lo que hacen es esto. M3 enciende el taladro, y M5 lo apaga. Puedes usar el pin para encender y apagar un relé.
Si necesitas algo más avanzado, como comento en el artículo, lo que puedes hacer es meterte en el codigo del GRBL, y crear tu propio comando gcode, por ejemplo el M5555 y el M6666 para encender o apagar el pin. Luego envias el comando M5555/M6666 a través del programa del PC. Pero esto ya requiere alguna experiencia programando.
Un saludo.
Amigo si deseo agregar un botón físico para que sea la posición cero…Como lo hago?
entiendo que dices, un final de carrera? yo usaría unos sensores inductivos npn, conectado a los finales de carrera de tu placa
saludos
Hola, muy buen post!
Quisiera saber si se puede hacer con el sitema corexy, mas que nada el sistema que usa la nueva axidraw, y si se puede modificar los valores de los diametros de las poleas en el software, para que el motor se mueva como corresponde.
Gracias!
Hola,
No lo he probado, pero hace un tiempo que el soporte CoreXY está incluido en el codigo fuente del GRBL
Tienes que ir al config.h y descomentar la linea #define COREXY
Como te digo, no lo he probado. Si lo consigues hacer funcionar, por favor, pásate por aqui y comentanos qué tal ha funcionado.
// Enable CoreXY kinematics. Use ONLY with CoreXY machines.
// IMPORTANT: If homing is enabled, you must reconfigure the homing cycle #defines above to
// #define HOMING_CYCLE_0 (1<
Hola .
quiero saber cuales son los pines del arduino que por defecto están asignados a cada eje. O como puedo yo probarlos.
Gracias
Hola
Muy buena pregunta, porque me he dado cuenta que no lo he incluido.
Te adjunto aqui el esquema. Actualizaré el post con esta información.
https://cadduino.files.wordpress.com/2013/10/arduinogbrl.jpg
Muchas gracias por este articulo eres un crack !!! me has resuelto muchas dudas en un solo post!!!
un gran trabajo ,, felicidades!!
Genial, muchas gracias!
Javier como estas tu post me ha aclarado ciertas dudas pues decidí hacer una CNC utilizando el armazón de una Printrbot 1405 pues bien todo trabaja excepto los finales de carrera que no se activan(debo de decir que utilizo una Arduino Uno y un shield GBRL copia de Protoneer, todo chino) y aparte tengo la duda del con el auto level del eje Z(poseo sensores inductivos para botar) pero en que parte modificó el sketch( pues cargue GBRL con el XLoader).
Sobre los finales de carrera, pues no sabría decirte asi de primeras. Revisa que has activado los limites con $21=1 ? Tambien mira si están normalmente abiertos o cerrados, y ajusta $5 para ello.
sobre el autolevel… en teoria es simplemente un limite más, el de la Z, que salta cuando está cerca del metal. Autolevel es para las impresoras 3D, que tiene que ajustar el plano donde van a imprimir, pero en CNC seria mas correcto usar “probe”
te dejo un video que te puede ayudar: https://www.youtube.com/watch?v=f4ybGiXNN24
un saludo y gracias por visitar la web!
Gracias de nuevo por realizar tan estupendo post.
Me voy a poner con un proyecto de una CNC por hilo caliente, y para ello utilizaré 4 NEMA17, una fantástica Arduino Shield RAMPS 1.4 SB que ya tengo, unos drivers DRV8825 y mi pregunta es si puedo utilizar un Arduino MEGA 2560 R3, en vez de un Arduino UNO y hacerlo funcionar todo igual, cargarle el GRBL…
Saludos de nuevo y gracias
Para usar la RAMPS 1.4 SB, tienes que usar el Arduino Mega seguro. El GRBL entiendo que funciona bien. Solo tienes que decirle en el IDE de Arduino que tu placa es un Arduino Mega (aunque no lo he probado)
Hila, quisiera que me orientarais. Hay algún programa que permita que dibuje por ejemplo con el dedo en la pantalla del movil y el dibujo resultante lo mande lo transforme en código gcode y la cnc lo interprete? Hasta ahora lo que veo es imágenes prediseñadas y preguardadas en un formato, que se mandan a la cnc..y yo quería crear algo como lo que os expuse antes.
Gracias
anda, que buena pregunta!
yo no lo conozco. Normalmente uso programas como inkscape, pero si me entero, lo pongo por aqui. Voy a ver unos amigos que quizás sepan algo asi. Voy a preguntarles.
Entiendo que lo que buscas es que la CNC haga el mismo movimiento que has dibujado con el dedo, verdad?
Saludos!
Hola, si, yo por ejemplo abro una aplicación en el móvil, y dibujo una casita, con su chimenea y su humo y en el mismo orden que he dibujado, la cnc dibuja. Lo que veo es que hay programas para dibujar a partir de imágenes prediseñadas, pero…existirá alguna aplicación que te permite dibujar algo y darle a un botón “dibujar” para que la cnc empiece a dibujar??
pues yo no conozco algo asi, y es una buena idea. Me lo anoto, y si esucho algo asi, lo comento por aqui.
Un saludo!
Hola javier.. me encanto tu post.. lo lei todo.. primero que nada gracias es un gran trabajo. Yo quiero hacer una bordadora.. tendras información para ese tipo de proyectos.. y me gustaria saver si tu vendes los arduinos y los driver.. por volumen y buen precio.. gracias
pues estoy preparando una tirada de drivers, y los arduino tambien es algo que quiero vender, pero por el momento no he encontrado la forma de hacerlo que me guste
te aviso, de acuerdo?
sobre la bordadora, no, no tengo información, pero voy a preguntar en la maker faire de santiago, que va a ser dentro de unos dias y seguro que alguien tiene esa información
Hola Javier. yo tambien me llamo Javier. jeje. te queria preguntar como conectar un servo a la cnc shield con arduino uno para usarlo de eje z en una maquina drawing que estoy haciendo. mas o menos tengo una idea de como poner el servo a los pines pero por el universal gcode slender no he conseguido que me funcione el servo. ¿Habra que escribir algunos comandos g code para que suba y baje el servo? si es asi que comandos seria y si hay que modificar algo. Un saludo desde Granada.
Hola tocayo
El servo funciona por PWM. Asi que puedes hacer este truco (no lo he probado, pero he escuchado de gente que lo ha probado)
Usa la salida del spindle de PWM. Para ello usa el comando S, que cambia la velocidad del Spindle.
Este ejemplo enciende el spindle a una velocidad, espera 5 segundos, y lo apaga.
S1000
M3
G4 P5000
M5
Con eso, varias el PWM que se envía al servo, y podrías moverlo.
Un saludo!
Hola quisiera saber si ustedes saben como implementar la cinematica inversa de un brazo robotico en la configuracion del grbl y el software g code sender? Estoy algo enrredado con esto
el tema de la cinemática inversa supera al tema del gcode. Te recomiendo investigar el tema de los videojuegos, porque de ahí puedes sacar mucha informacion
pero yo no he probado nunca, sorry…
Hola Javi, tengo una duda. ya tengo todo pero al enviar me aparece que el tamaño del buffer es muy pequeño, a que se refiere esto y como lo soluciono??
gracias.
vaya, nunca me ha pasado eso, supogo que el programa está enviando demasiadas lineas. Quñe programa usas para enviar el gcode?
un saludo
Hola,
muy util toda la informacion que publicaste…
como veo que manejas muy bien el tema me atrevo a consultarte algo que me ha pasando en mi proyecto de construir una CNC en casa.
Estoy usando arduino UNO y la Shield CNC. el punto es que cuando compre la shield me llego con una placa nueva de Arduino Uno con puerto microUSB. Al instalar todo nunca me funciono el el motor del eje Y (Z y X funcionan bien). Asi que despues de varios dias de revisar y revisar se me ocurrio cambiar la placa de arduino por otra que ya tenia (mas viejita) la cual trae puerto USB-B y entonces todo me funcionó.
tu que opinas sera que la placa nueva me llego dañada o que simplemente ese tipo de placa no es compatible con la shield CNC???
Hola,
pues el conector USB no debería de tener nada que ver la CNC. Asi que yo apuesto a que, o la placa tiene alguna diferencia más, o la placa estaba dañada.
Un saludo y gracias por leer el artículo!
Hola estoy tratando de montar mi propia CNC para cortar acrilico o madera, pero aun estoy consiguiendo las partes. Ya tengo los motores paso a paso y aunque estaba buscando unos de bajo amperaje me toco con unos que consumen unos 1.7 A, y como son 3 en este caso cuando la maquina vaya a usar los 3 realmente se estarán consumiendo aprox. 5.1 A, solamente en los motores. Ahora estoy indesiso si usar una correa para el movimiento o usar los tornillos que ya tengo, ahora tengo unos tornillos de 1 mm de paso, que como pueden ver son muy lentos, podria programar mas velocidad en los motores pero hasta no comenzar a probar no sabria, de ahi la duda con usar o no las correas.
Aun no tengo la “armadura” o los soportes, también estoy pensando en si usar madera o aluminio.
Por lo demas ya tengo mi Arduino con el GRBL instalado y ajustado para los motores, y con la Shield CNC tambien con sus 4 placas driver ajustadas con sus VRef según vi en la ficha tecnica, tengo los microswitches para el famoso Homming, me hacen falta los conectores del motor con los tornillos por que realmente estan costosos y no los he comprado (Mande a traer unos de china que salieron super economicos pero se perdieron en el envío, nunca llegaron que triste).
Como pueden ver estoy trabajando en ese proyecto pues estoy comenzando pero ya tengo varias cosillas.
A otra cosa, he decidido usar unos rieles en lugar de las varillas aceradas por costos, pero no se como se comporte mi CNC en un trabajo final.
Gracias por leerme cualquier consejo es muy apreciado. Una cosa mas no entendi lo de los sensores capacitativos o inductivos, como es eso, como se usan como se compran.. como son como se instalan y por que esos en lugar de los mecanicos.
Gracias nuevamente. Saludos XD
Hola
Sobre las correas, eso depende de si la maquina va a hacer corte. La verdad, para cortar acrilico o madera, no te recomendaria usar unas correas, a no ser que sean muy buenas (y caras)
yo usaria un husillo de paso algo mas largo. 1mm es muy poco!
los sensores capacitivos o inductivos lo que hacen es detectar la presencia de metal, o de una superficie. Son mas exactos que poner un sencillo boton, porque nunca toca, y no depende de que un boton haga click
para la X y la Y, da un poco igual, pero para la altura, es muy importante que todo vaya en su sitio en micras.
seguro que los has visto en fotografias. Son los que tienen un boton azul o naranja…
Un saludo, por favor, vete contandonos como va esa CNC!
Hola Javier.
Excelente artículo…excelente información. Quisiera saber como se envía el comando M1234 de tu ejemplo, es decir, si requiero que cuando llegue a cierta posición se active el comando, o que al recibir la señal de un pin de arduino se ejecute el codigo que creamos.
hola,
la verdad que esto requiere bastante trabajo de programacion. En la interrupcion del tiempo, puedes comprobar la posicion y leer el pin para saber si tienes que activar un nuevo movimiento.
en gcode, eso no se puede hacer, efectivamente, tienes que ir leyendo la posicion dentro del codigo del GRBL, e ir actuando en consecuencia.
un saludo!
Hola Javier
me gustaria saber un poco mas el uso de grbl con arduino mega 2560
La verdad es que yo *no* lo he probado. Si haces alguna prueba, estaría bien que nos comentases algo
Hola Javier
Muchas Gracias por tan elaborado Tutorial y positiva predisposición para ayudar.
Podrías ayudarme con el esquema eléctrico del Mega 2560, ULN2003. (Ya que tengo los pequeños BYJ-48)
Ya instalé el GRBL y cargado archivos (Con Universal G Code Sender) *.ngc creados con Inkspace y pareciera que funciona todo bien, pero desconozco cableado desde los drivers hacia el Mega.
Abrazos !!!
mmn, vas a tener un problema, porque el GRBL está pensado para drivers paso a paso avanzados, que tienen un pin para el paso y otro para la dirección
el driver ULN2003 es un driver unipolar, y necesita más lineas de control. Quizás hay una forma de conectarlo, pero yo no la conozco.
un saludo!
QUISIERA SAVER QUE VELOSIDAD LE DOY A UN MOTOR PEQUEÑO DE LOS DE UN CD ROM ESTOY REALIZANDO LA MINI IMPRESORA A MANERA QUE NO SE BRINQUE PASOS Y NO SE CALIENTE EL MOTOR YA QUE AVECES TIEMBLA
hola daniel
tienes que entender que el motor de un cdrom es muy fragil y no puede mover apenas nada. Solo puedo decirte que bajes la velocidad hasta que no pierdas pasos
un saludo
Hola como estas estoy trabajando con un láser en vez de un torno en el eje z mi problema es que se enciende y no se apaga hasta que termina por esto el dibujo sale mal tenes idea de como podría apagarlo ?