Go Down

Topic: Velocidad de un servo (Read 1 time) previous topic - next topic

robsictal

Necesito programar un servo para que haga un movimiento en 90°,  de ida y vuelta constantemente, y que vaya acelerando la velocidad del movimiento. Llegado a un punto máximo, quiero que se detenga. Es decir, de A a B -ida y vuelta - acelerando hasta un máximo para detenerse en seco.

Estuve probando con éste código pero no logro obtener el resultado que necesito.

Code: [Select]
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created

int pos = 0;    // variable to store the servo position

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


void loop()
{
  slowspeed();
  delay(15);
  medspeed();
  delay(100);
  fastspeed();
  delay(1000); 

}

void slowspeed(){
  for(pos = 0; pos < 180; pos += 2)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 2 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
  }
delay(15);
}

void medspeed(){
  for(pos = 0; pos < 180; pos += 5)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 5 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
  }
  delay(50);
}

void fastspeed(){
  for(pos = 0; pos < 180; pos += 9)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 9 degree
    myservo.write(pos);      // tell servo to go to position in variable 'pos'
  }
  delay(150);
}


Alguna idea?

Cheyenne

Si te sirve que la velocidad aumente en pasos (y no una aceleración constante de principio a fin) puedes establecer 4 velocidades en ese código. Como creo que lo que quieres es que el servo vaya de 0 a 90 grados y volver en la subrrutina de las velocidades puedes poner:

Velocidad 1: de 0 a 45 en pasos de 1
Velocidad 2: de 45 a 90 en pasos de 2
Velocidad 3: de 90 a 45 en pasos de -3
Velocidad 4: de 45 a 0 en pasos de -4
http://cuadricopterodiyarduino.blogspot.com/

angudu

Prueba a poner el delay dentro de la funcion for next. Asi controlas la velocidad con la que se escribe el nuevo valor en el servo. Por ejemplo:

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

Espero haberte ayudado!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy