Liga Sisifo para Beauchef Robotics Challenge 2025+
Este repositorio contiene el código y recursos para robots de la Liga Sisifo, enfocada en robots diferenciales controlados por joysticks digitales de 3 estados (implementados con 2 switches por joystick).
sisifo_league/
├── arduino/ # Código Arduino
│ └── control_diferencial/ # Control diferencial con joysticks
│ └── control_diferencial.ino
├── README.md
└── LICENSE
- Control de robot diferencial con dos ruedas independientes
- Control mediante joysticks digitales de 3 estados: UP, DOWN, y NEUTRAL (implementados con 2 switches por joystick)
- Cada joystick controla una rueda de forma independiente
- Estado NEUTRAL se aplica automáticamente cuando ningún switch está activado
- Aceleración gradual al cambiar de NEUTRAL a UP/DOWN
- Parada instantánea al volver a NEUTRAL
- Comunicación serie para depuración
- Arduino Uno/Nano o compatible
- 2 Joysticks digitales de 3 estados (cada uno con 2 switches: UP y DOWN que se conectan a GND cuando activos)
- 2 Motores DC con driver (ej: L298N)
- Fuente de alimentación adecuada para los motores
- Cables de conexión
Joystick Izquierdo (2 switches):
- Switch UP: Pin 9
- Switch DOWN: Pin 10
Joystick Derecho (2 switches):
- Switch UP: Pin 11
- Switch DOWN: Pin 12
Notas importantes:
- Los pines utilizan resistencias pullup internas del Arduino
- Los switches deben conectar el pin correspondiente a GND cuando están activos (lógica invertida)
- Cuando ningún switch está activo (ambos en HIGH), el estado es NEUTRAL
- No se requieren resistencias externas
Motor Izquierdo:
- PWM: Pin 5
- Dirección 1: Pin 4
- Dirección 2: Pin 3
Motor Derecho:
- PWM: Pin 6
- Dirección 1: Pin 7
- Dirección 2: Pin 8
- Cargar el código
control_diferencial.inoen el Arduino - Conectar el hardware según el esquema
- Abrir el Monitor Serie (9600 baudios) para ver información de depuración
- Controlar el robot con los joysticks:
- NEUTRAL (ningún switch activo): Robot detenido (velocidad = 0)
- NEUTRAL → UP (activar switch UP): La rueda acelera gradualmente hacia adelante
- UP → NEUTRAL (soltar switch UP): La rueda se detiene instantáneamente
- NEUTRAL → DOWN (activar switch DOWN): La rueda acelera gradualmente en reversa
- DOWN → NEUTRAL (soltar switch DOWN): La rueda se detiene instantáneamente
El código incluye constantes configurables en la parte superior:
const int VELOCIDAD_MAXIMA = 255; // Velocidad máxima PWM (0-255)
const int DELAY_LECTURA = 50; // Delay entre lecturas (ms)
const int ACELERACION = 5; // Incremento de velocidad por ciclo
const float TIEMPO_ACELERACION = 2.0; // Tiempo en segundos para alcanzar velocidad máximaAjuste de aceleración:
ACELERACION: Define cuánto aumenta la velocidad en cada ciclo del loop- Con
DELAY_LECTURA = 50msyACELERACION = 5, se alcanza velocidad máxima en ~2.5 segundos - Para aceleración más rápida, incrementar
ACELERACION - Para aceleración más suave, reducir
ACELERACION
El programa:
- Lee el estado de los 2 switches de cada joystick (UP y DOWN)
- Determina el estado del joystick: UP (switch UP activo), DOWN (switch DOWN activo), o NEUTRAL (ningún switch activo)
- Actualiza la velocidad objetivo según el estado
- Aplica aceleración gradual hasta alcanzar la velocidad objetivo
- Detiene instantáneamente los motores al volver a NEUTRAL
- Controla cada motor independientemente según su joystick
- Envía información de depuración por puerto serie
Comportamiento detallado:
- Al presionar UP/DOWN desde NEUTRAL, la velocidad incrementa gradualmente
- Mientras UP/DOWN se mantiene presionado, la velocidad aumenta hasta el máximo
- Al soltar (volver a NEUTRAL), el motor se detiene inmediatamente sin rampa
Las contribuciones son bienvenidas. Por favor, crea un pull request o abre un issue para discutir cambios.
Ver archivo LICENSE para más información.