Control de un servomotor con Arduino

esquema de conexión en arduino de un servo controlado por un potenciométro

Funcionamiento de un servomotor

Los servomotores son actuadores de pequeño tamaño que se utilizan para controlar los juguetes RC de coches, barcos, aviones, etc. También son utilizados por los estudiantes de ingeniería para la creación de prototipos en robótica, creando brazos robóticos, robots de inspiración biológica, robots humanoides, etc.

Dentro de uno de estos pequeños servos de aficionados hay cuatro componentes principales, un motor DC, una caja de engranajes, un potenciómetro y un circuito de control. El motor DC es de alta velocidad y bajo par, pero la caja de engranajes reduce la velocidad a unas 60 RPM y al mismo tiempo aumenta el par.

Control de un servomotor con Arduino- Arduino

Un servomotor se controla enviando una serie de pulsos a través de la línea de señal. La frecuencia de la señal de control debe ser de 50Hz o un pulso debe ocurrir cada 20ms. El ancho del pulso determina la posición angular del servo y este tipo de servos pueden normalmente rotar 180 grados (tienen un límite físico de recorrido).

Control de un servomotor con Arduino- Arduino

Control de un servomotor con Arduino- ArduinoEstos servos tienen tres cables, dos de ellos son la alimentación de corriente (Marrón o negro se conecta tierra y el rojo a V+) y el otro que generalmente es de color naranja o blanca, aunque puede variar según modelo o marca, es el cable de control que conectaremos a la placa de Arduino. Si los servos son grandes o vamos a usara varios se deben conectar a una fuente externa de alimentación.

El esquema de conexión sería el que muestra la figura:

Esquema conexión básico

Control de un servomotor con Arduino- Arduino

Para hacerlos funcionar lo más fácil es usar la librería Servo.h que incorpora Arduino. Solo tendremos que definir el objeto servo, y usando la función attach() definir el pin al que el servo está conectado. Luego, usando la función write() simplemente establecemos la posición del servo de 0 a 180 grados. Con esta librería podemos manejar hasta 12 servos al mismo tiempo o 48 servos usando la placa Arduino Mega.

Veamos un par de sketches muy sencillos, usando ambos el esquema de conexión de arriba.

Sketches básicos servomotor

#include <Servo.h>
Servo mi_servo;  // crea el objeto servo en mi caso lo llamo mi_servo
int servoPin=9; //Pin de conexión del servo

void setup() {
  mi_servo.attach(servoPin);  // conectar el servo al número de pin usado
}
void loop() {
  mi_servo.write(0);  // movemos el servo 0º
  delay(1000);
  
  mi_servo.write(90);  // movemos el servo 90º            
  delay(500); 
  
  mi_servo.write(135); // movemos el servo 135º             
  delay(500);
  
  mi_servo.write(180);         // movemos el servo 180º     
  delay(1500);                     
#include <Servo.h>

int servoPin = 9;
Servo miservo;
int angle = 0;  // posición del servo en grados
void setup() {
    miservo.attach(servoPin);
}

void loop() {

    // escanear de 0 a 180 grados
    for(angle = 0; angle < 180; angle++) {
        miservo.write(angle);
        delay(15);
    }
    
    // ahora escanea de 180 a 0 grados
    for(angle = 180; angle > 0; angle--) {
        miservo.write(angle);
        delay(15);
    }
}

Servomotor controlado por un potenciómetro

Ahora vamos a realizar otro ejemplo, moveremos el servo moviendo un potenciómetro de 10k. el potenciómetro lo conectaremos así: los pines laterales uno a GND y el otro a 5V y el pin central a un pin analógico. Veamos el esquema de conexión y el sketch:

Control de un servomotor con Arduino- Arduino
#include <Servo.h>

int potPin = 0;
int servoPin = 9;
Servo servo;

void setup() {
    servo.attach(servoPin);
}

void loop() {
    int lectura = analogRead(potPin);
    int angulo = map(lectura, 0, 1023, 0, 180);
    servo.write(angulo);
}

En la función de loop(), empezamos leyendo el valor del pin analógico A0, que es donde hemos conectado el potenciómetro.

Esto nos da un valor de entre 0 y 1023. Pero necesitamos reducirlo, ya que el servo sólo puede girar 180 grados. Una forma de hacerlo es usar la función map() de Arduino que re-mapea un número de un rango a otro. Así que, debajo de la línea cambia la lectura para representar el ángulo entre 0 y 180 grados.

Finalmente, usamos el comando write() que le dice al servo que actualice su posición al ángulo seleccionado por el potenciómetro.

Deja un comentario