Vamos a controlar un pequeño motor DC con Arduino y dos botones. Usaremos un botón para el motor gire en sentido horario y otro botón para que el motor gire en sentido antihorario.

Antes, debemos saber que los motores DC son componentes que necesitan mucha corriente para funcionar y, con frecuencia, necesitan voltajes superiores a los típicos de nuestro microcontrolador, por eso no podemos hacerlos funcionar con los pines de nuestro microcontrolador (como tu placa Arduino/Genuino). Necesitamos un puente en H (del inglés, H-bridge) externo para controlarlos. Esto es, un dispositivo que hace de interfaz entre nuestro microcontrolador y el motor, aportándole toda la corriente que necesite y aislando y protegiendo nuestra placa. Yo voy a usar el chip SN754410 de Texas Instruments, que además de tener el mismo pinout que el conocido driver L293D, puede mover motores de hasta 1A.

¿Qué necesitas conocer del driver de motores SN754410/L293D?

El encapsulado de este chip es PDIP, su pinout es:

¿Qué significan cada uno de sus pines?

NombreNúmeroDescripción
1,2 EN1Enable: activa los canales 1 y 2 del driver. Tenermos que activar el enable para poder usar las entradas y salidas del chip.
1A, 2A, 3A, 4A2, 7, 10, 15A: Entradas del driver
1Y, 2Y, 3Y, 4Y3, 6, 11, 14Y: Salidas del driver
GND4, 5, 12, 13GND
VCC28Alimentación de los motores (de 4.5 a 36V)
3,4 EN9Enable: activa los canales 3 y 4 del driver. Tenermos que activar el enable para poder usar las entradas y salidas del chip.
VCC116Alimentación de la lógica interna del chip (5V)

¿Qué vamos a usar?

¡Oferta!
Sin stock

Arduino UNO Rev. 3 SMD

22,99 22,50 (18,60 IVA excl.)
Temporalmente no disponible

Botones switch SPST 12x12x07mm (Pack de 10)

1,00 (0,83 IVA excl.)
En tienda

Breadboard 400 puntos

2,70 (2,23 IVA excl.)
En tienda

Cables Jumper Dupont 20cm Macho-Macho para prototipar (Pack de 20)

1,20 (0,99 IVA excl.)
En tienda

Driver de motores DC 1A SN754410 (L293D)

4,20 (3,47 IVA excl.)
En tienda

Portapilas de 4 pilas AA de Pololu (2×2)

1,80 (1,49 IVA excl.)
En tienda

¿Has trabajado alguna vez con botones? Si no lo has hecho, te recomendamos que para sacar más partido de este tutorial eches un ojo a “Entradas digitales: botones“.

¿Lo tienes todo? ¡Empezamos!

Esquema de conexión

Vamos a conectar los componentes como en el siguiente circuito.

Lo vemos paso a paso:

1. Conectamos la breadboard a Arduino. Llevamos un cable (rojo) desde 5V a la fila roja de la breadboard y un cable (negro) desde GND a la fila azul.

2. Colocamos el driver SN754410/L293D en la breadboard. Con el fin de evitar conexiones indeseadas, lo pinchamos en el centro de la breadboard, yo he puesto la muesca del chip hacia la izquierda.

3. Alimentamos el driver con Arduino. Llevamos un cable (naranja) desde la fila roja de la breadboard hasta el pin 16 del chip y un cable (negro) desde la fila azul de la breadboard al pin 5 del chip. Si le vas a dar mucha caña al driver, te recomiendo que conectes el otro GND (pin 4 del chip), además de mejorar las condiciones de funciomiento del chip, te ayudará también a disipar el calor.

4. Conectamos el motor. Siendo este un componente de salida digital, conectamos cada uno de sus cables a dos pines de salida (output) del driver SN754410/L293D, concretamente pinchamos cada uno de sus cables a los pines 3 (cable amarillo) y 6 (cable verde).

5. Para controlar el motor DC con el driver SN754410/L293D, necesitamos activar el enable, llevamos un cable (cian) desde el pin 1 del chip a un pin PWM de Arduino, yo lo he conectado en el pin 11. Además necesitamos las dos entradas (input) que van a controlar cada una de las direcciones en las que gira el motor, por ello pinchamos un cable (blanco) entre el pin 2 del chip y un pin PWM de Arduino (pin 10) y otro cable (rosa) entre el pin 7 del chip y un pin PWM de Arduino (pin 9).

6. Alimentamos el motor. Para alimentar el motor vamos a usar una fuente independiente. ¡No podemos alimentar el motor con los 5V de Arduino! Porque el regulador de nuestra placa Arduino UNO entrega hasta 800mA, por lo que al conectar el motor estaríamos exigiéndole demasiado. Además, cada motor está diseñado para un voltaje diferente. Por ejemplo, el que yo estoy usando es de 6V. Por ello vamos a usar 4 pilas AA que conectamos el cable negro a GND (fila azul de la breadboard) y el cable rojo al pin 16 del driver SN754410/L293D.

¡Ya solo nos queda conectar los botones!

7. Conectamos los botones. Pinchamos los botones en el centro de la breadboard, igual que hicimos con el driver. Colocamos una resistencia, cuyo valor esté entre 1k y 10k, desde el botón a la fila roja de la breadboard (pull-up), de esta forma cuando el botón esté relajado, Arduino leerá (HIGH) y cuando esté pulsado leerá (LOW). Conectamos el otro pin del botón a GND, a través de un cable (azul y marrón) a la fila azul de la breadboard. Nos llevamos un cable (morado y verde) desde el pin del botón en el que hemos conectado la resistencia a un pin digital de Arduino, yo he conectado un botón al pin 7 y otro al pin 2.

¡Se acabaron las conexiones! Asegúrate de que no te has dejado nada sin conectar y abre Arduino IDE que ya vamos a ver funcionar nuestro motor.

Programación en Arduino IDE

Primero, vamos a definir constantes que van a almacenar el número del pin de Arduino al que hemos conectado el driver SN754410/L293D y cada uno de los botones:

const int ENABLE = 11;
const int INP1 = 10;
const int INP2 = 9;
const int BOTON_A = 7;
const int BOTON_B = 2;

En la función void setup() inicializamos estos pines. Los pines del chip (INP1, INP2) son entradas en el driver, salidas en Arduino:

  pinMode(ENABLE, OUTPUT);
  pinMode(INP1, OUTPUT);
  pinMode(INP2, OUTPUT);

Los botones son entradas:

  pinMode(BOTON_A, INPUT);
  pinMode(BOTON_B, INPUT);

Llegados a este punto, ¿qué queremos que haga el motor?
Nuestro objetivo es que cuando pulsemos un botón, el motor gire y, cuando pulsemos el otro, el motor gire en el sentido contrario. Entonces, en la función void loop() irán estas condiciones:

Si el botón A está pulsado, acitva el pin INP1, así como el ENABLE

if(digitalRead(BOTON_A) == LOW) {  
  digitalWrite(INP1, HIGH);          
  digitalWrite(ENABLE, HIGH);
}

Pero, si el que está pulsado es el botón B, acitva el pin INP2, así como el ENABLE

else if(digitalRead(BOTON_B) == LOW) {
  digitalWrite(INP2, HIGH);         
  digitalWrite(ENABLE, HIGH);
}

De lo contrario, si no ocurre nada de lo anterior, si no está pulsado ni el botón A ni el botón B, queremos que todo permanezca desactivado

else {
  digitalWrite(INP1, LOW);
  digitalWrite(INP2, LOW);
  digitalWrite(ENABLE, LOW);
}

Finalmente, el código en Arduino IDE nos ha quedado así:

¡Ahora te toca a ti!

Deja un comentario