I have some cheap KY66 (seems to be SG90 clone) servos.
When I turn them to 0°, the servo tries moving and moving, without actually getting to 0°. I read that they are reaching the endpoint but the built-in potentiometer does give a reading of 0.
By changing the code and fiddling with the angle, I find that the minimum for one particular servo is 25°.
I'm now trying to figure out how the Arduino could determine this value automatically. I have tried
servo.write(0);
delay(3000);
int direction = servo.read();
and expected to get back a value near 25, but it was 0 instead. So the result of read()
does not seem to be an actual reading, but more the "last known" setpoint.
I've also tried to relax the servo before reading:
servo.write(0);
delay(3000);
int direction = servo.read();
with no better result.
I like to figure out the minimum and maximum angle of the servo
- because I don't like the servo to make much noise (it really doesn't sound healthy)
- without having the user to figure out by himself and the need of re-programming the Arduino.
I know that these cheap servos only have 3 pins. 2 pins are for power supply only, so there's only 1 pin left.
My questions:
- Is the data pin uni-directional (PWM output from Arduino to servo)?
- Will it ever be possible to implement what I want without additional hardware?
- How do people solve this issue? Do more expensive servos either have better calibration to actually go from 0° to 180° or do they provide a way to read the potentiometer with another pin?