Mejora de control de Slider, Pan & Tilt

Hola señores, buenos días, tengo un duda y quisiera poder contar con sus consejos para resolver mi problema:

  1. Objetivos:

Hacer o encontrar controlador, incluído software, para un slider, pan & tilt (3 ejes).

  1. Antecedentes:

Realicé un proyecto que consiste en un Slider con Pan & Tilt. Cada eje tiene un motor NEMA 17 (son 3 motores en total) y son controlados por medio de un arduino UNO y una CNC shield. Asimismo, utilizo GRBL y manejo el slider por medio del universal G code sender. Para su control, escribo manualmente el código G.

Los 3 ejes funcionan bien, pero no como quisiera. El problema radica en que con GRBL y universal G code sender los motores siempre funcionan al mismo tiempo (vale decir, no se pueden controlar los movimientos, las velocidades y la aceleración de manera independiente).

Lo sé, el GRBL no ha sido diseñado para ese tipo de movimientos. A continuación, les dejo el video de mi Slider (debo actualizar el video, porque el fin de semana cambié todas las partes de madera por plástico). Por cierto, algunas palabras están en Alemán porque estoy aprendiendo el idioma por medio de los videos.

https://www.youtube.com/watch?v=BPDZkQYG-Lg

  1. Busqueda de soluciones:

Dediqué bastante tiempo a buscar soluciones para mi problema y encontré algunas soluciones, que son excelentes, pero que no se ajustan a mi presupuesto. A continuación les dejo lo que encontré:

A. Controlador NMX: Son excelentes para el control de motores de manera independiente, este controlador está diseñado para trabajar con slider, pan & tilt. Precio 400 euros.

https://www.dynamicperception.com/Digital-NMX-timelapse-and-video-motion-controller-p/dp-nmx1.htm

B. Controlador PUREMOCO: Este controlador utiliza la placa Teensy y viene con un software para el control del slider y también de la cámara. Precio: entre 400 y 700 euros.

https://puremoco.com/

C. Controlador DMX: estos controladores son antiguos y son diseñados para el control de luces de espectaculos. Lamentablemente, no encontré mucha información referente a ese tema. Salvo unos cuantos videos.

https://www.youtube.com/watch?v=rbKFATq3wYc

D. Software Dragonframe: También investigué los videos de Edu Puertas. El utiliza cnc shield y un código motion control. Es muy bueno, pero el software cuesta 300 euros. Hice las pruebas con el software y funciona, aunque el software es demasiado costoso, tomando en cuenta que solo sirve para stopmotion. Precio: 300 dólares.

E. Encontré otro tipo de controladores y software dedicados para cinematografía pero sobrepasaban los 1000 euros y decidí no ahondar en ese terreno.

  1. Solicitud de ayuda:

Necesito su guía o consejos para encontrar lo siguiente:

  • Controlador de motores paso a paso de manera independiente basado en Arduino que no utilice el GRBL.
  • Software o App que pueda controlar los motores de manera sencilla. No quiero utilizar el IDE de Arduino porque no quisiera escribir a cada momento el código necesario.
  1. Nivel

Mi nivel en programación de Arduino es bajo, mi fuerte es el Hardware y la parte mecánica.

Espero poder contar con sus consejos y muchas gracias de antemano.

Saludos cordiales.

Bueno entonces resumido, primer problema manejar 3 steppers simultáneamente con algun metodo que le envié ordenes de modo que se comporte con suavidad no como se ve en el video que tiene algunos lapsus.

Mi primer recomendación es que uses AccelSteper como librería que permite justo lo que quieres, el control de varios stepper simultáneamente.

