Skip to main content

5.1 Control de servomotores

Una de las aplicaciones más utilizadas de los sistemas de control por ordenador y en la robótica están asociados con los motores, que permiten accionar o mover otros componentes, como puertas, barreras, válvulas, ruedas, etc. Uno de los tipos que vamos a ver en este capítulo es el servomotor que posee la capacidad de posicionar su eje en un ángulo determinado entre 0 y 180 grados en función de una determinada señal. 

Servos de rotación contínua

Son servos por fuera igual que los anteriores, pero pueden girar 360º y se controlan por tiempo, es decir servoRotCont.write(90);


Si quieres saber más sobre servomotores te recomendamos estas paginas del Zaragozano Luis LLamas:

Recomendamos testear tus servos en el Montaje 1.


Conocimiento previo

  • Programación básica de Arduino.
  • Uso de librerías internas de Arduino (Servo.h).
  • Bucles for.

Objetivos

  • Conocer qué es un servomotor, tipos y funcionamiento.
  • Las aplicaciones en el mundo de la automática y el control por ordenador de este tipo de motores.
  • Usar la librería que incorpora Arduino para controlar los servos.

Lista de materiales:

  • Servomotor.
  • Placa Arduino UNO.
  • Placa EduBásica (opcional).

Montaje 1: Testea tu servo

En el siguiente programa de testeo en el obtenido del forum arduino que lo tienes más abajo, puedes probar tu servo.

  • Conecta el servo al pin 7
  • Utiliza el puerto serie para teclear el ángulo que quieras con el teclado de tu ordenador.
  • No queremos que entiendas todo el código, pues el puerto serie lee es carácteres ASCII y tiene que convertir el carácter a ángulos.
  • Si tecleas un valor más grande de 500 se le indica al servo no el ángulo que se tiene que mover, sino cuanto tiempo en ms se tiene que mover.

Por ejemplo en este Servo HD-1440A con el anterior programa se ve que es un servo barato:

  • No puede hacer ángulos de +180º luego es un servo convencional
  • No puede hacer ángulos de menos de 10º no llega a parar, o sea tiene deriva.

El resultado se puede ver aquí:

Si eliges uno un poco más caro como el MG90S no tiene estos problemas en los extremos. Ver

Mira la diferencia con un servo de rotación continúa, fíjate como: - Los extremos 0º y 180º es a máxima velocidad, pero un sentido u otro. - 90º es parado. - Un valor intermedio es menos velocidad (se ve el ejemplo 80º y 100º) - Si tiene deriva, (cosa frecuente) hay un potenciómetro para ajustar.

El vídeo está realizado con otra Shield: Echidna.

Programa

// zoomkat 10-22-11 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// for IDE 0022 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

String readString;
#include  
Servo myservo;  // create servo object to control a servo 

void setup() {
  Serial.begin(9600);
  myservo.writeMicroseconds(1500); //set initial servo position if desired
  myservo.attach(7);  //the pin for the servo control 
  Serial.println("servo-test-22-dual-input"); // so I can keep track of what is loaded
}

void loop() {
  while (Serial.available()) {
    char c = Serial.read();  //gets one byte from serial buffer
    readString += c; //makes the string readString
    delay(2);  //slow looping to allow buffer to fill with next character
  }

  if (readString.length() >0) {
    Serial.println(readString);  //so you can see the captured string 
    int n = readString.toInt();  //convert readString into a number

    // auto select appropriate value, copied from someone elses code.
    if(n >= 500)
    {
      Serial.print("writing Microseconds: ");
      Serial.println(n);
      myservo.writeMicroseconds(n);
    }
    else
    {   
      Serial.print("writing Angle: ");
      Serial.println(n);
      myservo.write(n);
    }

    readString=""; //empty for next input
  } 
}