How to determine minimum and maximum angle for cheap servos? 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?
I think you have 2 choices: either measure and store for each one individually, or find the worst case for all of them and code around that.

Do you really need the full travel? If you're using the servo to push/pull, the servo-travel endpoints are pretty weak anyway.


  I wanted a robot look left and look right, which is 0° or 180°.


Maybe you can make up the limited angular travel of the servo in the linkage between the it and the camera platform.