Estas son las ventajas de esta librería

  • Supports acceleration and deceleration
  • Supports multiple simultaneous steppers, with independent concurrent stepping on each stepper
  • API functions never delay() or block
  • Supports 2, 3 and 4 wire steppers, plus 3 and 4 wire half steppers.
  • Supports alternate stepping functions to enable support of AFMotor (https://github.com/adafruit/Adafruit-Motor-Shield-library)
  • Supports stepper drivers such as the Sparkfun EasyDriver (based on 3967 driver chip)
  • Very slow speeds are supported
  • Extensive API

Subclass support

Asi que digamos que estas en camino. Falta ahora encontrar un método y porque no usar el mismo código GRBL pero adaptado con esta librería. No se lo que tienes hecho pero supongamos que usaste stepper.h los cambios con esta librería no representan mucho esfuerzo.

Muchas gracias por tu respuesta.

Ya había visto información sobre esas librerias (accelstepper y multistepper) pero no encontré información sobre si lo puedo utilizar con una cnc shield (para evitarme hacer otro circuito). Se puede hacer? y en este caso, todos los movimientos los debo controlar desde el mismo IDE?

Lo que comentas sobre el GRBL me interesa. Adaptar la libreria. Mi pregunta es, con cúal software podría controlar el movimiento de los motores. Universal G code sender no es bueno para eso. Merlin y otros pareceidos que trabajen con G code tienen el mismo resultado. No se puede controlar los motores independientemente. Conoces alguno que se adapte a ese tipo?.

El día de mañana voy a actualizar el video del Slider. Tuve un problema con la estructura de madera (agua) y ahora ya es completamente diferente. Muchas gracias por tu tiempo.

Saludos

Este parece un buen punto de partida: https://howtomechatronics.com/tutorials/arduino/diy-motorized-camera-slider-pan-tilt-head-project/ Usa una placa diseñada por el mismo con un Nano,pero no seria complicado cambiar los pines por los que usa la cnc shield.

Pregunto: siempre hablan de còdigo de CNC, no esta disponible el còdigo abierto de dicho CNC?

Si te refieres a Marlin (firmware impresoras 3d) y Grbl (firmware para fresadoras ,laser,etc) ,si ,el codigo esta en github y cualquiera puede verlos/modificarlos pero son bastante complejos ,solo tienes que ver la cantidad de archivos que contienen,ademas de que los movimientos son interpolados ,es decir para ir a una determinada coordenada ,los ejes se coordinan en velocidad para llegar a ese punto,lo que hace dificil controlar los ejes por separado.

Pues yo iria con Marlin que esta resuelto e intentaría adaptarlo a lo que necesito o iría al foro CNC planteo mi problema y escucharia sugerencias mas adecudadas de como adaptar algo ya existente.
Creo que el problema esta resuelto pero solo es intuicón, no se lo que dices jose?

Hola José gracias por tu comentario. Yo empecé viendo ese video del que haces referencia. Mandé a fabricar los PCB pero cuando lo probé no me gustó el resultado. Ese código está hecho para un control manual y más que nada para fotografías time lapse. Hice muchas pruebas y el resultado no fue el esperado. Ahora tengo en casa 10 tarjetas que no necesito :)

Por otro lado, estoy pensando hacer un controlador pero con una tarjeta Teensy. Es un poco más cara que un Arduino UNO.

Surbyte, definitivamente el código G no puede ser modificado ya que al final de cuentas, al momento de escribir el código G el software se encargará de controlar los motores en simultaneo y no independientemente. Seguiré investigando, si tengo alguna actualización se las compartiré ya que este proyecto me parece interesante.

Por otro lado, estoy pensando hacer un controlador pero con una tarjeta Teensy. Es un poco más cara que un Arduino UNO.

Esas tarjetas son carisimas para lo que son ,el proyecto puede hacerse perfectamente con el UNO + CNC shield,si no es que quieres aprovechar software ya hecho para esa placa.

En realidad, si tienes alergia al IDE de arduino, es difícil resolverlo :) . Si lo que buscas es mover los motores independientemente, pero coordinados, no es algo difícil. Como te dijo Surbyte, se puede lograr con la librería AccelSteper, de hecho hace poco ayudamos a un "artista" que necesitaba mover 18 motores de manera coordinada en una trayectoria de una curva seno. Con respecto al hardware, como te aconsejo Jose, si ya tienes una CNC shield no es necesario nada mas. Saludos

Hola Peter, en realidad no tengo alergía al IDE, lo que no quiero es tener que utilizar en cada momento el IDE para cambiar las trayectorias de los motores. De todas formas voy a seguir investigando, quizás pueda adaptar el codigo del controlador DMX al arduino. Muchas gracias de igual manera por tu consejo.

