Servo 360° and failed hack

Hi hi,

I just started using arduino and I already have problems (it goes together i guess). I need it for a specific project, I need a movement like 180°(left) - 0° (middle) - 180° (right), the thing I need to move is a bit heavy so I got a servo with metal gears (RCD-645mgb), after trying a lot of different codes (sweep, microseconds,etc) without any success (the movement is ok but not wide enough) I realised this servo could only go 120°. I found out it was possible to "hack" it (soldering resistors instead of the potentiometer and getting rid of the small piece that restrict the movement), i did but probably badly, I didn't have result with the resistors but when i connect another potentiometer i get a continuous rotation in one direction, regardless of the code I send to the board. I've decided to give up trying to fix something I don't have the knowledge to fix because I don't have time, so I think it's easier for now if I just get a new servo that can do the job without any modification. So my question is : where can I find such a servo ? How can I be sure it can go 360° ?

Thank you for reading and thanks in advance for advices!

Laura.

The below sail winch servo might do some of what you want. I think the 1.5PA means that the servo can be commanded to positions within 1.5 turns (you might need to check with HobbyKing).

Edit: be aware that servos generally do not work well when powered directly from the arduino.

http://www.hobbyking.com/hobbyking/store/__42638__Turnigy_TGY_4805_1_5PA_Sail_Winch_Servo_Drum_Type_.html

There does seem to be some misconception that RC servos do 180 degrees, they are designed for moving an arm that controls a wing or tail flap, so somewhere in the region 120 to 150 degree is commonly found.

Sail winch ones are I believe usually 3 or so turns, but again I'm sure each manufacturer does it slightly differently (as suggested above).

Thank you for your answers.

So, I got this sail winch that zoomkat sent, thank you.
I’m almost there but having another problem.
I understood that using the “write” fonction with a multi turn servo doesn’t control the position but the speed (and direction)

The movement I need is

180° right
-stop-
180° left
-stop-

(loop)

so I wrote :

#include <Servo.h>

Servo myservo;

void setup()
{
myservo.attach(9);
}

void loop()
{
myservo.write(0); // going left
delay(630);
myservo.write(90); // stop
delay(3000);
myservo.write(180); // going right
delay(630);
myservo.write(90); // stop
delay(3000);
}

The delay seems to correspond to the amount of time the movement will last, so with 630 i actually get what i need : it’s going 180° to the right but then instead of stopping there it’s going back to the initial position and then stops for 3000ms, then it’s going 180° left, directly going back to initial position and stops again for 3000ms.
What makes it go back to initial position instead of stopping where it is ? :confused:

Thanks

I haven’t tested a sail winch servo, but I would assume the full rotation control command range is 45-135 deg. You need to test your servo to find out. Below is some test code you can use to determine the operating characteristics of your servo.

// zoomkat 3-28-14 serial servo incremental test code
// using serial monitor type a character (s to increase or a 
// to decrease) and enter to change servo position 
// (two hands required, one for letter entry and one for enter key)
// use strings like 90x or 1500x for new servo position 
// for IDE 1.0.5 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

#include<Servo.h>
String readString;
Servo myservo;
int pos=1500; //~neutral value for continous rotation servo
//int pos=90;

void setup()
{
  myservo.attach(7, 400, 2600); //servo control pin, and range if desired
  Serial.begin(9600);
  Serial.println("serial servo incremental test code");
  Serial.println("type a character (s to increase or a to decrease)");
  Serial.println("and enter to change servo position");
  Serial.println("use strings like 90x or 1500x for new servo position");
  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) {
    if(readString.indexOf('x') >0) { 
      pos = readString.toInt();
    }

    if(readString =="a"){
      (pos=pos-1); //use larger numbers for larger increments
      if(pos<0) (pos=0); //prevent negative number
    }
    if (readString =="s"){
      (pos=pos+1);
    }

    if(pos >= 400) //determine servo write method
    {
      Serial.println(pos);
      myservo.writeMicroseconds(pos);
    }
    else
    {   
      Serial.println(pos);
      myservo.write(pos); 
    }
  }
  readString=""; //empty for next input
}