Convierte tu Robot SCARA DIY en una Grabadora Láser Precisa con Arduino
En este tutorial muestro cómo convertí mi robot SCARA impreso en 3D (construido en un video anterior) para que funcione como grabadora láser. Puedes ver el video o leer el artículo. El robot SCARA tiene 4 grados de libertad impulsados por 4 motores paso a paso NEMA 17 y controlados con Arduino. En el video original usé Arduino UNO + CNC Shield, pero ahora emplearé Arduino MEGA + placa RAMPS, necesario para correr el firmware Marlin de impresora 3D. Mecánicamente, solo hay que cambiar el gripper por un módulo láser. Uso uno de 5,5 W, suficiente para grabar. Una ventaja de este SCARA es su amplio recorrido en Z, permitiendo grabar objetos altos. El área de trabajo es impresionante para su huella: usa el espacio frontal y ambos laterales, pudiendo configurar casi 360° alrededor. Esto es posible gracias al firmware Marlin open-source, que incluye opciones para grabado láser y configuración SCARA. Para generar G-codes uso Inkscape + plugin Inkscape-Lasertools (open-source). Permite generar contornos solos o con relleno, ajustar haz láser, velocidades, comandos láser on/off con control PWM, etc. Ahora recorreremos todo el proceso: diseño del SCARA, instalación y configuración de Marlin, y preparación de dibujos y G-codes. ¡Empecemos! Vista rápida del modelo 3D por si no viste el tutorial original donde explico la construcción en detalle. El robot está diseñado para que la mayoría de piezas se impriman en 3D. Las articulaciones usan motores NEMA 17 con reducción por correas GT2 y poleas GT2 impresas en 3D. Tiene 4 DOF, pero para grabado solo usamos 3: dos rotaciones para alcanzar cualquier punto en el área de trabajo y un movimiento lineal para la altura del láser. La 4ª articulación (rotación del efector) no se usa, aunque el láser se monta en ella. Diseñé el soporte para que el haz quede en el centro de rotación de ese 4º eje; así, aunque gire, no afecta la posición final. Puedes encontrar y descargar el modelo 3D, y explorarlo en tu navegador en Thangs: Descarga el modelo de ensamblaje 3D desde Thangs. Gracias a Thangs por apoyar este tutorial. Archivos STL para impresión 3D: Patrocinado Diseñé este SCARA con 3DEXPERIENCE SOLIDWORKS for Makers, patrocinador del video. SOLIDWORKS lleva sus herramientas líderes a makers a un precio increíblemente bajo. Makers acceden a las mejores herramientas de SOLIDWORKS por solo $99/año, pero para mis espectadores hay una oferta limitada: ¡20 % de descuento adicional mientras duren existencias! El paquete incluye SOLIDWORKS conectado a la nube, y herramientas basadas en navegador como 3D Creator y 3D Sculptor. Solo haz clic en mi enlace, crea tu 3DEXPERIENCE ID gratis y accede a la oferta. ¡Gracias a SOLIDWORKS por patrocinar contenido educativo! Ver SOLIDWORKS for Makers | 20 % descuento SOLIDWORKS for Makers Primero quité el mecanismo del gripper (4 tornillos). Los cables del servo del gripper ahora servirán para el láser. Mi módulo láser funciona a 12 V y se controla por PWM con dos hilos (GND y VCC). Usé el conector de 3 pines que trae: negro = GND, blanco = VCC. Soldé conectores macho a estos hilos para enchufarlos fácilmente a los cables del efector. Coloqué el conector, pasé el cable por una abertura del soporte y fijé el láser con dos tornillos M3. Luego aseguré el conjunto al robot con cuatro tornillos M4. Como dije, ahora hace falta Arduino MEGA + placa RAMPS (en lugar del UNO del video original). Primero seleccionamos la resolución de micropasos de los drivers. Para movimiento suave, ponemos 3 jumpers por driver (máxima resolución). Uso drivers A4988 (1/16 paso), pero también valen DRV8825 (1/32). Conecté todos los cables (los tenía marcados para no liarme). Esquema de conexiones: Los motores van sobre los drivers. Los fines de carrera (Normalmente Cerrados, 2 hilos) van a pines S y – de cada eje. Para el láser usamos pin D9 (en impresora 3D controla ventilador), PWM capable, así regulamos intensidad. Alimentación: 12 V, mínimo 3 A. Componentes: Componentes mecánicos: ver artículo original. Tras conectar todo, ordené cables y cubrí la electrónica para dejarlo limpio. Quedaba un ajuste: cambiar cuándo salta el fin de carrera del segundo brazo. Como el SCARA trabajará en modo "diestro", el homing del segundo brazo debe ser a 0° (alineado con el primero) pudiendo girar a la izquierda. Pegué una pieza pequeña en la articulación para que active el final de carrera en esa posición. Otro detalle: el gatillo original del final de carrera interfería con una tuerca en la base del brazo, limitando su recorrido. Quité esa tuerca y puse un inserto roscado para que al volver a atornillar no sobresalga. El SCARA ya está listo mecánicamente, pero falta flashear el firmware en el Arduino. Ver también: Brazo Robot Arduino con Control por Smartphone Usaré Marlin, firmware open-source muy usado en impresoras 3D, que incluye opciones para grabado láser y configuración SCARA. Se descarga de su web oficial o GitHub. Para instalarlo en Arduino MEGA usaremos PlatformIO IDE (no Arduino IDE), ya que Marlin es grande y complejo y el IDE de Arduino a veces falla al compilarlo. PlatformIO es una extensión de Visual Studio Code. Instalamos VS Code, buscamos PlatformIO en el gestor de extensiones e instalamos. Hecho esto, clic en Open Project, navegamos a la carpeta Marlin descargada y descomprimida, y clic en Open Marlin. Se cargan todos los archivos. Los dos principales para configurar son Importante: antes de abrir la carpeta Marlin, ve al repositorio Configurations en GitHub y descarga archivos de configuración pre-testados. En la carpeta Examples/SCARA copia los dos archivos de configuración y pégalos en tu carpeta Marlin. Ver también: Cómo Configurar GRBL y Controlar Máquina CNC con Arduino Reabrimos la carpeta Marlin con los archivos SCARA y editamos En mi tutorial anterior expliqué qué es cinemática inversa y cómo funciona con este SCARA. Brevemente: calculamos los ángulos de los dos brazos para alcanzar una coordenada X,Y dada. La matemática usa trigonometría y depende solo de las longitudes de los brazos. Aquí introducimos las longitudes: 228 mm (brazo 1) y 136,5 mm (brazo 2). Luego, posición cero de la cama de trabajo ( Otro parámetro clave: Desde ahí fijé la posición cero deseada y obtuve los valores para Definimos conectores de fin de carrera: uno por eje, en posición mínima. Y dirección de homing: -1 = MIN. Verificar que todos los Ajustar Estos valores indican cuántos pasos enviar al driver para mover una unidad (aquí, 1° de rotación de la articulación). Cálculo para mi SCARA: Motores NEMA 17: 200 pasos/vuelta. Con micropaso 1/16 → 3200 pasos/vuelta. Primera articulación: reducción 20:1 → 64000 pasos/vuelta. 64000/360 = 177,777 steps/°. Segunda: reducción 16:1 → 142,222 steps/°. Eje Z: husillo 8 mm paso → 1 vuelta = 8 mm. 3200/8 = 400 steps/mm. El 4º valor es para extrusor (no usado). La dirección del motor depende del cableado. Si va al revés, invertir cables o poner Cambios extra para que Marlin funcione en modo SCARA (pequeños bugs sin resolver en esa versión): Incluso con esto, el homing no funcionaba 100 % bien; explicaré el truco que usé. Clic en Upload (abajo izquierda) y Marlin se instala en el Arduino. Puedes descargar mi versión modificada abajo, o bajar el original de GitHub y hacer los cambios tú mismo. Con Marlin flasheado, necesitamos un programa para controlar el robot y enviar G-codes. Elegí Repetier-Host, popular para impresión 3D, gratis. En Config > Printer Settings ajustamos: puerto COM del Arduino, Baud Rate (el de Marlin), y en pestaña Printer Shape los máximos X, Y y área de impresión. Aplicamos, clic en Connect y debería conectar. En pestaña Manual Control probamos movimientos. Nota: al pulsar flechas X o Y, el robot puede comportarse raro porque aplica cinemática inversa al instante y moverá ambos brazos aunque pulses solo una flecha. Para ponerlo en marcha, primero homing. Antes de dar a Home, acercamos manualmente las articulaciones a los fines de carrera. Al dar a Home: el segundo brazo (Y) va a su final de carrera mientras el primero (X) se mueve en sentido opuesto. Cuando Y toca, X va a su final. Luego va por Z. Tras homing, deberíamos poder grabar o mover manualmente. Pero si intentamos algo de inmediato, el robot se comporta extraño. Solución: desconectar y reconectar en el software. Ahora el movimiento manual y grabado funcionan. Probablemente un bug de Marlin por falta de soporte al modo SCARA. Si enviamos Activamos láser con Enfoque manual girando la lente del láser; distancia recomendada ~5 cm, ajustar hasta punto más pequeño. Para calibrar, grabamos un cuadrado simple y vemos si sale bien. Mi primer intento: cuadrado mal posicionado/orientado por valor erróneo en Cargué G-code de mi logo y grabé. ¡OBLIGATORIO usar gafas de seguridad láser! La luz UV es muy peligrosa. También usar mascarilla respiradora y trabajar en espacio abierto/ventilado: los humos del grabado son tóxicos. El logo salió bien, pero no totalmente cuadrado. Volví al cuadrado simple para diagnosticar. El problema: dimensiones de los brazos. Al no ser rígido, al extenderse los brazos su peso hace que el robot se incline un poco, alterando la posición real. Tras decenas de pruebas, ajusté longitudes: brazo 1 de 228 a 228,15 mm; brazo 2 de 136,5 a 136,2 mm. Así el cuadrado salió correcto. La precisión aún varía según dónde se grabe (brazo más o menos extendido). Finalmente, cómo preparé dibujos y generé G-codes. Usé Inkscape (vectorial open-source). Primero, tamaño de página = área de trabajo. Ejemplo: logo Arduino. Descargué imagen del logo, importé a Inkscape. Con Trace Bitmap la convertí a vectorial. Solo se genera G-code desde formas vectoriales; usé plugin Inkscape-Lasertools (descarga en GitHub, instala copiando archivos a carpeta extensions de Inkscape). En Extensions > Lasertools generamos G-code. Opciones: solo contornos o contornos + relleno, velocidad desplazamiento, velocidad relleno, perímetro, comandos láser on/off con PWM, etc. Con relleno, si queremos menor intensidad láser en zona de relleno, añadimos PWM al comando M106 (ej. En pestaña Preferences marcar Remove tiny infill paths. En Bounding Box marcar Generate G-Code for bounding box preview: genera G-code de previsualización del área, muy útil para posicionar la pieza. Generado el G-code, lo cargamos en Repetier-Host. Al no ser impresión 3D sino movimientos, marcar Show Travel Moves para previsualizar. Clic en Print y el SCARA graba la pieza. Verlo trabajar es muy satisfactorio. Buena característica: Z ajustable → graba objetos altos. Ej.: caja de madera para fresas Forstner. Grabé logo en frente y texto "Forstner bits" detrás. Ejemplo: misma silueta de Batman, solo contornos vs. con relleno. Con relleno tarda mucho más, pero aspecto final mucho mejor. Grabado grande: 600×450 mm con este SCARA. Coloqué robot sobre la pieza para alcanzar frente y laterales. Ajusté manualmente pieza y robot centrados y paralelos. En Marlin puse cero en esquina inferior izquierda de la pieza: 300 mm en X, 150 mm en Y desde el robot. Cuidado con signos. Ajusté también Subí firmware con nuevos valores, homing como antes, mandé láser a cero y activé láser para afinar orientación de la pieza. Con comandos Para el G-code de este grabado hice una plantilla en Inkscape con esta configuración robot/pieza. Desde ahí veo dónde llega el láser y modifico el dibujo. Descargué imagen, convertí a vectorial con Trace Bitmap. Reescalé y posicioné, y con herramienta Erase borré zonas donde está el robot y fuera de su alcance. Generé G-code y la máquina tardó 4 horas. Tras acabar, quise rellenar el hueco donde estaba el robot. Reposicioné robot y pieza, y cambié parámetros Marlin para que el nuevo área de trabajo fuera ese hueco. En general, requiere trabajo de configuración, pero funciona genial. Me encanta cómo quedó. Aunque hubo problemas de firmware, encontré soluciones para que el SCARA funcione como grabadora láser. De cerca, el grabado no es perfecto. El robot no es muy rígido y tiene backlash, así que no logra movimientos precisos y suaves. Pero lo aprendido aquí aplica a cualquier SCARA para obtener mejores resultados. ¡Espero que disfrutaras y aprendieras! Preguntas en comentarios y mira mi Colección de Proyectos Arduino.Resumen del proyecto




Diseño y modelo 3D





Instalación del módulo láser





Diagrama de circuito del SCARA Robot Grabador Láser


Finalizando el montaje



Firmware Marlin para Grabado Láser con Robot SCARA




Configuration.h y Configuration_adv.h.
Configuración del firmware Marlin
Configuration.h. Primero, tipo de robot SCARA:/** * MORGAN_SCARA desarrollado por QHARLEY (Sudáfrica) 2012-2013. * Implementado y retocado por JCERNY junio 2014. */ //#define MORGAN_SCARA /** * Mostly Printed SCARA, diseño open-source de Tyler Williams. Ver: * https://www.thingiverse.com/thing:2487048 * https://www.thingiverse.com/thing:1241491 */ #define MP_SCARA #if EITHER(MORGAN_SCARA, MP_SCARA) // Si el movimiento va a tirones, bajar este valor #define SCARA_SEGMENTS_PER_SECOND 100 // Longitud de brazos interno y externo. Medir con precisión. #define SCARA_LINKAGE_1 228.15 // Brazo 1 - 228 mm #define SCARA_LINKAGE_2 136.2 // Brazo 2 - 136.5 mm // Offset de la torre SCARA (posición de la torre respecto al cero de la cama) #define SCARA_OFFSET_X 300 // (mm) #define SCARA_OFFSET_Y 150 // (mm)MORGAN_SCARA es para SCARA paralelo; MP_SCARA para SCARA serial (el nuestro). Basado en diseño open-source de Tyler Williams que implementa cinemática inversa sobre G-codes generados para sistemas cartesianos.
SCARA_OFFSET_X/Y): distancia desde la torre (primera articulación) al cero de la cama.MANUAL_X_HOME_POS para X e Y. Son las distancias X e Y desde el efector final (láser) en posición home, respecto al cero de cama definido antes. Para obtenerlos hice un boceto en SOLIDWORKS con dos líneas representando los brazos.
MANUAL_X_HOME_POS.#define USE_XMIN_PLUG #define USE_YMIN_PLUG #define USE_ZMIN_PLUG// Dirección de endstops en homing; 1=MAX, -1=MIN // :[-1,1] #define X_HOME_DIR -1 #define Y_HOME_DIR -1 #define Z_HOME_DIR -1__MIN_ENDSTOP_INVERTING estén en FALSE.DEFAULT_AXIS_STEPS_PER_UNIT para nuestra máquina.#define DEFAULT_AXIS_STEPS_PER_UNIT { 177.7777777, 142.2222222, 400, 93 }
INVERT_X_DIR a true.// Invertir dirección del stepper. Cambiar (o invertir conector) si un eje va al revés. #define INVERT_X_DIR false #define INVERT_Y_DIR false #define INVERT_Z_DIR false
scara.cpp línea 75: reemplazar MORGAN_SCARA por MP_SCARA.motion.cpp: comentar líneas 1716 y 1717.configuration.h: comentar VALIDATE_HOMING_ENDSTOPS.configuration_adv.h: descomentar QUICK_HOME.Software de control – Repetier-Host



G00 X0 Y0 el robot va a su posición cero (definida en Configuration.h).
M106 S10. Valor S (0-255) = PWM 0-100 %. S10 para que sea visible sin quemar, y así ver posición cero y enfocar.
Grabado láser con el robot SCARA

MANUAL_X_HOME_POS. Corregido, salió casi perfecto.


Generación de G-code para grabado láser


M106 S128 = 50 %). Efecto similar subiendo velocidad en relleno. Son parámetros para probar.





MANUAL_X/Y_HOME_POS.
G01 (líneas rectas) verifiqué y ajusté posición.




Conclusión

Proceso de manufactura
- Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
- Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04
- Controla tu Roomba Create 2 con Arduino y Android: Guía Completa
- Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
- MobBob: Robot Arduino Impreso en 3D, Controlado por Smartphone Android
- Construir una rueda medidora DIY precisa con Arduino Nano y encoder rotativo
- Construye un monitor de calidad del aire preciso con el sensor Sharp GP2Y1010AU0F
- Juego Pong 1D con Arduino Nano y tira LED WS2812: Tutorial paso a paso
- Brazo Robótico Arduino Controlado por Gestos Manuales – Construcción Paso a Paso
- Controla tu brazo robótico Arduino con app Android dedicada
- Robot comedero con Arduino Nano: Guía paso a paso