ARDUINO: Controlar un Servomotor



En esta práctica se enseña a usar el servomotor con la librería que ya incluye el software de Arduino, el servomotor que se usará será un SG90, este servomotor es de 180°,  además de que esto es la base para poder crear proyectos más avanzados uniendo lo ya visto y los temas por ver.

Existe una gran variedad de servomotores en el mercado, éstos tienen una característica principal que es la capacidad de controlar con precisión la posición de su eje.

Si quieres conocer más sobre los tipos de servomotores de hobby, sus características y partes que lo conforman, así como el tipo de sistema de control, te recomiendo visitar el siguiente enlace (Ver más sobre el servomotor)

 
 

Materiales:

  • 1x Arduino

  • 1x Servomotor SG90

  • 1x Potenciómetro de 10K

  • 1x Protoboard

  • Jumpers

NOTA: Es muy importante considerar el voltaje de alimentación del servomotor, así como la corriente de funcionamiento y la corriente de pérdida.

Servomotor con arduino

  • Se pueden controlar hasta 19 servos usando los pines analógicos (varía dependiendo de la tarjeta Arduino).

  • Se puede utilizar la librería incluida en Arduino llamada "servo"

    • Para usarla debemos escribir arriba del sketch: #include

    • Declararemos nuestro servomotor con: Servo [Nombre del servo];

    • En setup declaremos el pin del servo: [Nombre del servo].attach([pin]);

    • Para escribir en nuestro servo usamos: [Nombre del servo].write[(angulo]);

Podemos mover un servo sin librería con la siguiente función: 

void moverServo(int pin, int angulo) {
  float pausa;
  pausa = angulo * 2000.0/180.0+500;
  digitalWrite(pin,HIGH);
  delayMicroseconds(pausa);
  digitalWrite(pin,LOW);
  delayMicroseconds(25000-pausa);
}

Esquema de montaje

El servomotor dispone de tres cables, dos cables de alimentación (GND y Vcc) y un cable para la señal (Sig). Normalmente los servomotores tienen la siguiente combinación de colores de cables:

  • Marrón (GND), rojo (Vcc) y naranja (Sig).

  • Negro (GND), rojo (Vcc) y blanco (Sig).

Clic en la imagen para ampliar.

Como se muestra en el esquema de conexión, debemos conectar el pin digital de nuestra tarjeta Arduino al servomotor, así como conectar los cables negativo y positivo a la fuente de alimentación. Es importante conectar las tierras en un sólo punto o nodo, ya que si no se conectan las tierras de esta manera podemos generar una tierra flotante.

Código

Como pueden observar el código se inicia llamando la librería del servo usando #include , después se definen los pines a usar; en este caso el potenciómetro y el servo al que se le asigna el nombre de ServoUNO. En el setup se configuran los pines con la función de la librería attach enviándola al nombre del servo, se declara en qué pin está conectado el servo; en este caso en el pin 2 como se ve en el diagrama.

En la parte del loop puede observar que se leen los datos del potenciómetro y se almacenan en una variable, después usando la función map vista anteriormente se transforman los valores del potenciómetro a valores aceptados por el servomotor, en este caso el servomotor es de 0 a 180°, es por eso que, gracias a la función map trasformamos a los valores de 0 a 180.

A continuación, usando la función write de la librería Servo y enviándola al nombre del servomotor, le entregamos como parámetro la variable aux, ya que en esa variable se almacenarán los números de 0 a 180, se asigna un delay para que el servomotor no se mueva muy rápido, cuando intente mover el potenciómetro usted notará que el servomotor también se mueve desde 0 a 180°.

Usando el monitor serial podemos ver los valores del potenciómetro y a qué grado se convierte cada valor, como puede ver hemos unido lo visto en sensores analógicos para mover un servomotor, también puede unir lo visto en sensores digitales para mover el servomotor, esto queda como investigación al lector.

//Incluimos la libreria servo
#include <Servo.h>

//Definimos pines a usar
#define POT A0

//Definimos nuestro servo
Servo ServoUNO;

void setup() {
  Serial.begin(9600);
  pinMode(POT,INPUT);
  ServoUNO.attach(2);
}

void loop() {
  int POT_R = analogRead(POT);
  
  int aux = map(POT_R,0,1023,0,180);

  ServoUNO.write(aux);
  delay(10);

  Serial.print("Valor POT: ");
  Serial.print(POT_R);
  Serial.print(" | Angulo Servo: ");
  Serial.println(aux);

}

Consumo de corriente

También se debe de considerar hacer pruebas con un multímetro y medir el consumo de corriente de nuestro servomotor, se recomienda debido a que los servomotores que utilizamos normalmente no son originales sino una réplica más económica y obviamente tiene un peor rendimiento.