Introducción

En este tutorial explicaremos como utilizar uno de los componentes más importantes cuando se trata de actuadores en el mundo de la robótica: los servomotores para poder accionar de manera mecánica cualquier tipo de dispositivo: móviles, brazos articulados, barreras, etc....

servos1

¿Qué es un servo o servomotor?

Un servomotor (también llamado servo) es un dispositivo similar a un motor eléctrico de corriente continua (transforma energía eléctrica en energía mecánica) pero en lugar de diseñarse para obtener un giro continuo que podamos aprovechar (para mover una rueda por ejemplo), se diseñan para que se muevan un angulo fijo en respuesta a una señal de control, y se mantengan fijos en esa posición. Imaginad por ejemplo un timón de un avión o barco. No queremos un giro continuo, sino un motor al que le pueda indicar el ángulo que deseamos en grados y que mantenga esa orientación hasta que le demos una orden en contrario.

Estos servos o servomotores son muy frecuentes en aeromodelismo y en robótica, por la capacidad que presentan para moverse a un ángulo concreto y mantenerse allí. De hecho se suelen diseñar para que giren un ángulo proporcional a una señal PWM, de forma que su control es muy preciso. Un servo suele estar formado por:
servo2

Funcionamiento del servomotor

Habitualmente los servos tiene un margen de operación, es decir, pueden moverse entre 0º y ángulo dado, que suele ser de 180º, pero existen modelos comerciales de todas la características imaginables (incluyendo servos de 360º).

Normalmente estos pequeños servos funcionan sobre 5V y el control se realiza mediante una señal de control PWM, en la que el ancho el pulso indica el ángulo que deseamos adopte el eje. Un servo tiene un conector de 3 hilos, 5V (rojo), GND (negro o marrón) y el otro Control (amarillo o blanco).

Servo Motor

Conexión eléctrica

El diagrama de conexiones es realmente trivial: basta con conectar Arduino, y usar conectar a 5V el power del servomotor, a GND el GND del servo y, a un pin PWM, por ejemplo el pin 9 la salida del servomotor.
circuitoServomotor

Código Arduino

Podríamos escribir un pequeño programa en Arduino que controle estos pulsos y los relacione con el ángulo buscado, pero antes de que nadie se asuste, los servos (y otras cosas) son tan habituales, que ya ha habido gente que han escrito estos programas y los han puesto a nuestra disposición.

De este modo podemos manejar un servo sin preocuparnos para nada de cómo realizar el control de las señales, o de la operación interna, basta con instalar estos programas en una forma especial llamada librería. La ventaja de trabajar con una plataforma tan bien establecida como Arduino, es que hay cantidad de gente en el mundo desarrollando librerías, casi para cualquier cosa que podáis imaginar.

Usaremos con mucha frecuencia las librerías (para el display LCD, para el sensor de ultrasonidos, etc..) y en este caso usaremos una librería llamada servo para manejar el servomotor. Servo es una librería estándar en Arduino. Eso quiere decir que viene incluida cuando instaláis el IDE, a diferencia de otras librerías que debemos buscar, descargar de Internet e instalar para poder usarlas.

Para usar una librería estándar, basta con pedirle al IDE que la incluya en nuestro programa. Id al menú Programa \ Importar Librería y os saldrá un desplegable con todas las librerías que tenéis instaladas en el IDE.

Vamos a escribir un programa que vaya barriendo un ángulo en grados hasta los 180º moviendo el servo en las citadas posiciones. Cuando alcance el citado ángulo volverá al origen en sentido contrario.

Arduino Code
  1. #include "Servo.h"
  2. Servo servo1; // Crear un objeto tipo Servo llamado servo1
  3. int angulo1 = 0 ;
  4.  
  5. void setup()
  6. {
  7. servo1.attach(9) ; // Conectar servo1 al pin 9
  8. }
  9.  
  10. void loop()
  11. {
  12. for(angulo1 = 0; angulo1 <= 180; angulo1 += 1) //incrementa angulo 1 grado
  13. {
  14. servo1.write(angulo1);
  15. delay(25);
  16. }
  17. for(angulo1 = 180; angulo1 >=0; angulo1 -=1 ) //decrementa angulo 1 grado
  18. {
  19. servo1.write( angulo1 );
  20. delay(25);
  21. }
  22. }
  23.  

 

Spanish English French German Italian Portuguese Russian

Redes sociales

facebook iconotwitterGoogle plus iconpinterest

Artículos

TIC