Can't use dynamixel servo motor with "smart servo controller" for arduino

Hi people :)

I recently buy the "Smart Servo Shield" one week agoo . This one => And follow the insctruction about how to plug and use the sample code, same as you, but don't work ..

I think i will become crazy. Till now i can't use my Dynamixel AX-12A =(

DFRobot said , this is full compatible with Dynamixel AX/MX series servos. But i can not make work my servos =(

So , somebody already find a solution or already succes to use this shield with dynamixel servo motor ?

Thank you a lot

This is how i plug the shield and the servo on my arduino mega 2560:

I hope somebody can find the problem :~

Where is your code?

Sorry .
My code is here : the sample DFRobot give as a sample

#include <SPI.h>
#include <ServoCds55.h>
#include "pins_arduino.h"
ServoCds55 myservo;
void setup (void)
  Serial.begin (115200);
  digitalWrite(SS, HIGH);  
  SPI.begin ();
void loop (void)
    char val =;
    if(val != -1)
      case 'p':
        myservo.write(1,300);//ID:1  Pos:300  velocity:150
        myservo.write(1,0);//ID:1  Pos:0  velocity:150  
      case 'v':
        myservo.setVelocity(100);// set velocity to 100(range:0-300) in Servo mode
      case 'm': 
        myservo.rotate(1,150);//   CCW    ID:1  Velocity: 150  middle velocity  300 max   
        myservo.rotate(1,-150);//  CW     ID:1  Velocity: -150  middle velocity  -300 max      
//    case 'i': 
//      myservo.SetID(1,2);//ID:1   newID:2
//      break; 
//    case 'r': 
//       myservo.Reset(2);//Restore ID2 servo to factory Settings ( ID:1  Baud rate:1000000)
//       break;

On the Mega, the SS pin is D53, as I mentioned in your other post. You must modify the ServoCds55 library to use D10, or jumper D10 on the shield to D53 on the Mega.

On the Mega, the SS pin is D53, as I mentioned in your other post. You must modify the ServoCds55 library to use D10, or jumper D10 on the shield to D53 on the Mega.

Ok ^^ I got it ! So nice. Can you reply to my main post this solution ? So i can mark it as an answer :D:D:D
So happy.
It’s a pity DFRobot forget to explain we have to change the SS pin for an arduino MEGA.
Especially for a beginner like me on arduino, little bit hard to understand

Ah lalaaa. I will become crazy ^^

Today i just buy an "Arduino UNO" , because i tried to use the "smart servo controller" with a "Arduino MEGA" but never work.

And still not working .. I think maybe is not because of the code but how i plug the battery and components . So i plan come back on the Arduino forum to find help :cold_sweat:

I just want to know why i can't make work my Servo Motor on this "Shield" .

I tried to implement the "example" basic code find on the webSite here.

Of course i already downloaded and imported with succes the library "ServoCds55 Library" at this link :

After i plug the servo motor "Dynamixel AX-12A" => normally supported by this "Shield".

And i plug a power battery "LynxMotion 11,1V - 3800 mAh" directly on the Shield. [u]Maybe mAh to much set ?[/u]

Like on this picture:

this full picture here =>

When i start the code, nothing happen . I can not change the position of my servo.. Do you have some idea why my servo motor don't work ?

I really hope some body can help me.

How are you supplying power to the Uno? I see no power supply connected to it in your picture.

Maybe you should connect a USB cable and do a bit of troubleshooting with some Serial.print() calls.

Hi @SurferTim . Thank you , always answer so quickly :)

Yes sorry , of course i plug USB cable from my laptop to the UNO . I just remove for take the picture. But still not work .. Really crazy ^^ You think is ok the battery i use ? Because i can see the battery is 3800 mAh . And the Maximum Currents for the servo is: 900mA

The power supply would only be the problem if it supplied less current than the shield required. I use a 5500ma lipo on my stuff.

Have you tried a standard servo with that shield?

Mhh ok, i got it. No unfortunatly , i can only try with this servo "Dynamixel AX-12A" because i only have this servo at home. So that mean , is not the battery problem. Do you use the same code as me ? with "Dynamixel AX-12A" Servo ?

I don't use that shield with my servos. Mine is I2C protocol with standard servos.

Mhh ok it's a pity. I think is totaly different because i use "Smart Servo" on a specific shield for control this type of servo. I hope somebody already meet the same problem as mine =(

Someone may be using that servo with that shield. Don't give up!

But in the mean time, check to insure the connector on the servo is the same polarity as the shield. Some servos have the power and ground wires reversed.

ok thank's a lot !! But this shield is especially made for work with "Dynamixel AX-12" servo series. So i guess the connector on the servo is the same polarity as the shield. But i will check for to be sure ;-)

Now here is something I missed in the datasheet. The interface to that servo is not standard. Here is the datasheet.

It states this about the interface, Protocol Type : Half duplex Asynchronous Serial Communication (8bit,1stop,No Parity)

That will be a problem with your shield, as it would be with mine.

Oh lalaa.. But if you check the dataSheet of the shield here : On the specification you can see , this shield is : A half duplex circuit inside And support the AX-12 servos.

So it's should work ? Otherwise what's your advice ? Thank again , for help me like that :cold_sweat:

I didn't notice that on either datasheet. My bad. I'll have to look at that setup closer. That may come in handy for other projects I have.

You didn't change the servo id, did you? Maybe it isn't listening for the id you are using.

This is a nice question ^^ I already think about too. But the problem is i don't know how to get the ID of my servo .. Where can i find which ID is assigned to my servo ? But i know by defaut normally , all "Dynamixel Servo AX-12" are set to number [ 1 ] .

If you think you may have changed it, you may need to poll each id and see if the servo works. It seems the “id change” example sketches like to change the id to 2. A for loop may be handy.

for(byte servoID = 1; servoID < 255; servoID++) {
  Serial.print("Servo id: ");

  // do your movement stuff here using servoID as the id, and see if it moves

Yes good idea ! I will try it tonight. In 2 hours i come back give my results . I hope find some solution like that XD