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 :
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
Es posible controlar la posicion del eje de un servo desde la tarjeta Arduino, esto se logra enviando cierta cantidad de pulsos por segundo, lo cual el servo traduce como la posicion en la que se desea colocar el eje. Para realizar esta tarea de una forma mas sencilla Arduino posee una libreria llamada Servo la cual posee una clase que permite conectar el servo a los pines 9 o 10 de la tarjeta (estos pines soportan PWM) y colocar el eje en el angulo requerido.
Para controlar un servo se puede utilizar :
Servo servo1;
Permite crear un objeto el cual representara el servo a conectar.
servo1.attach(numPin);
Permite asignar como pin de conexion con el servo al pin 9 o 10 de la tarjeta
servo1.write(angulo);
Permite cambiar la posicion del servo
A continuacion se muestra el codigo para generar el movimiento mostrado en el video :
Un servo es un motor que no gira completamente y que puede posicionarse en cualquier angulo que este dentro de su rango de funcionamiento, de este modo es posible controlar la posicion actual del servo y el mismo corrige su posicion si se ve afectada. Los servos son muy utilizados en robotica como por ejemplo en la construccion de las articulaciones, lo cual permite controlar el el movimiento del brazo con gran presicion.
Internamente el servo posee un motor el cual cuenta con una serie de engranajes para aumentar la fuerza con que actua sobre el elemento a mover, asi como tambien posee un circuito electronico encargado de posicionar el eje en determinado angulo (generalmente tienen una capacidad de giro entre 0 y 180 grados), ademas de corregir la posicion del mismo si se ve afectado por una fuerza externa. El servo posee un conector con tres terminales dos para el suministro de la energia (tierra,voltaje) y un terminal que permite modificar la posicion por medio de PWM o modificacion por ancho de pulso. Los servos generalmente vienen acompañados de los tornillos para fijarlos, como tambien una serie de conectores para el eje que permiten utilizar el servo para diferentes propositos.
El servo que se muestra en el video tiene las siguientes caracteristicas :
Existen una gran variedad de servos para gran cantidad de aplicaciones, la diferencias principales estan en la precision, la duracion, el torque y la velocidad.