Go Down

Topic: ¿Cómo podría programar un servomotor que se mueva de 0 a 180 y de 180 a 0 grados (Read 6 times) previous topic - next topic

C.Dharém

Tengo un servomotor que se va moviendo por pulsos tanto por izquierda y derecha, pero quiero que por otra tecla se mueva de esa posición hasta 180° y de ahi a 0° y de 0° a 180°...

Solo me interesa el ciclo for creo que sería así..  alguna sugerencia.
Polytechnic University.

Cheyenne

Hay que tratar de concretar más los problemas y a poder ser poner el código que se tiene ya que en ocasiones según lo que se tenga se plantea la solución.
¿Qué programación hace que se mueva por pulsos? Si añadimos la opción que indicas, ¿cómo sabemos si interfiere con el movimiento que tienes ahora por pulsos, es decir, cómo lo anulamos? Lo que hay que añadir podría interpretarlo de manera tan sencilla como un bucle for con las repeticiones que quieras y dentro metes

myservo.write(180);
delay(500);
myservo.write(0);
delay(500);

¿Es eso lo que quieres?
También podría ser que lo quisieras hacer por pasos. En ese caso es tan sencillo como abrir los ejemplos del IDE y concretamente "Sweep"

for(pos = 0; pos < 180; pos += 1)
  {
    myservo.write(pos);
    delay(15);
  }
  for(pos = 180; pos>=1; pos-=1)
  {
    myservo.write(pos);
    delay(15);
  }

Pero según lo que precises tampoco te valdrá ya que mientras se está moviendo el servo no podrás hacer otra cosa ni podrás cambiar por ejemplo al movimiento que tenías por pulsos (sólo cambiarías después de ejecutarse todo el bucle for).

Hay que tener muy claro qué es lo que se quiere hacer y a continuación plasmarlo para que las respuestas puedan dar con la solución de forma rápida.

Cheyenne

Un servo siempre se conecta de la misma manera independientemente del código de programación. GND, alimentación y señal (el PIN de salida en Arduino).
El temblor del servo pueden ser varias cosas. Puede ser que tenga que estar haciendo más fuerza que para la que está preparado, si es el caso hay que poner un servo mayor. Según la magnitud del temblor tal vez podría apañarse un poco bloqueándolo en otra posición cercana, si estás en 180 pues ponerlo en 179,5º ó 179º, probar no cuesta nada.

Por otra parte el código que has puesto tiene varias pequeñas cosas que conviene acostumbrarse a hacer de otra manera, un código bien estructurado y siguiendo siempre las mismas normas es mucho más fácil de entender y seguir, también para ti cuando lo retomes o quieras hacer cambios en otra ocasión. O simplemente reutilizarlo insertándolo en otro programa.

float potPin=2; --> mal, estás asignando un pin a un float, podría dar problemas además de la memoria que estás desperdiciando. Además de utilizar int está bien nombrarlo como una constante tal y como haces después con buttonPin. Sería --> const int potPin = 2;

Si nombras constantes para los pines del potenciómetro y del pulsador deberías de hacer lo mismo para el pin del LED. Así tendrás al inicio --> const int LedPin = 11;
Y después en el setup() --> pinMode(LedPin, OUTPUT);
Y en el loop() --> digitalWrite(LedPin, HIGH)

Más tarde haces un mapeo entre 5 y 1024 para convertirlo a 5 - 240. Varias cosas... la señal de entrada varía entre 0 y 1023. La de salida al servo  son valores entre 0 y 180. No sé exactamente lo que quieres obtener pero intuyo que el mapeo que tienes que hacer es:

calibrate = map(sensorValue,0,1023,5,180);

Cheyenne

Pues nada, te comento unas cuantas cosas y haces caso omiso a todas ellas.
Me pones un código sobre el que te comento y ahora me dices que el que estás usando es otro que te funciona pero que el servo vibra. Debe de ser para indicarme que las apreciaciones que te hago te dan igual puesto que ya te funciona como quieres, que no me ande por las ramas y te diga el secreto que me guardo para quitar la vibración.
Además de hacer caso omiso a mis apreciaciones me zampas otro código que has visto en algún sitio que milagrosamente te va a quitar las vibraciones si un alma caritativa te lo inserta en el programa que estás haciendo (perdón, "utilizando" porque ya veo que tú hacer el programa más bien poco). Pues bien, ya te adelanto que en el último código que dices usar, el "obturador_15_5.ino", no te sirve para nada meter el código mágico de supresión de ruido ya que no estás haciendo ninguna lectura analógica.
Y los vídeos que pones parece que los hayas grabado y después los hayas colgado sin verlos porque la verdad que no sé cómo quieres que alguien vea algo. Yo he llegado a ver un servo totalmente desenfocado y un trozo de pala que se movía por fuera de la imagen.

Cheyenne

Perdona que parezca que saco las cosas de quicio pero si preguntas algo sobre un código y te doy unas pautas para mejorarlo y hacer una prueba por lo de la vibración y en lugar de hacer nada de eso me sales con otro código.
Además lo siento pero créeme que yo no veo la vibración en ningún vídeo. No digo que no la haya, es que no se ve en el vídeo.
Otra cosa, ¿cómo alimentas el servo?

Go Up