servo motor draws too much current and not working

Hi all,

I have LF 20 mg servo motor.I am externally powering servo motor and i connected both arduino and servo motor with common ground.Also powering arduino from another source.I am powering servo motor with 6.6v.But when i connect to servo motor to circuit.My power supply current goes 2.5 amperes.Also servo getting really hot.
Also when i attach to servo first it starts to rotating to end of it and eventually stops working.According to my code it has to sweep.
So far i tried these;

*connecting capacitor to servo,
*adding 470 ohm resistance to in series of signal pin of servo
*tried another servos(some of them worked but very slowly)
*i tried use adaptor to supply arduino
*Played delay of the code

here is my code;

#include <Servo.h>

Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created

int pos = 0; // variable to store the servo position

void setup()
{
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
Serial.print("Clockwise position: ");
Serial.println(pos);
delay(150); // waits 15ms for the servo to reach the position
}
delay(5000);
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
Serial.print("Counterclockwise position: ");
Serial.println(pos);
delay(150); // waits 15ms for the servo to reach the position
}
delay(5000);
}

im attaching some photos about my circuit
Please help me
Kind regards

For a high powered servo like that 2.5A doesn't seem completely unreasonable. So you will have more chance of it working properly if you connect the power directly to the servo NOT through alligator clips and a breadboard, neither of which are suitable for those currents.

Steve

Also servo getting really hot

Do you have anything attached to the servo arm? If you only have the servo arm moving, the servo should not get hot.
I would suspect that it is jammed and is stalled trying to get to the start position.

when i attach to servo first it starts to rotating to end of it and eventually stops working.

This also sounds bad.

*tried another servos(some of them worked but very slowly)

Help me with some more info on this one.
You took out the (possibly) malfunctioning servo.
You put in a different servo.
You got expected results - sometimes ?
What do you mean by some of them work?
What do you mean by slowly?
This could be just a timing issue. Try changing the value of your delay inside the loop. You are currently using delay(150). (although oddly, your comment refers to 15)
Try a lower number there. Maybe even 15.

I tried what you said.It is still not working.can it be related to signal pin because.When i powered the motor
It slowly turns clockvise and when it reaches its limit it stops and getting hot.I also tried this at mg 996 r servo which needs low power to operate.They usually draws 0.5 ampere but in this unusual situation mg 996 r also draws 2.5 current and also voltage drops to 2.5 volt and i cannot increase it.
Thanks for replying

Dear @vinceherman,
*I did not attach anything on the servo, i dont force to do partcular job for now,
*I had 5 servos 1 is lf 20 mg-other 4 of them are mg 996r. 2 OF MG 996 R have the same issues as lf 20 mg) . 1 of them is working really really slow and it was jittering a little bit but it sweeps.Last one is working nice.That is why i said sometimes cause i had 5 servos to try
*I also tried with 15 second delay that is why it is written 15 at the comment section.
I also suspect servos are broken

Thank u so much

Try this test sketch with each of your motors, start at the center (90) degrees and work gradually toward the ends, watching for jams.

/*
 Try this test sketch with the Servo library to see how your
 servo responds to different settings, type a position
 (0 to 180) or if you type a number greater than 200 it will be
 interpreted as microseconds(544 to 2400), in the top of serial
 monitor and hit [ENTER], start at 90 (or 1472) and work your
 way toward zero (544) 5 degrees (or 50 micros) at a time, then
 toward 180 (2400). 
*/
#include <Servo.h>
Servo servo;

void setup() {
  // initialize serial:
  Serial.begin(9600); //set serial monitor baud rate to match
  servo.write(90);
  servo.attach(9);
  prntIt();
}

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int pos = Serial.parseInt();
    pos = constrain(pos, 0, 2400);
    servo.write(pos);
    prntIt();
  }
}
void prntIt()
{
  Serial.print("  degrees = "); 
  Serial.print(servo.read());
  Serial.print("\t");
  Serial.print("microseconds =  ");
  Serial.println(servo.readMicroseconds());
}