¿Cómo se controla la velocidad de un motor?
¿Alguna vez te has preguntado cómo un ventilador baja o sube la velocidad con solo girar una perilla? ¿O cómo una licuadora puede cambiar de potencia?
Todo esto no pasa por arte de magia: se debe a técnicas para controlar la velocidad y la dirección de los motores, que son el corazón de estos dispositivos. Hoy vas a aprender a controlar un motor con precisión desde Arduino, y entender cómo funcionan por dentro: desde la velocidad hasta el cambio de dirección.
¿Qué es una señal PWM?
PWM (modulación por ancho de pulso) no es solo prender y apagar un pin. Es una técnica para simular una señal analógica usando solo encendidos y apagados digitales muy rápidos.
Imagina esto:
En vez de alimentar al motor con corriente continua, le das pulsos de energía.
Si los pulsos son cortos, el motor gira lento.
Si son largos, gira más rápido.
El duty cycle es cuánto dura el pulso encendido dentro de un ciclo completo.
Tipos de motores
Gira continuamente en una dirección mientras se le aplique voltaje.
La velocidad se controla mediante PWM.
No permite un control preciso de la posición.
No gira infinito. Solo va hasta un ángulo exacto (como 90°, 135°, 180°…). Internamente tiene un potenciómetro que detecta su propia posición, por eso se detiene justo donde le digas.
Ya lo vimos en la Clase 9 – Revísala aquí
No gira suave, sino por pasos exactos. Puedes decirle: “Muévete 1.8°” y lo hace. Por eso es perfecto cuando necesitas control ultra preciso.
Se controla con secuencias de pulsos que activan bobinas en orden. Algunos tienen 200 pasos por vuelta.
¿Por qué no conectar un motor directamente al Arduino?
Riesgos
El pin de Arduino da solo ~40 mA.
Un motor puede pedir 500 mA o más.
Si lo conectas directo, el motor no se moverá… y puede que quemes el pin o la placa.
Solución: Utilizar un driver de motor
Actúa como intermediario entre el Arduino y el motor.
Permite controlar motores de mayor potencia sin sobrecargar el Arduino.
¿Qué es un Puente H y cómo logra invertir el giro?
El Puente H es un circuito que te permite cambiar la dirección de giro del motor, como si invirtieras los cables… ¡pero por software!
¿Cómo lo hace?
Tiene 4 interruptores (transistores) que redirigen la corriente. Según qué combinación actives, el motor gira:
A la derecha
A la izquierda
Se frena (si abres todos)
Se detiene por corto (si cruzas caminos… cuidado)
Muchos drivers (como el L298N o el L9110) ya tienen el puente H integrado. Tú solo conectas:
Los pines de control del Arduino
Una fuente de alimentación externa
Y listo: controlas velocidad y dirección.
El L298N es un driver con doble puente H. Piensa en él como un interruptor súper inteligente que puede mover dos motores DC (motor A y motor B), controlando su velocidad y dirección. También puede alimentar tus motores con una fuente externa sin dañar el Arduino.
¿Qué tiene por dentro?
2 puentes H (uno por motor).
Protección contra sobrecargas.
Regulador de 5V interno
¿Para qué sirve cada pin?
📌 Sobre el pin de 5V:
Si el módulo tiene un jumper colocado entre el pin de 5V y “EN”, puedes usar el regulador interno y alimentar también el Arduino desde aquí.
Si quitas el jumper, deberás conectar 5V desde el Arduino o una fuente externa.
Actividad 1: Controlar la velocidad con un potenciómetro
Hoy aprenderás a controlar un motor DC usando un driver L298N y un potenciómetro.
Arduino UNO
Driver L298N
Motor DC
Potenciómetro
Jumpers, protoboard
Fuente externa (batería 9-12V)
Código de programación:
Conexiones:
int enbPin = 5;
int in3 = 4;
int in4 = 3;
int potPin = A2;
int val = 0;
void setup() {
pinMode(enbPin, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
val = analogRead(potPin);
val = map(val, 0, 1023, 0, 255);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enbPin, val);
}
int val = 0;
Variable para guardar temporalmente el valor leído del potenciómetro.
pinMode(enbPin, OUTPUT);
Configura el pin de velocidad como salida para enviar señal PWM.
pinMode(in3, OUTPUT);
Configura el pin de dirección como salida.
pinMode(in4, OUTPUT);
Configura el segundo pin de dirección como salida.
val = analogRead(potPin);
Lee el valor del potenciómetro (de 0 a 1023) y lo guarda en val.
val = map(val, 0, 1023, 0, 255);
Convierte el valor leído a un rango de 0 a 255 para usarlo como PWM.
digitalWrite(in3, HIGH);
Establece la dirección del motor.
digitalWrite(in4, LOW);
Define la dirección opuesta como apagada.
analogWrite(enbPin, val);
Envía señal PWM para controlar la velocidad del motor.
Video con explicación:
⭐️ Reto extra: Invertir la dirección del motor
Agrega un botón para invertir la dirección del motor. Puedes usar una variable booleana para alternar entre una dirección u otra cada vez que se presiona.
¿Cómo hacerlo?
Agregar un botón conectado a un pin digital del Arduino.
Al presionar el botón, cambiar la lógica de IN3 e IN4 para invertir la dirección del motor.
digitalWrite(in3, HIGH); // Dirección 1
digitalWrite(in4, LOW);
→ cambia a:
digitalWrite(in3, LOW); // Dirección contraria
digitalWrite(in4, HIGH);
El ULN2003 es un arreglo de transistores Darlington: eso significa que multiplica la corriente que recibe de Arduino, para que sea suficiente para mover un motor 28BYJ-48.
Actividad 2: Movimiento de un motor paso a paso
Controla un motor paso a paso con ULN2003.
Motor 28BYJ-48
Driver ULN2003
Arduino UNO
Jumpers
Protoboard
Código de programación:
Conexiones:
#include <Stepper.h>
const int pasosPorVuelta = 2048;
Stepper motor(pasosPorVuelta, 8, 9, 10, 11);
void setup() {
motor.setSpeed(10);
}
void loop() {
motor.step(pasosPorVuelta);
delay(1000);
motor.step(-pasosPorVuelta);
delay(1000);
}
#include <Stepper.h>
Carga la librería que permite controlar motores paso a paso fácilmente.
const int pasosPorVuelta = 2048;
Define cuántos pasos necesita el motor para dar una vuelta completa (según el modelo).
Stepper motor(pasosPorVuelta, 8, 9, 10, 11);
Crea un objeto motor conectado a los pines 8, 9, 10 y 11 del Arduino, que van a IN1–IN4 del ULN2003.
motor.step(pasosPorVuelta);
Hace que el motor gire una vuelta completa en una dirección.
motor.step(-pasosPorVuelta);
Hace que el motor gire una vuelta en sentido contrario.
Video con explicación
⭐️ Reto extra: Controlar velocidad del stepper con potenciómetro
Puedes usar analogRead() del potenciómetro para modificar motor.setSpeed().
Pista:
Revisa el ejemplo Stepper → stepper_speedControl en el menú de ejemplos de Arduino.
Quiz de repaso
Presentación Clase 9: Control de Servomotores
Código y conexiones
1. ¿Qué pasa si quemo plástico con el cautín?
Al quemar plástico, liberas humos tóxicos que te hacen daño. ¡Evítalo! Si se pega plástico a la punta, limpia con una esponja húmeda o lana metálica.
2. ¿Qué hago si me quemo con el cautín?
Si eres menor de edad, avisa a un adulto.
Enfría la zona con agua corriente por 10 minutos.
Cubre con una gasa estéril.
Consulta al médico si es grave (ampollas grandes o mucho dolor).
3. ¿Por qué mi cautín cambia de color en la punta?
Oxidación: Límpialo con frecuencia y mantén la punta estañada.
Temperatura alta: No sobrecalientes. Ajusta entre 350-400 °C.
Residuos: Usa estaño de calidad con flux y limpia tras cada uso.
4. ¿Cómo saber si mi cautín es de buena calidad?
Un buen cautín:
Mantiene la temperatura estable.
Permite ajustar la temperatura (idealmente entre 200-450 °C).
Tiene puntas reemplazables y de buena conducción térmica.
7. ¿Cómo ajusto la temperatura de mi cautín?
350-400 °C: Ideal para soldaduras estándar.
300-350 °C: Para componentes sensibles.
Si tu cautín no tiene ajuste, considera uno que lo permita.
8. ¿Qué hacer si mi cautín no calienta bien?
Limpia la punta, puede estar oxidada.
Revisa el cable y las conexiones.
Si sigue fallando, reemplaza el elemento calefactor o el cautín.