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?
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() {
}
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?
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
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.
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?
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.
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.