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.

1 Like

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

delay(700);

Y son 700 mseg que no detecto nada.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.