1. Introducción a los Actuadores en Mecatrónica
Los actuadores son dispositivos que convierten una forma de energía (eléctrica, hidráulica, neumática) en movimiento o acción física. Son el componente final en cualquier sistema mecatrónico, generando la interacción real con el entorno.
Motor DC
Control continuo de velocidad y dirección
Servomotor
Control preciso de posición angular
Motor Paso a Paso
Movimiento discreto de alta precisión
Estos actuadores son fundamentales en automatización industrial, robótica, sistemas CNC, impresoras 3D, drones y dispositivos médicos.
2. Control de Actuadores con ESP32
Motor DC - Control de Velocidad y Dirección
Los motores DC requieren un driver como el L298N para manejar corrientes altas y permitir control bidireccional.
// Definir pines del motor DC con L298N
#define MOTOR_A_IN1 18
#define MOTOR_A_IN2 19
#define MOTOR_A_EN 21 // Pin PWM para control de velocidad
void setup() {
Serial.begin(115200);
// Configurar pines como salida
pinMode(MOTOR_A_IN1, OUTPUT);
pinMode(MOTOR_A_IN2, OUTPUT);
pinMode(MOTOR_A_EN, OUTPUT);
// Configurar PWM
ledcSetup(0, 1000, 8); // Canal 0, 1kHz, 8 bits
ledcAttachPin(MOTOR_A_EN, 0);
Serial.println("Motor DC inicializado");
}
void moverMotor(int velocidad, bool direccion) {
// Controlar dirección
if (direccion) {
digitalWrite(MOTOR_A_IN1, HIGH);
digitalWrite(MOTOR_A_IN2, LOW);
} else {
digitalWrite(MOTOR_A_IN1, LOW);
digitalWrite(MOTOR_A_IN2, HIGH);
}
// Controlar velocidad (0-255)
ledcWrite(0, abs(velocidad));
}
void detenerMotor() {
digitalWrite(MOTOR_A_IN1, LOW);
digitalWrite(MOTOR_A_IN2, LOW);
ledcWrite(0, 0);
}
void loop() {
// Ejemplo de control
Serial.println("Motor adelante - velocidad 150");
moverMotor(150, true);
delay(2000);
Serial.println("Motor detenido");
detenerMotor();
delay(1000);
Serial.println("Motor atrás - velocidad 200");
moverMotor(200, false);
delay(2000);
detenerMotor();
delay(1000);
}
Servomotor - Control Preciso de Posición
Los servomotores tienen control interno de posición y se controlan mediante señales PWM con ancho de pulso específico.
#include
Servo miServo;
int pinServo = 18;
int posicion = 0;
void setup() {
Serial.begin(115200);
// Configurar servo
miServo.attach(pinServo);
miServo.write(90); // Posición central
Serial.println("Servomotor inicializado en 90°");
}
void moverServo(int angulo) {
if (angulo >= 0 && angulo <= 180) {
miServo.write(angulo);
Serial.printf("Servo movido a: %d°\n", angulo);
} else {
Serial.println("Error: Ángulo fuera de rango (0-180°)");
}
}
void barrido() {
Serial.println("Iniciando barrido...");
// Barrido de 0 a 180 grados
for (int pos = 0; pos <= 180; pos += 5) {
miServo.write(pos);
delay(50);
}
// Barrido de 180 a 0 grados
for (int pos = 180; pos >= 0; pos -= 5) {
miServo.write(pos);
delay(50);
}
miServo.write(90); // Volver al centro
}
void loop() {
// Posiciones específicas
moverServo(0);
delay(1000);
moverServo(90);
delay(1000);
moverServo(180);
delay(1000);
// Realizar barrido
barrido();
delay(2000);
}
Motor Paso a Paso - Precisión Extrema
Los motores paso a paso se controlan mediante secuencias de pulsos. El driver ULN2003 simplifica el control.
#include
// Configuración del motor 28BYJ-48
const int PASOS_POR_REVOLUCION = 2048; // Para 28BYJ-48
const int VELOCIDAD_RPM = 15; // RPM máxima recomendada
// Pines conectados al ULN2003
Stepper motor(PASOS_POR_REVOLUCION, 18, 20, 19, 21);
void setup() {
Serial.begin(115200);
// Configurar velocidad del motor
motor.setSpeed(VELOCIDAD_RPM);
Serial.println("Motor paso a paso inicializado");
Serial.printf("Pasos por revolución: %d\n", PASOS_POR_REVOLUCION);
Serial.printf("Velocidad: %d RPM\n", VELOCIDAD_RPM);
}
void girarGrados(float grados, bool horario = true) {
int pasos = (grados / 360.0) * PASOS_POR_REVOLUCION;
if (!horario) pasos = -pasos;
Serial.printf("Girando %.1f° (%s) - %d pasos\n",
grados, horario ? "horario" : "antihorario", abs(pasos));
motor.step(pasos);
delay(500); // Pausa entre movimientos
}
void secuenciaDemo() {
Serial.println("=== SECUENCIA DE DEMOSTRACIÓN ===");
// Giros de diferente magnitud
girarGrados(90, true); // 90° horario
girarGrados(180, false); // 180° antihorario
girarGrados(45, true); // 45° horario
girarGrados(135, true); // 135° horario (vuelve a posición inicial)
Serial.println("Secuencia completada\n");
}
void calibrarPosicion() {
Serial.println("Calibrando posición (1 revolución completa)");
motor.step(PASOS_POR_REVOLUCION);
delay(1000);
}
void loop() {
// Realizar calibración
calibrarPosicion();
delay(2000);
// Ejecutar secuencia de demostración
secuenciaDemo();
delay(3000);
// Movimientos precisos
Serial.println("Movimientos de precisión:");
for (int i = 0; i < 8; i++) {
girarGrados(45, true); // 8 x 45° = 360°
}
delay(2000);
}
3. Ejercicios Prácticos
Objetivo: Controlar velocidad y dirección de un motor DC usando L298N.
Materiales:
- ESP32
- Motor DC 6-12V
- Driver L298N
- Fuente de alimentación externa
- Cables y protoboard
Conexiones:
- IN1 → Pin 18, IN2 → Pin 19
- ENA → Pin 21 (PWM)
- Motor a OUT1 y OUT2
Objetivo: Crear un sistema de posicionamiento preciso usando servomotores.
Funcionalidades:
- Control por comandos serie
- Posicionamiento automático
- Feedback de posición actual
- Secuencias predefinidas
Aplicaciones: Pan-tilt de cámaras, brazos robóticos.
Objetivo: Implementar control de alta precisión para aplicaciones CNC.
Características avanzadas:
- Microstepping para mayor suavidad
- Aceleración y desaceleración controlada
- Posicionamiento absoluto
- Detección de pérdida de pasos
Aplicaciones: Impresoras 3D, máquinas CNC, telescopios.
4. Proyecto: Línea de Ensamblaje Automatizada
Sistema de Manufactura Inteligente
Objetivo: Desarrollar una línea de ensamblaje miniatura que integre los tres tipos de actuadores para simular un proceso de manufactura completo.
Estaciones del Sistema:
- Transportador: Motor DC con encoder
- Brazo selector: 2 servomotores (pan/tilt)
- Posicionador: Motor paso a paso de precisión
- Sensores: Proximidad, color, peso
- Comunicación: MQTT para monitoreo
- HMI: Dashboard web en tiempo real
Proceso Automatizado:
- Detección de piezas en la cinta transportadora
- Clasificación por características (color, tamaño)
- Posicionamiento preciso para ensamblaje
- Control de calidad automatizado
- Reporte de producción en tiempo real
5. Evaluación y Troubleshooting
Problemas Comunes
- Motor DC no gira: Verificar alimentación y conexiones del driver
- Servo con temblor: Revisar alimentación y señal PWM
- Motor paso a paso pierde pasos: Reducir velocidad o aumentar corriente
- Sobrecalentamiento: Añadir disipadores y ventilación
- Ruido eléctrico: Usar capacitores de filtrado
Criterios de Evaluación
- Control preciso de velocidad y posición
- Respuesta suave y sin vibraciones
- Código bien estructurado y documentado
- Manejo adecuado de la alimentación
- Implementación de seguridades