[SOLUCIONADO] Problema con servos

Estoy haciendo un pequeño robot y tengo un problema con los servos (se ponen en marcha nada más arrancar el programa). He probado a dejar solo lo básico:

#include <Servo.h>

Servo servoLeft;          // Define left servo
Servo servoRight;         // Define right servo

void setup() { 
 servoLeft.attach(10);  // Set left servo to digital pin 10
 servoRight.attach(9);  // Set right servo to digital pin 9
} 

void loop() {            // Loop through motion tests
}

Y aún así se ponen en marcha. En principio está bien conectado (cable blanco al 9 y 10 respectivamente). Rojo a + y Negro a - (fuente de alimentación externa).
¿Alguna idea?

Corre los ejemplos disponibles en la librería Servo de tu IDE.
Modifica los pines y luego nos dirás como se comportan.

Gracias, Surbyte. He probado a cargar solo un servo, con el sketch de ejemplo que hay en Arduino, lo he cambiado además al pin 5, pero se sigue poniendo en marcha nada más ejecutar la orden myservo.atach

#include <Servo.h>
Servo myservo;  // create servo object to control a servo
void setup() {
 myservo.attach(5);  // attaches the servo on pin 5 to the servo object
}
void loop() {
}

Lee los dos privados por favor.

Deja de postear códigos sin etiquetas, lee mi instructivo para editarlos.

Ok, perdón.

Bueno, que Servo usas. No he leído ese dato aún.

Son 2 Futaba S3003. Están 'tocados' para que puedan girar totalmente. Esta tarde cuando vuelva a casa voy a probar con otra placa de Arduino, a ver si pasa lo mismo.

Pues nada, esto me está volviendo loco.
Hoy he probado con otra placa de Arduino, he conectado solo un motor (cable rojo a +, negro a - y blanco a la salida 5, con pilas externas y negativos de las pilas y placa Arduino unidas).
He usado uno de los ejemplos de Arduino simplificado:

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(5);  
}

void loop() {   
  //myservo.write(50);                  
     delay (5000);               
}

Nada más conectarlo y ponerse el programa a andar, se pone en marcha en un sentido y si le quito las '//' del comentario para que funcione con myservo.write, entonces va en sentido contrario. Ya no sé que puede ser. Además he probado con el otro servo y pasa exactamente lo mismo. Si separo las masas, y no lo uno con la placa de Arduino, entonces no me funciona en ningún momento, ni con programa ni sin programa.
El problema parece ser en el momento del 'attach' y pone a girar directamente al revés. En algún foro he leido que problemas similares podrían ocurrir porque en el inicio el Servo tiende a buscar una posición concreta en función de los pulsos que se le envían y que están definidos en Servo.h (DEFAULT_PULSE_WIDTH), pero he probado a ponerle 0 en lugar de los 1500 que tiene por defecto y ocurre lo mismo. ¿qué os parece?

Buenas de nuevo. Me contesto a mí mismo. Los servos los tengo desde hace años y releyendo sobre el trucaje de los mismos ya me queda la duda si en el momento de desmontarlos, aparte de quitarles el tope mecánico hice lo de la calibración del potenciómetro que veo en algunos artículos. ¿Es posible que sea eso, o que se haya desrregulado por algún motivo?¿Me podéis recomendar alguna página que explique el proceso claramente?

a que te refieres con que estan "tocados"? les has quitado el tope y puesto dos resistencias en vez del potenciometro?

Hi,
En el setup despues que definas los pines ejecuta un write a los servos con un angulo de 90 grados. A ver que sucede. Deben de quedarse quietos creo.

jose:
a que te refieres con que estan "tocados"? les has quitado el tope y puesto dos resistencias en vez del potenciometro?

Pues ahí está la cosa, que como lo hice hace mucho tiempo no tengo la seguridad de que le hiciera bien lo de las resistencias. Luego sí que los probe con un ejemplo que movia aleatoriamente el robot para adelante y atrás , pero como lo hacía nada más entrar en el loop no estoy seguro de que no ocurriera lo que me ocurre ahora. Tendré que desmontarlos para asegurarme, lo que pasa es que me toca descuajeringar todo el robot para acceder a los servos :frowning:

tauro0221:
Hi,
En el setup despues que definas los pines ejecuta un write a los servos con un angulo de 90 grados. A ver que sucede. Deben de quedarse quietos creo.

Probaré eso que tu dices también. Gracias.

Si las resistencias no son exactamente iguales ,puede ser que la posicion de parado no sea 90 si no algo cercano ,deberas hacer pruebas si no se para en 90.

jose:
Si las resistencias no son exactamente iguales ,puede ser que la posicion de parado no sea 90 si no algo cercano ,deberas hacer pruebas si no se para en 90.

Pues no se paran en 90, de hecho no se paran nunca. He desmontado uno al final y sí que llevan las resistencias (son de 2,2k con un 5% de tolerancia). Me imagino que será por eso.

Las desoldaré y si nos son exactamente igual, me imagino que tendré que conseguir 2 que sean exactas, ¿no?

No te apures. Espera a jose que te aconseje

Hi,
Adjunto un link que posiblemente explica el problema que el tiene con el servo. Lo de tocado puede ser que significa que el servo a sido modificado para que haga una rotacion 360 degree continuamente.

Yo le corté el tope mecánico y le cambié el potenciómetro por las resistencias. A lo mejor no era eso lo que tenía que hacer. Bueno, yo lo que quiero es usar los servos para mover las ruedas, por lo que tienen que girar completamente, pero tienen que ser controladas por el programa (moverse adelante , atrás y girar, y controlar la velocidad). ¿Qué tipo de servo hay que usar entonces y con qué modificaciones?
Gracias.

hazte un pequeño sketch en el que introduzcas la posicion del servo por serial monitor y esa posicion la mandas al servo.introduce posiciones cercanas a 90(menores y mayores ) hasta que des con la que para el motor.posiciones menores giraran en un sentido y mayores de ese punto en otro.aprovecha para experimentar como afecta el incremento de posicion a la velocidad.

Ok, a ver si esta tarde tengo un rato y puedo probar lo que dices. :wink:
Entonces, tal y como los tengo ¿deberían funcionar como quiero?

Bueno , he probado esta tarde introduciendo valores por el puerto serie como proponía jose , y donde más se acerca a estar parado del todo es en 85, a partir de ahí cambia de sentido tanto hacia arriba como hacia abajo de ese valor. De cualquier modo en 85 no se llega a parar del todo y se queda como temblando.