Módulo 6

Actuadores: motores DC, servos, paso a paso

Manejo de Sensores y Actuadores

ESP32 Mecatrónica IoT UNAM

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.

Motor DC con L298N
// 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.

Control de Servomotor
#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.

Motor 28BYJ-48 con ULN2003
#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

1

Control Básico de Motor DC

Básico 30 min

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
2

Sistema de Posicionamiento con Servo

Intermedio 45 min

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.

3

Control Preciso con Motor Paso a Paso

Avanzado 60 min

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:

  1. Detección de piezas en la cinta transportadora
  2. Clasificación por características (color, tamaño)
  3. Posicionamiento preciso para ensamblaje
  4. Control de calidad automatizado
  5. 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