Servo motor troubleshooting

Good day everyone,

I got a servo motor that i will use in my future project. I tried servo sweep example in arduino.
now after the necessary connections, i run the program. The result is not satisfying.
the servo motor turns a full rotation clockwise 5 times then it turns 1 (450degrees) counterclockwise.

The servo sweep program meant to make the servo to rotate 180degrees back and forth motion, similar to a car’s windshield wiper.

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.


#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() 
{ 
  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' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  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' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
}

Connections:
servo motor has 3 wires, for power i connect it to 5v and ground pins of arduino board.
and the output wire to pin 9 of arduino board.

What might be the problem?
Should I power up the servo motor to a external power 6v?
Or worst, I got a defective servo motor.

Seems that what you have there isn’t a pure servo, but a continuous rotation servo. On one of those, the value you send isn’t degrees anymore, but a direction and speed. ~90 is stationary, values <90 are one direction and >90 the other. 0 and 180 are full speed.

Thanks for the reply, I’m just new to servo application. But to clarify about the servo i used here’s the link.
http://www.e-gizmo.com/PRODUCT/servo%20motors.pdf

In the link the blue servo is the one i used.

As far as I know that's a "normal" servo, not a "continuous" one, but maybe its been modified?

And as a matter of principle, you should use a separate power supply for a servo and not power it off the Arduino. Just make sure you tie all the grounds together.

Servo test code that might identify how your servo operates.

// zoomkat 12-25-13 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// Send an a to attach servo or d to detach servo
// for IDE 1.0.5 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

#include <Servo.h> 
String readString; //String captured from serial port
Servo myservo;  // create servo object to control a servo 
int n; //value to write to servo

void setup() {
  Serial.begin(9600);
  myservo.writeMicroseconds(1500); //set initial servo position if desired
  myservo.attach(7, 500, 2500);  //the pin for the servo control, and range if desired
  Serial.println("servo all-in-one test code 12-25-13"); // so I can keep track of what is loaded
  Serial.println();
}

void loop() {
  while (Serial.available()) {
    char c = Serial.read();  //gets one byte from serial buffer
    readString += c; //makes the string readString
    delay(2);  //slow looping to allow buffer to fill with next character
  }

  if (readString.length() >0) {
    Serial.println(readString);  //so you can see the captured string 

      // attach or detach servo if desired
    if (readString == "d") { 
      myservo.detach(); //detach servo
      Serial.println("servo detached");
      goto bailout; //jump over writing to servo
    }
    if (readString == "a") {
      myservo.attach(7); //reattach servo to pin 7
      Serial.println("servo attached");
      goto bailout;
    }    

    n = readString.toInt();  //convert readString into a number

    // auto select appropriate value
    if(n >= 500)
    {
      Serial.print("writing Microseconds: ");
      Serial.println(n);
      myservo.writeMicroseconds(n);
    }
    else
    {   
      Serial.print("writing Angle: ");
      Serial.println(n);
      myservo.write(n); 
    }

bailout: //reenter code loop
    Serial.print("Last servo command position: ");    
    Serial.println(myservo.read());
    Serial.println();
    readString=""; //empty for next input
  }
}