Servo modification

Hi!

I have lots of this servos : http://www.ebay.com/itm/6x-MYSTERY-9g-Mini-Micro-A-Servo-RC-plane-helicopter-/270900204856?pt=Radio_Control_Parts_Accessories&hash=item3f12e91538

and i want make modification that servo can continuous rotate. I managed to modify servo but every time when i send the command to stop servo (servo.write(90);), servo every one second make a small turn, so my modification didnt work 100 %.

Then i found tutorial for continuous rotate that use 2 resistors and one wire instead of potentiometer and this work like a charm, but this mod is for other type of servos.

My question is: Can i use 2 resistor and one wire on my mini servos? Or will be damaged?

Thanks in advance.

A common problem with servos modified for continuous rotation is they have to
be specifically calibrated so they stop moving when you send 1500-usec pulses.
This entails carefully adjusting the internal pot, however the pot resistances
tend to drift a little with time and temperature.

Short of going to carefully selected resistor values, 2 other things to try are:

  1. find the pulsewidth that exactly stops the servo, and use that for your neutral
    value [may have to be readjusted over time].
  2. turn off the control pulses when you want the servo to stop.

I find #1 actually works fairly well for my robot servo tank.

You will need to use writeMicroseconds to be able to accurately get the servo to stop. Below is some test code you can try to setup the pot on your servo.

// zoomkat 10-22-11 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// for IDE 0022 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

String readString;
#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 

void setup() {
  Serial.begin(9600);
  myservo.writeMicroseconds(1500); //set initial servo position if desired
  myservo.attach(7);  //the pin for the servo control 
  Serial.println("servo-test-22-dual-input"); // so I can keep track of what is loaded
}

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 
    int n = readString.toInt();  //convert readString into a number

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

    readString=""; //empty for next input
  } 
}

Thank you for answers guys

my problem is solved :slight_smile: