¿Cómo activar un motor en Arduino?

Controla Motores con Arduino: Guía Definitiva

20/10/2023

Valoración: 4.36 (8679 votos)

En el vasto universo de la electrónica y la robótica, el movimiento es una de las capacidades más fascinantes que podemos otorgar a nuestros proyectos. Ya sea para construir un robot móvil, un brazo robótico o cualquier sistema automatizado, la capacidad de controlar motores es fundamental. Arduino, con su versatilidad y facilidad de uso, se ha convertido en la plataforma ideal para estas tareas, pero un microcontrolador por sí solo no puede manejar la corriente y el voltaje que requieren los motores. Aquí es donde entran en juego los drivers de motor, dispositivos esenciales que actúan como intermediarios, amplificando las señales de control de Arduino para mover motores de forma eficiente y segura.

¿Cómo activar un motor en Arduino?
El ejemplo esta desarrollado en Arduino UNO, pero el código es compatible con cualquier Arduino o pinguino. El programa básicamente activa el motor en un sentido por 4 segundos, luego detiene el motor por 0.5 segundos, después activa el motor en sentido inverso por 4 segundos y por último detiene el motor por 5 segundos.

Este artículo te guiará a través de dos de los drivers más populares y accesibles: el L298N, un clásico robusto, y el TB6612FNG, una alternativa más moderna y eficiente. Exploraremos sus características, cómo conectarlos a tu Arduino y, lo más importante, cómo programarlos para controlar motores de corriente continua (DC) y motores paso a paso, variando su dirección y velocidad. Prepárate para transformar tus ideas en movimiento.

Índice de Contenido

El Driver L298N: Un Clásico Robusto para el Control de Motores

El módulo L298N, basado en el chip homónimo, es un driver dual de motor de tipo puente-H completo. Su popularidad radica en su capacidad para controlar simultáneamente dos motores de corriente continua o un motor paso a paso bipolar, manejando corrientes de hasta 2 amperios por canal. Es una solución todo en uno, ya que el módulo incorpora todos los componentes necesarios para su funcionamiento, incluyendo diodos de protección para evitar picos de voltaje inducidos por el motor y un regulador de voltaje LM7805 que puede suministrar 5V a la lógica interna del chip y, opcionalmente, a tu Arduino.

Este módulo es ideal para proyectos que requieren un control de potencia significativo, ofreciendo una interfaz sencilla para interactuar con microcontroladores como Arduino. Dispone de jumpers de selección para habilitar cada una de sus salidas: la salida A (OUT1 y OUT2) y la salida B (OUT3 y OUT4), que corresponden a los pines de habilitación ENA y ENB respectivamente. Los pines de control, marcados como IN1, IN2, IN3 e IN4, son los que recibirán las señales de tu Arduino para determinar el sentido de giro y el estado del motor.

Conexión de Alimentación del L298N

Una de las características clave del L298N es su flexibilidad en la alimentación, gracias al regulador LM7805 integrado. Sin embargo, es crucial entender cómo funciona para evitar daños al módulo o a tu Arduino.

  • Modo 1: Alimentación de 6V a 12V DC (Jumper de 5V activo)
    Cuando el jumper de selección de 5V está colocado (activo), el regulador LM7805 está funcionando. Esto significa que puedes alimentar el módulo con una tensión de entrada entre 6V y 12V DC a través del pin de alimentación principal. El regulador convertirá esta tensión a 5V para la parte lógica del L298N. Adicionalmente, el pin marcado como +5V en el módulo también tendrá una salida de 5V DC, que puedes usar para alimentar tu Arduino o un microcontrolador, siempre y cuando el consumo no exceda los 500 mA. Esta configuración simplifica el cableado al usar una única fuente de alimentación.
  • Modo 2: Alimentación de 12V a 35V DC (Jumper de 5V inactivo)
    Si tus motores requieren una tensión superior a 12V, el L298N permite una alimentación de entre 12V y 35V DC. En este caso, el jumper de selección de 5V debe estar inactivo (retirado). Al deshabilitar el regulador interno, es imperativo que conectes una fuente externa de 5V (usualmente desde el propio Arduino) al pin +5V del módulo. Esto es necesario para alimentar la lógica interna del chip L298N, ya que el regulador no lo hará.

