¿Cómo controlo la velocidad usando servo.h?

1

Tengo un Arduino mega 2560 conectado a un robot de 4 ruedas (similar a esto: enlace ).

El Pin 9 en el Arduino está conectado a las ruedas delanteras del robot para moverse hacia la izquierda o hacia la derecha.

El Pin 10 en el Arduino está conectado a las ruedas traseras para el movimiento hacia adelante.

He enviado con éxito las señales "IZQUIERDA" y "DERECHA" al arduino y he conseguido que el robot gire a la izquierda y a la derecha, respectivamente.

Sin embargo, estoy luchando para tener el control en el pin 10 que controla el movimiento hacia adelante / hacia atrás. Cuando envío cualquier señal a través del pin 10, el robot mueve las ruedas hacia adelante a la velocidad máxima. No puedo dejar que el robot se siente en una mesa para probar porque se sale de control. Tengo que levantarlo físicamente de la mesa para que las ruedas no toquen el suelo al probar el pin 10.

Aquí está el código que funciona correctamente para las señales de izquierda y derecha:

#include <Servo.h>

Servo myservo;  // create servo object to control a servo


void setup()
{
  Serial.begin(9600);
  Serial.println("Hello Pi");
  Serial.println("attaching to pin 9");
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{ 
  if (Serial.available())
  {
    char command = Serial.read();
    if (command=='L'){

      turn_left();
      delay(5000);
    }
    else if (command=='R'){
      turn_right();
      delay(5000);
    }

  }
}

void turn_left(){
  myservo.write(500);
}

void turn_right(){
  myservo.write(0);    
}

Y aquí está el código para avanzar que no funciona

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup()
{
  Serial.begin(9600);
  Serial.println("Hello Pi");
  Serial.println("attaching to pin 10");
  myservo.writeMicroseconds(544); // im confused what this does..
  myservo.attach(10);  // attaches the servo on pin 10 to the servo object
}

void loop()
{
  if (Serial.available())
  {
    char command = Serial.read();
    if (command=='L'){

      move_forward(); // right now does the same thing is move_backward()
      delay(5000);
    }
    else if (command=='R'){

      move_backward(); // right now does the same thing as move_forward()
      delay(5000);
    }

  }

}

void turn_left(){
  myservo.write(500);
}

void turn_right(){
  myservo.write(0);    
}
// as soon as either of the two functions below is invoked 
// the robot goes at MAXIMUM speed forward.  I have no clue how to slow it down.
void move_forward(){
  myservo.write(0);
}

void move_backward(){
  myservo.write(0);
}
    
pregunta user1068636

2 respuestas

2

Realmente estoy adivinando aquí, pero de acuerdo con la documentación ,

  

"write () ... Escribe un valor al servo ... En una rotación continua   servo, esto establecerá la velocidad del servo (con 0 siendo la velocidad máxima)   en una dirección, 180 siendo la velocidad máxima en la otra, y un valor cercano   90 no siendo movimiento). "

¿Ha intentado hacer un myservo.write(90); que, de acuerdo con esa documentación, debería ser lento o detenido?

    
respondido por el davidcary
0

Es simple, solo escribe este código en lugar del tuyo, que es:

void move_forward(){
myservo.write(90,30);//to ensure a minimum speed because 0=full speed and 1-255 from slow to high speed
}

void move_backward(){
myservo.write(90,30);//like the previous
} 
    
respondido por el Omar Hadj Said

Lea otras preguntas en las etiquetas