Trabajando con servos

Objetivos

    • Que es un servo y su manejo.
    • Conexión básica de un servo
    • La función map().

Servo-300x265

Material requerido

arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
Img_3_4
  •  Una Protoboard.
Servo-300x265
  • Un servo.
potenciometro
  • Un potenciómetro.
Img_3_6-300x185
  • Algunos cables de Protoboard.

 

Usando nuestra primera librería: Servo.

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.

Por ahora solo nos interesa la librería Servo. Pinchad en ella. Arduino incluirá una línea al principio de vuestro programa como esta:

#include <Servo.h>

A partir de ahora ya podemos utilizar las funciones disponibles en la librería.

Vamos a montar un circuito en el que hagamos moverse al servo de forma controlada, e iremos viendo las instrucciones necesarias.

El esquema.

El diagrama de conexión para la protoboard es sencillo:
servo_potenciometro

El programa.

Comenzaremos incluyendo la librería y definiendo un objeto para utilizar el servo, lo llamaremos servo1. Podemos definir tantos servos como componentes queramos manejar:

#include <Servo.h>
Servo servo1;

Así, esa segunda línea significa que vamos a crear una nueva instancia de tipo Servo que llamamos servo1.

  • Aunque ahora os pueda parecer una forma extraña de hacer las cosas, la programación orientada a objetos, es una de las metodologías más potentes de las ciencias de computación actuales y todos los lenguajes de programación que se precien, han incorporado las ideas de la OOP.
  • Por ahora nos limitaremos a mostrar como usar los objetos.

Una vez creada la instancia del objeto tenemos que incluir una línea en la función setup() para informar de que vamos a conectar ese objeto abstracto que todavía es servo1 a un pin físico del Arduino para controlarlo. En nuestro caso el pin 9:

servo1.attach(9);

Una vez cumplido el trámite para manejar la posición del servo recurrimos a:

servo1.write(angulo);

Donde angulo es el valor en grados de la posición que deseamos.

Vamos a escribir un programa que vaya barriendo un ángulo en grados y moviendo el servo a esa posición.

#include <Servo.h>                    
Servo servo1;                         
int angulo = 0;

void setup()
    {
        servo1.attach(9) ;            
    }

void loop()
    {
        for(angulo=0;angulo<=180;angulo++)   
            {
                 servo1.write(angulo);
                 delay(25);
            }
        for(angulo=180;angulo>=0;angulo--)    
            {
                 servo1.write( angulo );
                 delay(25);
            }
    }

Veréis como el servo se va moviendo primero hacia adelante y luego retrocede para volver a empezar.

Vamos ahora a hacer que el valor del potenciómetro represente la posición del servo de manera que el servo se mueva siguiendo al potenciómetro. Para ello hay que entender que el valor que leamos en la puerta A0 está comprendido entre 0 y 1023, y que estos valores tienen que distribuirse entre 0 y 180º. Así que para calcular el ángulo correspondiente basta con hacer:

angulo = (180/1023)*A0

La función map(), hace exactamente eso de un modo mucho más cómodo.

 angulo=map(analogRead(A0),0,1023,0,180);

Traducido quiere decir: Haz la proporción de los valores que leas en A0, entre 0 y 1023, en un valor comprendido entre 0 y 180 y asígnale ese valor al ángulo.

#include <Servo.h>          
Servo servo1;               
int angulo = 0 ;

void setup()
    {
       servo1.attach(9) ;  
    }

void loop()
    {
       angulo=map(analogRead(A0),0,1023,0,180);
       servo1.write(angulo);
       delay(250);
    }