Advertencia Importante: Nunca conectes una tensión de entrada externa al pin de +5V del módulo cuando el jumper de selección de 5V esté activado. Hacerlo provocará un cortocircuito y podría dañar permanentemente el módulo y/o tu fuente de alimentación.

Control Básico de un Motor DC con L298N

Para controlar un motor de corriente continua, el L298N utiliza los pines de entrada (IN1, IN2 para la salida A; IN3, IN4 para la salida B) para definir el sentido de giro y los pines de habilitación (ENA, ENB) para encender o apagar el motor. Un puente-H funciona invirtiendo la polaridad de la tensión aplicada al motor.

Consideremos un ejemplo práctico utilizando la salida B (IN3, IN4, ENB) para un motor DC. Si conectamos el pin ENB a +5V (mediante el jumper o directamente desde Arduino), la salida estará siempre habilitada. El control del giro se logrará con IN3 e IN4:

  • IN3 HIGH, IN4 LOW: Motor gira en un sentido.
  • IN3 LOW, IN4 HIGH: Motor gira en sentido opuesto.
  • IN3 LOW, IN4 LOW: Motor se detiene (freno libre).
  • IN3 HIGH, IN4 HIGH: Motor se detiene (freno activo, con mayor resistencia).

Un programa básico en Arduino podría alternar el sentido de giro y detener el motor. Por ejemplo, el motor gira hacia adelante por 4 segundos, se detiene por 0.5 segundos, gira hacia atrás por 4 segundos, y finalmente se detiene por 5 segundos antes de repetir el ciclo. Esto se consigue manipulando el estado (HIGH/LOW) de los pines IN3 e IN4 y usando `delay()` para las pausas.

Control de Velocidad de un Motor DC con L298N (PWM)

Para un control más sofisticado, como la variación de la velocidad del motor, necesitamos utilizar la Modulación por Ancho de Pulso (PWM). En lugar de conectar ENA o ENB directamente a +5V, los conectaremos a pines PWM de Arduino. Los jumpers de habilitación de ENA y ENB deben ser retirados.

Los pines IN1/IN2 (o IN3/IN4) seguirán definiendo el sentido de giro (por ejemplo, IN3 HIGH, IN4 LOW para un sentido). La velocidad se controlará aplicando una señal PWM al pin ENB (o ENA). Un valor de PWM de 0 detendrá el motor, mientras que un valor de 255 (para pines de 8 bits) lo hará girar a máxima velocidad. Variando este valor, podemos ajustar la velocidad de forma gradual. Esto permite transiciones suaves y un control preciso de la potencia entregada al motor.

Control de un Motor Paso a Paso Bipolar con L298N

El L298N es también capaz de controlar motores paso a paso bipolares. Estos motores se mueven en pasos discretos, lo que permite un control de posición muy preciso. Un motor paso a paso bipolar tiene dos bobinas, y cada una se conecta a una salida del L298N (por ejemplo, una bobina a OUT1/OUT2 y la otra a OUT3/OUT4).

Para identificar las bobinas, se puede usar un multímetro en modo de continuidad: los cables que dan continuidad pertenecen a la misma bobina. Para un motor de 12VDC, se recomienda el uso del jumper de 5V en el L298N para activar su regulador interno, alimentando el módulo con una única fuente de 12VDC para el motor.

¿Cómo activar el modo standby en Arduino?
Debemos ponerlo en HIGH para activar el motor. Podemos conectarlo a un pin digital de Arduino, si queremos poder activar el modo Standby, o conectarlo a VCC si queremos dejarlo permanentemente desconectado. La conexión, vista desde Arduino quedaría de la siguiente forma. El código necesario es similar al que vimos al ver el L298N.

El control de un motor paso a paso requiere una secuencia específica de activación de las bobinas. Afortunadamente, Arduino facilita esto con la librería `Stepper.h`, que viene preinstalada en el IDE. Esta librería simplifica enormemente el proceso, permitiendo definir el número de pasos por revolución del motor y luego simplemente indicarle al motor cuántos pasos debe girar y en qué dirección. El valor `stepsPerRevolution` es crucial y se encuentra en la hoja de datos de tu motor (ej., 48 pasos/vuelta).

El Driver TB6612FNG: La Evolución de la Eficiencia

