Hola, gracias por las respuestas.
Yo sé que casi con toda seguridad se solucionará todo haciendo lo indicado por chocala, sin embargo lo que verdaderamente me gustaría es que alguien supiese qué es lo que está pasando, si se trata de picos que afectan a arduino, corriente de retroceso, lo que sea, y así poder pensar si se solucionaría fácilmente con condensador, diodo y demás. No para usar el servo de ese modo, sino para entender lo que ocurre y saber como se soluciona, aunque finalmente use alimentación externa.
También decir, como curiosidad que en una de las primeras pruebas, alimentando por usb, el portatil que usaba dió un pantallazo azul y creo que no fue simple casualidad

.
El código como digo, he usado primeramente el ejemplo Knob:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
pinMode(potpin, INPUT); // declare the ledPin as as OUTPUT
myservo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600);
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(100); // waits for the servo to get there
Serial.println(val);
}
Tiene añadido un muestreo por serial, cada 100ms, que llegado un momento el servo deja de funcionar y el muestreo por serial va "a toda leche" como si el delay no existiese.
Ahora estoy usando un ejemplo para recorrer el servo en las dos direcciones de manera secuencial y cíclica, también muy sencillo:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
pinMode(potpin, INPUT); // declare the ledPin as as OUTPUT
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(int i=0; i<179; i++){
myservo.write(i);
delay(50);
i+=2;
}
for(int i=179; i>0; i--){
myservo.write(i);
delay(50);
i-=2;
}
}
Que como dije, llega un momento que el servo no funciona y probablemente sea porque de nuevo el delay no es respetado y sabemos que necesita de cierto delay para actualizar la posición del servo.
¿No os intriga tanto como a mi? jejej