Mini-Sumo con Arduino Nano

Es un robot autónomo o controlado a distancia que compite en un ring, donde el objetivo es empujar al rival fuera del área de combate.

Características

Dimensiones máximas
Largo:  200 mm
Ancho: 200 mm

Componentes principales
Arduino Nano
Driver de motor L298N
Sensor TCRT5000
Sensor Ultrasónico HS-04

Materiales necesarios

1 Arduino Nano

1 Modulo Driver l298N

2 Sensores de línea TCRT5000

1 Sensor Ultrasónico HC-SR04

2 Motorreductores con llanta

Ruedas se silicona (Alternativa)

2 Baterías de 4.2 (18650)

1 Porta pilas para 18650

Cables jumper macho-hembra

1 Interruptor pequeño

Diagrama de conexión

Código Arduino

//Pines de conexión del driver.
//Conexiones para el motor 1 (velocidad del motor).
int ENA = 9;
//Conexiones para el motor 1 (dirección del motor).
int IN1 = 8;
int IN2 = 7;
//Conexiones para el motor 2 (dirección del motor).
int IN3 = 5;
int IN4 = 4;
//Conexiones para el motor 2 (velocidad del motor).
int ENB = 3;
//Conexiones para el sensor ultrasónico.
int ULTROU = 12;
int ULTRIN = 11;
//Conexiones para los sensores infrarrojo.
int SNSR1 = A0;
int SNSR2 = A1;
//Variables que guardaran el valor de sensores infrarrojo 1 y 2 (el valor será "1" si están sobre la línea negra y "0" si están sobre la pista blanca).
int SNSR1_V = 0;
int SNSR2_V = 0;
// Variables para el sensor ultrasónico.
// Variable para la distancia.
long DIST;
// Variable para el tiempo.
long TIME;
//Variable de velocidad (entre 0 y 255 donde 255 es la velocidad máxima).
int SPEED = 160;
// Función de configuraciones en la placa, se ejecutará una sola vez.
void setup()
{
  // Definimos los Pines asignados al Motor 1 como salidas.
  pinMode(INA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  // Definimos los Pines asignados al Motor 2 como salidas.
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(INB, OUTPUT);
  // Definimos los Pines asignados a los sensores como entradas.
  pinMode(ULTROU,OUTPUT);
  pinMode(ULTRIN,INPUT);
  pinMode(SNSR1,INPUT);
  pinMode(SNSR2,INPUT);
  delay(1500);
  // Iniciamos con los motores detenidos.
  digitalWrite(AIN1,LOW);
  digitalWrite(AIN2,LOW);
  digitalWrite(BIN1,LOW);
  digitalWrite(BIN2,LOW);
  analogWrite(PWMA,0);
  analogWrite(PWMB,0);
}
// Función principal, se ejecutará en bucle.    
void loop()
{
  //Iniciamos con la función para medir la distancia con el ultrasonido
  digitalWrite(ULTROU,LOW);
  delayMicroseconds(5);
  digitalWrite(ULTROU, HIGH);
  delayMicroseconds(10);
  TIME = pulseIn(ULTRIN, HIGH);
  DIST= int(0.017*TIME);
  // Al momento de iniciar se define una espera de 5 segundos.
  delay(5000);
  // El robot inicia girando a la derecha en su posición para detectar objetos al rededor.
  analogWrite(PWMA,250);
  analogWrite(PWMB,250);
  digitalWrite(AIN1,HIGH);
  digitalWrite(AIN2,LOW);
  digitalWrite(BIN1,LOW);
  digitalWrite(BIN2,HIGH);
  // Si se detecta un objeto al frente el robot avanza hacia adelante.
  if(DIST <= 15) {
    analogWrite(PWMA,250);
    analogWrite(PWMB,250);
    digitalWrite(AIN1,HIGH);
    digitalWrite(AIN2,LOW);
    digitalWrite(BIN1,HIGH);
    digitalWrite(BIN2,LOW);
    delay(3000);
  }
  // Si el sensor derecho detecta la line blanca del final del rin, el robot gira a la izquierda.
  if((!digitalRead(SNSR1))) {
    analogWrite(PWMA,250);
    analogWrite(PWMB,250);
    digitalWrite(AIN1,LOW);
    digitalWrite(AIN2,HIGH);
    digitalWrite(BIN1,LOW);
    digitalWrite(BIN2,HIGH);
    delay (1000);
  }   
  // Si el sensor izquierdo detecta la line blanca del final del rin, el robot gira a la derecha.
  if((!digitalRead(SNSR2))) {
    analogWrite(PWMA,250);
    analogWrite(PWMB,250);
    digitalWrite(AIN1,HIGH);
    digitalWrite(AIN2,LOW);
    digitalWrite(BIN1,HIGH);
    digitalWrite(BIN2,LOW);
    delay (1000);
  }       
}

Nota: Este es un código básico para entender como funciona un robot sumo.

Actualizaciones del boletín

Introduce tu dirección de correo electrónico para suscribirte a nuestro boletín

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *