Trabajando con servos de 360º

Objetivos

    • Que es un servo de 360º y su manejo.
    • Conexión básica de un servo
    • La función map().

servos 360º

Material requerido

arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
Img_3_4
  •  Una Protoboard.
servos 360º
  • Un servo 360º
   
Img_3_6-300x185
  • Algunos cables de Protoboard.

Usando la librería: Servo.

Servo es una librería estándar en Arduino. Eso quiere decir que viene incluida cuando instaláis el IDE, a diferencia de otras librerías que debemos buscar, descargar de Internet e instalar para poder usarlas.

Para usar una librería estándar, basta con pedirle al IDE que la incluya en nuestro programa. Id al menú Programa -> Importar Librería y os saldrá un desplegable con todas las librerías que tenéis instaladas en el IDE.

Por ahora solo nos interesa la librería Servo. Pinchad en ella. Arduino incluirá una línea al principio de vuestro programa como esta:

#include <Servo.h>

A partir de ahora ya podemos utilizar las funciones disponibles en la librería.

Servomotor Arduino Características

En el mercado es posible encontrar varios tipos de servos, y es importante entender sus características para adaptarlos adecuadamente a nuestros proyectos, por lo tanto, es de extrema importancia de que leas la hoja de datos del servo que deseas comprar para ver si se adapta en fuerza y grados de movimiento a tu proyecto.

Existen 2 servos básicos que son:

  1. Servomotor de -90 grados a 90 grados (total de 180 grados)
  2. Servomotor de 360 grados

Con el servomotor de 180 grados con Arduino podremos controlar la posición donde deseamos ubicar el motor, por otro lado cuando conectamos un servomotor 360 grados en Arduino ya NO tendremos control de posición, porque el servo gira constantemente. Este servomotor de 360 grados es utilizado para realizar control de velocidad, bastante empleado en pequeños o medianos robots para el control de velocidad de las ruedas.

Un factor a tener en cuenta es observar la fuerza del servomotor, que sea adecuada para mover la carga que necesitamos en nuestro proyecto.

Vamos a montar un circuito en el que hagamos moverse al servo de forma controlada, e iremos viendo las instrucciones necesarias.

El servomotor Puede ser conectado en cualquier PIN DIGITAL de la PLACA DE ARDUINO.

El esquema.

El diagrama de conexión para la protoboard es sencillo:
 
Servo-Arduino
 

El programa.

Comenzaremos incluyendo la librería y definiendo un objeto para utilizar el servo, lo llamaremos servo1. Podemos definir tantos servos como componentes queramos manejar:

#include <Servo.h>
Servo servo1;

Así, esa segunda línea significa que vamos a crear una nueva instancia de tipo Servo que llamamos servo1.

  • Aunque ahora os pueda parecer una forma extraña de hacer las cosas, la programación orientada a objetos, es una de las metodologías más potentes de las ciencias de computación actuales y todos los lenguajes de programación que se precien, han incorporado las ideas de la OOP.
  • Por ahora nos limitaremos a mostrar como usar los objetos.

Una vez creada la instancia del objeto tenemos que incluir una línea en la función setup() para informar de que vamos a conectar ese objeto abstracto que todavía es servo1 a un pin físico del Arduino para controlarlo. En nuestro caso el pin 9:

servo1.attach(9);

Los servo motores de 360 grados son servos RC estándar que se han modificado para ofrecer un control de velocidad en lazo abierto en lugar de su control habitual de posición de lazo cerrado.

La modificación los convierte en motores con un sistema de motoreducción que le permite aumentar su fuerza y disminuir la velocidad, donde adicionalmente se puede controlar el sentido de giro, todo eso integrado en un paquete compacto y económico.

Se puede usar en ruedas de robots y controlarse mediante una señal RC o una simple conexión directa a una sola línea de E / S del microcontrolador (Arduino).

Como controlar un servomotor 360 grados en Arduino

Para eso vamos a valernos de la misma librería del Arduino solo que en este caso usaremos las siguientes configuraciones para manipular un servo continuo o de 360 grados.

Primero veamos que las señales PWM que deben ser enviadas son exactamente las mismas, con la diferencia de que ya no tendremos el control de posición (CCW: sentido antihorario; CW: Centido Horario)

Detener Servomotor 360

Es decir que si deseas saber como detener un servomotor con arduino de 360 usamos la siguiente instrucción:

servo.write(90);

Detener un servomotor de 360 grados es equivalente a programar un servomotor común en 90 grados.

Sentido Anti-Horario

servo.write(180);

Mover un servomotor de 360 grados en sentido anti-horario es equivalente a programar un servomotor común en 180 grados.

Sentido Horario

servo.write(0);

Mover un servomotor de 360 grados en sentido horario es equivalente a programar un servomotor común en 0 grados.

Controlar la Velocidad de un Servomotor de 360 grados

¿Como controlar la velocidad de un Servo con Arduino? Primero que todo cabe aclarar que el control de velocidad de un servomotor de 360 grados no es muy precisa, por lo tanto si tu objetivo es lograr una velocidad precisa deberás optar por agregar un sensor adicional.

Como ya lo notaste, en un servo de giro completo en lugar de enviar un ángulo entre 0 y 180 grados lo que estaremos enviando realmente es su velocidad y no solo el sentido:

  • 0: máxima velocidad de giro en sentido horario.
  • Entre 0 y 90: se conserva el mismo sentido horario pero la velocidad se reduce conforme nos acercamos a 90
  • 90: el servomotor 360 se detiene.
  • Entre 90 y 180: la velocidad aumenta conforme nos acercamos al valor de 180, girando en sentido antihorario.
  • 180: máxima velocidad de giro en el sentido antihorario.

Servo Arduino Ejemplo

En este ejemplo, conectaremos un servomotor al Arduino en el PIN 5, y a través del puerto serial le enviaremos la velocidad a la cual se debe desplazar el servomotor.

Si se emplea un servomotor grande o que esté arrastrando alguna carga, debemos alimentarlo con una fuente EXTERNA, dado que el arduino no será capaz de moverlo. Esta fuente EXTERNA deberá compartir la misma TIERRA o GND que el Arduino.

Código

#include <Servo.h>  //Include the Servo Library

int dir=0,menu=1,opc=0;
char c='\0';
String words;       
Servo servo1;   // "Servos" objects are created

void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);
    Serial.println("Servo 360 - Arduino");
    servo1.attach(5);
    servo1.write(90);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(menu==1){
    Serial.println(" ");
    Serial.println("ESCRIBE UNA OPCIÓN ENTRE 1 Y 3 ");
    Serial.println("1)  Detener Motor");
    Serial.println("2)  Sentido Horario");
    Serial.println("3)  Sentido Anti-Horario");
   menu=0;
  }
  while (Serial.available()) {    // Read the value 
    delay(5);
    c  = Serial.read();     // Read the characters
    words += c;              // Convert Characters to character string
  }
  opc=words.toInt();  
  if (opc!=0){     
     if(opc>=1 && opc<=3){
        switch(opc){
        case 1:
               servo1.write(90); 
               Serial.println(">>>>> Motor DETENIDO! <<<<<<");
               break;
        case 2:
              servo1.write(0); 
              Serial.println(">>>>> GIRANDO SENTIDO CW <<<<<<");
              break;
        case 3:
              servo1.write(180); 
              Serial.println(">>>>> GIRANDO SENTIDO CCW <<<<<<");
              break;
        }
    }else{
         Serial.println("   OPCIÓN INVALIDA!!!! INTENTE NUEVAMENTE");
  }
  menu=1;
  opc=0;
}  

Deja un comentario