0 position moves with time

The zero position of a servo arm is determined by a potentiometer connected to the arm, through the output shaft. In most hobby servos, the zero position is screwdriver-adjustable via a small hole in the output arm, through the arm shaft.

It could be that that position has slipped with respect to the arm, so try readjusting. If the potentiometer screw seems loose or very easy to turn, the servo could be defective.

By the way, never try to power a motor or servo from the Arduino. Use a separate power supply (4xAA battery pack works well) and connect the grounds.