Mientras el L298N es un caballo de batalla confiable, la tecnología avanza y nos ofrece alternativas más eficientes y compactas. El TB6612FNG es un excelente ejemplo de esta evolución. También es un driver dual de motores, capaz de manejar dos motores DC o un motor paso a paso, pero con mejoras significativas.

¿Qué Hace al TB6612FNG Superior al L298N?

La principal diferencia radica en la tecnología interna. Mientras el L298N utiliza transistores BJT (Bipolar Junction Transistor) para sus puentes-H, el TB6612FNG emplea transistores MOSFET (Metal-Oxide-Semiconductor Field-Effect Transistor). Esta elección tecnológica conlleva varias ventajas:

  • Mayor Eficiencia: Los MOSFETs tienen una menor resistencia interna cuando están activados, lo que se traduce en una menor disipación de calor y una mayor eficiencia energética. El TB6612FNG se comporta como una pequeña resistencia de 0.5 Ohm, mientras que el L298N puede tener una caída de tensión superior a 3V, lo que se traduce en energía desperdiciada en calor.
  • Menor Tamaño: Gracias a su mayor eficiencia, el TB6612FNG puede ser mucho más compacto, lo que es ideal para proyectos con espacio limitado.
  • Mayor Corriente Sostenida: Aunque el L298N teóricamente soporta 2A, en la práctica su rendimiento cae a 0.8-1A debido a las pérdidas. El TB6612FNG puede suministrar 1.2A por canal de forma continua y picos de hasta 3.2A, lo que lo hace más adecuado para motores que requieren más corriente.

Limitaciones del TB6612FNG

A pesar de sus ventajas, el TB6612FNG tiene algunas limitaciones en comparación con el L298N:

  • Menor Tensión Máxima: El TB6612FNG soporta hasta 13.5V para los motores (VM), frente a los 35V del L298N. Esto puede ser un factor limitante para motores de mayor voltaje.
  • Mayor Dificultad de Montaje: Los módulos L298N suelen venir con bornes de conexión más grandes y fáciles de usar. Los módulos TB6612FNG suelen ser más pequeños y pueden requerir soldadura o cables Dupont más finos.
  • Protección contra Corrientes Inducidas: Aunque cuenta con protecciones, estas son algo más limitadas que las del L298N, lo que podría provocar reinicios en Arduino al manejar cargas medianas o grandes.

El TB6612FNG también incorpora un modo de Standby que desactiva completamente el controlador, permitiendo un significativo ahorro de energía, ideal para proyectos alimentados por batería. Dispone de protecciones térmicas, contra inversión de corriente y detección de bajo voltaje.

Conexión y Control del TB6612FNG

El TB6612FNG requiere dos fuentes de alimentación: una para los motores (VM, hasta 13.5V) y otra para la lógica del módulo (VCC, 2.7V a 5.5V). Los pines AIN1, AIN2 y PWMA controlan el canal A, mientras que BIN1, BIN2 y PWMB controlan el canal B. Los pines PWMA y PWMB son los que recibirán la señal PWM de Arduino para controlar la velocidad.

El pin STBY es crucial: debe estar en HIGH para activar el driver y permitir el movimiento de los motores. Puedes conectarlo directamente a VCC si quieres que esté siempre activo, o a un pin digital de Arduino si deseas controlar el modo Standby para ahorrar energía.

El código para el TB6612FNG es similar al del L298N en concepto, utilizando `digitalWrite()` para el sentido de giro (AIN1/AIN2 o BIN1/BIN2) y `analogWrite()` para la velocidad (PWMA/PWMB). La organización del código en funciones como `moveMotorForward()`, `moveMotorBackward()`, `stopMotor()`, `enableMotors()` y `disableMotors()` es una buena práctica para mantener el código limpio y reutilizable, especialmente en proyectos de robótica como vehículos donde se controlan ambos motores simultáneamente para avanzar, retroceder o girar.

Tabla Comparativa: L298N vs. TB6612FNG

Para ayudarte a decidir cuál driver es el más adecuado para tu proyecto, aquí tienes una tabla comparativa de sus características clave:

CaracterísticaL298NTB6612FNG
Tecnología InternaTransistores BJTTransistores MOSFET
EficienciaMenor (más disipación de calor)Mayor (menos disipación de calor)
Caída de TensiónAlta (hasta >3V)Baja (aprox. 0.5 Ohm de resistencia)
Corriente Continua por CanalAprox. 0.8 - 1A (teórico 2A)1.2A
Corriente de Pico por Canal2A3.2A
Voltaje Máx. Motores (VM)35V13.5V
Voltaje Lógica (VCC)Integrado (5V del LM7805)2.7V - 5.5V (externo)
Tamaño del MóduloGeneralmente más grandeGeneralmente más compacto
Modo StandbyNo
ProteccionesDiodos de protección, LM7805Térmicas, inversión corriente, bajo voltaje, corrientes inducidas (limitado)
Facilidad de ConexiónBornes de tornillo (fácil)Pines de cabecera (puede requerir soldadura)
Precio (aproximado)Ligeramente más caroMás barato

Preguntas Frecuentes (FAQ)

¿Puedo controlar un motor DC y un motor paso a paso con el mismo driver L298N/TB6612FNG al mismo tiempo?

No. Aunque ambos drivers tienen dos canales, estos canales están diseñados para operar de forma independiente, ya sea controlando dos motores DC o combinando sus salidas para un único motor paso a paso. No puedes usar un canal para un motor DC y el otro para un motor paso a paso simultáneamente, ya que la lógica de control es fundamentalmente diferente y el motor paso a paso requiere el uso coordinado de ambos puentes-H.

¿Qué es PWM y por qué es importante para el control de motores?

PWM (Modulación por Ancho de Pulso) es una técnica que permite simular voltajes analógicos a partir de una fuente digital. En el contexto del control de motores, significa que en lugar de simplemente encender o apagar el motor (0% o 100% de potencia), podemos variar el "ancho" del pulso de la señal digital. Un pulso más ancho (mayor ciclo de trabajo) significa que el motor recibe energía durante más tiempo en cada ciclo, lo que se traduce en una mayor velocidad. Un pulso más estrecho (menor ciclo de trabajo) reduce la velocidad. Esto es crucial para un control suave y gradual de la velocidad del motor, en lugar de un simple encendido/apagado brusco.

¿Es seguro conectar la alimentación del Arduino desde el driver L298N?

Sí, es seguro, pero con precauciones. El regulador LM7805 del L298N puede suministrar hasta 500mA al pin +5V. Si tu Arduino y los componentes conectados a él (sensores, LEDs, etc.) consumen menos de 500mA, puedes alimentarlo desde este pin. Sin embargo, si tienes muchos componentes o componentes de alto consumo, es mejor alimentar el Arduino por separado (por su conector USB o jack de alimentación) para evitar sobrecargar el regulador del L298N, lo que podría provocar inestabilidad o incluso daños.

Mi motor paso a paso no gira correctamente, ¿qué podría estar mal?

Hay varias causas comunes: 1) Conexión incorrecta de las bobinas: Asegúrate de que los dos cables de cada bobina estén conectados a las salidas correctas del driver (ej., OUT1/OUT2 para una bobina, OUT3/OUT4 para la otra). Si están cruzados, el motor no se moverá o vibrará. 2) `stepsPerRevolution` incorrecto: Este valor debe coincidir exactamente con las especificaciones de tu motor. Si es incorrecto, el motor no completará las vueltas esperadas o se moverá erráticamente. 3) Alimentación insuficiente: El motor podría no recibir suficiente voltaje o corriente. Asegúrate de que la fuente de alimentación sea adecuada para el motor y el driver. 4) Problemas con la librería: Verifica que la librería `Stepper.h` esté correctamente incluida y que el código sea el adecuado para tu configuración.

Controlar motores con Arduino abre un sinfín de posibilidades para tus proyectos de robótica y automatización. Tanto el L298N como el TB6612FNG son herramientas poderosas que te permitirán lograrlo, cada uno con sus propias fortalezas y casos de uso ideales. Comprender sus principios de funcionamiento, sus conexiones y cómo programarlos es el primer paso para dar vida a tus creaciones y observar cómo se mueven según tus instrucciones. ¡Ahora es el momento de poner en práctica lo aprendido y construir tu propio robot o sistema motorizado!

Si quieres conocer otros artículos parecidos a Controla Motores con Arduino: Guía Definitiva puedes visitar la categoría Librerías.

Subir