// Programación en Arduino IDE // Código para controlar un robot de sumo con control remoto (RC). // El código asigna los pines 10 y 11 para controlar la velocidad (PWM) de los motores A y B, // y los pines 12 y 13 para controlar el sentido de movimiento de los motores. int motorAPwm = 10; int motorBPwm = 11; int motorA = 12; int motorB = 13; void setup() { // El void setup() se ejecuta una sola vez al encender el robot. // Aquí se configuran los pines de los motores como salidas (OUTPUT) para // poder enviar señales eléctricas que los controlen. pinMode(motorAPwm, OUTPUT); pinMode(motorBPwm, OUTPUT); pinMode(motorA, OUTPUT); pinMode(motorB, OUTPUT); // Inicialmente, se establecen las velocidades de los motores a 0 para asegurar // que el robot esté detenido al arrancar. La función digitalWrite() se usa // para esto, ya que 0 es un valor bajo. digitalWrite(motorBPwm, 0); digitalWrite(motorBPwm, 0); // Se inicia la comunicación serial a 9600 baudios. Esto permite al robot // recibir comandos desde una computadora (por ejemplo, a través del Monitor Serial de Arduino IDE). Serial.begin(9600); } // ---------------- FUNCIONES DE MOVIMIENTO ---------------- // La función adelante() mueve los motores A y B hacia adelante. // Se usan señales digitales HIGH para indicar el sentido de movimiento (hacia adelante) // y se asigna una velocidad de 200 a ambos motores, lo cual controla la potencia. void adelante() { digitalWrite(motorA, HIGH); digitalWrite(motorB, HIGH); digitalWrite(motorAPwm, 200); digitalWrite(motorBPwm, 200); } // La función atras() mueve los motores A y B hacia atrás. // Se usan señales digitales LOW para invertir el sentido de movimiento. void atras() { digitalWrite(motorA, LOW); digitalWrite(motorB, LOW); digitalWrite(motorAPwm, 200); digitalWrite(motorBPwm, 200); } // La función izquierda() permite al robot girar sobre su propio eje a la izquierda. // Para lograr esto, el motor A gira hacia atrás (LOW) y el motor B hacia adelante (HIGH). void izquierda() { digitalWrite(motorA, LOW); digitalWrite(motorB, HIGH); digitalWrite(motorAPwm, 200); digitalWrite(motorBPwm, 200); } // La función derecha() permite al robot girar sobre su propio eje a la derecha. // Para esto, el motor A gira hacia adelante (HIGH) y el motor B hacia atrás (LOW). void derecha() { digitalWrite(motorA, HIGH); digitalWrite(motorB, LOW); digitalWrite(motorAPwm, 200); digitalWrite(motorBPwm, 200); } // La función parar() detiene por completo el robot. // Detiene todos los motores asignando una velocidad de 0. void parar() { digitalWrite(motorA, LOW); digitalWrite(motorB, LOW); digitalWrite(motorAPwm, 0); digitalWrite(motorBPwm, 0); } // ---------------- PROGRAMA PRINCIPAL ---------------- void loop() { // El código en loop() se ejecuta repetidamente. // Aquí, el robot revisa constantemente si hay datos disponibles en el puerto serial. if (Serial.available()) { // Si hay un carácter disponible, lo lee y lo almacena en la variable 'dato'. char dato = Serial.read(); // A continuación, una serie de sentencias 'if' comparan el carácter recibido // con los comandos predefinidos ('A', 'R', 'I', 'D', 'P'). if (dato == 'A') { adelante(); // Después de ejecutar la acción, el robot imprime el mismo comando para // confirmar que ha recibido la orden correctamente. Serial.println("A"); } if (dato == 'R') { atras(); Serial.println("R"); } if (dato == 'I') { izquierda(); Serial.println("I"); } if (dato == 'D') { derecha(); Serial.println("D"); } if (dato == 'P') { parar(); Serial.println("P"); } } }
Este proyecto de Minisumo RC utiliza el driver L298P conectado a un Arduino Uno para controlar dos motorreductores amarillos mediante comunicación Bluetooth HC-05. El código implementa pines específicos: 10 y 11 para PWM de velocidad, 12 y 13 para dirección, permitiendo control remoto preciso desde smartphone.
La programación incluye variables nombradas (motorAPwm, motorBPwm, motorA, motorB) que facilitan el control de cada motor independientemente. Cada comando recibido ('A', 'R', 'I', 'D', 'P') ejecuta una función específica y retorna confirmación via Serial.println para verificar que el robot recibió la orden correctamente.
El circuito alimentado con batería 9V integra todos los componentes: Arduino como cerebro, HC-05 para comunicación, L298P para control de motores y motorreductores para movimiento. El resultado es un robot de sumo de máximo 350g en área 12x12cm, ideal para competencias de robótica.
Pines PWM 10-11 del Arduino controlan velocidad de motorreductores amarillos mediante variables motorAPwm y motorBPwm. Pines digitales 12-13 definen dirección con digitalWrite(motorA/B, HIGH/LOW). Velocidad fija 200 de 255 máximo garantiza torque suficiente para empujar oponentes manteniendo autonomía.
Módulo Bluetooth HC-05 conectado a pines Serial del Arduino recibe comandos desde smartphone. Configuración 9600 baudios en Serial.begin() asegura comunicación estable. Cada función (adelante, atras, izquierda, derecha, parar) confirma ejecución con Serial.println() para feedback inmediato al piloto.
Batería 9V alimenta circuito completo: Arduino Uno, L298P y motorreductores. Función parar() con digitalWrite(motorAPwm/BPwm, 0) elimina consumo de motores en standby. Peso máximo 350g en estructura 12x12cm optimiza relación potencia/autonomía para combates prolongados.