Resistance is Futile

Arduino + Multiples Servos

Servo + Arduino

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 :

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

No hay entradas relacionadas.

5 Responses to “Arduino + Multiples Servos”

  1. alejo says:

    Excelente Marlon! Un proyecto muy inspirador…

    Hermano no veo ningun puente H ahi… no se necesita? Los servos pueden ser manejados directamente desde la board?

    Saludos !

  2. marlonj says:

    Que tal Alejo

    No es necesario tener un puente H, pues los servos son manejados por pulsos que son enviados por la libreria de Servos, asi que el montaje es sencillo.

    Esto permite hacer de la Arduino un controlador de Servos al cual se le puede adicionar comunicacion serial, para controlar los servos desde otra aplicacion.

    Saludos !

  3. sebasGomez says:

    Hola Marlon. Qué envidia, pero de la buena… Lo felicito por todas las cosas que estan realizando; en cualquier momento me les pego al proyecto. Hablamos…

  4. Ramon says:

    Hola Marlon. Muchisimas gracias por el tutorial. Tengo una duda que quizas puedas solucionar. No me funciona el codigo en arduino 0017, me da un error en Servo::refresh();

    Podrias ayudarme?

    Gracias de antemano
    Ramón

  5. Rene says:

    Hola Marlon. una duda, tengo que hacer un proyecto y voy a usar unos servos futaba, con esto es posible manejarlos o moverlos a diferentes ángulos al mismo tiempo? uso la tarjeta diecimila.
    gracias.

Leave a Reply

Powered by WordPress | Designed by Elegant Themes