Go Down

Topic: Servos 360º - Dejar de girar. (Read 781 times) previous topic - next topic

royyyyy

Oct 23, 2011, 01:56 am Last Edit: Oct 23, 2011, 02:29 am by royyyyy Reason: 1
Buenas!!!

Pues eso, lo que quería saber es como puedo hacer para que los servos de un pequeño vehículo dejen de girar, que se paren a la espera de alguna orden que le especifique. Porque lo que pasa es que los valores que le meto a servo.write() lo unico que hacen es que giren en un sentido u otro, más o menos rápido! Pero no se como pararlos!

Muchas gracias.

JRodrigo

#1
Oct 23, 2011, 04:08 am Last Edit: Oct 23, 2011, 04:12 am by JRodrigo Reason: 1
Te paso los dos metodos que yo se, haber cual te gusta más o haber si alguien propone alguno nuevo  :)

Quote from: Metodo 1 (attach & detach)
myservo.attach(ServoPin); // Defines el pin donde tienes puesto el servo
myservo.detach(); //Desasocia la variable Servo de su pin y por lo tanto se desactiva el servo

Lo malo es que cada vez que quieras volver a mover el servo tendrás que volver a utilizar myservo.attach(ServoPin); pero te aseguras que el servo no se va a mover.


Quote from: Metodo 2 (writeMicroseconds)
Si se sabe el pulso exacto en microsegundos en donde el servo deja de rotar puedes utilizar myservo.writeMicroseconds(microseconds); pero hay veces que el mismo servo se la cambia el pulso que necesita muy poco y se moverá muy lento.

Para encontrar los microsegundos exactos si tienes que estar subiendo sketches sin para modificando entre 1000 o 2000 te puedes volver loco, así que estos días atrás me hice un código para encontrarlos el valor enviándolo mediante la consola por el puerto serie.



Type 'arduino'  XD


Un saludo!

royyyyy

JRodrigo muchas gracias.

Me gusta el método de desasociar y luego asociar de nuevo, no va a tener que pensar mucho el micro de la placa con otros cálculos! No se si tiene algún "contra" que el de tener que asociar de nuevo, pero veo factible poder hacerlo!

Estoy a la espera de un servo de 180º para el sensor de ultrasonido, cuando me llegue y lo monte, lo pruebo y te comento que tal me ha ido. Por ahora solo me puedo fiar de la teoría. De todas formas muchas gracias. Bueno... en realidad una pregunta: ¿Tu cual prefieres de los dos métodos que me has dicho?

Gracias de nuevo.

ionhs

¿Pero con servos trucados también hacéis así? yo lo que hago es buscar el número (angulo) con el que se para, suele andar cerca de 90. La verdad es que es una lata tener que andar buscando el punto en el que se para.

Otro de los problemas que suelo tener es que cada servo corre a diferentes velocidades, por lo que se suelen desviar y cuesta que vayan recto. Suelo compensar los ángulos hasta conseguir que no se desvié mucho. ¿Alguna otra posible solución? salu2

JRodrigo

¿Tu cual prefieres de los dos métodos que me has dicho?


Cuando quiero pararlo totalmente utilizo el detach() (Que desasocia la variable Servo de su pin), pero cuando lo tengo en movimiento y quiero pararlo momentáneamente utilizo el angulo en que se mantiene parado ya que me es más cómoda la programación, pero yo creo que lo ideal seria utilizar el detach() para pararlo.

Pero va bien saber el angulo en que se queda parado el servo totalmente, ya que yo baso la programación en eso. Defino al principio la posición en que están parados los servos y luego defino en otro la velocidad a que quiero que giren (100,200,500,...) y luego es solo una resta o una suma a la hora de utilizar el writeMicroseconds(), aunque como comenta ionhs suele desviarse un poco hacia un lado, así que tendrás que hacer lo que dice si quieres un robot más preciso y buscar una velocidad determinada para cada servo :(

Go Up