Arduino y Dynamixel AX-12

sábado, 22 de enero de 2011

Después de un largo tiempo he aquí una Biblioteca para controlar los actuadores Ax-12A de Dynamixel.
Estos Servos son bastante increíbles, parece que no les podría faltar nada, ya que pueden devolver Temperatura interna, Voltaje, Posición y Velocidad; Esto lo logra ya que tiene un microcontrolador ATmega8 el cual se comunica atravez de Half Duplex UART-TTL.

Estas bibliotecas sirven para comunicarse con los servomotores Dynamixel de varias formas en diferentes pines de las placas Arduino.

La comunicación se realiza a través del puerto Serie (UART o USART) del Arduino por lo que estos puertos utilizados se volverán exclusivos para comunicarse con el servomotor Dynamixel.

La alimentación de estos Servos es con una fuente de 9.6v y uniendo la tierra del arduino con la tierra de la fuente del Servo para que la comunicación no tenga errores de interpretación y la biblioteca pueda funcionar correctamente.La alimentación del Servo y del Arduino también puede ser de la misma fuente por lo que Vin del Arduino tendrá que tener un voltaje de 9.6v (Este es el voltaje sugerido por Robotis).


Las conexiones de alimentación del Servo con otras versiones y modelos de arduino funcionan de la misma forma.

Para utilizar estas bibliotecas se necesita un buffer tri-estado, se puede hacer con dos circuitos integrados 74HC04 y 74HC126 tal como recomienda Bioloid y utiliza en sus controladores o pueden usar un solo circuito integrado 74LS241 que yo recomiendo ya que es más sencillo de utilizar y/o conectar. Los pines de comunicación cambiaran según sea la Biblioteca que se quiera utilizar.



Circuito Savage Electronics - Dynamixel Serial:

Circuito Savage Electronics - Dynamixel Serial1:


Circuito Savage Electronics - Dynamixel Serial2:


Circuito Savage Electronics - Dynamixel Serial3:


Circuito Savage Electronics - Dynamixel SoftSerial:




Video Demostrativo:


430 Comentarios, Dejar un Comentario:

