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...