CONTROL DE MOTORES ARDUINO – II – SERVOMOTORES

2 Figura 1. Distintos modelos de servo

Autor:  Agustin Gonzalez Redondo. M Rocío García de la Fuente.

En esta entrega, nos centraremos nuevamente en el trabajo con motores, sin embargo y a diferencia de artículos anteriores en los que los motores se empleaban como un dispositivo de salida donde únicamente importaba la tensión de alimentación para conseguir la rotación en el eje, el presente documento tratará aquellos motores que permiten controlar tanto la posición como la velocidad de giro de una forma precisa, los primeros son:

Servomotores: dispositivos que pueden situarse en una posición específica. Normalmente, comprendida entre 0 y 180 grados.

Los servomotores (Figura 1. Distintos modelos de servomotores de radiocontrol) se utilizaron por primera vez en el mundo del radiocontrol (RC), para controlar la dirección de coches RC o los flaps de un avión RC. Con el tiempo, encontraron su uso en la robótica, la automatización y, por supuesto, en el mundo de Arduino.

Su control se realiza mediante una señal de pulsos PWM (Modulada por Ancho de Pulso) cuyo ancho varía entre 1 milisegundo y 2 milisegundos, relacionándose cada señal comprendida entre dichos valores con una posición angular entre 0 y 180 grados, tal y como se muestra en la siguiente figura (figura 2. Relación entre el ancho de pulso y la posición angular del eje del servomotor).

2 Figura 2. Relación entre el ancho de pulso y la posición angular del eje del servomotor

A la hora de trabajar con estos equipos, el esquema de conexión es muy sencillo, tal y como aparece reflejado en la figura 3 simulado con TinkerCad, para dos posiciones distintas del potenciómetro, se muestra en la figura 3 (Figura 3. Conexiones de un servo controlado por un potenciómetro).

2 Figura 3

Y su programación, también es muy fácil como se muestra a continuación, únicamente hay que tener en cuenta que es necesario trabajar con la librería <Servo.h> incluida en la IDE de Arduino, puesto que facilita enormemente la programación de este tipo de dispositivos.

2 Figura 4

El código que se muestra a continuación es un ejemplo incluido en la librería, (Figura 4. Acceso a los ejemplos de código para Servos en Arduino, Knob.ino), y que permite situar de forma sencilla nuestro servo en la posición que se desee modificando para ello la posición de un potenciómetro.

#include <Servo.h>

Servo myservo;  // Crea un objeto Servo

int potpin = 0;  // Pin analogico para lectura del potenciometro

int val;    // variable donde se recoge la lectura del pin analogico

void setup()

{

  myservo.attach(9);  //  pin donde se conecta la señal de control del servo

}

void loop()

{

  val = analogRead(potpin);            // lectura de la entrada del potenciometro (entre 0 and 1023)

  val = map(val, 0, 1023, 0, 179);     // se escala el valor del potenciometro para adecuarlo a la señal del servo(entre 0 and 180)

  myservo.write(val);                  // situa la posicion del servomotor

  delay(15);                           // espera 15 milisegundos

}

2 Figura 5

Existen también servomotores de rotación continua, que son una variante de los servos normales, sin embargo, a diferencia de los anteriores, la señal enviada controla la velocidad de giro en lugar de la posición como es el caso de los servos convencionales. Por tanto, estos servos permiten realizar giros de 360 grados de forma continua, y no tienen un rango de movimiento limitado a 180 grados. (figura 6. Despiece de un servomotor de rotación continua).

2 Figura 6

Sus características físicas son similares a las de los servos convencionales, siendo posible modificar uno de estos servos para convertirlo en rotación continua, con unas sencillas modificaciones física y electrónicas internas (quitando topes internos y sustituyendo resistencias).

Este tipo de servos, permiten, por tanto, controlar de una forma más o menos precisa la velocidad de rotación, sacrificando el control de posición, sin la necesidad de incluir ningún tipo de sistema electrónico de control intermedio (encoders). Y se controlan fácilmente a través de pulsos PWM, como en el caso anterior, teniendo en cuenta que en este caso lo que varía con el ancho de pulso es la velocidad de giro y no la posición (figura 7. Relación entre el ancho de pulso y la velocidad de giro).

2 Figura 7. Relación entre el ancho de pulso y la velocidad angular del eje del servomotor

El esquema de conexión, dada la similitud existente entre los dos tipos de servomotores es el mismo, con la salvedad de que ahora se trabaja con un servomotor de rotación continua (figura 8. Conexión de un servomotor de rotación continua controlado por un potenciómetro).

Y en cuanto a la programación, vamos a utilizar nuevamente el código Knob.ino anterior, pero con distintas pretensiones, en este caso la velocidad de giro del servomotor aumentará o disminuirá con la posición del potenciómetro.

 #include <Servo.h>

Servo myservo;  // Crea un objeto Servo

int potpin = 0;  // Pin analogico para lectura del potenciometro

int val;    // variable donde se recoge la lectura del pin analogico

void setup()

{

  myservo.attach(9);  //  pin donde se conecta la señal de control del servo

}

void loop()

{

  val = analogRead(potpin);            // lectura de la entrada del potenciometro (entre 0 and 1023)

  val = map(val, 0, 1023, 0, 179);     // se escala el valor del potenciometro para adecuarlo a la señal del servo(entre 0 and 180)

  myservo.write(val);                  // DIFERENCIA: modifica la velocidad de giro del motor

  delay(15);                           // espera 15 milisegundos

}

Llegado a este punto, ya conocemos los distintos tipos de servomotores y sus características, y os animamos a emplearlos en aquellos proyectos donde tengamos necesidad de controlar con exactitud bien sea la velocidad de giro del eje o su posición.

AUTORES: M. ROCÍO GARCÍA DE LA FUENTE Y AGUSTÍN GONZÁLEZ REDONDO.

Robótica-Programación

Introducción a la física de partículas y observación (Muon detector)

AUTORES: M. ROCÍO GARCÍA DE LA FUENTE Y AGUSTÍN GONZÁLEZ REDONDO. Para comenzar este artículo es preciso realizar una breve introducción al modelo estándar de partículas, para intentar comprender el conocimiento científico que yace detrás del proyecto que trataremos de explicar. El modelo standard (fuente CERN) figura 1. Desde la década de 1930 los descubrimientos […]

Leer más
Robótica-Programación

Control de motores Arduino (IV). Motores Paso a Paso

AUTORES: M. ROCÍO GARCÍA DE LA FUENTE Y AGUSTÍN GONZÁLEZ REDONDO El segundo tipo de motores capaces de controlar su posición de forma interna, los servomotores fueron los primeros que hemos tratado en anteriores artículos, son los motores paso a paso (figura 4. Varios modelos de motores paso a paso), dispositivos ampliamente empleados en impresoras […]

Leer más
Robótica-Programación

Python ·3D con Processing

AUTORES: M. ROCÍO GARCÍA DE LA FUENTE Y AGUSTÍN GONZÁLEZ REDONDO. Hoy volvemos de nuevo a trabajar con Python, en este caso, añadimos nuevas posibilidades a una IDE que ya conocemos, Processing, además de trabajar con este lenguaje de programación realizaremos una primera animación en 3D. Para comenzar debemos añadir un nuevo modo de trabajo […]

Leer más
Revista