Skip to main content

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 son lo servos, hay de dos tipos:

  • El servomotor o servos convencionales 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.
  • Servo de rotación continua Son servos por fuera igual que los anteriores, pero pueden girar 360º y se controlan por tiempo

Por defecto cuando se dice servo, es un servomotor o servo convenciona

Servos de rotación continua

Para controlar un servo de rotación continua, las instrucciones a realizar son :

  • Incluyes la librería de servos #include <Servo.h>
  • Declaras una variable servo Servo myservo; //puedes poner el nombre que quieras p.e. miservo
  • En setup() tienes que decir a qué pin está conectado myservo.attach(9); //por ejemplo pin 9
  • Y en loop()
    •  myservo.write(90); //significa   servo parado 
    • myservo.write(180); //significa   servo funcionando al 100% en el sentido de las agujas del reloj
    • myservo.write(0); //significa   servo funcionando al 100% en el sentido contrario de las agujas del reloj

Mira el vídeo, esta realizado con otra shield ECHIDNA y con bloques mBlock (curso Echidna  https://libros.catedu.es/books/echidna/ ) 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) tienen un potenciómetro para ajustar.

Si quieres saber más sobre servomotores te recomendamos estas paginas del Zaragozano Luis LLamas: Servomotores convencionales y Servomotores de rotación continua

Servomotores o servos convencionales

Los servos son un tipo especial de motor en el que se añade una circuito lógico electrónico que permite un control mucho más preciso que a un motor normal de corriente continua. Esto les permite posicionar el eje en un ángulo determinado. 

El hardware interno se compone de un potenciómetro y un circuito integrado que controlan en todo momento los grados que gira el motor. De este modo, en nuestro caso, desde Arduino, usando las salidas digitales PWM podremos controlar fácilmente un servo. Lo ideal es conectarlo a 6V pero trabajan bien en los 5V del Arduino.

Hay muchos modelos, en robótica educativa cuestan entre 1-5€, el más común es el SG90, muy barato, pero tiene muy poca fuerza, el MG90S tiene algo más, si queremos algo más, ya tiene que ser el  MG996R pero ya este modelo NO se puede conectar directamente al Arduino, el pico de energía que necesita, provoca el reinicio de la placa. Incluso varios pequeños SG90.

Las instrucciones son las mismas que los servos de rotación continua, pero los valores que se proporcionan son los grados que se desean. 

  • Incluyes la librería de servos #include <Servo.h>
  • Declaras una variable servo Servo myservo;  //puedes poner el nombre que quieras p.e. miservo
  • En setup() tienes que decir a qué pin está conectado myservo.attach(9); //por ejemplo pin 9
  • Y en loop()
    •  myservo.write(90); //Posición 90º (posición por defecto)
    • myservo.write(180); //Posición 180º
    • myservo.write(0); // Posición 0º

La instrucción myservo.write(angulo) envía por el pin digital declarado en myservo.attach() pulsos cuadrados de 50Hz y de anchura el estado alto proporcional al ángulo que se desea.

  • Un pulso de 0.5-1ms es 0º
  • Un pulso de 1.5 ms es 90º 
  • Un pulso de 2-2.5ms es 180º

Si quieres saber más, te recomendamos https://www.luisllamas.es/controlar-un-servo-con-arduino/