«El más antiguo   ‹Más antiguo   401 – 430 de 430   Más reciente›   El más reciente»
  • Adbeel Estrada Martinez

    Disculpen distinguidos master, alguno de ustedes podría decirme como usar dos conexiones seriales?, es decir, que pueda manipular dos servos dinamixel Ax-12 pero usando dos puertos seriales?

  • Josué Alejandro Savage

    Hola adbeel, puedes usar dos puertos del arduino (MEGA o similar) usando las diferentes bibliotecas que puedes encontrar aqui mismo. Saludos

  • Unknown

    Hola Disculpa Utilizamos tu libreria y logramos mover los Ax12, pero al momento de cambiar de 1000000 a 9600 ya no se movieron ya se comprobo bien el codigo y luego quisimos regresalos a su configuracion de fabrica y ya no se mueve n con los 9600 o los 1mbps, el codigo que utilice e sel que tienes aqui con un long BaudRates[] = {1000000,...

    Tambien lei en un post tuyo que la tierra de la fuente con la que alimento el servo deve de ir al arduino eso me afectaria mucho, a y otra cosa si interviene mucho que el baud Rate conforme a su Data del Ax12 un ejemplo.-

    Dynamixel.setBD (1, 207); ô
    Dynamixel.setBD (1, 9600);

    Agradeceria mucho tu ayuda.

  • Gabriel Jimenez

    hola, necesito leer datos de un motor dynamixel, (temperatura, posicion), pero no tengo idea de como, me podrias ayudar?

  • Marina

    Hi savage , i have a question please : Does this library work for both MX 28 and MX 12 ?

  • Unknown

    hola savage,disculpa, tengo un problema al controlar un servomotores Ax12, resulta que al momento de cambiarlos a su configuración de fabrica y ya no se mueven que puedo hacer.
    espero puedas apoyarme. saludos!!

  • Josué Alejandro Savage

    Hi Marina, Yes it should work for the MX28.

    Hola Unknown, estas seguro que esta en la configuración de fabrica, usando ID 1 Y Baud Rate de 1MBPS?

  • Hi Savage, I have a question about AX-12. I hope to help me.
    I'm using your library and its is fantastic, great job, congratulations.
    Now I want set the maximum current. This function is necessary when the servo is interrupted because of obstacle.
    Servo documentations are present the "torque" registers and i think that is the correct way. I try to use this registers but nothing are changed in servo motion.
    Do you have an example for this functionality ?
    Thanks

    Matt

  • ayuda, el maximo del ax12 es 1023 y necesito 4095 para el mx-12w como le hago?
    muchas gracias

  • Josué Alejandro Savage

    la biblioteca no esta limitada para el modelo ax-12, puedes poner valores según el alcance de tu motor sin ningún problema. Saludos

  • Unknown

    hola savage, quiero mover el servomotor de un angulo de 90° a 0° y de 90° a 180°, esto para la dirección de un carro. Utilice la función de MoveSpeed, pero el motor se mueve conforme al retardo que le pongo y no a la posición que le pongo; Esto quiere decir que si, le pongo mas tiempo de retardo, el motor se sigue moviendo, no importa la velocidad que le de.
    Estuve utilizando este programa como prueba para el servomotor, como dije antes, la Velocidad si funciona, pero la posicion no.

    #include "Dynamixelserial.h"
    void setup(){
    Dynamixel.begin(1000000,2);
    delay(1000);
    }

    void loop(){

    Dynamixel.moveSpeed(254,613,30);
    delay(3000);

    Dynamixel.moveSpeed(254,1,30);
    delay(10000);
    }

    ATT: Edwin

  • Hello Savage,
    How can I make it work with a MX-106T dynamixel? I tried al your library's.
    Thanks in advance.

  • Unknown

    buenas tardes necesito mover un mx64 para un proyecto de tesis y no he podido, quiero saber si se puede solo con arduino y si alguien tiene el programa les agradeceria mucho. muchas gracias

  • Unknown

    Hola Savage,

    Antes que nada, gracias por tu colaboración! Ha sido de mucha ayuda! Quisera preguntarte si se puede utilizar este circuito con los integrados y el arduino que mencionas para un Dynamixel XL-320.

    Saludos y gracias de nuevo!

  • Hi! Somebody would say me how to conect a Dynamixel AX-18A with Arduino Mega?

  • disheet pithadia

    when i upload the below program to arduino sketch it is give error "Dynamixel was not declared in this scope"
    please give me solution for this..
    I was added libraries to arduino folder also...

  • disheet pithadia


    Whenever i'm trying to compile the program it generates below error..Please help me...I have added all the libraries to arduino folder..then also it generates this error..


    Arduino: 1.6.9 (Windows 10), Board: "Arduino Mega ADK"

    In file included from C:\Users\Disheet\Desktop\servo\servo.ino:2:0:

    C:\Users\Disheet\Documents\Arduino\libraries\ax12v2/ax12.h:48:0: warning: "LOCK" redefined [enabled by default]

    #define LOCK 47

    ^

    In file included from C:\Users\Disheet\Desktop\servo\servo.ino:1:0:

    C:\Users\Disheet\Documents\Arduino\libraries\DynamixelSerial/DynamixelSerial.h:177:0: note: this is the location of the previous definition

    #define LOCK 1

    ^

    In file included from C:\Users\Disheet\Desktop\servo\servo.ino:2:0:

    C:\Users\Disheet\Documents\Arduino\libraries\ax12v2/ax12.h:66:23: error: conflicting declaration 'typedef unsigned char boolean'

    typedef unsigned char boolean;

    ^

    In file included from sketch\servo.ino.cpp:1:0:

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:117:14: error: 'boolean' has a previous declaration as 'typedef bool boolean'

    typedef bool boolean;

    ^

    C:\Users\Disheet\Desktop\servo\servo.ino: In function 'void setup()':

    servo:6: error: 'Ax12' was not declared in this scope

    Ax12.begin(1000000,2); // Configure the usart at 1mbps

    ^

    C:\Users\Disheet\Desktop\servo\servo.ino: In function 'void loop()':

    servo:12: error: 'Ax12' was not declared in this scope

    Ax12.move(1,random(200,800)); // Move the servo with ID 1

    ^

    Multiple libraries were found for "ax12.h"
    Used: C:\Users\Disheet\Documents\Arduino\libraries\ax12v2
    Not used: C:\Users\Disheet\Documents\Arduino\libraries\Bioloid
    Not used: C:\Program Files (x86)\Arduino\libraries\ax12v2
    exit status 1
    'Ax12' was not declared in this scope

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.

  • Josué Alejandro Savage

    Hi, you are not using the libraries available in this site, this libraries include examples, try it, ;)

  • Jamil Mustarin

    please help me. dynamixel's temperature, position, etc is can't read by arduino mega and uno. Temperature is -2 and -1, why???please your solution

  • it is possible to control dynamixel motor in MatLab which is connected to computer by using Arduino mega and you library?

  • Josué Alejandro Savage

    Sure, you will have to use matlab to send instructions (Serial communication ) and apply my library to respond to those commands, i don't have an example to do that but it can be done.

  • Victor Daniel

    Hola!

    Me encuentro realizando un proyecto con un pic y acabo de adquirir un servo Ax-12a. Con el cristal que tengo el pic no permite trabajar a 1Mbps pero tengo un arduino Mega adk y me gustaría saber si con la librería es posible cambiar el baud rate del servo y asi poderme comunicar a través del pic?

    Muchas gracias por tu atención

  • razi ihab

    Hi Mr Savag Thank you for your library, Sorry for this question because I am a newbie in programming When I used the example in the file
    -DynamixelSoftSerial
    -examples
    -Dynamixel_Write
    Upload , I received this message
    n file included from /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:70:0:
    /Users/mac/Library/Arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/SoftwareSerial.h: In member function 'void DynamixelClass::begin(long int, unsigned char, unsigned char)':
    /Users/mac/Library/Arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/SoftwareSerial.h:81:8: error: 'void SoftwareSerial::setRX(uint8_t)' is private
    void setRX(uint8_t receivePin);

    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:85:47: error: within this context
    #define setRXPin(args) (SoftSerial.setRX(args)) // Set Rx Serial Pin
    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:128:2: note: in expansion of macro 'setRXPin'
    setRXPin(DRx);
    ^
    In file included from /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:70:0:
    /Users/mac/Library/Arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/SoftwareSerial.h:80:8: error: 'void SoftwareSerial::setTX(uint8_t)' is private
    void setTX(uint8_t transmitPin);

    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:86:47: error: within this context
    #define setTXPin(args) (SoftSerial.setTX(args)) // Set Tx Serial Pin
    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:129:2: note: in expansion of macro 'setTXPin'
    setTXPin(DTx);
    ^
    In file included from /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:70:0:
    /Users/mac/Library/Arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/SoftwareSerial.h: In member function 'void DynamixelClass::begin(long int, unsigned char, unsigned char, unsigned char)':
    /Users/mac/Library/Arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/SoftwareSerial.h:81:8: error: 'void SoftwareSerial::setRX(uint8_t)' is private
    void setRX(uint8_t receivePin);

    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:85:47: error: within this context
    #define setRXPin(args) (SoftSerial.setRX(args)) // Set Rx Serial Pin
    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:138:2: note: in expansion of macro 'setRXPin'
    setRXPin(DRx);
    ^
    In file included from /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:70:0:
    /Users/mac/Library/Arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/SoftwareSerial.h:80:8: error: 'void SoftwareSerial::setTX(uint8_t)' is private
    void setTX(uint8_t transmitPin);

    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:86:47: error: within this context
    #define setTXPin(args) (SoftSerial.setTX(args)) // Set Tx Serial Pin
    ^
    /Users/mac/Documents/Arduino/libraries/DynamixelSoftSerial/DynamixelSoftSerial.cpp:139:2: note: in expansion of macro 'setTXPin'
    setTXPin(DTx);
    ^
    exit status 1
    Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560

  • razi ihab

    Hello
    I have a question:
    Is there a way to reset The actuator wen I forget the ID

  • razi ihab

    Hello sir
    I have a question:
    Is there a way to reset the servomotor when i forget the ID

  • Josué Alejandro Savage

    Hi, yes there is a way to reset the servo, please check the comments, there is the program fro the arduino to reset it to factory defaults.

  • jimiriapratama

    hi savage, I've try your library in mega2560 and it's working but the servo movement wasn't smooth as in open CM 9.04 maybe because of ARM cortex chip... So I just try it on DUE, but it's not working like on mega, can you help me? I'm using Serial3 communication

  • Hamid Davoodi Shandiz

    Hi Savage

    Can I Use your library in AtmelStudio 7 ?
    How ?

  • Hamid Davoodi Shandiz

    Hi Savage

    Can i use your library in atmel studio 7 ?
    How ?

    tnx

  • Josué Alejandro Savage

    This library doesn't seem to work with aurduino DUE, this library can be exported to atmel studio but you will also have to load all the arduino libraries. Greetings

  • «El más antiguo ‹Más antiguo   401 – 430 de 430   Más reciente› El más reciente»

    Publicar un comentario