Introducción

En esta entrada te enseñaremos a controlar servomotor con tu tarjeta Arduino uno. Aprenderás todos los aspectos necesarios para su conexión y programación de forma que puedas integrar libremente estos dispositivos en cualquier proyecto.

Los servomotores son ampliamente utilizados en proyectos con Arduino debido a que son fáciles de usar y ampliamente disponibles en el mercado a costos muy accesibles. Además ofrecen una precisión aceptable en el posicionamiento para la mayoría de los proyectos.

Por defecto, Arduino nos proporciona las herramientas necesarias a nivel de software para facilitar la programación de estos dispositivos electromecánicos, generando por nosotros las señales de control necesarias.

Para poder integrar un servo en nuestros proyectos con Arduino es necesario conocer con cierto nivel de detalle el funcionamiento y características de este dispositivo. En esta sección explicaremos un poco de la teoría de funcionamiento.

¿Qué es un servomotor RC?

Un servomotor de modelismo y radiocontrol (RC) es un dispositivo actuador electromecánico que permite controlar de forma relativamente precisa el posicionamiento del eje del motor y además es capaz de mantener esa posición aunque se aplique una fuerza externa al eje.

Esto quiere decir que mediante una señal de control electrónica podemos definir la posición del eje en un rango que habitualmente va de 0 a 180 grados, aunque existen servos que abarcan un mayor rango e incluso existen algunos de rotación continua.

¿Cuáles son las partes internas de un servomotor?

Los principales componentes que encontramos dentro de un servomotor estándar son:

  • Motor de corriente directa.
  • Caja de engranes reductora.
  • Sensor de posición o potenciómetro, conectado físicamente al eje de salida del servomotor.
  • Circuito de control electrónico de lazo cerrado.
Fotografía que muestra a detalle las partes internas de un servomotor, incluyendo el motor, la caja reductora y la electrónica de control.

La mayoría de los servomotores emplean internamente un control de lazo cerrado diseñado con electrónica analógica (especialmente los servos muy económicos), sin embargo el servo acepta una señal de control digital de tipo PWM que define la posición en donde queremos colocar el eje del motor.

Debido a que la señal de control de un servomotor es digital, es muy sencillo generarla desde un microcontrolador o microprocesador y en general cualquier tipo de hardware digital.

Señal PWM para el control de servomotores

La modulación por anchura de pulso (PWM) es una técnica de transmisión de información o energía que consiste en cambiar el ciclo de trabajo de una señal cuadrada, mientras que la frecuencia se mantiene constante.

El ciclo de trabajo se define como la parte activa o el tiempo que pasa en alto la señal.

En el caso de un servomotor que se conecta con Arduino, el ciclo de trabajo dicta la posición en la que queremos posicionar el eje del servo RC. La forma en la que trabajan la mayoría de los servos es la siguiente:

  • Para posicionar el servo a la mitad de su recorrido debemos enviar un pulso con una duración de 1.5 mili-segundos.
  • Para ir a un extremo del recorrido debemos enviar un pulso con una duración de 1 mili-segundo.
  • Finalmente para ir al otro extremo el pulso deberá ser de 2 mili-segundos.

Se puede variar el ancho de los pulsos en este rango (1 a 2 mili-segundos) para colocar el eje del servo en cualquier posición que deseemos.

Ilustración que muestra la relación entre el cíclo de trabajo y la posición del eje del servo.

Las características que debe tener la señal de control para un servo estándar son las siguientes:

  • Frecuencia: 50 Hz
  • Periodo: 20 ms
  • Ancho de pulso: 1 a 2 ms (dependiendo de la posición deseada)
  • Voltaje típico: 5 volts

Las características de la señal requerida para el control de un servo suelen variar con el fabricante y modelo del servo, por lo que siempre es importante consultar las especificaciones del fabricante para evitar problemas de funcionamiento.

Materiales

Para las prácticas que mencionamos en esta página recomendamos adquirir los siguientes materiales:

Conexión de un servomotor con Arduino

