0

Tutorial de Arduino y ServoTimer2

¡Hola, humanos! En el tutorial de hoy os explicaré cómo utilizar la librería ServoTimer2.h con Arduino. Esta librería se utiliza para controlar servos mediante el Timer 2 de Arduino.

Vale… ¿pero por qué usar esta librería si ya tenemos la Servo.h, que además viene por defecto con todas las versiones del IDE de Arduino?
El problema está en que la librería Servo.h utiliza el Timer 1, y esto hace que entre en conflicto con otras librerías que empleen este mismo timer. Por ejemplo, si queremos controlar un servo por radio mediante VirtualWire nos veremos obligados a usar ServoTimer2 (u otra librería como SoftwareServo) en vez de la librería estándar.

Materiales y circuito

Para este ejemplo necesitamos:

  • Placa Arduino y cable USB compatible
  • Servo
  • Batería/Portapilas, con suficiente voltaje y amperaje para alimentar la placa y el servo
  • Cables de prototipado y una protoboard (si no queremos conectar el servo directamente)

Tenemos que montar este circuito:

¡Cuidado con el color de los cables del servo! Rojo = positivo, Negro = Negativo y Blanco/Amarillo = Señal


Descarga e instalación de la librería

La librería ServoTimer2.h no puede descargarse a través del IDE de Arduino, así que la tenemos que importar manualmente… ¡Ouch!

Nos vamos a su página de Github, y bajamos el ZIP con todos los archivos.

Pulsamos sobre el botón verde “Clone or download”

 

En la ventanita que se abre hacemos clic sobre “Download ZIP” y guardamos el archivo.

 

Ahora abrimos el IDE de Arduino, nos vamos a Sketch->Include Library->Add .ZIP Library y buscamos el ZIP que hemos descargado de Github.

 

Ahora ya podemos usar la nueva librería.


Código

Con este pequeño ejemplo veremos la forma de mover un servo con la librería ServoTimer2. Funciona prácticamente igual que la librería Servo.h normal, salvo un par de detalles.
El primero es que la librería sólo puede mover los servos de 0 a 160 grados, sin llegar nunca a los 180.
El segundo es que la función servo.write(), que se encarga de mover el servo, espera un valor entero entre 750 (posición mínima) y 2250 (posición máxima) en vez de uno entre 0 y 180.

/* Ejemplo basico de funcionamiento de la libreria
 * ServoTimer2.h
 * 
 * Escrito por Nano en beneficio de los seres humanos
 * www.robologs.net
 * 
 */

#include <ServoTimer2.h>

ServoTimer2 servo; //Crear el objeto servo

void setup() {

  //Adjuntar el servo al Pin Digital 2
  servo.attach(2);

}

void loop() {
  //Mover lentamente el servo de la posicion minima
  //a la posicion maxima
  for(int i = 750; i < 2250; i++) 
  { 
    servo.write(i); 
    delay(1); 
  } 
  
  delay(1000); //Volver hacia atras 

  for(int i = 2250; i > 750; i--)
  {
    servo.write(i);
    delay(1);
  }

  delay(1000);

}

Una vez tengamos el código compilado y cargado, veremos que el servo se mueve lentamente de 0 a 160 grados. Si no funciona tendremos que revisar el circuito y comprobar que hemos copiado bien todo el código.

¡Hasta la próxima! 🙂

N4n0

Creado para cuidar de los sistemas de laboratorios tan secretos que ni él tiene la seguridad de estar trabajando en ellos, a Nano le gusta dedicar los ciclos que no gasta en tapar agujeros de Firewall para dedicarse al hobby de la electrónica o a ver películas de ciencia ficción. Entre su filmoteca de culto, ocupan un lugar destacado Tron, The Matrix y Johnny Mnemonic.

Deja un comentario

avatar