Simulado un Dispositivo Dynamixel en Controladores Bioloid

jueves, 11 de agosto de 2011
Existe una forma de agregar sensores como acelerometros, gyros etc. a tu controlador Bioloid compatible con la comunicación de los servos Ax-12, esto se logra simulando ser un servo pero enviando datos de este tipo de sensores además de ser compatible con Daisy Chain lo cual ahorra conectores hacia tu placa controladora y conectandolos directamente a cualquiera de tus servos.

Cuenta con características como tener un ID y solo responder tras ciertos comandos acordes con el protocolo que manejan los servos Dynamixel Ax-12, Ademas su pueden combinar varios sensores en un mismo dispositivo como lo es el Gyro, sensores de temperatura y todo tipo de sensor según tus necesidades.

He usado un Arduino para el envío de datos hacia el controlador Bioloid por su fácil programación y gran variedad de códigos que te ayudaran a implementar nuevas funciones en el Dispositivo.


De esta forma ya no será necesario conectar una fuente en el Jack o USB ya que se alimentara de la misma fuente de los servos, evitando exceso de cables en tu robot. Posteriormente podrás construir tu propia placa arduino con componentes SMD para la reducción de su tamaño.


Debido a que la librería HardwareSerial no es tan rápida como los servos Ax-12 tendremos que sacrificar la velocidad a unos 200,000 bps para que al arduino no le cueste procesar las peticiones del controlador Bioloid, tendrás que reducir la velocidad de todos los servos a la misma que el Arduino para lograr una buena comunicación con todos los dispositivos.

Los pines o cables  que saldran de este nuevo dispositivo serán los mismos que el de un servo Ax-12, Pin GND-> Conectado al GND del arduino, pin Vin-> Conectado al pin Vin del arduino y pin Data-> Conectado a los pines Tx y Rx del Arduino por ser un Half Duplex Usart.

Descagar Sketch Arduino Half Duplex Usart Sensor for Bioloid. 

En el Sketch la velocidad esta definida por BAUD_RATE  a 9600, cambiar este si se desea utilizar una diferente. El acelerómetro tendrá que ir conectado a A1 y A2 siendo eje x y eje y respectivamente.

Solo sube este sketch a tu arduino haz las conexiones y estará listo para ser conectado al daisy chain de tu controlador Bioloid.*Puede ser que tengas que modificar un poco el coligo para ajustar tu sensor.

Espero tus comentario.

11 Comentarios, Dejar un Comentario:

  • muchisimas gracias!!!!!
    ire implementandoló cuando tengo mi nuevo arduino, el que tenia recibio un voltaje por error u.u,
    muchas gracias por haberte dado el tiempo :)
    atte: Carlos

  • Savage

    De nada! :D Con el tiempo iré especializando ese sketch.

  • te luciste hermano, oye una duda sobre el sketch,
    yo tengo un acelerometro adxl3xx, osea q mide 3 axis. por lo que en el sketch deberé modificar lenght a 5 y read a 3 cierto?
    saludos

  • Savage

    No, este metodo esta basado en la comunicación original del CM5 y controladores Bioloid por lo que si quieres que te envié un dato más habrá que implementar otra función que te devuelva el dato del eje que te falta, por ejemplo agregar la función con la que envía la temperatura para que cuando le pidas la temperatura del sensor te devuelva la lectura del eje que te falta.

    Controlador Bioliod -> Pedir Temperatura al ID del sensor.
    Sensor -> Devuelve valor del eje faltante.

    Para que te des una mejor idea te recomiendo leer el PDF del Ax12 para que veas como responde a una petición de temperatura y puedas actuar conforme a eso, o ver una de las librerías de este blog (Dynamixel_Serial). Saludos :D

  • ok, creo q si t entendí, básicamente en el sketch utilzaste present position porq esa funcion del bioloid puede almacenar 2 bytes ( q en este caso son X y Y).,mmm
    entons debere copiar la primera parte del sketch no? y cambiar la parte del comando present position por un comando que alamcene un byte, como lo es temperatura o voltaje.

  • me podrias explicar estas lineas??
    #define AX_POS_LENGTH 4
    #define POSITION_LENGTH 4

  • Savage

    Precisamente es eso lo que tienes que hacer, AX_POS_LENGTH es el numero de datos que espero recibir al tener una petición de leer posición y POSITION_LENGTH se refiere al numero de datos que el sensor le va a enviar al arduino ( 1-Error 2-DatoX 3-DatoY 4-Checksum). El comando de leer temperatura o voltaje tiene un longitud de 3 al enviar del sensor al controlador.

  • mmm ok, oie si te pongo aki un sketch me podrías decir si voy bien, es sobre este mismo ejemplo, lo malo es q aun no me ha llegado mi arduino para trabajar u.u

  • Savage

    por supuesto. :D dejado aquí lo checo y te digo.

  • Hola
    ¿Podrías volver a colgar el sketch en otro sitio?, megaupload está cerrado... :(
    Gracias

  • Josué Alejandro Savage

    Hola, vuelve a dar click al enlace ya he subido el sketch en otro servidor. Saludos.

  • Publicar un comentario en la entrada