variaciones en la senyal del potenciometro al servo

gracias flico por la rapida respuesta. te cuento:

he hecho lo que me has propuesto:

// Controlling a servo position using a potentiometer (variable resistor) 
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
 
int potpin = 1;  // analog pin used to connect the potentiometer
int i,val;    // variable to read the value from the analog pin 
int n=10;
int vector[10];
int valmedio;
int opcion;
int valanterior;
double difper;

void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
   Serial.begin(9600);   // abrimos el puerto serie a 9600 bps
   opcion = 0;
} 
 
 
void loop() 
{ 
  
  if (opcion == 0)//------------------------------------------------------------------------
  {
      val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
      Serial.print("\nValor del potenciometro antes de escalar = ");
        Serial.print(val);
          Serial.print("\n");
      val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  }//------------------------------------------------------------------------------------

  if(opcion == 1)//---------------------------------------------------------------------- 
  {
  
      //mediante un bucle cogemos 10 valores i hacemos la media para evitar fluctuaciones
      for(i=0;i<n-1;i++)
      {
        val=analogRead(potpin);
        val=map(val,0,1023,0,179);
        vector[i]=val;
        Serial.print("\nValor n");
        Serial.print(i);
        Serial.print(" = ");
        Serial.print(val);

      }
      
      //calculamos el valor medio del vector
      for(i=0;i<n-1;i++)
      {
        valmedio=valmedio+vector[i];
      }
      valmedio=valmedio/n;
      val=valmedio;
  }//---------------------------------------------------------------------------------------
  
  Serial.print("\nValor anterior =");
  Serial.print(valanterior);
  
  Serial.print("     dif ABS =");
  Serial.print(valanterior-val);
  
  difper= ((valanterior-val)*100/180);
  Serial.print("     dif % = ");
  Serial.print(difper);
  
  
  valanterior = val;
  Serial.print("\nValor enviado al servo =");
  Serial.print(val);
  
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(1000);                           // waits for the servo to get there 
}

y he sacado varias conclusiones:

1.al enviar al servo un valor promedio ha mejorado, ya que si lo envio directamente sin hacer el valor promedio me da una variacion porcentual alrededor de 16%

y al enviar el valor promedio de 10 valores, la variacion porcentual es alrededor de 3% pero puntualmente puede augmentar mucho.

he comprovado que esto solo me ocurre cuando alimento el circuito del servo i el potenciometro con una alimentacion externa a la que me ofrece la placa arduino (que la tengo alimentada directamente del USB y Las masas del arduino y de la alimentacion externa estan conectadas)

He probado con un alimentador que me da 7v y con unas pilas que me dan unos 5 voltios.

Me gustaria saber a que es debido este efecto, me he quedado en blanco, ya no se que probar.

gracias

PD: queria poner una imagen de los resultados que me da el serial monitor, pero no consigo hacerlo, no se si es un problemapor que estoy usando ubuntu...