Control de motor DC con Arduino usando L293D
Muchos proyectos de robótica, automatización y electrónica utilizan motores DC para generar movimiento. Pero cuando recién empezamos, una de las preguntas más comunes es: ¿cómo puedo controlar un motor con Arduino de forma correcta y segura?
En esta guía aprenderás paso a paso cómo realizar el control de motor DC con Arduino y l293d.
Comenzaremos desde lo más básico, realizando un control manual directo con un switch. Luego avanzaremos hacia el control del sentido de giro y finalmente controlaremos también la velocidad del motor utilizando un potenciómetro.
Todo el proyecto será desarrollado en Tinkercad, por lo que podrás simular las conexiones y probar el funcionamiento antes de llevarlo a un circuito real. Así podrás aprender de manera práctica, sencilla y sin complicaciones.
Materiales
Para este proyecto vamos a utilizar componentes básicos de electrónica que nos permitirán realizar el control del motor DC de forma práctica en Tinkercad y posteriormente en un montaje real.
- 1x Motor DC (motor reductor de 3 a 6V)
- 1x Driver L293D
- 1x Arduino UNO
- 1x Protoboard pequeña
- 1x Fuente de alimentación (3 a 6V)
- 1x Switch para protoboard
- 1x Potenciómetro
- 1x Resistencia de 10kΩ
- Varios cables jumper
Control ON/OFF Directo
En este primer método aprenderás el control más básico de un motor DC.
Si no sabes cómo empezar en Tinkercad, te dejo un tutorial llamado Cómo usar Tinkercad para circuitos, donde puedes aprender lo necesario para realizar esta simulación paso a paso.
En este método no se utiliza Arduino. Simplemente conectas el motor DC a una fuente de alimentación a través de un switch mecánico.
Cuando cierras el circuito con el switch, el motor recibe la tensión y gira. Cuando lo abres, el motor se apaga.
Es la forma más simple de control, ideal para pruebas básicas de funcionamiento y para comprobar el sentido de giro del motor sin necesidad de programación ni componentes adicionales.
Pasos para realizar las conexiones
Conecta el positivo de la fuente de alimentación a un terminal del switch.
Conecta el otro terminal del switch al terminal positivo del motor DC.
Conecta el terminal negativo del motor DC al negativo de la fuente de alimentación.
Cuando presiones el switch, el motor encenderá y girará en un sentido.
Para cambiar el sentido de giro, invierte las conexiones positivo y negativo en el motor.
Limitación de este método
Este método no permite controlar la velocidad ni invertir el giro automáticamente. Solo puedes encender o apagar el motor, por lo que es limitado en aplicaciones de robótica y automatización donde se requiere velocidad variable o cambio de dirección.
Inversión de Giro con Puente H (L293D)
Ahora damos un paso más allá del control básico. Imagina que tu motor no solo debe encenderse y apagarse, sino también decidir hacia dónde debe girar.
Aquí es donde entra el L293D, un puente H que nos permite cambiar la dirección del motor DC de forma electrónica.
En este método, utilizamos señales digitales de Arduino para invertir la polaridad aplicada al motor, logrando así que el sentido de rotación cambie según la lógica del programa.
Este tipo de control es clave cuando empiezas a construir robots móviles o mecanismos que necesitan cambiar de dirección, por ejemplo grúas o sistemas de apertura y cierre.
Revisión de conexiones
Paso 1: Vcc1 (pin 16 del L293D): conecta a 5V de Arduino.
Paso 2: Vcc2 (pin 8 del L293D): conecta a la fuente de alimentación del motor (6-12V).
Paso 3: GND (pines 4, 5, 12, 13): conecta a GND común (Arduino y fuente).
Paso 4: IN1 (pin 2): conecta al pin 9 de Arduino.
Paso 5: IN2 (pin 7): conecta al pin 8 de Arduino.
Paso 6: Enable1 (pin 1): conecta al pin 10 de Arduino (en este método se pondrá en alto fijo para habilitar el puente H).
Paso 7: OUT1 (pin 3): conecta a un terminal del motor DC.
Paso 8: OUT2 (pin 6): conecta al otro terminal del motor DC.
Paso 9: Switch:
Un pin del switch conecta al pin 7 de Arduino.
El otro pin conecta a GND.
Se configura como INPUT_PULLUP, por lo que no requiere resistencia externa.
Código Arduino
// Control inversión de giro motor DC con L293D y switch
const int in1 = 9; // Pin IN1 L293D
const int in2 = 8; // Pin IN2 L293D
const int enA = 10; // Pin Enable1 L293D
const int switchPin = 7; // Pin del switch
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(switchPin, INPUT_PULLUP); // Configura switch como entrada con pull-up
digitalWrite(enA, HIGH); // Habilita el puente H
}
void loop() {
if (digitalRead(switchPin) == LOW) {
// Switch presionado: giro horario
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
} else {
// Switch no presionado: giro antihorario
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
}
Limitación de este método
🧠 IA para Niños desde cero
Explora nuestros eBooks educativos con proyectos guiados paso a paso para enseñar inteligencia artificial desde casa o en el aula.
Aunque permite invertir el giro, no controla la velocidad. Para velocidad variable es necesario implementar PWM en el pin Enable1, lo cual se verá en la siguiente forma.
Control de Velocidad y Giro con PWM
Ahora pasamos al nivel más completo del proyecto, donde combinamos todo lo aprendido en un solo sistema.
En este método implementamos el control completo de un motor DC, donde ya no solo encendemos o apagamos el motor, sino que también controlamos su comportamiento de forma más precisa.
Por un lado, utilizamos un switch conectado a un pin digital de Arduino para cambiar el sentido de giro del motor. De esta forma, podemos decidir hacia dónde debe moverse en cualquier momento.
Por otro lado, incorporamos un potenciómetro conectado al pin analógico A0, el cual nos permite ajustar la velocidad del motor. Este valor es enviado como señal PWM al pin Enable del L293D, regulando así la potencia entregada al motor.
Este tipo de control es muy utilizado en robótica, especialmente en sistemas donde se necesita movimiento controlado y cambios dinámicos de dirección.
Pasos para realizar las conexiones
Nota: Las conexiones anteriores se mantienen. Aquí solo se agrega el potenciómetro.
Paso 1: Conecta el terminal central del potenciómetro al pin A0 de Arduino.
Paso 2: Conecta un extremo del potenciómetro a 5V de Arduino.
Paso 3: Conecta el otro extremo del potenciómetro a GND.
Código Arduino
Aquí tienes el código para controlar velocidad y sentido de giro con PWM y switch:
// Control de velocidad y giro motor DC con L293D, potenciómetro y switch
const int in1 = 9; // Pin IN1 L293D
const int in2 = 8; // Pin IN2 L293D
const int enA = 10; // Pin Enable1 L293D (PWM)
const int potPin = A0; // Pin del potenciómetro
const int switchPin = 7; // Pin del switch
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(switchPin, INPUT_PULLUP); // Switch con pull-up
}
void loop() {
int potValue = analogRead(potPin); // Lee el potenciómetro (0-1023)
int speed = map(potValue, 0, 1023, 0, 255); // Convierte a rango PWM (0-255)
analogWrite(enA, speed); // Controla velocidad con PWM
if (digitalRead(switchPin) == LOW) {
// Switch presionado: giro horario
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
} else {
// Switch no presionado: giro antihorario
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
}
Para finalizar, has recorrido un proceso completo desde el control más básico hasta un sistema mucho más avanzado del control de motor DC con Arduino y L293D. Empezaste con el encendido directo, luego entendiste cómo cambiar el sentido de giro y finalmente integraste el control de velocidad en un solo sistema.
Ahora ya tienes una base sólida en el control de motor DC con Arduino y L293D, lo que te permite seguir construyendo proyectos más complejos en robótica, como robots móviles o sistemas automatizados donde el control del movimiento es fundamental. A partir de aquí, puedes seguir experimentando y mejorando tus propios diseños.
🧠 IA Educativa desde cero
Explora nuestros eBooks educativos con proyectos guiados paso a paso para enseñar inteligencia artificial desde casa o en el aula.