Go Down

Topic: Servo question (Read 2117 times) previous topic - next topic

Arudino1901

I am using SM-S2309S servo. The specs says the angle is +/- 60, does this mean this only rotates 120 degrees?

I'm following the beginner Arduino project book, project 5 (mood cue). The code says 179 degrees but, it is less than 179 when rotating to the extremes of both left and right. The manual says the servo should rotate 180 degrees, but, it look much less than 180, and more than 120.

I coded for 360 degrees and it still rotates less than 180, but more than 120. The serial monitor still shows the extremes of 360. Please explain how the servo works and the serial monitor report because it doesn't make sense.

TomGeorge

Hi, I agree, the specs say +/-60deg,  so 120deg instead of usual 180deg span for most servos.

Tom..... :)
Everything runs on smoke, let the smoke out, it stops running....

JimboZA

The 60 is likely to be "nominal" and so it might not be exactly 120 from side-to-side; assuming of course that's what the +-60 actually means.

Servos don't actually report where they got to: if you tell it 360 it will only go as far as it physically can. Your monitor is simply reporting the value you sent to the servo with servo.write(), and it's not necessarily where the servo actually is.
Johannesburg hams call me: ZS6JMB on Highveld rep 145.7875 (-600 & 88.5 tone)
Dr Perry Cox: "Help me to help you, help me to help you...."
Your answer may already be here: https://forum.arduino.cc/index.php?topic=384198.0

Wyldhunt

Servos are basically just small motors with a potentiometer and a small control circuit. The potentiometer info is processed to determine the current position of the motor, and its position is adjusted based upon user input. The programming input that we send to the servo is generic and could have been anything. The choice to use 360 degrees seems like an odd choice to me, but it works.
What you are actually doing is sending a signal to the control circuit inside the servo and telling it to turn the motor as needed until the potentiometer reads a precise value. The lowest reading that the pot can read will generally be the farthest counter clockwise rotation of the servo. The highest reading of the pot will be the max rotation clockwise.
Because your signal is actually telling the servo to adjust the location of the pot, the max and min position of the servo shaft is dependent upon the gear ratio that connects the motor shaft to the pot.

That means that the min/max rotation of a servo can be almost anything. When you input the code for 360, you are just telling it to adjust the internal potentiometer to its max setting.

JimboZA

And while on the subject, don't confuse with continuous "servos" which whizz round like normal DC motors. In that case, the "angle" you send is actually the speed. An angle of 90 is stationary, 0 is full speed one way, and 180 is full speed the other.

And lastly, some servos do give external feedback so you know if they arrived at their destination. In most, the feedback is purely internal and we never get to see it.

Adafruit has one with feedback here
Johannesburg hams call me: ZS6JMB on Highveld rep 145.7875 (-600 & 88.5 tone)
Dr Perry Cox: "Help me to help you, help me to help you...."
Your answer may already be here: https://forum.arduino.cc/index.php?topic=384198.0

Go Up