Support Forum

Share your projects and post your questions

Register   or   Sign In
The Forum

Trying to use the Servo Class from the library

1530 Views - Created 17/12/2018


Posted by:

cravengarden Avatar

I've returned to using the ServoPi after a couple of years, and really want to be able to set the degrees of the servo and then increment/decrement by degrees. I'mm having a lot of trouble doing it accurately with the PWM class. I've now tried to use the Servo class, but seem to be getting a lot of trouble (I think I'm just getting confused now) Could anybody point me to either a site, or some simple code just to get me started and backk on track? Any help would be appreciated!!!


Posted by:

andrew Avatar

United Kingdom

andrew Twitter  andrew Website  


Getting exact 1-degree precision is difficult with an RC servo using the Servo Pi as the PWM output is 12 bits precision which is not high enough to make it generate the correct number of steps to correspond exactly to 1-degree increments.

To make it as accurate as possible you can use the Servo class and make a few measurements with your servo.

First, adjust the low limit with the servo.set_low_limit(1.0) function.

servo.set_low_limit(1.0)servo.move(1, 0, 250)

Adjust the 1.0 value down in 0.1 increments until the servo stops moving, this will give you your lower limit. On some servos, you may find that it is above 1.0.

Next, adjust the high limit with servo.set_high_limit(2.0).

servo.set_high_limit(2.0)???????servo.move(1, 250, 250)

Adjust the 2.0 value up in the same way as you did with the low limit to find the upper position of the servo.

Once you have found the lower and upper limits you will need to measure the full range of motion in degrees using a protractor. Run the while loop below to make the servo move between its limits and hold the protractor above to measure its range.

while True:   servo.move(1, 0, 250)   time.sleep(1.0)   servo.move(1, 250, 250)   time.sleep(1.0)

Once you know what the full range of your servo is you can use that value as the number of steps in the servo.move function. For example, if your servo has a range of 180 degrees and you want to move to 90 degrees you could use the following command.

servo.move(1, 90, 180)

The servo.move function has to round the number to the nearest available position so it will not always move in exactly 1-degree increments but this should give you the closest accuracy you can get with the Servo Pi.


Posted by:

cravengarden Avatar

Thanks for this, I'll give it a try and let you know how I get on


Posted by:

cravengarden Avatar

I've now got this working well and it's much easier and accurate than PWM. Thanks for your help

Sign in to post your reply

Note: documents in Portable Document Format (PDF) require Adobe Acrobat Reader 5.0 or higher to view, download Adobe Acrobat Reader or other PDF reading software for your computer or mobile device.