Cómo Controlar un Servomotor Utilizando Arduino

Conexión de un Servomotor con Arduino.

Los servomotores son ampliamente utilizados en proyectos de electrónica y robótica debido a su precisión y facilidad de control sobre la posición angular. En este artículo, aprenderás cómo controlar un servomotor utilizando un Arduino.

Hardware Necesario

Para seguir este tutorial, necesitarás los siguientes componentes:

  • Placa Arduino
  • Servomotor
  • Potenciómetro
  • Fuente de alimentación de 5 V
  • Un capacitor de 100 µF
  • Protoboard

¿Qué es un Servomotor?

Un servomotor es un dispositivo electromecánico que convierte una señal eléctrica en movimiento controlado. Es un motor de corriente continua (DC) con un sistema de control que permite mantener la posición del eje en un ángulo específico. Los servomotores son capaces de mantener una posición fija gracias a un lazo de retroalimentación que mide la posición actual del eje y ajusta la potencia suministrada al motor para corregir cualquier desviación de la posición deseada.

Los servomotores tienen diferentes requisitos de potencia en función de su tamaño y de la carga de trabajo que experimentan. Un servomotor común y muy utilizado con fines educativos es el micro servo sg90. Este motor puede ser alimentado directamente con Arduino, pero es muy recomendable utilizar una fuente externa para mantener el mismo circuito tanto si queremos aumentar la cantidad de servos a manejar como si queremos usar un servo más grande.

Los servomotores son populares en aplicaciones que requieren control preciso de la posición, como robots, aviones teledirigidos, y mecanismos automatizados.

Componentes principales de un Servomotor

El servomotor tiene cuatro elementos fundamentales:

  1. Motor DC: Proporciona el movimiento.
  2. Caja de engranajes: Reduce la velocidad y aumenta el torque.
  3. Potenciómetro: Proporciona retroalimentación sobre la posición angular del eje.
  4. Circuito de control: Recibe la señal de control y ajusta la posición del motor DC.

Distribución de entradas

El servomotor tiene tres cables:

  1. Señal: Señal de modulación por ancho de pulso (PWM, por sus siglas en inglés) para controlar el servo.
  2. Vcc: positivo de la fuente de alimentación.
  3. GND: Tierra.

Los colores típicos de estos son normalmente de color naranja o amarillo para la entrada de control, rojo para Vcc y marrón o negro para tierra. Estas combinaciones se muestran en la siguiente figura.

Cables de un Servomotor.

Señal de Control

La señal de control de un servomotor es una señal PWM. Esta señal consiste en una serie de pulsos que indican al servomotor la posición deseada del eje.

Características de la Señal PWM

  • Frecuencia: Normalmente, la frecuencia de la señal PWM es de 50 Hz (20 ms de periodo).

  • Duración del Pulso: La duración del pulso (ancho del pulso) varía típicamente entre 1 ms y 2 ms.

  • Un pulso de 1 ms posiciona el servomotor en su ángulo mínimo (0 grados).

  • Un pulso de 1.5 ms posiciona el servomotor en su posición central (90 grados).

  • Un pulso de 2 ms posiciona el servomotor en su ángulo máximo (180 grados).

La duración del pulso determina el ángulo de la posición del eje del servomotor. Por ejemplo, si el ancho del pulso es de 1.5 ms, el servomotor se posicionará a 90 grados.

Señal de control de un Servomotor.

Conexiones del Hardware

Para controlar el servo con Arduino se utilizará un sistema que basa su control en el accionamiento de un potenciómetro que sirve para indicarle al microcontrolador a través de la señal leída por uno de los pines analógicos el ángulo al que debe hacer rotar el servo. Para alimentar el servo se va a utilizar una fuente de 5 V. Si su proyecto requiere movilidad sin depender de una toma de corriente, una opción es usar baterías para alimentar el servo. Para obtener exactamente 5 V, puede emplear dos baterías de iones de litio 18650 combinadas con un convertidor reductor.

Información

La forma más simple de reducir una tensión continua es usar un circuito divisor de tensión, pero los divisores gastan mucha energía en forma de calor. Por esto es aconsejable utilizar un convertidor reductor ya que estos presentan una alta eficiencia.

Conecte el cable de señal del servomotor al pin digital 9 de Arduino. A continuación, conecte los cables Vcc y GND del servomotor a la fuente externa. Asegúrese de conectar la tierra de la fuente externa a uno de los pines GND de Arduino. Agregue un capacitor de al menos 100 μF a la entrada de la fuente externa. Conecte el pin central del potenciómetro al pin analógico 0 de Arduino y los pines externos a Vcc y GND de Arduino.

Advertencia

Asegúrese de conectar con la polaridad correcta el capacitor electrolítico ya que de lo contrario este se destruirá en cuestión de segundos. La destrucción de un capacitor genera calor y humo e incluso puede llegar a crear una pequeña explosión por la compresión de los gases en la envoltura metálica.

A continuación, se muestra un diagrama de la conexión descrita.

Conexión de un Servomotor con Arduino.

Se debe notar que, si se desea controlar el servo de otra forma, basta con cambiar la interfaz utilizada o eliminarlas del todo para hacer el movimiento del servo completamente autónomo. Si se quiere incorporar más servos solo se deben utilizar otros pines PWM de Arduino y conectar las entradas de alimentación a la fuente externa. Esta fuente debe ser capaz de dar corriente suficiente para alimentar todos los servos.

Advertencia

Al utilizar varias fuentes de tensión se deben siempre conectar todos los GND. De lo contrario se puede dañar algún componente.

Conexión de un Servomotor con Arduino.

Código de Arduino

Para controlar el servomotor se utilizará la librería Servo.h que viene preinstalada con el IDE de Arduino. Este código básico hará que el servomotor gire a una posición especificada con la rotación del potenciómetro conectado al pin analógico 0.

 1// Ejemplo de Arduino para controlar un servomotor
 2// Más información: https://www.3dpellet.com
 3
 4#include <Servo.h>
 5
 6// Pin analógico usado para conectar el potenciómetro
 7#define potPin 0 
 8// Pin analógico usado para controlar el servo
 9#define servoPin 9
10
11// Crea un objeto Servo para controlar un servo
12Servo myservo;
13
14//Variable para leer el valor del pin analógico
15int val;
16
17void setup() {
18  // Adjunta el servo en el pin 9 al objeto servo
19  myservo.attach(servoPin);
20}
21
22void loop() {
23  // Lee el valor del potenciómetro (valor entre 0 y 1023)
24  val = analogRead(potPin);
25  // Escala el valor para usarlo con el servo (valor entre 0 y 180)
26  val = map(val, 0, 1023, 0, 180);
27  // Establece la posición del servo según el valor escalado
28  myservo.write(val);
29  // Espera a que el servo llegue a la posición utilizando una demora por software
30  delay(15);
31}

Consideraciones Adicionales

  • Fuente de Alimentación: Si su servomotor requiere más corriente de la que puede suministrar el Arduino, utilice una fuente de alimentación externa. Conecte GND de Arduino y la fuente de alimentación externa para tener una referencia común.

  • Calibración: Algunos servomotores pueden necesitar una calibración inicial para asegurar movimientos precisos. Revise la documentación específica de su servomotor.

Conclusión

Controlar un servomotor con Arduino es una tarea sencilla y divertida que puede ser la base para proyectos más complejos, como robots, mecanismos automatizados y sistemas de control de movimiento. Este tutorial le ha mostrado cómo realizar las conexiones básicas y escribir el código necesario para mover el servomotor a diferentes posiciones. Experimente con diferentes ángulos y velocidades para ver todo lo que puede lograr.