Control de servomotores con Arduino.
Un servomotor es un tipo especial de motor que permite controlar la posición del eje en un momento dado. Esta diseñado para moverse determinada cantidad de grados y luego mantenerse fijo en una posición.

El interior de un servomotor es un motor DC común y corriente. El eje del motor se acopla a una caja de engranajes similar a una transmisión.
Esto se hace para aumentar el par del motor y permitir mantener una posición fija cuando se requiera. El circuito electrónico es el encargado de manejar el movimiento y la posición del motor.
Se debe resaltar que, dentro de los diferentes tipos de servomotores, éstos se pueden clasificar según sus características de rotación en dos grandes grupos:
-
Servomotores de rango de giro limitado: son el tipo más común de servomotor. Permiten una rotación de 180 grados, por lo cual son incapaces de completar una vuelta completa. El ángulo de giro, en este caso nos permite hacer un barrido entre -90º y 90º, lo que viene a ser un ángulo de giro de 180º. Tienen una precisión de un grado es decir, podemos mover de grado en grado.
-
-
Servomotores de rotación continua: se caracterizan por ser capaces de girar 360 grados, es decir, una rotación completa. Su funcionamiento es similar al de un motor convencional, pero con las características propias de un servo. Esto quiere decir que podemos controlar su posición y velocidad de giro en un momento dado.
Para controlar el servomotor se le envía pulsos cada 20 ms es decir 50Hz.
¿Qué quiere decir todo esto?
Este dato nos indica la velocidad máxima a la que podemos mover el servomotor con Arduino. Solo podremos cambiar de posición cada 20 ms. Esto dependerá del tipo y marca de nuestro servomotor. La anchura del pulso es lo que codifica el angulo de giro, esta anchura varia según el servomotor pero normalmente va entre 0.5 y 2.5 ms aunque pueden variar.


Las ondas mostradas en la imagen anterior representan ejemplos de trenes de pulsos con los que se puede mover un servomotor, utilizando un ciclo de trabajo de 20 milisegundos.
Con Arduino podemos controlar fácilmente un servomotor. De hecho en Arduino existen las librerías para el control de servos de forma nativa. No es necesario descargarlas.
Conexionado con Arduino
Las conexiones dependerán del tipo de servomotor con Arduino que estemos utilizando. Todos deben tener 3 cables. Uno irá a tierra (GND), otro a la alimentación de 5 Voltios y el tercero a un pin PWM. También puedes utilizar un shield para controlar servomotores (lo veremos más adelante), como el de Adafruit.


2.- Control de motores de corriente contínua con Arduino.
Un motor de corriente continua convierte la energía eléctrica en mecánica. Se compone de dos partes: el estator y el rotor. El estator es la parte mecánica del motor donde están los polos del imán. El rotor es la parte móvil del motor con devanado y un núcleo, al que llega la corriente a través de las escobillas. Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le proporcionamos al rotor, es decir, basta con invertir la polaridad de la pila o batería.

Para controlar un motor DC desde Arduino, tendremos que usar un driver para motores ya que las salidas del Arduino solo puede tener valores de 0 y 5 voltios y dar hasta 40 mA de corriente (suficiente para alimentar un LED pero no un motor) . De esta manera, con el driver podemos alimentar el motor con una fuente de alimentación externa.

Un motor driver es un amplificador de corriente cuya función es tomar una pequeña señal de control de baja corriente y convertirla en una señal de alta corriente que pueda alimentar el motor. Hay muchos tipos de motor drivers en función del motor a manejar, máximo voltaje, máxima corriente de salida, etc…
Existen muchos drivers diferentes, pero para poder controlar bien un motor necesitamos dos características fundamentales:
-
Que permitan invertir el sentido de giro del motor. Se consigue cambiando la polaridad.
-
Que permitan graduar la velocidad de giro del motor. Un motor DC está preparado para funcionar a una tensión que nos dará el fabricante. Si le damos una tensión menor girará más despacio, llegando en el extremo a pararse. Así regulamos la velocidad.
2.1.- Características generales de los drivers para motores.
Cuando elegimos un driver para nuestro proyecto -de robot móvil o lo que queramos- debemos tener en cuenta varias cosas:
-
Cuántos motores vamos a controlar. Hay circuitos integrados -y placas- que pueden controlar 1, 2, 4, 6 o el número que se nos ocurra.
-
Qué potencia (consumo en mA) necesitan esos motores. El driver deberá dar esa potencia o más.
-
Qué tensión de alimentación (en Voltios) tienen los motores.
Si la potencia es suficiente podremos conectar dos motores en paralelo a una misma salida de un driver. También podemos conectar varios drivers (iguales o no) pero necesitaremos un Arduino con muchas salidas (como el Mega 2560) o un circuito más especializado con otro tipo de comunicación.
2.2- Drivers más utilizados en proyectos con Arduino.
A continuación vamos a detallar una lista de drivers utilizados muy comunmente en proyectos de robótica educativa. La lista incluye:
-
L298N
-
L9110
-
L297D
-
TB6612FNG
Si el motor una vez conectado no gira en el sentido deseado podemos cambiarlo muy fácilmente tanto en el hardware (intermabiando los cables del motor o del driver) como en el software (cambiando los pines en la programación). Vamos a hacer una breve descripción de cada uno y nos centraremos en el L298N.
L298N
Es el que usaremos en nuestros proyectos así que ¡ATENTOS!.
La corriente máxima que el L298N puede suministrar a los motores es, en teoría, 2A por salida (hasta 3A de pico) y una tensión de alimentación de 3V a 35V.Sin embargo, el L298N tiene una eficiencia baja. La electrónica supone una caída de tensión de unos 3V, es decir, la tensión que recibe el motor es unos 3V inferior a la tensión de alimentación.
Estas pérdidas se disipan en forma de calor lo que se traduce en que, a efectos prácticos, es difícil que podamos obtener más de 0.8-1A por fase sin exceder el rango de temperatura de funcionamiento. El L298N incorpora protecciones contra efectos que pueden producirse al manejar motores de corriente continua. Dispone de protecciones contra sobre intensidad, sobre temperatura, y diodos de protección contra corrientes inducidas (flyback).
El controlador L298N es ampliamente usado en proyectos electrónicos y robótica, por su sencillez de uso, bajo coste, y buena relación calidad precio.

