Controlar un servo con Arduino

El servomotor Arduino es un elemento importante en el diseño de diversos robots y mecanismos. Se trata de un actuador preciso, que dispone de retroalimentación para controlar con precisión los movimientos de los mecanismos. Consideremos la estructura y el principio de funcionamiento del actuador de 3 puntos. Analicemos ejemplos sencillos de código para controlar un servo 9g SG90 mediante un potenciómetro y un botón pulsador.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • servomotor 9g SG90
  • potenciómetro
  • botón pulsador
  • placa de pruebas
  • cables de conexion

Principio de funcionamiento servo pinout, datasheet

El servomotor Arduino (datasheet, pinout)
El servomotor Arduino datasheet, pinout

Características micro servo 9g SG90:

  • Voltaje de funcionamiento: 3,0-7,2V
  • Velocidad (4.8V sin carga): 0.12sec/60 degrees
  • Fuerza: 1.2kg / 42.3oz(4.8V);1.6 kg / 56.4oz (6.0V)
  • Temperatura de trabajo: -30 to +60 grados ºC
  • Dimensiones: 22×11.5x27mm

Los servomotores Arduino se utilizan ampliamente para simular los movimientos mecánicos de los robots. Un servomotor se compone de un sensor (de velocidad, posición, etc.), una unidad de control de accionamiento de un sistema mecánico y circuitos electrónicos. Los engranajes del aparato son de metal, carbono o plástico. Tenga mucho cuidado al trabajar. Los engranajes de plástico del servomotor no pueden soportar grandes cargas y golpes.

El servomotor 9g SG90 para microcontrolador Arduino lleva incorporado un potenciómetro que se conecta al eje de salida. Al girar el eje, el servomotor modifica el valor de la tensión en el potenciómetro. El microcontrolador analiza la tensión de la señal de entrada y la compara con la tensión del potenciómetro. En función de la diferencia obtenida, el motor girará suavemente hasta que la tensión de salida y la del potenciómetro sean iguales.

Cómo conectar un servomotor a Arduino

Conectar un servomotor con Arduino Uno
Cómo se conecta un servomotor a Arduino Uno

La conexión del servo al Arduino suele hacerse de la siguiente manera: conecta el cable negro a GND, conecta el cable rojo a 5V, el cable naranja (amarillo) al pin digital de propósito general. El control de los servomotores en el microcontrolador Arduino (cómo controlar un servomotor) es bastante sencillo, pero los servomotores tienen ángulos de rotación de 180° y 360°, lo que debe tenerse en cuenta al diseñar proyectos con servomotores.

Cómo manejar un servo con la librería servo.h

#include "Servo.h"

Servo servo; // creación del objeto "servo"

void setup() {
   servo.attach(10); // iniciamos el servo con el pin 10
}

void loop() {
   servo.write(0); // desplazamos a la posición 0º
   delay(1000); // esperamos 1000 ms

   servo.write(90); // desplazamos a la posición 90º
   delay(1000); // esperamos 1000 ms

   servo.write(180); // desplazamos a la posición 180º
   delay(1000); // esperamos 1000 ms
}

Explicación del código para manejar un servomotor Arduino:

  1. el comando servo.attach(10) vincula el servo a la salida digital 10 del Arduino;
  2. en la función void loop() giramos el servomotor de 0-90-180 grados.
Conexión de servo con Arduino y potenciómetro
Conexión de servomotor con Arduino y potenciómetro

Al recibir el valor de la señal de control del Arduino como entrada, el servomotor tiende a mantener este valor a la salida de su actuador. Vamos a dar un ejemplo más complejo de control de un servomotor con un potenciómetro en el Arduino. Construye un circuito con un potenciómetro y carga el programa en el Arduino para controlar el servo motor.

Controlar un servomotor con un potenciómetro

#include "Servo.h"

Servo servo; // creación del objeto "servo"

void setup() {
   servo.attach(10); // iniciamos el servo con el pin 10
   pinMode(A1, INPUT);
   Serial.begin(9600); // iniciamos el puerto serie
}

void loop() {
   int val = analogRead(A1); // lee el valor actual del potenciómetro 

   val = map(val, 0, 1023, 0, 180);
  
   Serial.println(val);
   Serial.println();
   
   servo.write(val);
   delay(100);
}

Explicación del código para controlar servo con potenciómetro:

  1. el nombre del objeto servo para cada actuador debe ser único;
  2. el comando Serial.println(val) envía la información del potenciómetro al puerto serie.
Conexión de servo con Arduino y pulsador
Conexión de servomotor con Arduino y pulsador

En el último programa veremos cómo controlar un servomotor de Arduino Uno con un botón pulsador. También utilizaremos la biblioteca estándar Servo.h. Conecta el servo a la placa Arduino como se muestra en la imagen anterior y carga el código terminado en el microcontrolador. En el void loop() simplemente pondremos el servo (servo giro de 0 a 180º) en el ángulo de rotación deseado cuando se pulse o suelte el botón pulsador.

Cómo manejar un servomotor con un pulsador

#include "Servo.h"

Servo servo; // creación del objeto "servo"

void setup() {
   servo.attach(10); // iniciamos el servo con el pin 10
   pinMode(A1, INPUT);
   Serial.begin(9600); // iniciamos el puerto serie
}

void loop() {
   int val = analogRead(A1); // lee el valor actual del botón

   if (val < 512) { servo.write(0); }
   if (val > 512) { servo.write(90); }
}

Explicación del código conexion servo Arduino y controlar con pulsador:

  1. los valores de la variable val pueden variar (en función de la resistencia del circuito) y pueden tomar valores entre 0 y 1023.

Conclusión. Los servomotores se utilizan a menudo en varios proyectos de Arduino para diversas funciones: girar estructuras, mover partes de mecanismos. Dado que el servomotor de Arduino microcontrolador está constantemente tratando de mantener un ángulo de rotación determinado, prepárate para un mayor consumo de energía. Esto se notará especialmente en los robots autónomos alimentados por baterías o pilas recargables.


2 Replies to “Cómo conectar servomotor a Arduino y controlar”

  1. ¿Se podría conectar un servomotor que se mueva al detectar movimiento con un sensor?

    Soy nuevo en el mundo Arduino, ¿me pueden recomendar por dónde empezar?

Deja una respuesta

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