Pages: [1]   Go Down
Author Topic: Velocidad de un servo  (Read 754 times)
0 Members and 1 Guest are viewing this topic.
Santiago, Chile
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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?
Logged

Offline Offline
God Member
*****
Karma: 6
Posts: 630
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Pages: [1]   Go Up
Jump to: