Robot Sumo Arduino

Hola estoy haciedno un robot sumo para una competencia, con los siguientes materiales,

  • Arduino UNO
  • Base acrílica o chasis de carro(plataforma doble nivel)
  • 2 moto reductores
  • 2 llantas
  • 1 rueda loca
  • Puente H
  • Sensor de ultrasonido
  • 4 sensor de línea (Infrarrojo)
  • Cables
  • Portapilas 18650
  • 2 Baterías 18650
  • Cargador de baterías 18650
  • Swiche balancín pequeño
  • 20 cables macho hembra
  • 20 cables macho macho
  • Tornillos, bujes y soportes
    Características del robot
  1. El robot deberá ser de tipo autónomo.
  2. El robot debe de ser diseñado para iniciar el combate 5 segundos
    después que el concursante presione un botón de reset.
  3. El robot de sumo no debe exceder las dimensiones de 29,5cmx31cm,
    altura libre.
  4. No debe ser expandible o modular.

Además me han dado un codigo base, pero no se como empezar a programar, porque este tiene que prenderse antes de los 5 segundos, detectar el color negro para andar y el blanco para retroceder, aqui el codigo base

//Nombramos los pines a utilizar.
//Pines para los sensores de infrarrojo
#define delIzq 2  //IR delantero izquierdo
#define delDer 3  //IR delantero derecha
#define traIzq 4  //IR trasero izquierdo
#define traDer 5  //IR trasero derecho


//Pines para el sensor ultrasonido
#define echo 7
#define triger 6

//Pines para puente H (motor A - Motor B)
#define adelante1 12  //in1
#define atras1 11     //in2
#define adelante2 10  //in3
#define atras2 9      //in4

//Creamos las variables necesarias
float tiempo=0;
float distancia=0;
int ir1=0;      //Delantero izquierda
int ir2=0;      //Delantero derecha
int ir3=0;      //Trasero izquierda
int ir4=0;      //Trasero derecha

void setup() {
  //Configuracion de los pines 
  pinMode(delDer,INPUT);
  pinMode(delIzq,INPUT);
  pinMode(traDer,INPUT);
  pinMode(traIzq,INPUT);
  pinMode(echo,INPUT);
  pinMode(triger,OUTPUT);
  pinMode(adelante1,OUTPUT);
  pinMode(atras1,OUTPUT);  
  pinMode(adelante2,OUTPUT);
  pinMode(atras2,OUTPUT);  

  Serial.begin(9600);
  //Iniciamos con ambos motores apagados
  digitalWrite(adelante1,LOW);
  digitalWrite(adelante2,LOW);
  digitalWrite(atras1,LOW);
  digitalWrite(atras2,LOW);
  delay(5000); 
}

void loop() {
  //Iniciamos con la funcion para medir la distancia con el ultrasonido
  digitalWrite(triger,LOW);
  delayMicroseconds(4);
  digitalWrite(triger,HIGH);
  delayMicroseconds(10);
  digitalWrite(triger,LOW);

  tiempo=pulseIn(echo,HIGH);
  distancia=tiempo/58;      //Lugar donde se almacena la distancia medida en cm

  //Hacemos la lectura de cada uno de los sensores infrarrojos
  ir1=digitalRead(delIzq);
  ir2=digitalRead(delDer);
  ir3=digitalRead(traIzq);
  ir4=digitalRead(traDer);
  
  //Codigo principal del robot sumo
  //Condicion en la que los 4 sensores de infrarrojo estan sobre la pista negra
  if (ir1==0 && ir2==0 && ir3==0 && ir4==0){
      if (distancia<30.0){                    //Condicion que evalua la distancia del otro robot sumo
        digitalWrite(adelante1,HIGH);
        digitalWrite(adelante2,HIGH);
        digitalWrite(atras1,LOW);
        digitalWrite(atras2,LOW);    
      }
      else{
        digitalWrite(adelante1,LOW);         //Si no tiene un objetivo en la distancia que le definimos da vueltas para encontrarlo
        analogWrite(adelante2,255/3);
        digitalWrite(atras1,LOW);
        digitalWrite(atras2,LOW);      
      }
    }
    else if(ir1==1 && ir2==1 && ir3==0 && ir4==0){
        digitalWrite(adelante1,LOW);
        digitalWrite(adelante2,LOW);
        digitalWrite(atras1,HIGH);
        digitalWrite(atras2,HIGH);
        delay(700); 
    }
    else if(ir1==0 && ir2==0 && ir3==1 && ir4==1){
        digitalWrite(adelante1,HIGH);
        digitalWrite(adelante2,HIGH);
        digitalWrite(atras1,LOW);
        digitalWrite(atras2,LOW);
        delay(700);
    }       
}

si alguien me puede ayudarporfavor

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

como?

Moderador:
Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)




También ten presente que si escribes en español debes usar este foro en Español y si posteas en el foro en inglés debes usar ese idioma para Titulo, cuerpo del mensaje, y comentarios o tmb serás movido a estes foro en Español.

Te aconsejo que si en un robot que tiene que estar atento a los ataques le vas a poner cosas como esta

delay(5000);

simplemente ya perdiste.
Ve a Documentación y lee todo sobre millis() y máquina de estados.

Primer paso: Hacer caso al moderador y corregir el código.

Segundo Paso: Saber como funciona cada uno de los sensores y no nos dices que tipos te han dado para el proyecto:

Tercero paso: Montar el robot y que no explote cuando le pongas las pilas.

Cuarto paso: Comprobar el funcionamiento de cada uno de los sensores y que hacen lo que se supone deben hacer, via programación simple: compruebas que los seguidores de línea funcionan y te detecta la superficie blanca/negra del tatami, que el sensor te mide la distancia y, por último, que las ruedas giran dándole ordenes.

Quinto paso: Hacer un diagrama del funcionamiento, que a posterióri será una máquina de estados: qué hace cuando está en la línea blanca, cómo detecta al enemigo, etc.

En cuanto a la programación, ve poco a poco, viendo como quieres que funcioné. Al igual que te ha recomendado @Surbyte utiliza millis() para hacer las secuencias de movimiento.

Sin embargo una matización para @Surbyte:

delay(5000);

No pasa nada porque lo utilice en el setup, según las normas de los robots sumo, no puede empezar la pelea antes de 5 segundos desde que se da la orden de atacar, si entra antes se descalifica. Pero es el único delay que creo que está bien.

Ok.. no son 5000 mseg pero son 700 mseg por acción

delay(700);

Y son 700 mseg que no detecto nada.