La placa de conexión del L298N incorpora una entrada de voltaje, una serie de jumpers para configurar el módulo, dos salidas A y B, y los pines de entrada que regulan la velocidad y el sentido de giro.

La entrada de tensión proporciona el voltaje que alimentará a los motores. El rango de entrada admisible es de 3V a 35V y se suministra mediante los 2 terminales izquierdos de la clema de conexión entrada.
El tercer terminal de la clema de conexión, Vlógico, está conectado con la electrónica del L298N y es necesario que tenga un valor entre 4.5 y 5.5V para que la placa funcione correctamente.
Para ello el módulo incorpora un regulador de voltaje que suministra la tensión necesaria en Vlógico. Este regulador puede desactivarse quitando el jumper de la placa. Desactivaremos el regulador cuando la tensión de alimentación sea inferior a 5V o superior a 15V.
Por tanto:
-
Si el regulador está activado (jumper cerrado) Vlógico es una salida de 5V que podemos emplear para alimentar otros dispositivos.
-
Si el regulador está desactivado (jumper abierto), Vlógico es una entrada a la que tendremos que proporcionar un voltaje de 4.5 a 5.5V.
Por otro lado, tenemos las dos clemas de conexión A y B que suministran la salida a los motores.Por último, tenemos los pines de entrada que controlan la dirección y velocidad de giro.
-
Los pines EINA, IN1 e IN2 controlan la salida A.
-
Los pines ENB, IN3 e IN4 controlan la salida B.
Los pines IN1, IN2, y IN3 e IN4, controlan la dirección de giro, respectivamente, de la salida A y B.
Los pines ENA y ENB desactivan la salida. Podemos conectarlos permanentemente mediante el uso de un jumper, o conectar una señal PWM para controlar la velocidad de giro.
En el caso de querer usar ambas fases, y poder elegir tanto el sentido de giro como la velocidad, y alimentar desde una fuente de 12V, el esquema de conexión a Arduino sería el siguiente.

Mientras que la conexión, vista desde el lado de Arduino, sería por ejemplo la siguiente.

La alimentación de Arduino en este caso podría realizarse desde la fuente de 12V al pin Vin de Arduino (usando el regulador de voltaje de Arduino), o desde el pin Vlogico del L298N al pin 5V de Arduino (usando el regulador del L298N).
El esquema de conexión completo puede quedar así (con 9v).

L9110
Este pequeño driver (y su gemelo HG7881) sirve para controlar motores de entre 2.5 y 12 voltios y con un consumo máximo de 800 mA. El integrado sirve para controlar sólo un motor, pero habitualmente se monta en placas con dos unidades para controlar dos motores. Es el que utilizamos para los motores de tipo N20 del Sapoconcho.
La típica placa doble tiene cuatro fichas para atornillar los cables de los motores y seis pines:
-
Dos de control PWM para el motor A (A-IA, A-IB).
-
Dos para el motor B (idem, B-IA, B-IB).
-
Dos de alimentación desde las pilas o baterías (VCC, GND).
La conexión ya la hemos visto para un Arduino Pro Micro. Para un cualquier otro es similar, buscando siempre 4 pines PWM.

Esquema de conexión con Arduino UNO :

L293D
Este driver puede encontrarse montado en una placa independiente, en una shield, que veremos más adelante (Adafruit Motor Shield que puede controlar hasta 4 motores con dos integrados) o el integrado suelto, que es como lo vamos a ver aquí ahora. Puede controlar dos motores entre 4.5 y 25 voltios y con un consumo máximo de 600 mA.
El esquema de conexión es el siguiente (integrado suelto):

TB6612FNG
Este driver de Toshiba es pequeño pero matón. Puede controlar dos motores entre 4.5 y 13.5 voltios y con un consumo máximo de 1 A sontenido, admitiendo picos de 3.2 A por canal. Tiene además integrada una protección térmica para que no podamos quemarlo. Es el que usamos en el proyecto Raptor y allí hay instrucciones detalladas para conectarlo.
Utiliza una lógica similar a la de los L298D y L293D, pero con un séptimo pin de control que permite poner toda la placa en stand-by parando los dos motores a la vez.

Las conexiones entre un Arduino UNO y el driver pueden verse aquí.
