12

Tutorial de Arduino + controlador de motores Dual H-Bridge

portada_HBRIDGE

¡Buenos días, humanos, robots y spambots de la blogosfera! Después de algunos días sin publicar mucho, hoy voy a explicar cómo controlar motores con Arduino mediante el controlador de motores Dual H-Bridge.

Esta placa nos permitirá mover hasta dos motores hacia delante o atrás, y controlar su velocidad a través de los pines de Arduino, que irán conectados al controlador.

bridge

La placa en cuestión será parecida a esto…

¿Pero por qué necesitamos un controlador de motores? Sencillamente porque las placas como Arduino no tienen suficiente potencia para alimentar un motor DC. Un controlador de motores actúa, en cierto modo, como un interruptor encendido y apagado por Arduino, dejando pasar más o menos corriente hacia los motores.


 

¡Manos a la obra!

Vale, ¿Qué necesitamos?

  1. Placa Arduino y cable USB compatible
  2. Motor DC, por lo menos uno.
  3. Zócalo con pilas/baterías (básicamente: algo que de calambre). Unos 5-6 voltios  y 600-800 mAh son más que suficiente.
  4. Y lógicamente: Hilo eléctrico, pines Macho-Hembra, y herramientas.

 

¿Cómo funciona el controlador?

He aquí un pequeño esquema del controlador de motores H-Bridge:

h-bridge_partsLa placa se alimenta por los pines VMS y GND a través de una batería (rojo). Si además conectamos Arduino a GND y +5V se alimentará a través de la placa de motores. Es decir, el controlador proporcionará corriente a Arduino.

Los pines para controlar la dirección (en azul en el esquema) son los marcados como EA, I1, I2, EB, I3, I4. Los tres primeros sirven para controlar el motor A, y el resto el B. Centrémonos en los del motor A: I1 e I2 sirven para controlar la dirección. Si I1 está a HIGH e I2 a LOW, el motor avanza hacia delante. Si están al revés el motor avanza hacia atrás. En cambio, EA sirve para controlar la velocidad del motor (podemos avanzar hacia delante a más o menos velocidad). Cuánto más voltaje envíe Arduino a través de EA, más rápido va el motor. Pero sin pasarse, ¿eh? 😉

Para conectar estos pines con Arduino son muy útiles y prácticos los conectores Macho/Hembra. Pueden encontrarse en cualquier tienda de electróncia a un coste insignificante.

conectoresCon el motor B es exactamente lo mismo, pero con los pines EB, I3, I4.

Los motores se conectarán en los pines marcados en Verde y Morado… ¡Y cuidado con la polaridad!

En cuánto al Catalizador de Magia Negra (flecha naranja), es en realidad el Circuito controlador de doble puente en sí, el que nos permite que los motores puedan moverse y funcionar. Lleva además un disipador de calor para que no se caliente. Y no, en realidad no Cataliza Magia Oscura…

La primera parte del tutorial será únicamente utilizando un motor. Así será más sencillo. No obstante, vez entiendas cómo funciona no será ningún problema añadir otro motor y modificar el código.

Por lo tanto, las conexiones serán:

  • VMS al polo positivo de la batería
  • GND al polo negativo de la batería
  • EA al pin Digital 11 de Arduino
  • I1 al pin Digital 10 de Arduino
  • I2 al pin Digital 9 de Arduino
  • Y conectamos el motor a los pines verdes GND y VCC de la placa.

 

Ejemplo de código simple

Vamos a crear un código simple que moverá el motor hacia delante y hacia atrás a una velocidad constante.


#define EA 11
#define I1 10
#define I2 9

void setup()
{
pinMode(EA, OUTPUT);
pinMode(I1, OUTPUT);
pinMode(I2, OUTPUT);
}

void loop()
{
//Establecemos la velocidad a 200
analogWrite(EA, 200);

//Hacia delante
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);

delay(2000);

//Y para atras
digitalWrite(I1, LOW);
digitalWrite(I2, HIGH);

delay(2000);
}

El programa no necesita mucha explicación. Definimos los pines y los establecemos como salidas en void setup(). Entonces en void loop() ponemos la velocidad a 200 y vamos alternando los pines I1 e I2 para que el motor vaya hacia delante y hacia atrás.

Si queremos dos motores habrá que añadir los pines EB, I3, I4 al código y cablearlos.


 

Funciones de movimiento

Una vez hemos comprendido el código anterior y, por lo tanto, cómo funciona la placa, podemos crear nuestras propias funciones a medida para los movimientos.

Los métodos de ejemplo que aparecen este código son muy estándar: adelante, atrás y parar. Puedes crear funciones más complejas para realizar intrincados giros, maniobras… y si quieres puedes conectar un segundo motor y cablear los pines EB-Digital 8, I3-Digital 7, I4-Digital 6.


#define EA 11
#define EB 8
#define I1 10
#define I2 9
#define I3 7
#define I4 6

void adelante(int motor, int velocidad)
{
  if(motor == 1)
  {
    analogWrite(EA, velocidad);
    digitalWrite(I1, HIGH);
    digitalWrite(I2, LOW);
  }
  else
  {
    analogWrite(EB, velocidad);
    digitalWrite(I3, HIGH);
    digitalWrite(I4, LOW);
  }
}

void atras(int motor, int velocidad)
{
  if(motor == 1)
  {
    analogWrite(EA, velocidad);
    digitalWrite(I1, LOW);
    digitalWrite(I2, HIGH);
  }
  else
  {
    analogWrite(EB, velocidad);
    digitalWrite(I3, LOW);
    digitalWrite(I4, HIGH);
  }
}
void parar(int motor)
{
  if(motor == 1)
  {
    digitalWrite(I1, LOW);
    digitalWrite(I2, LOW);
  }
  else
  {
    digitalWrite(I3, LOW);
    digitalWrite(I4, LOW);
  }
}

void setup()
{
  pinMode(EA, OUTPUT);
  pinMode(I1, OUTPUT);
  pinMode(I2, OUTPUT);
  pinMode(EB, OUTPUT);
  pinMode(I3, OUTPUT);
  pinMode(I4, OUTPUT);
}

void loop()
{
  adelante(1, 100);
  delay(1000);
  atras(1, 100);
  delay(1000);
  adelante(2, 100);
  delay(1000);
  atras(2, 100);
  delay(1000);
  adelante(1, 100);
  adelante(2, 100);
  delay(1000);
  atras(1, 100);
  atras(2, 100);
  delay(1000);
}

Esto es todo. ¿Qué tal ha funcionado? He revisado este código varias veces, así que debería estar correcto, pero si te surgió alguna duda en el proceso, ¡no dudes en plantearla en los comentarios! La resolveré tan rápido como pueda.

Y si te gustó este tutorial no dudes en suscribirte y/o en darle like a nuestra página de Facebook. En serio, no es que seamos inseguros de nosotros mismos y necesitemos la aprobación de los humanos, pero nos gusta :3

N4n0

Creado para cuidar de los sistemas de laboratorios tan secretos que ni él tiene la seguridad de estar trabajando en ellos, a Nano le gusta dedicar los ciclos que no gasta en tapar agujeros de Firewall para dedicarse al hobby de la electrónica o a ver películas de ciencia ficción. Entre su filmoteca de culto, ocupan un lugar destacado Tron, The Matrix y Johnny Mnemonic.

Antes de comentar, por favor, lee las Normas

12 Comentarios en "Tutorial de Arduino + controlador de motores Dual H-Bridge"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Erwin
Humano

Hola amigo que tal, oye una pregunta…
También se podrá utilizar para controlar una bomba de agua con motor DC de 12V ?
No afectará el rendimiento de mi bomba?

Gl4r3
Admin

¡Hola Erwin! Creo que no deberías tener problema.

Bautista
Humano

Hola.
Podrías hacer un tuto para controlar los motores con todas las funciones que aquí describes, pero con un tlf o tablet?
Gracias

homer32
Humano

hola buen tutorial, como todos los que haces,
podrías explicar que hace el segundo ejemplo y que es cada instrucción, no sé para que sirve
en la línea 8 dice:
void adelante(int motor, int velocidad)
para que se utiliza esta rutina.

Squall
Humano

hola buenas, tengo una pregunta, yo tengo el drive l298 sin su montaje o módulo, podría aún así hacerlo funcionar conectando los correspondientes pines??

José
Humano

Buenas, quería saber si la placa de motores utiliza algún tipo de librería y si los pines se designan de igual forma que si no estuviera la placa

wpDiscuz