Hi all,
I've just converted a servo to continuous rotation but now have a small issue I cannot correct.
When the servo is initially powered it rotates a few degrees. The Non continuous rotation servo does this but instantly returns to the position sent by the arduino.
Does anyone have any suggestions to prevent this? or return the servo to the same starting points?
This servo is to be used to open a vertical door by rolling string onto a spindle (and vice versa to close). If it loses power a few times the rotation is enough to cause too much slack in the string.
I used the below to test the servo detach function. You can load the code and see if the servo still moves when the arduino is restarted. There have been previous post on servo twitching, possibly some during the arduino startup.
// zoomkat 9-11-12 serial servo detach test
// type servo position in serial monitor
// use writeMicroseconds >500 to control servo
// use writeMicroseconds <500 to detach servo
// 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(2000); //set initial servo position if desired
//myservo.attach(7); //the pin for the servo control
Serial.println("servo-detach-test"); // 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); // 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();
if (n < 500) {
myservo.detach();
}
else {
myservo.attach(7);
myservo.writeMicroseconds(n); //convert readString to number for servo
}
readString=""; //empty for next input
}
}
It seems to only move when initially powered - resetting the arduino causes no movement, disconnecting the servo power does.
I have read reviews that state this servo overshoots slightly (a few degrees), I see this on the non modified ones - it moves back to the target position fairly quickly.
It does seem to move counter clockwise a set amount each time its powered up so I could compensate and move it back if the arduino has a power loss event.
I guess it's time for a new servo, or probably a motor which would be more applicable to this application I'm assuming.
It does seem to move counter clockwise a set amount each time its powered up so I could compensate and move it back if the arduino has a power loss event.
What is the power source of the servo? if you are powering the servo from the arduino, that could be the problem.
Hi, I am trying to let the digital servo motor to rotate from 0-170 degree and then stop. How can I do that? Could you help?
Also I have a digital servo LS-8101F. It says the speed of the servo can be controlled. Can it be controlled with arduino?
Many thanks.
The servo is powered via an external source (5v rectified) - It does seem to be the servo itself - if it's connected directly to a 5v power source it behaves in the same way.
I will switch to using a motor for this project.
The motor in the servo is controlled by an H-Bridge. When power is applied the both halves of the H-Bridge do not power up the same and for an instance it drives the motor slightly. You could configure it with some sort of home switch and use that to verify position. A continuous rotation servo has no position control, only speed/direction control. If you want to control hte position you will need to add some extra switches to be able to have any control over position. How many turns does it have to make to open the device? you could modify the continuous rotation servo to use a 10 turn pot for feedback and then have a 10 turn servo (or other number depending on gear ratio)
The present behaviour is just how servos work. It is not the result of any external signal, it is a result of the power being turned on.
If you want position and speed control you might consider using a stepper motor. You will need a driver.