Funcionamiento de servomotor

Código para el uso de servomotor con librería y su cableado.

Ejemplo del servomotor conectado a la placa Arduino

Un servomotor es un motor de corriente continua, diseñado para que se mueva en un ángulo fijo y mantenga esa posición hasta una nueva orden. Utilizados en aeromodelismo y robótica, por la capacidad de moverse en ángulo.

Sus principales características son: tamaño, fuerza, velocidad y precisión. Aunque su principal característica es el torque. Los servos tienen 3 cables. El rojo se conecta a Vcc, el marrón a GND y el naranja será el encargado de la señal.

A la izquierda cables del servo, a la derecha cableado usando Arduino

El control de servos usando Arduino es muy sencillo ya que existe una librería completa para su control llamada «servo.h» . Explicaremos brevemente las funciones de la librería.

  • attach (pin, min, max)                                                                                                                                 Vincula la variable servo a un pin.                                                                                                                pin: patilla conectada a la señal del control del servo.                                                                            min: ancho de pulso en us que se corresponde con . Por defecto 544.                                        max: ancho de pulso en us que se corresponde con 180º. Por defecto 2400.                                                
  • write (grados)                                                                                                                                                 Hace girar el eje del servo un número de grados según le indique (de a 180º)                                        
  • writeMicroseconds(tiempo)                                                                                                                         Indica la anchura de pulso en us al servo. Los parámetros para un servo estándar son 1000 us para un desplazamiento total a la izquierda. 2000 us para la derecha y 1500 us para posicionarlo al medio. Aunque si se quiere un control exacto, habrá que estudiar el datasheet.                                    
  • read()                                                                                                                                                                 Lee la posición actual del servo y devuelve un valor entre 0 y 180.                                                            
  • attached (pin)                                                                                                                                                   Verifica si la variable servo está unida al pin indicado, devuelve true o false.                                            
  • detach (pin)                                                                                                                                                      Desvincula la variable servo del pin indicado.
Para aprender a utilizar la librería giraremos el motor de a 180º y lo volveremos a colocarlo en su posición inicial
#include <Servo.h> //librería de servomotores
Servo servomotor; //creamos un objeto llamado servomotor

void setup() {
  Serial.begin(9600); //inicializamos comunicación serial entre Arduino y otro dispositivo
                      //9600 será la velocidad en baudios. Ahora podremos usar serial.print() y serial.read()
  servomotor.attach(2); //asociamos el servo al puerto 2
  servomotor.write(0); //inicializamos el servo en posición 0º
}

void loop() {
  int angulo;
  for (angulo=0 ; angulo<=180 ; angulo++){  //ángulo del servo desde 0º a 180º
    servomotor.write(angulo);  // ordenamos al servo girar hasta ese ángulo
    Serial.print(«Ángulo: «);  // printeamos ese ángulo
    Serial.println(angulo);
    delay(50);
  }
  for (angulo=180 ; angulo>=0 ; angulo–){  //ángulo del servo desde 180º a 0º
    servomotor.write(angulo);   // ordenamos al servo girar hasta ese ángulo
    Serial.print(«Ángulo: «);   // printeamos ese ángulo
    Serial.println(angulo);
    delay(50);
  }
}

Otro ejemplo sencillo es el control del servomotor usando un potenciómetro, el ángulo del servo dependerá de la posición del potenciómetro. A continuación podes ver un ejemplo de su cableado.

Ejemplo del cableado usando potenciometro

Un ejemplo del posible código que usaremos para controlar el servomotor con un potenciómetro en Arduino será el siguiente:

#include <Servo.h> //incluimos la librería del servo
Servo servomotor;  //creamos un objeto llamado servomotor

const int pinPoten = 0;  //puerto del potenciometro
const int pinServo = 2;  //puerto del servo
const int pulsoMin = 650;  //pulso para girar servo a 0º
const int pulsoMax = 2550; //pulso para girar servo a 180º
int valor;
int angulo;

void setup() {
  Serial.begin(9600); //comunicación serial entre Arduino y servo
  servomotor.attach(pinServo, pulsoMin, pulsoMax);
}

void loop() {
  valor = analogRead(pinPoten);  //leemos señal del potenciometro
  angulo = map (valor, 0, 1023, 0 ,180); //el pin digital da valores entre 0 y 1023.
                                         //Utilizamos map para adaptarlo a valores entre 0º y 180º
  servomotor.write(angulo); //escribimos el ángulo
  Serial.print(«Ángulo: «); //printeamos el ángulo
  Serial.println(angulo);
  delay(50);
}

Esperemos que os haya servido de ayuda en vuestros proyectos o al menos hayáis aprendido algo que desconocíais.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *