AnalogRead ballerina

ciao a tutti.
sto cercando di leggere con Arduino Uno la tensione di una batteria da 12V, ma ottengo dei valori ballerini di circa mezzo volt... è normale?
ho provato anche a fare la media su 25 letture, ma anche la media continua a ballare...

uso un partitore di tensione con R1=4.7K e R2=2.2K

questo il codice (metto solo la parte di lettura e conversione... tralascio la parte del display perché allungherebbe troppo)

void loop() {

  // leggo la tensione della batteria dal relativo pin
  tensione = 0;
  for (i=0;i<numLetture;i++) {
    tensione += analogRead(pinTensione);
    delay(2);
  }
  // trovo la media delle letture
  tensione /= numLetture;
  
  // ho un valore tra 0 e 1023 - lo converto in un valore tra 0 e 5V
  tensione = tensione * 5 / 1023;
  // adesso converto la tensione in base al rapporto del partitore
  tensione /= 0.3188;
  // mi serve un numero intero a 4 cifre da visualizzare sul display
  // le prime 2 sono la parte intera, le ultime 2 i decimali
  // moltiplico per 100 per tenere le prime 2 cifre decimali
  tensione *= 100;

  VisualizzaNumero(int(tensione));

}

sbaglio qualcosa? si può avere un valore stabile?
grazie in anticipo

mi rispondo da solo... stavo alimentando arduino con l'usb... ho provato con un alimentatore esterno è adesso le letture sono stabili...

Nella impostazione standart la tensione di riferimento per il ADC é la tensione di alimentazione. Se quella cambia cambia anche la conversione analogica.

Rimedi (oltre ad avere una tensione di alimentazioen stabile)
Usare i 3,3 V di Arduino come tensione di riferimento oppure i 1,1V di riferimento interne. In entrambi i casi devi dimensionare il partitore di tensione in modo che da una tensione adatta per la tensione di riferimento scelta.

Ciao Uwe

Grazie mille per il chiarimento.