# Proyecto de Control de Motor DC ## 1. Descripción General Este proyecto implementa una consola digital de control para un motor de corriente continua (DC), orientada a operación segura, control fino de velocidad y protección mecánica/eléctrica. A diferencia de un control directo con potenciómetro, el sistema introduce: - Máquina de estados para evitar arranques accidentales. - Aceleración y desaceleración progresiva (rampa). - Inversión de giro con secuencia controlada. - Interfaz hombre–máquina con encoder rotatorio, botones y pantalla OLED. El sistema se desarrolla inicialmente sobre **HW-364A (ESP8266)**, con una ruta clara de migración a **ESP32 DevKit V1**. --- ## 2. Arquitectura del Sistema ### 2.1 Flujo Funcional ``` Usuario (Encoder / Botones) ↓ ESP8266 ↓ Driver DRV8871 ↓ Motor DC ↓ OLED (Feedback) ``` --- ## 3. Hardware ### 3.1 Controlador Principal - Placa: HW-364A - MCU: ESP8266 - Lógica: 3.3 V - Limitación crítica: GPIO reducidos ### 3.2 Sistema de Energía - Tierra común (GND) para todo el sistema - Motor alimentado por fuente externa independiente - Electrónica alimentada a 3.3 V ### 3.3 Asignación de Pines | Función | Señal | Pin | |------|------|-----| | OLED SDA | Datos I2C | D2 | | OLED SCL | Reloj I2C | D1 | | Encoder A | Giro A | D5 | | Encoder B | Giro B | D6 | | Botón Centro | Start | D7 | | Botón Back | Reversa | D8 | | Botón Confirm | Adelante | D3 | | Driver IN1 | Motor A | D0 | | Driver IN2 | Motor B | D4 | ### 3.4 Driver de Potencia - Modelo: DRV8871 - Control PWM bidireccional - Polaridad definida por IN1 / IN2 --- ## 4. Lógica de Control ### 4.1 Máquina de Estados | Estado | Descripción | |------|-------------| | WAITING_START | Sistema armado, motor bloqueado | | SELECT_DIR | Selección explícita de sentido | | RUNNING | Operación normal | | CHANGING_DIR | Inversión controlada | ### 4.2 Arranque Seguro El motor permanece apagado hasta confirmación explícita del usuario. Previene reinicios peligrosos tras fallas de energía. ### 4.3 Selección de Sentido - BACK → Reversa - CONFIRM → Adelante No existe sentido por defecto. ### 4.4 Control de Velocidad Adaptativo - Giro lento → ±1 % - Giro rápido (< 50 ms) → ±5 % - Rango: 0–100 % ### 4.5 Rampa de Aceleración Variables desacopladas: - `targetSpeed` → intención del usuario - `currentSpeed` → acción física Incremento/decremento: 0.5 % por ciclo (~2.5 s a plena escala). ### 4.6 Inversión Inteligente Secuencia obligatoria: 1. Rampa descendente hasta 0 % 2. Pausa mecánica 3. Cambio de polaridad 4. Rampa ascendente --- ## 5. Firmware ### 5.1 Inicialización (`setup()`) - Configuración de GPIO - Motor apagado por defecto - Botones con pull-up interno - Inicialización OLED ### 5.2 Bucle Principal (`loop()`) - Lectura del encoder - Ejecución de máquina de estados - Control de rampa - Render de interfaz ### 5.3 Funciones Críticas - `readEncoderSpeed()` → velocidad adaptativa - `handleDirectionButtons()` → solicitud de inversión - `updateMotorRamp()` → núcleo de control - `drawInterface()` → visualización --- ## 6. Interfaz de Usuario - Flechas grandes indican sentido - Porcentaje central = velocidad real - Indicador secundario = velocidad objetivo Diseño orientado a lectura inmediata. --- ## 7. Limitaciones Actuales - GPIO al límite - Sin indicadores periféricos - Expansión restringida --- ## 8. Versión 2 (V2) ### 8.1 Migración a ESP32 - Mayor número de GPIO - PWM por hardware - Escalabilidad ### 8.2 LED RGB de Estado | Color | Significado | |------|-------------| | Amarillo | Standby / 0 % | | Verde | Adelante | | Rojo | Reversa | | Rojo/Verde | Inversión | ### 8.3 Cambios en Firmware - Nueva función `updateLeds()` - GPIO dedicados (25, 26, 27) - Mezcla de color por PWM --- ## 9. Conclusión El sistema establece una base sólida para control seguro y profesional de motores DC, con una arquitectura preparada para evolucionar hacia una solución embebida más robusta en ESP32.