La conexión de un servomotor RC con una tarjeta Arduino puede ser un tema simple o bastante complicado dependiendo del tamaño y cantidad de servomotores que deseamos conectar.

A medida que conectamos motores mas grandes a la tarjeta, el consumo de corriente aumenta y se hace necesario utilizar una fuente de alimentación externa para los motores en vez de usar la salida de 5 volts en nuestra placa.

En esta sección te vamos a explicar como realizar la conexión tanto en la alimentación directa de 5 volts de la placa, así como utilizando una fuente externa dedicada a la alimentación de los servomotores.

Conexión con alimentación directa desde 5 volts de la placa Arduino

Esta conexión es ideal para experimentar y podemos usar uno o dos servos pequeños como el SG90 o MG90S.

Su principal desventaja es que la corriente disponible para los servomotores será limitada. Si excedemos el límite de corriente podemos causar que nuestro Arduino se reinicie o funcione de manera inestable.

Diagrama que muestra la conexión de un servo utilizando la alimentación de 5 volts directa desde la placa Arduino.

Conexión con alimentación independiente

Esta conexión es optima cuando utilizamos servos de gran tamaño o estamos controlando varios motores que en total tienen una gran demanda de corriente.

La fuente externa que utilicemos debe ser seleccionada tomando en cuenta la corriente promedio y pico de los servomotores.

Diagrama que muestra como conectar una fuente de alimentación externa para alimentar servomotores a la tarjeta Arduino Uno R3. Hay que destacar que las tierras de la fuente externa y el Arduino son comunes.

En nuestro diagrama hemos utilizado nuestro protoboard para apoyarnos con la distribución de las alimentaciones y las conexiones con nuestras baterías o fuente de alimentación externa, pero podemos valernos de cualquier otro método para realizar la conexión.

Es importante destacar que la tierra de las baterías o de la fuente externa debe estar conectada también a la tierra de la placa Arduino.

Programación de un servomotor con Arduino

Gracias a las bibliotecas o librerías incluidas en el entorno Arduino, el control de servos de modelismo es una de las cosas que podemos hacer sin la necesidad de instalar software adicional.

La librería destinada al control de servos se llama Servo.h y su documentación puede encontrarse en la siguiente pagina:

En este enlace se pueden leer las limitaciones, condiciones y plataformas en las que se encuentra disponible la librería. Además podemos conocer el API.

Programa para realizar un barrido en todo el rango de posiciones

Este programa recorre todo el rango de posiciones en las que es capaz de funcionar el servomotor. Va de 0 a 180 grados y de vuelta a cero. Esto ocurre todo el tiempo que el Arduino recibe alimentación.

Código para controlar un servo con potenciómetro

Este programa permite controlar un servo a través de un potenciómetro. El valor analógico leído desde el potenciómetro es transformado a una posición entre 0 a 180 grados que es lo que espera la función write de la librería de servo.

Programa para controlar servo mediante botones

Este programa permite controlar la posición del servo mediante dos botones que aumentan o disminuyen una variable de posición en un rango entre 0 y 180 grados. El intervalo de movimiento de cada pulsación de los botones puede configurarse a voluntad cambiando una variable.

Control de servomotor con Arduino mediante puerto serie

Otra aplicación interesante de los servomotores puede ser manejarlos desde una computadora. Este programa ilustra precisamente ese escenario y además nos enseña cómo podemos manejar varios servos en el mismo programa de manera simultánea.

Lecturas recomendadas

Conclusión

  • Aprendimos como está construido físicamente un servo de radio control.
  • Estudiamos los requisitos de las señales para controlar la mayoría de los servos en el mercado.
  • Conocimos las diferentes formas de conectar un servo con Arduino y cuando es necesario utilizar cada una de ellas.
  • Revisamos el funcionamiento de la librería Servo y como se utiliza para manejar servos conectados a cualquier pin de Arduino.
  • Realizamos ejemplos prácticos que se pueden aprovechar o adaptar para múltiples situaciones e proyectos reales.

1
Escanea el código