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

17 comentarios

  1. Pingback: Jesús Arroyo, el ingeniero de 25 años que ha creado el escáner 3D de bq | SorayaPaniagua Ⓢ

  2. Hola
    Acabo de montar el escaner 3D Ciclop. No he tenido grandes problemas, salvo la placa del Pololu y driver laser.
    Sin embargo, ahora que lo he arrancado, cuando voy a ejecutar la rutina de ajuste, los laser no se encienden.
    He de comentar que funcionan perfectamente cuando los enciendo manualmente, ta,bién cuando escanea. Sólo cuando procede al ajuste no se encienden, y creo que deberían hacerlo.
    ¿Cuál puede ser el problemas?
    L.

  3. Jesús Arroyo

    Buenas Luis,

    A qué te refieres exactamente por rutina de ajuste, quizá a los procesos de calibración?

    Una pregunta, ¿estás utilizando la electrónica ZUM BT-328 y ZUM SCAN?

    En el software de escaneo Horus (http://diwo.bq.com/horus-released/) los láseres se encienden desde el apartado de control, en la calibración de triangulación láser y durante el escaneo.

    Un saludo.

  4. Hola, estoy intentando de compilar el firmware desde el ID de Arduino y no se como cargarlo, podrías explicar los pasos, intente lo comentado en la wiki de Grbl, sección de compilación, pero me aparece el siguiente error: ZIP doesn’t contain a library. Gracias

    1. Jesús Arroyo

      Buenas!
      Horus-fw está pensado para compilar con el comando “make”. Sin embargo se puede hacer el siguiente hack para que funcione con arduino: Crea un fichero vacío en el directorio “horus-fw” llamado “horus-fw.ino”. Abre este fichero con arduino y listo!
      Un saludo.

    1. Jesús Arroyo

      Buenas,
      Nunca hemos probado Horus con esa cámara. Como utiliza OpenCV, si tienes correctamente instalados los drivers es probable que funcione sin apenas hacer modificaciones en el código.
      Un saludo.

      1. se enciende y apaga (no sale imagen) la camara ps2 y me sale camara incorrecta.
        debes intentar poner un selector de resolucion de camara la mia es de 640×480
        creo que con eso me funcionara
        y otro selector para arduino nano 328p
        y otro selector de usb ch340g
        gracias
        vamos que tienes faena eres el mejor

        1. estoy usando windows xp
          resolucion de camara la mia es de 640×480
          gracias

          1. Jesús Arroyo

            Buenas! En principio nosotros hemos probado Horus para Windows 7 y 8. Lo que sucede es que probablemente no tengas instalados los drivers oficiales de la cámara para Windows. Prueba a instalarlos e intentarlo de nuevo. De todas formas nos lo apuntamos para mirarlo en futuras implementaciones.
            PD: los asuntos de desarrollo los tratamos en el grupo: https://groups.google.com/forum/?hl=en#!forum/ciclop-3d-scanner. Para futuros comentarios, por favor, escribe en este grupo.
            Un saludo!

  5. hola, use el firmware para una arduino nano, conectado tal como esta la ZUM. Y me pasa que cuando lo conecto a horus lo puedo usar perfectamente, pero si cierro el programa o desconecto y conecto no puedo volver a conectarlo. Intente desenchufandolo y enchufandolo, pero no funciona.

    Uso horus 1.2.4 del repositorio de launchpad sobre Mint.

    Desde la terminal de arduino me puedo comunicar perfectamente siempre.

    saludos

     

    1. SGracia

      Hola bazza!

      Cuando intentas volver a conectar y no te deja, ¿recibes algún mensaje de error o similar en la consola? Para que te vuelva a conectar, ¿tienes que reiniciar el equipo?

      1. Hola

        Si eso es lo que pasa, tengo que reiniciar la computadora.

        la consola me dice esto:
        >>> Horus 0.1.2.4 <<>> Connecting camera 0
        >>> Done
        >>> Connecting board /dev/ttyUSB0 115200
        Error opening the port /dev/ttyUSB0

        1. probe en muchas maquinas con gnu/linux mint y me hace lo mismo.
          Creo que es por que uso arduino nano por usb. ¿saben como puedo mejorar eso? o ¿a que se puede deber?

  6. hola, tengo problema para escanear , cilindro sin cerrar, imagen incompleta paso fotos y de seteos, no se donde esta el error, lo que veo que da media vuelta el plato osea 180º al escanear una pieza, que es el conejo que sale en las fotos no debería ser 360º, lo demas lo tengo listo,

    tengo una linea en el foro del googlegroup pero nadie me da solución, me parece no tiene solución,
    https://groups.google.com/forum/#!topic/ciclop-3d-scanner/MdLd9JwvusE
    ayuda,

Los comentarios están cerrados.