Problema con posiciones erróneas en servomotores

Hola, necesito ayuda con un problema que me está presentando mi proyecto y no entiendo el porqué sucede y el cómo solucionarlo. Mi proyecto es un robot humanoide, utilizo Arduino UNO y el módulo PCA9685, ya que mi humanoide cuenta con 17 servos (FutabaS3003).

Lo que sucede es lo siguiente, hago la programación para que el se quede parado, después de haber hecho esto, supongamos que terminé de trabajar, pues desconecto Arduino y la alimentación. Que pasa que cuando vuelvo a querer volver a trabajar con los movimientos, sucede que el robot no coge las posiciones que les di anteriormente, incluso con el mismo programa y sin hacer ningún cambio estos se quedan posicionados en otro ángulo, me ha pasado ya 3 veces y quiero saber cómo solucionar esto ya que así no puedo avanzar porque tengo que volver hacia atrás.

Ojo: vuelvo y compilo el programa y lo subo ha Arduino y sigue con la posición ''erronea''

Por favor debes leer las normas del foro ya que tu hilo acaba de ser movido del foro en ingles por haber escrito en español.
Si escribes en español lo haces en el foro en Español. Simple.
Edita tu título. Retira la palabra AYUDA del mismo.
Te dejo como hacerlo por privado

Hola, estoy trabajando en un proyecto de feria de mi instituto. Es un robot humanoide de 17 servomotores, estoy utilizando Arduino UNO y el mudulo PCA9865.

El problema es el siguiente, cuando estoy programando todo va bien, las posiciones responden bien, pero el problema viene cuando ya dejó de trabajar con el robot y desconectó y lo guardo. Cuando vuelvo a conectar todo para continuar con la programación de la secuencia que quiero lograr, pues las posiciones no cogen el ángulo en qué estaba la otra vez, y vuelvo y subo el programa a Arduino y sigue con esa posición diferente, es como si el ángulo 50 cambiara y no es el mismo que el de la otra vez.

Con el robot lo que quiero lograr es una secuencia de movimientos para hacer una demostración de éste, ya sea que camine y salude, etc.

El código que utilizo es este.
Nota: es solo un ejemplo

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(0x40);

unsigned int pos0=172; // ancho de pulso en cuentas para pocicion 0°
unsigned int pos180=565; // ancho de pulso en cuentas para la pocicion 180°

void setup() {
servos.begin();
servos.setPWMFreq(60); //Frecuecia PWM de 60Hz o T=16,66ms
}

void setServo(uint8_t n_servo, int angulo) {
int duty;
duty=map(angulo,0,180,pos0, pos180);
servos.setPWM(n_servo, 0, duty);
}

void loop() {

setServo(0,30);
setServo(2,90);
setServo(4,180);
setServo(6,120);
setServo(8,0);
setServo(10,30);
setServo(12,90);
setServo(14,170);
delay(1000);
setServo(1,30);
setServo(3,90);
setServo(5,180);
setServo(7,120);
setServo(9,30);
setServo(11,90);
setServo(13,180);
setServo(15,120);
delay(1000);
setServo(0,120);
setServo(2,180);
setServo(4,90);
setServo(6,60);
setServo(8,45);
setServo(10,160);
setServo(12,170);
setServo(14,30);
delay(1000);
setServo(1,120);
setServo(3,0);
setServo(5,90);
setServo(7,60);
setServo(9,120);
setServo(11,180);
setServo(13,0);
setServo(15,30);
delay(1000);

}

Calibraste tus servos ?

SERVOMIN y SERVOMAX. Todos usan la misma calibración ?