Arduino - Control de Servos

Arduino - Control de Servos 



Los motores que habitualmente conocemos y usamos en nuestros proyectos convierten la energía eléctrica en energía mecánica o movimiento. Un Motor Servo funciona bajo los mismos principios salvo que tiene algunas características extra a los motores de corriente continua.

Un Servo no es más que un motor de corriente continua, pero a diferencia de tener un giro continuo en una sola dirección, este responde a un pulso PWM de nuestro micro controlador para posicionarse en un angulo especifico.  

El servo esta conformado por distintos componentes, un motor DC, un tren de engranes (Mayor torque y precisión) y un circuito de control el cual lee el pulso que le llega y a partir de este, posiciona al Servo en el angulo indicado.

Los Servos son muy utilizados en Robotica, por la fuerza que tienen gracias a su tren de engranes y la capacidad de posesionarse en un angulo especifico y mantenerse ahí. Estos motores tienen un rango de movimiento de 0 a 180 grados.

Conexiones

Los Servos tienen 3 cables, normalmente de los siguientes colores, Marrón o Negro(GND), Rojo(VCC), y Naranja o Amarillo(Señal).

Hacemos las conexiones correspondientes con nuestro Arduino para los siguientes ejemplos de código. Necesitaras unos cuantos jumpers para realizar las conexiones.

Librería

Para poder controlar los Servos necesitamos una librería que nos ayude a facilitar esta tarea, para nuestra suerte Arduino ya cuenta con ella por default. Solo debemos dirigirnos en nuestro software de Arduino a Programa >> Incluir Librería >> Servo.

Una vez incluida ya podremos crear la comunicación con nuestro Servo o Servos en caso de utilizar más de uno.

Código

El primer código es el clásico sweep, con este código nuestro servo partirá del grado 0 he ira aumentando 1 cada 50 mili-segundos, al llegar a 180 grados, hará la acción contraria y regresara a 0 grados. Los códigos se encuentran comentados en cada linea para que entiendan el funcionamiento del programa.
--------------------------------------------------------
//Tecnologhost.com
#include <Servo.h> //Incluimos la Librería Servo.

Servo Servo1;  //Creamos el Servo y lo nombramos(Servo1).
//Se pueden crear más de un Servo si queremos trabajar con muchos al mismo tiempo.

int Angulo = 0;    //Variable del Angulo que le daremos a nuestro Servo.

void setup() {
  Servo1.attach(10);  //Definimos el pin de donde se mandara la señal al Servo.
}

void loop() {
  for (Angulo = 0; Angulo <= 180; Angulo ++) { // Bucle para ir de 0 grados a 180 grados.
    // Aumentara 1 grado en cada ciclo.
    Servo1.write(Angulo);       //Le decimos al Servo que se posicione en la variable "Angulo".
    delay(25);                  //Retardo de 25 mili-segundos por cada ciclo.
  }
  for (Angulo = 180; Angulo >= 0; Angulo --) { //Bucle para ir de 180 grados a 0 grados.
    Servo1.write(Angulo);       //Le decimos al Servo que se posicione en la variable"Angulo"
    delay(25);                  //Retardo de 25 mili-segundos por cada ciclo.
  }

}
--------------------------------------------------------
En el siguiente GIF se muestra el funcionamiento de este ejemplo.

El siguiente código es una secuencia de posiciones, primero se posicionara en 45 grados, y comenzara una sucesión de posiciones no periódica,  en caso de necesitar un movimiento único no secuencial.
--------------------------------------------------------
//Tecnologhost.com
#include <Servo.h> //Incluimos la Librería Servo.

Servo Servo1;  //Creamos el Servo y lo nombramos(Servo1).
//Se pueden crear más de un Servo si queremos trabajar con muchos al mismo tiempo.

void setup() {
  Servo1.attach(10);  //Definimos el pin de donde se mandara la señal al Servo.
}

void loop() 
{
  Servo1.write(45);
  delay(500);
  Servo1.write(90);
  delay(500);
  Servo1.write(45);
  delay(500);
  Servo1.write(100);
  delay(500);
  Servo1.write(180);
  delay(500);
   Servo1.write(90);
  delay(500);
}
--------------------------------------------------------
En el siguiente GIF se muestra el funcionamiento de este código.

Los códigos son meros ejemplos, recuerden que pueden modificarlos a sus necesidades. Espero les haya sido de utilidad la información, recuerden que esto es algo básico para el control de Servos, pueden crear programas tan complejos como puedan y aprovechar al máximo estos motores, las dudas o sugerencias pueden dejarlas en los comentarios, las atenderé en cuanto pueda.

Comentarios