Servos keep damaging

Hello all!

I'm kind of new here, I just read the forum untill now.

I have a big problem, I looked for questions on the internet, but I found nothing.

Please, if you can, look at my problem and help me..

So here is my problem:

I'm making a project with 6 servos (3 used to actuate the MKII robotic claw from DAGU and 3 used to rotate those claws). The problem is my servos are damaging and I don't know why (till now I have 4 "dead" servos - 3 because of gears and 1 because of the controller circuit).

To help you see the big picture:

  #include <Servo.h>
  int citire = 0; 
  boolean flag = true;
  long elapsed_time = 0;      // for millis
  long previousMillis = 0;
  long previousMillis2 = 0;
  long servointerval = 15;
  long interval = 500;
  int pos = 0;               //for millis

  Servo left_r;  
  Servo down_r;  
  Servo right_r; 
  
  Servo left_p; 
  Servo down_p;  
  Servo right_p;

void for_delay() {
     unsigned long Starttimer=millis();      //starts 0.5 seconds delay timer
         do {
            unsigned long current_time = millis();
            elapsed_time = current_time - Starttimer;
            }
            while(elapsed_time < interval);      //leaves loop 0.5 seconds has passed
  }
    
  void setup() {
    left_r.attach(3);
  down_r.attach(5);
  right_r.attach(6);
  
  left_p.attach(9);
  down_p.attach(10);
  right_p.attach(11);
  
  // Start Position
  left_r.write(35);
  down_r.write(35);
  right_r.write(35);
  
  left_p.write(160);
  down_p.write(150);
  right_p.write(150);
  
  for_delay();
  
  left_p.detach();
  down_p.detach();
  right_p.detach();
  left_r.detach();
  down_r.detach();
  right_r.detach();
  }
  
  void loop() {
    while(Serial.available()){
   citire = Serial.read();
  //ROTATIE
    //left_r
       if(citire == 97){        //a
         left_r.attach(3);;
         if(flag){
            left_r.write(35);
            for_delay();
            flag = false;
          }else{
            left_r.write(125);
            for_delay();
            flag = true;
          }
       }
    }
  }

I am thinking that maybe I should use a resistor in line with the regulator that powers the servo to be sure my voltage is under 6V.
Or maybe there is a problem with my code, should I use this instead?:

for(pos = 0; pos < 60; pos+=60) {      //opens the arm 60 degrees
       unsigned long servoMillis = millis();
      if(servoMillis - previousMillis > servointerval)  //created to delay 15 milliseconds before next pulse
        {
         previousMillis = servoMillis;
         myservo.write(pos);      //moves 5 degrees every 15 milliseconds
        }
     
     }

I hope you understand my problem and you can help me.

Thanks a lot!

later edit:

  • the servos I use are: TowerPro MG995 and DGSERVO S05NF STD - both datasheets said they accept voltage between 4.8 and 6V
  • the second code is not mine, I found it here, on the forum

Maybe you're running them past their extremes, too far one way or the other?
Some are tolerant of that, others not so much.
Have you done with servos before or is this some hodge-podge of code and components that you hoped would work?

They go for a while and poop? They poop right away?
Maybe you're trying to do too much work and wrecking them?

No resistor will help,
7.5V might be just enough to get 6V out, but even if it was not there would be no damage.

Why won't people sketch out what they are doing, post meaningful photos of their setups and so on?

First, thanks for replying Runaway Pancake!

Sorry for not talking more about what I'm doing, I just wanted to be short thinking that maybe people won't have enough time to read all my story.

I'm making a robot that should solve the Rubik's cube, now it's the first step and I want just to manipulate it. I will present it at faculty as my final project for bachelor degree (only the manipulation part I think).

To answer to your questions:

