horus-fw

Horus firmware es un programa de control de motores paso a paso, módulos láser y sensores analógicos LDR por medio de comandos G-code1. Es compatible con placas basadas en Arduino2 y la shield ZUM SCAN3.

El firmware está diseñado para el control de los componentes físicos del escáner 3D Ciclop4, un escáner rotativo basado en la triangulación láser. Para desarrollar el código se ha partido del proyecto Grbl5, un programa de control de máquinas CNC, utilizado también en otros proyectos como Marlin, el firmware de las impresoras 3D.

gplv3-logo

El código está publicado en GitHub, liberado bajo la licencia GPLv36. Esta licencia garantiza que se cumplen las libertades fundamentales en el uso del software libre. Todo código liberado bajo la licencia GPL pertecene automáticamente al Patrimonio Tecnológico de la Humanidad.

Compilación y carga


Para compilar Horus Firmware se pueden utilizar distintas interfaces como el IDE de Arduino7, Sublime con Stino8, etc. Estas mismas interfaces permiten también la carga del firmware compilado, en formato .hex, en el microprocesador. Otra forma de hacerlo es utilizar directamente AVRDUDE9, o de forma más sencilla a través de la aplicación Horus.

horus-ide

Carga del firmware mediante Horus (izquierda) y Sublime+Stino (derecha)

Se puede encontrar más información en la wiki de Grbl, sección de compilación y carga del software.

Conexión


La comunicación con la placa se puede realizar mediante USB o Bluetooth. Para establecer la conexión existen múltiples aplicaciones libres, por ejemplo Arduino Serial Monitor o CuteCom10. En este caso se debe seleccionar el dispositivo, ajustar el baud rate a 115200 y el final de comando a LF  o CR, LF, ‘\n’ o ‘\r\n’, respectivamente.

Al conectar con el firmware, el programa siempre comienza enviando el mensaje:

Horus 0.1 [‘$’ for help]

Con cada comando enviado, se responderá un ok si el mensaje se ha procesado y ejecutado correctamente, y un error en caso contrario, definiendo el flujo de comunicación:

→ G1 X360\r\n
← ok\r\n

arduino-serial-cutecom

Comunicación con el firmware mediante Arduino Serial Monitor (izquierda) y CuteCom (derecha)

Configuración


Horus Firmware, por herencia de Grbl, proporciona una interfaz de configuración y monitorización mediante comandos $, así como comandos de control en tiempo real. Todos estos comandos vienen descritos en la wiki de Grbl.

También se puede visualizar un menú de ayuda sobre los comandos de configuración enviando el comando $:

$$ (view settings)
$# (view # parameters)
$G (view parser state)
$I (view build info)
$N (view startup blocks)
$x=value (save setting)
$Nx=line (save startup block)
$C (check gcode mode)
$X (kill alarm lock)
~ (cycle start)
! (feed hold)
? (current status)
ctrl-x (reset)

Como caso particular, destacan los comandos $110=v y $120=a, que ajustan la velocidad y aceleración máxima del motor a los valores v º/s y a º/s² respectivamente.

Comandos G-code


G-code es el lenguaje de programación más utilizado en dispositivos de control numérico (CNC). Máquinas de mecanizado, cortadoras láser, impresoras 3D, todas ellas utilizan este estándar de facto para comunicarse. En este lenguaje las instrucciones son bloqueantes y se ejecutan secuencialmente. A continuación se presentan los comandos G-code implementados en Horus:

G1: Movimiento circular

G1 Fv  ajusta la velocidad de giro a v grados por segundo
G1 Xd  mueve el motor paso a paso hasta la posición d en grados

M0–M2: Pausa y fin del programa

M0  pausa el programa. Sólo puede ser reanudado mediante el comando Cycle start (~)
M2  detiene el programa y lo resetea

M17–M18: Habilitar/Deshabilitar los motores paso a paso

M17  Habilita los motores mateniendo la posición. Permanece durante los comandos G1
M18  Deshabilita los motores paso a paso. Permanece durante los comandos G1

M50: Lectura de los sensores analógicos LDR

M50 Tv  lee el valor del sensor LDR v. Devuelve un valor entero entre 0 y 1023

M70–M71: Encendido/Apagado de los módulos láser

M70 Tv  apaga el módulos láser v
M71 Tv  enciendie el módulo láser v. Después de un timeout (4 minutos) se apaga automáticamente

Trabajo futuro

Una de las lineas de trabajo es adaptar el firmware a nuevas placas electrónicas y nuevos procesadores. Con ello se pretende incrementar la funcionalidad del mismo, así como definir una interfaz de comunicación estándar, garantizando la compatibilidad con herramientas como Horus y derivadas.

Horus Firmware ha sido desarrollado teniendo en cuenta la simplicidad en la estructura y en el código, es decir, contiene justo lo necesario para controlar el escáner 3D Ciclop y similares, permitiendo añadir funcionalidad de manera sencilla. Como en todos los proyectos libres, os animamos a contribuir, mejorar y evolucionar este firmware, así como adaptarlo para nuevas necesidades y proyectos.

¡A programar!

Referencias

  1. Comandos G-code
  2. Comunidad Arduino
  3. Shield de potencia ZUM SCAN
  4. Escáner 3D libre Ciclop
  5. Software de control CNC Grbl
  6. Licencia libre GPLv3
  7. IDE de Arduino
  8. IDE Sublime Text y Stino
  9. Software de programación AVRDUDE
  10. Interfaz de comunicación CuteCom