Hoy, vamos a aprender que son y como controlar un servo con arduino.
Los servos están compuestos de un motor y un circuito de control interno que permite que podamos mantener la posición angular con precisión, en un rango de 0 a 180º, según nos interese.
Los servos son muy útiles en proyectos relacionados con robótica y todo lo que este relacionado con movimiento y actuadores.
Conexión de servo con arduino
La conexión del servo con el arduino se hace a través de 3 cables (normalmente de color negro,rojo para alimentación y uno naranja, blanco o de otro color para la señal de control).
La señal de control es de tipo PWM (control de ancho de pulso). Este tipo de señales las tratamos en el anterior artículo PWM con Arduino. Salidas analógicas. que te recomiendo leer antes de seguir con este para entender mejor como funcionan este tipo de señales.
Así, variando la anchura de pulso PWM de la salida a la que tenemos conectado nuestro pin de control, haremos mover el ángulo de nuestro servo a la posición deseada con bastante precisión.
Se ha establecido un ancho normalizado de pulso para todos los servos que va desde 900μs. para la posición de 0º hasta 2100μs. para 180º. Todas las frecuencias entre esos valores corresponden a las posiciones intermedias entre esos 180º de recorrido que tiene de limitación el servo por construcción. Hay una formula matemática que relaciona la posición con el ancho de pulso y viene dada por: Angulo=(3*duracion-2700)/20.
Así por ejemplo, para una posición media de 90º, el ancho de pulso de la señal que mandaremos al servo será de 1500μs.
Instalación de la librería SERVO
Para hacer mas cómodo la programación del control del servo con el arduino, podemos instalar una librería que nos facilita mucho el trabajo.
Para ello iremos a nuestro IDE de arduino e iremos al menú en : Programa-Incluir librería-Gestionar libreria y se nos abrirá una ventana donde podremos buscar la librería servo:
En la captura de pantalla, la librería ya esta instalada, pero si no lo estuviese, aparecería un botón en el lado derecho para instalarla.
Montaje y programación del servo con arduino.
Una vez instalada la librería, vamos a montar los componentes necesarios para controlar el servo.
Necesitaremos aparte del servo y el arduino, necesitaremos un potenciómetro y lo montaremos como vemos en el esquema:
Como puedes observar, el montaje es similar al que hicimos al controlar el brillo de un led en la anterior entrada, simplemente hemos sustituido el led por un servo y ahora en vez de controlar el brillo, controlaremos el ángulo de posición del servo. Puedes ver que el servo tiene tres terminales, dos son de alimentación y uno de control que conectaremos a la salida del arduino programada previamente.
Una vez montado el circuito en la breadboard, conectaremos el arduino para programarlo.
Vamos a cargar un ejemplo que se encuentra en la librería que hemos instalado. Cuando instalamos una librería, se nos instalan unos ejemplos en ella, para poder comprobar que todo funciona correctamente. En nuestro caso, vamos a ir al menu de librería a buscar la librería servo y dentro de ella el ejemplo llamado «Know» como puedes ver en la imagen:
Una vez cargado, vamos a ver y explicar el código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* Controlling a servo position using a potentiometer (variable resistor) by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> modified on 8 Nov 2013 by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/Knob */ #include <Servo.h> Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there } |
Es un sencillo programa en el que vemos como novedad, el uso de la librería servo.
Cuando tengamos que usar una librería, lo primero que hacemos es incluirla en nuestro código al comienzo con el comando #include seguido de su nombre para que a la hora de compilar, el IDE, nos haga uso de la misma.
Una librería no es mas que una serie de código reutilizable que incluiremos en nuestro programa cuando nos sea necesario, aparte de ahorrarnos mucho trabajo, solo incluiremos las librerías necesarias para no malgastar memoria del arduino. En el IDE podemos tener todas la librerías que queramos ya que en nuestro ordenador no hay problema, pero para el proyecto que tengamos en construcción solo usaremos las imprescindibles con el comando #include para ahorrar memoria del arduino.
Una vez que tenemos la librería, ya podemos usarla, por ejemplo, para declarar el objeto que vamos a controlar:
1 |
Servo myservo; // create servo object to control a servo |
de esta manera le damos le nombre que queramos en este caso myservo.
A continuación, también fijamos el pin donde conectamos el potenciómetro (analogica 0) y la variable donde guardaremos la lectura del mismo.
en el setup() decidiremos en que pin vamos a conectar el servo con la siguiente línea:
1 2 3 |
void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } |
Vemos que con esta sencilla instrucción que esta en la librería podemos definír en que pin conectamos el servo con arduino . Si decidimos cambiar de pin, tened en cuenta que ha de ser una que tenga opción de salida PWM que en el arduino no son todas…
1 2 3 4 5 6 |
void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there } |
El resto del código que se repite sucesivamente, consiste en:
- Leer la posición del potenciómetro.
- Adaptar el valor proporcionalmente de los valores leidos 0-1023 a 0-180 (recordar que el servo tiene 180º de anulo de movimiento) con map.
- Y enviar al servo al angulo correspondiente almacenado en la variable ‘val’.
- Daremos un tiempo delay(15) para que el servo se posicione antes de volver a mandar otra posición.
Ya solo nos queda conectar nuestro arduino, compilar y subir el código.
Si todo va bien, podemos ver que tiene que funcionar así:
Ya ves que controlar un servo con arduino es sencillo.
Si te ha gustado puedes ir a este enlace para conseguir todos los componentes necesarios, arduino y otras herramientas para poder montar este y otros muchos proyectos que publicaré en futuros artículos.
Nos vemos en el próximo post…
Deja un comentario