Trabajar con una CNC y llevar el ratón a cuestas es incómodo. Con las manos llenas de viruta y taladrina, cada clic en la interfaz es un clic que te obliga a apartar la vista de la herramienta. Un Stream Deck CNC —es decir, un panel de teclas físicas programables conectado a tu software de control— resuelve eso: una tecla, una acción, sin buscar botones en pantalla. En este artículo te cuento cómo tengo montado el mío con Universal Gcode Sender, un recetario completo de macros listas para copiar, cómo se configura el jog paso a paso, y los errores que cometí por el camino para que tú no los repitas.
¿Por qué montar un Stream Deck CNC en el taller?
La respuesta rápida es «por comodidad», pero eso se queda corto y además no es lo importante. La razón de peso es la seguridad.
Piensa en lo que haces cuando estás afinando el cero de pieza. Bajas la Z de dos en dos décimas, buscando el momento exacto en que la fresa toca el material. En ese momento quieres tener los ojos en la punta de la herramienta, no en la pantalla del ordenador buscando dónde estaba el botón de Z-. Cada vez que apartas la vista para localizar un control, estás moviendo la máquina a ciegas durante ese instante.
Eso es exactamente lo que arregla un Stream Deck CNC: las teclas están siempre en el mismo sitio, tienen relieve, y las localizas con el tacto y con el color periférico sin necesidad de leer nada. Puedes tener la mirada clavada en la fresa mientras la mano encuentra sola la tecla de Z-.
Hay tres problemas concretos que un Stream Deck CNC resuelve en el día a día:
- Los controles críticos están repartidos por la interfaz. En UGS, el desbloqueo de alarma, el home y el paro no están juntos ni tienen el mismo tamaño. En el panel los pones donde tú quieras.
- El ratón y el teclado sufren en el taller. Viruta metálica, refrigerante y polvo de MDF no perdonan. Un panel de teclas de silicona o plástico duro aguanta bastante mejor y se limpia de una pasada.
- Las secuencias repetitivas se comen el día. Ir a posición de cambio de herramienta son cuatro o cinco operaciones si lo haces a mano. Con un Stream Deck CNC es una tecla.
Y hay un cuarto beneficio que no esperaba: reduce los errores por prisa. Cuando una operación cuesta una sola pulsación, dejas de improvisar atajos peligrosos para ahorrarte pasos.
¿Quieres aprender a fabricar tus propias baterías de litio?
En el Curso de Fabricación de Baterías te enseño, paso a paso y con más de 8 horas de vídeo, a diseñar, montar y testear packs Li-ion (18650/21700) y LiFePO₄ para e-bikes, herramientas y sistemas solares — con la misma seguridad que aplico en mi taller profesional.
- 8 módulos completos, de la seguridad al montaje real
- Excel de cálculo seguro de baterías incluido
- Archivos STL para imprimir tu propio robot CNC soldador de baterías
- Acceso inmediato y actualizaciones incluidas
¿Qué modelo necesitas para tu Stream Deck CNC?
Aquí la pregunta real no es «cuál es el mejor», sino cuántas teclas vas a necesitar de verdad. Y la respuesta depende de una decisión previa: si quieres que cada acción tenga su tecla propia o si aceptas navegar por carpetas.
Mi criterio es claro. La ventaja de un Stream Deck CNC es que una tecla es una acción, sin pensar. En cuanto tienes que entrar en una carpeta para encontrar el botón, has recuperado parte del problema que querías eliminar. Por eso yo prefiero ir sobrado de teclas y reservar las carpetas para agrupar por tipo de trabajo (fresado, taladrado, palpado), no para exprimir un panel pequeño.
Estas son las cuatro opciones que considero razonables, de menos a más:
Stream Deck Mini (6 teclas) — Se queda muy justo para controlar una CNC. Solo entre jog, ceros y control de programa ya te pasas. Lo veo únicamente como panel secundario dedicado a una función concreta, por ejemplo solo palpado, o como primer contacto barato para probar si el concepto te convence antes de gastar más.
👉 Ver precio en Amazon
Stream Deck MK.2 (15 teclas) — El punto dulce si tu uso es sencillo y no vas a montar macros de palpado ni posiciones guardadas. Con 15 teclas te dan para jog en tres ejes, ceros, home, unlock y control de programa, pero ya sin margen para crecer. Si sabes que tu flujo de trabajo es estable, es una compra muy sensata.
👉 Ver precio en Amazon
Stream Deck XL (32 teclas) — Es el que uso yo y el que recomendaría si te lo puedes permitir. La diferencia no es tener el doble de botones: es poder dejar espacios vacíos a propósito entre grupos de teclas. Ese hueco físico entre el bloque de jog y el bloque de «arrancar programa» es lo que evita que pulses lo que no querías. En un panel pequeño, todo está pegado a todo.
👉 Ver precio en Amazon
Alternativa económica (Ajazz / paneles compatibles) — Existen paneles con pantallas LCD por tecla a una fracción del precio de Elgato. Funcionan con su propio software y, para lo que necesitamos aquí —mandar combinaciones de teclado—, cumplen. La contrapartida es soporte, calidad de construcción y actualizaciones menos fiables. Si el presupuesto manda, es una entrada válida al concepto.
👉 Ver precio en AliExpress
Lo que necesitas además del panel:
- Universal Gcode Sender Platform (no la versión Classic — el editor de atajos que vamos a usar solo está en Platform).
- Una controladora con GRBL 1.1 o superior, o grblHAL, para los comandos de jog que veremos.
- Un puerto USB libre y, si el panel va lejos del PC, un alargador USB con repetidor.
- Opcionalmente, un soporte impreso en 3D para inclinarlo y que no se llene de viruta.
Las dos formas de conectar el panel con UGS
Esto es lo que casi nadie explica y es la clave de todo el montaje. Hay dos caminos para que tu Stream Deck CNC hable con UGS, y el segundo es infinitamente más potente.
Camino 1: atajos de teclado nativos
El panel manda una combinación de teclas y UGS la interpreta. En UGS Platform vas a Tools → Options → Keymap, buscas la acción que quieras (jog en un eje, home, desbloqueo) y le asignas una combinación. Luego, en el software del panel, creas un botón de tipo «Hotkey» con esa misma combinación.
Es simple y funciona a la primera. Sus dos limitaciones: solo puedes disparar acciones que UGS ya tenga programadas, y UGS tiene que estar en primer plano. Si tienes el CAM abierto encima, el atajo se lo come el CAM.
Camino 2: macros de UGS
Aquí es donde un Stream Deck CNC deja de ser un mando a distancia y se convierte en una herramienta seria. Creas una macro dentro de UGS (en Machine → Macros) con el G-code que tú quieras, le asignas un atajo desde el mismo Keymap, y el panel dispara ese atajo.
La diferencia conceptual es importante y merece que la entiendas bien: el panel no sabe nada de tu máquina. El panel solo manda una combinación de teclas. Toda la inteligencia está en la macro de UGS. Eso significa que el día que cambies de panel, o que quieras disparar lo mismo desde un teclado numérico USB de doce euros, tus macros siguen valiendo. No estás atado al hardware.
💡 Dos detalles que ahorran disgustos: las macros de UGS solo se ejecutan si la controladora está en estado IDLE (no puedes lanzarlas en mitad de un trabajo), y dentro de una macro los comandos se separan con punto y coma, no con salto de línea. Además, UGS permite exportar e importar todas tus macros como un archivo JSON: hazte una copia en cuanto tengas el panel montado.
El truco que casi nadie usa: variables dentro de las macros
Esto es lo que separa un Stream Deck CNC decente de uno realmente útil, y está documentado en el propio código de UGS aunque casi nadie lo mencione. Las macros admiten sustituciones interactivas: puedes meter la posición actual de la máquina dentro del G-code, o hacer que UGS te pregunte un valor al pulsar la tecla.
| Variable | Qué hace |
|---|---|
{machine_x} {machine_y} {machine_z} |
Posición actual en coordenadas de máquina |
{work_x} {work_y} {work_z} |
Posición actual en coordenadas de trabajo |
{prompt|nombre} |
Abre un diálogo y te pide ese valor al vuelo |
{prompt|nombre|valor} |
Igual, pero con un valor por defecto ya escrito |
Un ejemplo tonto pero que uso a diario: una tecla que baja la Z a la profundidad que yo le diga en ese momento, con -1 mm ya puesto por defecto.
G90 G1 Z{prompt|Profundidad|-1} F200
Y el valor que te pide se puede reutilizar en la misma macro: si escribes X{prompt|pos} Y{pos}, te pregunta una sola vez y aplica ese número a los dos ejes.
Lo que UGS NO puede hacer (y conviene saberlo antes de intentarlo): no tiene variables de cálculo ni memoria entre pasos, al estilo de CNCjs. No puedes guardar una altura palpada y luego restarla en otra macro. Preguntado directamente por ello en el repositorio oficial, uno de los desarrolladores de UGS respondió que hoy por hoy eso no es posible. Si tu flujo depende de aritmética entre macros, tu camino es CNCjs, no UGS.
¿Cómo se configura el jog en un Stream Deck CNC?
Esta es la parte donde yo me equivoqué al planteármelo, así que te ahorro el rodeo.
Mi idea inicial era tener una tecla que cambiase el tamaño de paso: la pulsas y va rotando entre fino, medio y basto. Parece lo lógico. Es mala idea.
El motivo es que UGS no tiene acciones para fijar un paso concreto; lo que existe son acciones para aumentar, disminuir, multiplicar o dividir el paso actual. Todo relativo. Eso significa que después de pulsar esa tecla no sabes en qué paso estás sin mirar la pantalla. Y mirar la pantalla es justo lo que estábamos intentando evitar. Has movido el problema, no lo has resuelto.
La solución buena es meter el tamaño de paso dentro de la propia macro y usar las carpetas del panel como selector visual:
├─ [Carpeta] JOG 0.1 mm (azul)
├─ [Carpeta] JOG 1 mm (verde)
└─ [Carpeta] JOG 10 mm (naranja)
Dentro de cada carpeta tienes el mismo dibujo de flechas, pero disparando macros distintas. Y lo mejor: el paso activo lo ves en el propio panel, en el color de la carpeta en la que estás. No hay estado oculto. Además, si estás en la página principal no puedes hacer jog por accidente, lo cual es una ventaja de seguridad que no había buscado pero que agradezco.
La macro de jog, línea por línea
Para mover X un milímetro en positivo, la macro es esta:
$J=G91 G21 X1 F1000
Desglosada:
$J=— Comando de jog de GRBL 1.1. No es un G1. Es cancelable en cualquier momento, no altera el estado modal de tu programa y no se queda encolado de forma peligrosa. Usar G1 para hacer jog es un error clásico.G91— Movimiento incremental: «muévete 1 mm desde donde estás», no «vete a la coordenada 1».G21— Milímetros, declarado explícitamente. No des por supuestas las unidades en una macro que va a moverte la máquina.X1— La distancia. Aquí es donde codificas el tamaño de paso de cada carpeta: 0.1, 1 o 10.F1000— Avance del jog en mm/min. Bájalo en la carpeta de paso fino.
Un detalle de la documentación oficial de GRBL que casi nadie sabe: el avance F de un comando de jog se interpreta siempre en unidades por minuto, aunque tu programa estuviera en G93. Y el jog solo se acepta si la máquina está en estado Idle o Jog.
Necesitas una macro por cada combinación de eje, sentido y paso. Con tres pasos, tres ejes y dos sentidos son 18 macros. Suena a mucho, pero se copian y se cambia un número. Nómbralas con un patrón tipo JOG_X+_1 para encontrarlas luego en el Keymap. Si solo quieres paso fino en Z y normal en XY, con doce te sobra.
Para los atajos, usa combinaciones que no vayas a pulsar nunca por accidente: Ctrl+Alt+Shift+F1, F2, F3… Nada de teclas sueltas ni flechas. Si un día apoyas el codo en el teclado, no quieres que la máquina se mueva.
⚠️ Sobre cancelar el jog: GRBL tiene el comando en tiempo real 0x85 (Jog Cancel), que para el movimiento y vacía el buffer al instante. Pero eso no lo puedes mandar desde una macro ni desde una tecla «Hotkey»: es un byte, no un carácter que se pueda teclear. Para tener cancelación real desde el panel tienes que usar las acciones de jog nativas de UGS asignadas en el Keymap, no macros de G-code. Es una limitación importante de la que casi nadie avisa.
El recetario: las macros que la comunidad usa de verdad
Aquí está lo que de verdad justifica montar un Stream Deck CNC. Estas son las macros que aparecen una y otra vez en los foros de OpenBuilds, Shapeoko, Sienci e Inventables, contrastadas con la documentación oficial de GRBL. Todas se copian y se pegan tal cual en Machine → Macros.
Salvo donde se indique lo contrario, funcionan igual en GRBL 1.1, grblHAL y FluidNC.
1. Fijar el cero de pieza (la que más se usa)
G10 L20 P1 X0 Y0 Z0
G10 L20 significa «haz que la posición en la que estoy ahora valga esto». P1 es el sistema G54 (P2 sería G55, y así). Para ceros individuales, la misma macro pero con un solo eje:
G10 L20 P1 X0 G10 L20 P1 Y0 G10 L20 P1 Z0
Debate real en la comunidad: mucha gente usa G92 Z0 para lo mismo porque es más corto. Funciona, pero G92 no sobrevive a un reset ni a un apagado, mientras que los offsets G54–G59 se guardan en memoria no volátil. Si se te va la luz a mitad de trabajo, con G10 L20 conservas el cero; con G92, no. Por eso yo uso G10 L20 siempre.
2. Palpar el cero de Z con placa de tacto
Requiere placa de tacto conectada al pin de sonda de tu controladora y una pinza al portafresas. Esta es la versión estándar, con compensación del espesor de la placa:
G91 G38.2 Z-25 F100 G10 L20 P1 Z1.50 G90 G0 Z10
G91— relativo, para que el palpado sea «baja hasta 25 mm desde aquí».G38.2 Z-25 F100— baja despacio hasta que la sonda hace contacto. Si no toca en 25 mm, da alarma.G10 L20 P1 Z1.50— cambia 1.50 por el espesor real de tu placa. Este es el número que todo el mundo se olvida de ajustar.G90+G0 Z10— vuelve a absoluto y retira la herramienta 10 mm.
Las variantes de palpado, por si las necesitas: G38.2 da alarma si no toca (la que quieres normalmente), G38.3 no da error si falla, y G38.4/G38.5 palpan alejándose de la pieza en vez de acercándose.
Sustituir este bloque por: 👉 Ver precio en Amazon
3. Palpar el cero en X (y en Y)
G21 G91 G38.2 X50 F100 G10 L20 P1 X-11.6 G1 X-5 F300 G0 Z15 G90
El número clave es X-11.6: es el radio de tu fresa más el espesor de la pared de la placa. Cámbialo por el tuyo o el cero saldrá desplazado. Para el eje Y es la misma macro cambiando las X por Y.
Para palpado de esquina completo (XYZ de una vez) no merece la pena pelearse con macros: UGS Platform trae una ventana de palpado con asistente de esquina exterior que lo hace solo.
4. Volver al cero de pieza sin romper nada
Esta macro es de las que más disgustos evita, y la clave está en el orden: Z arriba primero, siempre.
G53 G0 Z-1 G0 X0 Y0
G53 mueve en coordenadas de máquina, ignorando los offsets de trabajo. Eso es exactamente lo que quieres para subir la Z: da igual dónde tengas el cero de pieza o lo alta que sea la pieza, G53 Z-1 sube al tope de la máquina y punto. Luego, ya arriba, mueve X e Y al cero de pieza.
Trampa clásica con G53: es un comando no modal, o sea que solo afecta a la línea en la que está escrito. Si escribes G53 Z0 X0 Y0 en una sola línea esperando que los tres ejes vayan a coordenadas de máquina, te llevarás una sorpresa. Hay que repetirlo en cada línea.
5. Ir a posición de cambio de herramienta
M5 G53 G0 Z-1 G0 X0 Y0 G4 P5
Apaga el husillo, sube la Z a lo seguro, se acerca a un punto cómodo para llegar con la mano y espera 5 segundos. Ajusta las coordenadas XY a lo que te venga bien en tu máquina.
6. Desbloqueo, homing y reset
| Comando | Qué hace |
|---|---|
$X |
Desbloquea la alarma. La tecla más pulsada del panel. |
$H |
Ciclo de homing. Solo si tienes finales de carrera. |
$$ |
Muestra todos los ajustes de la controladora. |
$# |
Muestra los offsets y el resultado del último palpado. |
$G |
Muestra los estados modales activos ahora mismo. |
$I |
Versión y firmware. Útil para saber si tienes GRBL o grblHAL. |
Si no tienes finales de carrera, esta es la alternativa de «homing» usando una posición guardada, muy común en máquinas tipo 3018:
G91 G28 Z0;G91 G28 X0 Y0
7. Línea de seguridad para reanudar tras cancelar
Cuando cancelas un trabajo a media ejecución, la máquina se queda con estados modales impredecibles. Esta macro los resetea antes de volver a arrancar:
G90 G21 G54 G17
Absoluto, milímetros, sistema de coordenadas 1, plano XY. Cuatro palabras que evitan que el siguiente movimiento sea una sorpresa.
8. Husillo, refrigerante y aspiración
M3 S8000 (husillo ON a 8000 rpm) M5 (husillo OFF) M8 (refrigerante / aspiración ON) M9 (refrigerante / aspiración OFF)
Muchos makers cablean un relé a la salida de refrigerante precisamente para encender la aspiración con M8 desde el panel. Ojo: M7 (niebla) viene desactivado por defecto en GRBL de serie, hay que habilitarlo al compilar.
Y una macro que agradece el husillo en talleres fríos, calentándolo por escalones antes de trabajar:
M3 S1000 G4 P10 M3 S5000 G4 P10 M3 S8000
9. Recuperar un trabajo tras rotura de fresa o corte de luz
UGS Platform tiene la función Machine → Start From, que permite arrancar el G-code desde la línea que tú elijas. No es una macro, pero es la herramienta que salva el día y merece estar aquí.
El dato clave que casi nadie explica: los ceros G54–G59 se guardan en memoria no volátil y sobreviven a un apagón. Lo que no sobrevive es G92, la compensación de longitud de herramienta G43.1 y los datos del último palpado. Por eso el procedimiento seguro es:
- No muevas la pieza. Anota la última línea que se ejecutó.
- Haz homing (
$H) para recuperar la referencia de máquina. - Verifica el cero G54. Si cambiaste la fresa, vuelve a palpar la Z.
- Enciende el husillo a mano —
Start Fromno lo hace por ti. - Arranca desde la línea elegida.
Cuatro errores que cometí montando mi Stream Deck CNC
1. Poner teclas peligrosas junto a teclas de uso constante. Tenía «arrancar programa» pegada al jog de Y. Se explica solo. Las críticas, a una esquina o con un hueco vacío de por medio.
2. Elegir iconos bonitos en vez de códigos de color. Con las manos ocupadas y la vista en la fresa, no reconoces un dibujo pequeño: reconoces un color. Asigna un color por función —movimiento, ceros, programa, peligro— y hazlo consistente en todas las carpetas.
3. Confundir coordenadas máquina y coordenadas pieza en una macro. Un G53 olvidado o de más cambia por completo dónde acaba la herramienta. Cada macro de movimiento absoluto debe declarar explícitamente en qué sistema trabaja.
4. No meter retardos en las multiacciones. Si encadenas varios comandos sin pausa, la controladora puede perderse alguno. Un retardo de 100–200 ms entre pasos lo arregla.
⚠️ SEGURIDAD — Léelo antes de crear tu primera macro
Una macro lanzada desde un Stream Deck CNC es G-code que se ejecuta sin que tú lo revises en el momento. Esa es toda su gracia y también todo su peligro.
- Prueba cada macro nueva con la Z arriba, sin pieza y sin herramienta montada. Sin excepciones, por trivial que parezca la macro.
- La pausa por software no es una parada de emergencia. La emergencia es el pulsador físico. Tenlo localizado antes de pulsar cualquier tecla nueva.
- Comprueba la dirección de palpado antes de estrenar una macro de sonda. Hay casos documentados de la Z invirtiéndose al cambiar de versión de sender, con el consiguiente golpe.
- Revisa dos veces la distancia de cada macro. Un
X1que se te cuela comoX10en la carpeta equivocada no perdona.
¿Qué más puedes controlar desde el mismo panel?
Aquí viene la parte que no esperaba cuando compré el mío: la CNC acabó siendo una carpeta del panel. Si ya vas a tener un Stream Deck CNC en la mesa, estas son las cosas que la gente le acaba enchufando.
🖨️ Impresora 3D (OctoPrint o Klipper) — Dificultad: media
Hay plugins que muestran el porcentaje de avance de la impresión en la propia tecla. Existe uno para OctoPrint y otro para Klipper vía Moonraker, este último disponible en la tienda oficial de Elgato. Ves cómo va la pieza sin abrir el navegador.
🔥 Láser (LightBurn) — Dificultad: fácil
Desde la versión 1.3 de LightBurn, cualquier botón de la barra de herramientas admite un atajo personalizado. Eso significa que todo es mapeable: encuadre, arrancar trabajo, mover a posición. Es probablemente la integración más rápida de montar de toda esta lista.
💡 Domótica del taller — Dificultad: media-alta
Aspiración, extractor, compresor, luces y calefacción con enchufes inteligentes. La herramienta clave aquí es Bitfocus Companion, que es gratis y de código abierto, se conecta a Home Assistant y —esto es lo bueno— devuelve el estado al botón: la tecla se pone roja si la aspiración sigue encendida. Además admite acciones retardadas, así que puedes hacer que la aspiración siga funcionando X minutos después de acabar el corte. Puede correr en una Raspberry Pi, sin depender del PC.
🎥 Grabar contenido en el taller (OBS) — Dificultad: fácil
Para esto nació el aparato. Una sola tecla que enciende las luces, cambia a la cámara cenital y empieza a grabar. Si documentas tus proyectos, esto es lo que hace que dejes de perder tomas buenas por no llegar al ratón.
📐 CAD y CAM (Fusion 360, FreeCAD, VCarve) — Dificultad: fácil
Cualquier programa con atajos configurables se deja controlar. Extruir, medir, cambiar de vista, simular la trayectoria. Nada espectacular, pero se nota en las horas largas de diseño.
¿Y si no quiero gastarme el dinero en un Elgato?
Te lo digo con honestidad porque creo que ayuda más que vender humo: para controlar UGS por atajos, un macropad barato con firmware QMK o VIA hace el 90% del trabajo. También sirve un teclado numérico USB reprogramado por veinte euros. Las teclas mecánicas incluso se localizan mejor al tacto.
Lo que no te da un macropad es la pantalla por tecla. Y ahí está el argumento real a favor del Stream Deck CNC: poder ver el paso de jog activo en el color de la carpeta, que el botón de aspiración cambie de aspecto según esté encendida o apagada, o que la tecla te muestre el avance de la impresora 3D. Si vas a usar ese estado visual, el panel se paga solo. Si solo quieres disparar seis atajos fijos, ahorra el dinero y ponlo en fresas.
¿Merece la pena montar un Stream Deck CNC?
Si usas la máquina de forma esporádica, probablemente no lo necesites. Si la usas todas las semanas y te pasas el rato afinando ceros y cambiando herramientas, la diferencia es notable desde el primer día.
Y hay un matiz que quiero dejar claro para no vender humo: un Stream Deck CNC no te hace ir más rápido. Las operaciones tardan lo mismo. Lo que hace es dejarte trabajar sin apartar la vista de la máquina, y eso se traduce en menos sustos, no en menos minutos. Para mí ese es el argumento de compra real.
Si quieres seguir profundizando en este tipo de montajes y trucos de taller, tienes más contenido de mecanizado en la sección de mecanizado del blog.
Fuentes y documentación para seguir
Todo lo técnico de este artículo está contrastado con documentación oficial y con hilos de foros donde la gente lo ha probado en su máquina. Si quieres ir a la fuente:
- Wiki oficial de GRBL 1.1 — listado completo de comandos
- Wiki de GRBL — documentación del comando de jog
$J= - Repositorio oficial de Universal Gcode Sender
- grblHAL — diferencias respecto a GRBL 1.1
- Documentación de LightBurn sobre atajos personalizables
- Bitfocus Companion — software libre para control avanzado del panel
Nota del autor: todo lo que cuento aquí está montado y probado en mi propia máquina, con Universal Gcode Sender Platform y una controladora GRBL 1.1. Los valores de avance y las distancias de las macros son los que a mí me funcionan; adáptalos a tu máquina y prueba siempre en vacío antes de trabajar sobre pieza. Si montas el tuyo y encuentras una tecla que a mí se me ha escapado, cuéntamelo en los comentarios del vídeo — de ahí salen la mitad de las mejoras.