No, they don't reach their mechanical limit, I use them to rotate only for 90 degrees (aprox) and I'm using an interval that is not close to the limit.
I worked with servos before, but not very much, nothing so complex...about the code, it worked ok till now (in my other projects), but I was using delay, now I'm using millis as I need some switches to be read by the program all the time. Also, it's the first time I'm using detach command...I read that it "disables" the Arduino pin and it won't give any command to the servo and that's why I'm using it (before using it, the servo for the robotic claw was buzzing, probably because it didn't reach its position).

The ones that were damaged worked fine for some time and they just "die" and won't answer to my commands. The one with the command problem is moving when I just give it some voltage, but it's not answering to my commands. The ones with the gears problems (I opened 2 of them) have one gear damaged (the same gear - the shape is not as it should be). That's why I really don't know what is not ok. Probably somehow I'm "killing" them in time, but I don't know why (maybe the code?!).

I'm refusing to say that I'm so unlucky to buy 4 bad servos (3 were new for sure) so for sure I'm doing something wrong. And it's best to see what is wrong before destroying another servo...

The load is not big at all, for the MG995 is only the robotic claw+a servo+rubik cube (for sure it's under 1 kg).

Sorry but I don't have a picture for now, I could post a picture of 3D model though.

Thanks!

later edit: I forgot, maybe it will help in diagnostic,: my Arduino Uno board is reseting from time to time when connected to my USB...I really don't know why...

Probably somehow I'm "killing" them in time, but I don't know why (maybe the code?!).

You can not kill a servo's gears by anything you can do with code.
It sounds to me lake this is a case of mechanical over load.

Grumpy_Mike:

Probably somehow I'm "killing" them in time, but I don't know why (maybe the code?!).

You can not kill a servo's gears by anything you can do with code.
It sounds to me lake this is a case of mechanical over load.

I was thinking that maybe somehow the gears are damaged because the stress on them is too big (resulting from the command - maybe there are some shocks).
The gears are made of metal and in datasheet says they should be capable of a 3.2kg-cm torque. I just close the claw, not compress the cube, than detach the servo. The claw also have a clutch with a spring inside..

Do you allow some time to pass before you are sending a new position (in the other than the most recent travel direction) ?
I can imagine some damage could be done if you are moving the servo back and forth, while it is still moving, and under load.

Running servos at high voltages introduces the possibility of gear damage if the servo gets jammed up or is overloaded. The arduino resetting is usually caused by an inadequate power supply or powering the servos and arduino from the same power source. I would suspect the servos are being overloaded causing them to draw high levels of current and ultimate gear damage, and possible low voltage arduino reset.

Hi, checkout this review..

Tom.....nuff said.... :slight_smile:

Thanks all for the response!

zoomkat:
... The arduino resetting is usually caused by an inadequate power supply or powering the servos and arduino from the same power source. ..

Arduino power supply is the same with my servos power supply, but the power supply is capable of a voltage of 7,5V and a 100W power. And it's resetting when no servo move, just waiting for commands. So the power supply is for a Arduino, a Raspberry PI, 6 servos, 3 LEDs and 3 buttons. I calculated and measured and it's necessary a power of 63W for all these components..

zoomkat:
Running servos at high voltages introduces the possibility of gear damage if the servo gets jammed up or is overloaded.

Before the "dead" of my servos, I had some problems with them because they were moving back and front, continuously (I had no delay in my program). Once I introduced the delay, and after that the millis, they worked just fine.

Also, I just implemented the detach command in my program, before there was for sure a problem with drawing high levels of current because I didn't know how to use them with the robotic claw. I need the claw to be closed in some moments, holding the Rubik's cube and I just set a value for the servo that made possible holding the cube (by squeezing it). But I realized it's not ok to use them this way and I found out that I can use detach and the servo will keep it's position. Now, I'm not squeezing the cube, I just close the claw and than detach the servo.

I have to say that after implementing this solution, with the detach command, the servos were fine and worked ok. For 2 days.

About the MG995, thank you TomGeorge, I'm starting to think there is only my bad luck.

But here, with the servos for robotic claw...I'm not so sure now I'm not overloading them somehow..

Hi, the ideal solution would be haptic feedback, but that would complicate the programming as well as the hardware.
Lucky that the cube is of fixed symmetrical design so clamping spacing is fixed.

Tom...... :slight_smile:

The robotic claw has a spring-loaded clutch...I really thought it is enough, but seems it is not :disappointed_relieved:

Look here: nicegear.co.nz
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Robotics/MKIIroboticclaw.pdf

Given the simple shape of a rubik cube it should be possible to design a clamp that is the right size and doesn't need any force from the servo to grip the cube.

Also if you design the right sort of mechanical linkage the holding force will be taken by the servo bearings and won't require any motor torque. For example if the force, when closed, is in a straight line through the servo arm axis.

...R

Robin2:
Given the simple shape of a rubik cube it should be possible to design a clamp that is the right size and doesn't need any force from the servo to grip the cube.

Also if you design the right sort of mechanical linkage the holding force will be taken by the servo bearings and won't require any motor torque. For example if the force, when closed, is in a straight line through the servo arm axis.

...R

Thanks for the reply!

Right now I'm using the claw that I've posted before, the cube fits ok on it, and for more adherence between the cube and claw I put some silicon rubber on the clamping area. The holding force is from the spring inside the claw (or that's what I hope). Considering that I use the detach command, I think I'm not using torque from the motor to hold the cube. The spring also should protect my motor, or?..

I just opened my bad servos, seems like not only the gears are damaged, but also the controller circuit (I tried to move the motor without the gears using the arduino and it's not moving, but the motor is working when I'm connecting it to the power source.

So from what I've read the only servo that gets damaged is the one that activates the "Claw" part of the robotic arm?

How are you wiring up your regulators? Did you just wire them up with no capacitors?

For that regulator the Min input voltage is 8.0 . Maybe just a couple of inline diodes(with the proper amp rating) to drop it down would suffice.

As for the resistor idea I have played around with that and for my servo it ran OK and with a 20 ohm at 5 volt it drew .1 amp when I kept it from moving and it still had some pretty good holding force.

justone:
So from what I've read the only servo that gets damaged is the one that activates the "Claw" part of the robotic arm?

How are you wiring up your regulators? Did you just wire them up with no capacitors?

There are 3 servos that activates the claw that got damaged and only one that is used to rotate the claw (this is an MG995, that I understand is not very qualitative).

Yes, I just wire them, no capacitors, no resistor..

Should I try to use a regulator of 5V and 3A, instead of the one I'm using now (6V and 1.5A)?

Tomorrow the new servos should come and I have to use them and finish my code...I hope I won't damage them too..

If the new servos are the same type as the old ones they will get damaged just the same.
While using regulators with no capacitors is just plain stupid, their absence will not damage gears. That ONLY happens when there is too much load.

Grumpy_Mike:
That ONLY happens when there is too much load.

There was a lot of load when I was squeezing the cube continuously, but the servos didn't died than (1 week ago).
Now, the load is for sure much smaller, is it possible to see now the the bad results of the load that I put on them before? I'm asking from electrical point of view mostly (as I said, the controlling circuit is also damaged), because about the gears, for sure there was a lot of stress there and the gears might be deformed because of this.

Thanks!

Tomorrow the new servos should come and I have to use them and finish my code...I hope I won't damage them too..

The size of the cube that is being handled isn't going to change, so better to add to the gripper to ease the stress on the gripper servo. I'd add cushion to the gripper face to allow better gripping with less force. Hot glue a flat piece of craft stick or similar to the gripper gripping surface, then stick a layer of foam or soft sponge to the flat piece just attached. This should allow the cube to be handled with much less stress on the gripper servo.

zoomkat:

Tomorrow the new servos should come and I have to use them and finish my code...I hope I won't damage them too..

The size of the cube that is being handled isn't going to change, so better to add to the gripper to ease the stress on the gripper servo. I'd add cushion to the gripper face to allow better gripping with less force. Hot glue a flat piece of craft stick or similar to the gripper gripping surface, then stick a layer of foam or soft sponge to the flat piece just attached. This should allow the cube to be handled with much less stress on the gripper servo.

Thanks for the advice!

Right now, I have some silicon rubber on the gripper's gripping surface. It's kind of soft and also helps me with adherence, so that the cube don't slide down from the gripper..