Community Forum Share your projects and post your questions

Register or Sign In

Trying to use the Servo Class from the library

49 Views - Created 35 days ago

35 days ago

Posted by:
cravengarden

Users 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!!!

34 days ago

Posted by:
andrew

Users Avatar

Location:
United Kingdom

Users Twitter  Users Website  

Hi

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.

AB Electronics UK Tech Support

34 days ago

Posted by:
cravengarden

Users Avatar

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

33 days ago

Posted by:
cravengarden

Users Avatar

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

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.