Saludos,
como ha sido el final de las vacaciones?... Pues
imagino que traumático para casi todos, al segundo día ya estábamos mirando el
calendario a ver cuándo caían las siguientes. Pero como era de esperar, hay
mucho trabajo que hacer.
Hoy os hablare de mi pequeña experiencia con
los servos Dynamixel, recordáis la anterior publicación del "el
tentáculo que quería reptar", pues la historia continua. Los tentáculos se emplearán
para un Workshop la semana que viene, pero también para la semana que viene
tengo que tener tres brazos como estos,
para realizar una performance entre otros robots.
|
Con los servos Dynamixel tenía ganas de
trabajar, pues son los 100% bellota de los servos, al igual que su precio. Pero descubrí
que hay una familia de pequeñines los XL-320
con un precio razonable. Igual que paso con casi todos los sensores, motores,
placas etc. Buscas en google como conectar/controlar con Arduino/Genuino, hay
otros tantos, pero es como las consultas de Linux, de Ubuntu hay mas información.
Y de cómo controlar
estos servos.
Pues es algo tan sencillo como bajarse la librería,
abrir uno de sus ejemplos básicos “XL320_servo_example”
y a correr. Explicar que este ejemplo emplea la librería <SoftwareSerial.h>
para no usarla, el pin de data está conectado directamente al TX del serial Pin
1. Pero podemos emplear el SoftwareSerial y conectar el data al pin 11, y el serial
emplearlo de debugger.
Que problemas os encontrareis. Bien el
programa “XL320_servo_set_baud_rate_or_id”
sí que o cambia el baud rate de comunicación con el servo, pero no nos cambia
la dirección, y esto es porque los servos se ponen automáticamente a 9600 baud
cuando se le va a cambiar la id, si la velocidad es otra pasa de ti. Aquí os
dejo una versión modificada,
simplemente a la variable newID le asignáis
la dirección que queréis dar al servo, cargáis el programa conectáis el servo,
solamente el que vais a programar y pulsáis el reset, si la configuración se ha
realizado correctamente el servo se moverá aleatoriamente, eso si os los dejara
a 9600.
Hacer el setup de uno en uno |
Otro problema que tendréis, es la imposibilidad
de tener feedback del servo, al solo emplear el pin de transmitir, no recibiréis
nada del servo y si puenteáis los pines TX/RX tampoco os funcionara. Es malo
esto, depende de lo que quieras hacer, tener un servo con muy buenas
prestaciones y no poder hacer uso de ellas.
Algunas posibles soluciones
Soluciones unas cuantas, 74HC126, 74LS241, lo que me
obligaba a ir de compras… La mayor fuerza del progreso es la pereza, aunque también
es su problema. Porque digo esto, tratar de evitar tenerme que dar un paseo me
ha hecho mirar y remirar en webs, foros, etc. Tenía pensado hacer una prueba
con el MAX485
que sé que tengo en el trabajo, pero he encontrado algo más simple en esta web.
Lo que me ha hecho buscar en las estanterías componentes para conseguir este
simple circuito. Pues bien funciona, se puede enviar y recibir información.
Hay una ligera desviación de la orden de movimiento y la lectura que hace pero no es preocupante.
Anakleto.
Buena noche
ResponderEliminarTengo un inconveniente con los servos, estoy trabajando con la opencm 9.04 y necesito reiniciar los servos a su estado de fabrica. Me podrías ayudar, gracias.
Amigo logre solucionarlo...!!!! dejo el comentario por si a alguien le puede ser útil.
ResponderEliminarAl trabajar con la tarjeta controladora OPENCM 9.04 y los motores dynamixel XL 320 debes tener en cuenta el ID y los Bad de comunicación... pero es de suma importancia verificar el estado de cada motor... Me explico:
- En mi caso la tarjeta OpenCM 9.04 funcionaba bien, pero por mas de que descargara los códigos era inútil generar movimiento en los sevos XL 320.
- Intente leer los datos de posición de los servomotores y para mi sorpresa funciono la lectura, entonces no estaba quemada ni la tarjeta ni los servos.
- Yendo un poco mas a fondo, descubrí que cuando lees información del servo motor el torque se vuelve casi nulo, esto con el fin de poder manipular los servos mientras se encuentran con alimentación de voltaje.
Como solución encontré que se debe fijar el valor de Dxl.maxTorque(NUM_ID, 1023), así pues se habilita nuevamente la función de movimiento. Tal vez no parezca muy importante pero me tomo algo de tiempo solucionarlo
Perdona que no te haya podido atender. Pero me alegra que los hayas podido solucionar y gracias por comentar la solución.
ResponderEliminarHello first thank you for this ! I have a probleme !I 've got success the operation for one servo but when i try to do the same thing for my second xl320 it don t work, can i change the id of each xl320 separatly or have i to do it by pluging the first and then the second one to assign him the new id ?
ResponderEliminarTo change the direction and the baurate must be done one by one.
Eliminarhello please help me with working of xl with arduino uno
Eliminarits doesnt work for infinite turn mode please refer me something so that i can do it.
bonjour je n'arrive pas à parametrer et utiliser le deuxième XL320 , le premier fonctionne mais le second non . merci de votre aide !
ResponderEliminarbonjour, pour configurer les servos, vous devez le faire un par un, séparément.
Eliminar