Arduino + Multiples Servos
Una limitante de la libreria para el manejo de servos de Arduino, es que solo se pueden tener dos servos al mismo tiempo lo cual no es suficiente cuando se piensa en crear un robot con cuatro o mas servos, para esto es necesario utilizar una libreria del mismo nombre la cual puede encontrarse en el wiki de Arduino.
Pasos para la instalacion de la libreria utilizando Arduino 0012 Alpha :
- Descargue la libreria Servo del wiki de Arduino
http://www.arduino.cc/playground/ComponentLib/Servo
Descarga directa :
http://www.arduino.cc/playground/uploads/ComponentLib/servo.zip - Reemplace la libreria servo que viene con Arduino con la nueva
Descomprima el archivo en el directorio arduinohardwarelibraries
A continuacion se muestra el sketch necesario para manipular cinco servos utilizando la libreria :
#include <Servo.h> #undef int #undef abs #undef double #undef float #undef round Servo myservo0; Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; long loopCounter = 0; int angleCounter = 0; int angles[] = { 45,90,135,90 }; void setup() { myservo0.attach(2); myservo1.attach(3); myservo2.attach(4); myservo3.attach(5); myservo4.attach(6); } void loop() { Servo::refresh(); if(loopCounter++%25000 == 0) servos(angles[angleCounter++%4]); } void servos(int angle) { myservo0.write(angle); myservo1.write(angle); myservo2.write(angle); myservo3.write(angle); myservo4.write(angle); }
En la version 0012 de Arduino es necesario adicionar el undef debido a que al momento de compilar se produce un error.
A diferencia de la libreria oficial, esta libreria permite conectar los servos en cualquiera de los pines de la tarjeta permitiendo tener hasta 20 servos, en el ejemplo utlizaremos cinco servos los cuales conectamos a los pines 2,3,4,5,6; no se utilizaron los pines 0 y 1 debido a que esto manejan la comunicacion serial con el computador.
Se debe tener encuenta que el metodo Servo::refresh(); debe llamarse cada 50ms por lo menos, por tal motivo no debemos utilizar pausas con delays, lo cual no permite que la libreria funcione correctamente, debemos cambiar la estrategia por ejemplo a ejecutar determinadas tareas despues de que el loop se ejecute varia veces, esto se logra teniendo un contador en el loop y ejecutando el codigo despues de que se llegue a determinado valor, por ejemplo : if(loopCounter++%25000 == 0) ejecuta los llamados al cambio de posicion de los servos cada que el loop se ha ejecutado veiticinco mil veces. Para controlar la posicion de los servos se utiliza un arreglo el cual especifica los angulos, los cuales van siendo cambiados a medida que se solicita el cambio de posicion en el loop.
Nota :
Recuerde evitar el uso de delays(), esto no permite el correcto posicionamiento de los servos