De ningún modo dije que hay que compilar cada vez que necesites cambiar la trayectoria, se pueden pasar desde el monitor serial o alguna ide desarrollada a tal efecto, pero implica programar mucho con el IDE de arduino (según mi punto de vista, menos que modificar una librería compleja).

Saludos

Añadiendo un encoder rotatorio y un lcd 20*4 o algo similar podrias hacerla independiente del ordenador https://es.aliexpress.com/store/product/Hot-Sale-Smart-Electronics-1pcs-KY-040-Rotary-Encoder-Module-Brick-Sensor-Development-Board-for-arduino/1987383_32822133562.html?spm=a219c.search0204.3.147.5e8650319UmhYx&ws_ab_test=searchweb0_0,searchweb201602_7_10065_10068_10547_319_10891_317_10548_10696_10084_453_454_10083_10618_10307_10820_10821_10301_10303_537_536_10059_10884_10887_321_322_10103,searchweb201603_53,ppcSwitch_0&algo_expid=20582ee5-9a5d-489e-8edd-a3e2a4a01436-26&algo_pvid=20582ee5-9a5d-489e-8edd-a3e2a4a01436&transAbTest=ae803_4

https://es.aliexpress.com/store/product/IIC-I2C-TWI-2004-Serial-Blue-Backlight-LCD-Module-UNO-R3-MEGA2560-20-X-4-2004/343255_32818673377.html?spm=a219c.search0204.3.206.7f6c44ffrwHhy4&ws_ab_test=searchweb0_0,searchweb201602_7_10065_10068_10547_319_10891_317_10548_10696_10084_453_454_10083_10618_10307_10820_10821_10301_10303_537_536_10059_10884_10887_321_322_10103,searchweb201603_53,ppcSwitch_0&algo_expid=5c1bf237-32a0-4672-bee4-17aa2e61e9da-30&algo_pvid=5c1bf237-32a0-4672-bee4-17aa2e61e9da&transAbTest=ae803_4

Fíjate, que muy equivocados no están nuestros consejos. Desde enlace que colocaste a PureMocco se puede descargar el firmware y toda la aplicación esta construida alrededor de AccelStepper.

Saludos

Exactamente!!

Peter, José y Surbyte

Ustedes me han abierto mas la visto. Voy a probar todos sus consejos y de todas formas por este medio les alcanzaré los avances. De todas formas, les dejo un pequeño video con el funcionamiento del slider actualizado. Saludos y buena semana.

https://www.youtube.com/watch?v=Uf8g5U1HTjA

Se me ocurrió otra manera de solucionar tu problema (modo delirio: on) Tu mayor contratiempo reside en que gcode no se adapta al uso que quieres darle: programar independientemente los motores, sin embargo gcode puede seguir trayectorias cartesianas complejas, sin problemas. Seria cuestión de tomar la programación de cada eje independientemente, generar tres funciones dependientes del tiempo , pero independientes entre si, combinarlas y obtener una trayectoria en gcode, aunque no tenga sentido físico . X(t) Y(t) Z(t)------> (x,y,z) (t) El problema seria mas sencillo, generar una IDE que genere gcode.

(Modo delirio:off)

Hola Peter,

Tu modo delirio ON me confundió un poco :) pero este fin de semana largo tenemos 4 días libres (jueves y viernes también) así que me voy a meter al taller para ver todas las posibles variables que tengo. Ojalá para la próxima semana tener una solución.

Saludos y gracias por tu mensaje.

A ver como lo veo yo, a esto me refería con mis comentarios anteriores:

Tienes un dispositivo que anda bastante bien, digamos 6 o 7 (permiteme ponerle esa calificación).

Basicamente los movimientos estan bien pero no es suave en sus cambios de movimiento

Qué usaste como código base para que haga esos movimientos? Cierto es que usas G code para programar que hacer. Y esos es básicamente instalar un PARSER que interprete los movimientos. El parser esta bien , tal como dice Peter. Ahora lo que no esta bien es como ejectuta las tareas.

Tienes el código del programa que ejecuta las tareas?