Go Down

Topic: Problema con el ángulo del servo (knob) (Read 2911 times) previous topic - next topic

al_tutiplei

Hola a todos.

He utilizado el ejemplo propio que encontramos aquí para controlar el ángulo del servo mediante un potenciómetro.

Se supone que con la programación que aparece en el mismo programa del arduino (knob), puedo posicionarlo a 0º y 180º, pero no consigo que la diferencia entre ambas posiciones sea mayor de unos 40º entre si.

Alguien me puede ayudar a solucionarlo?, necesitaría que al menos girase unos 90º.


Adjunto el código.


// 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 = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

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(15);                           // waits for the servo to get there
}




Muchas gracias.

Sergegsx

puedes poner las lecturas del potenciometro cuando lo cambias de un extremo a otro?
simplemente haz un Serial.println(analogRead(potpin)); y gira el potenciometro de un extremo al otro, que valores salen? de 0 a 1023 ??

al_tutiplei

Hola Sergegsx.
Gracias por la atención.

He hecho lo que me recomiendas, y sí me salen valores entre 0 y 1023, pero realmente el motor se mueve en el rango de 800 a 1023 más o menos, gran parte del recorrido del potenciómetro se pierde.

El servo que tengo no lo compré yo, me lo dieron, y no se las características que puede tener, pero no creo que sólo pueda girar esos 30 ó 40 grados no?.

Muchas gracias compis. 

Sergegsx

que extraño, hombre siempre puedes probar a hacer esto, pero claro pierdes mucha precisión...

  val = map(val, 800, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)

si le metes los valores de 0 a 179 mediante un 'for' te funciona bien el servo?? Es decir gira todos los 180 grados? por descartar que sea problema del servo.

al_tutiplei

Buenas,

val = map(val, 800, 1023, 0, 179);     Eso ya lo había probado, pero no varía el funcionamiento para nada.

Realmente, el recorrido del potenciómetro me da igual, porque no necesito más precisión que que esté abierto del todo, o cerrado.

Lo que me comentas del for con valores de 0 a 180, para probar el servo, pues como soy bastante ignorante... je je, pues no he sabido como ponerlo.

Gracias de verdad por estar intentándolo, tenemos que conseguirlo!!!

Si de todas formas, alguien sabe como conseguir esto con cualquier otro circuito que no sea con el arduino, estoy abierto a todo.

Thanks.

Sergegsx

#5
Aug 08, 2011, 12:56 pm Last Edit: Aug 08, 2011, 12:58 pm by Sergegsx Reason: 1
Me referia a probar algo asi...

en lugar de usar los datos del potenciometro hacer que un bucle pase por todos los numeros para ver si el servo responde o si es problema del potenciometro.

Code: [Select]
// 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 = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
//  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)

for (int i = 0; i < 1023; i++)
{
  val = map(i, 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(15);                           // waits for the servo to get there
}

}


otra cosa, nunca he usado servos, pero con un delay de 15 le da tiempo a ir a todas las posiciones? como digo no se muy bien como va esto ya que el delay lo hace despues del write pero segun el comentario el delay es para que el servo le de tiempo a llegar a su posicion por lo que prueba a aumentar considerablemente este valor a ver que pasa. pero primero prueba con el 15

josemanu

El Sketch de ejemplo Knob es perfecto para probar servos.

Incluso con una pequeña modificación es perfecto para centrarlos.

Si el potenciómetro que usas para regularlo está bien se me ocurre que pueda fallar el potenciómetro interno del servo, no sería nada raro.

Prueba con otro servo.
http://www.ardumania.es/

Iniciación

al_tutiplei

Gracias a ambos.

He probado con otro potenciómetro y nada, y probé testear el servo con lo que me dijiste Sergegsx, y me giraba lo mismo, sólo unos 30 o 40 grados.

Conclusión, o el servo esta petado o es así de chungo, o el chungo soy yo; así que intentaré probar con otro servo si puedo comprarlo próximamente.

Muchas gracias.

josemanu

Lo dicho, servo muerto... Pero no lo tires.

Dentro de mis tutoriales, en el número 3 la cosa va de servos y en uno de los apendices (ese ejercicio es posible que lleve 2 ó 3 por que el tema es extenso) explicaré como trucar un servo a rotación continua.
http://www.ardumania.es/

Iniciación

ionhs

El tema de trucar los sevos me tiene un poco harto. Cada uno se truca diferente incluso he comprado uno contres semanas de diferencia al comprar otros 3 el fabricante ha cambiado el diseino del potenciometro. La única manera que se me ha ocurrido es con loctite y taladro de precisión. Espero con ansias tu tutorial aunque espero que no sea el clásico futava que parece facil de trucar pero no es muy barato.

josemanu

Para hacer las fotos del servo por dentro (no tenía ninguna) abrí dos servos: un Losi de 20€ (curiosamente fabricado por ST) y un TowerPro de 9g... y resultaron ser iguales, la misma mier** de potenciometro en uno que en el otro.

El tutorial irá sobre los TowerPro (o Mistery, son los mismos), prefiero los servos que no duelen cuando petan, por que romperse se rompen unos igual que otros.
http://www.ardumania.es/

Iniciación

ionhs

El TowerPro es justamente el que el fabricante me cambió el diseño del potenciómetro entre compra y compra.  Así que esperaré haber que nos comentas, sino en septiembre tendré que ideármelas para que gire el último engranaje. Salu2

al_tutiplei

Buenas otra vez.

He estado liado y no he podido entrar por aquí.

Lo conseguí!!!

El rollo es que algo tendría el motor, pero lo abrí, y recordaba que había visto algo por ahí de quitar un tope de los engranajes, y es lo que hice. Me funciona tal y como yo quería, así que problema solucionado.

Muchísimas gracias a todos.

Ya os molestaré con más cositas... jeje.

Go Up