Sumobot autonomo

Crea tu propio sumobot autonomo y se el proximo campion nacional

Diagrama

Con el siguiente programa, puedes hacer un robot automatizado, solo necesitas: un arduino uno , un puente H- L298N, 2 sensores opticos TCR5000, 2 motorreductores, portapilas y pilas 18650.

Diagrama de conexión Sumobot, se puede realizar con diferentes tipos de baterias, solo hay que tomar en cuenta que para el buen funcionamiento de nuestro sumo, te recomendamos utilizar 12 v. Tambien, debemos recordar que podemos alimentar el arduino desde la salida de 5v del puente H, hacia Vin (cable naranja), recuerden hacer el puente entre GND del puente H y GND del arduino.

long TP_init(int trigger_pin, int echo_pin);  //variables para medir distancia 
long Distance(int trigger_pin, int echo_pin);

//los "IN" son las entradas de nuestro puente H, numeros son los pines a los cuales estan conectadas
//las entradas del puente H al arduino 
int IN1 = 10;
int IN2 = 9;
int IN3 = 6;
int IN4 = 5;

void setup() {
  pinMode(IN1, OUTPUT); 
  pinMode(IN2, OUTPUT); 
  pinMode(IN3, OUTPUT); 
  pinMode(IN4, OUTPUT); 

  pinMode(2, OUTPUT);  //Trigger sensor de distancia
  pinMode(3, INPUT);   //ECHO sensor de distancia 

  pinMode(11, INPUT);  //sensor de línea
  pinMode(12, INPUT);  //sensor de línea

 // Serial.begin(9600);  //inicialización de puerto serial
 delay(5000); 
}

void loop() {

  //Serial.println(Distance(2, 3));  // imprimir distancia obtenida

  // AVANZA HACIA ENFRENTE
  analogWrite(IN1, 0);    
  analogWrite(IN2, 120);
  analogWrite(IN3, 120);
  analogWrite(IN4, 0);

  if (digitalRead(11) == 0 || digitalRead(12) == 0) {  // línea blanca 0, línea negra 1
    analogWrite(IN1, 100);    // RETROCEDE
    analogWrite(IN2, 0);
    analogWrite(IN3, 0);
    analogWrite(IN4, 100);
    delay(1000);

    analogWrite(IN1, 0);    // GIRA
    analogWrite(IN2, 100);
    analogWrite(IN3, 0);
    analogWrite(IN4, 100);
    delay(800);
  }

  if (Distance(2, 3) < 40) {  
    analogWrite(IN1, 0);
    analogWrite(IN2, 255);
    analogWrite(IN3, 255);
    analogWrite(IN4, 0);
  }
}

// función para medir distancia con timeout a 1 metro
long TP_init(int trigger_pin, int echo_pin)
{
  digitalWrite(trigger_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger_pin, LOW);
  // Timeout de 5800 microsegundos (~1 metro de distancia máxima)
  long microseconds = pulseIn(echo_pin, HIGH, 5800);  
  return microseconds;
}

long Distance(int trigger_pin, int echo_pin)
{
  long microseconds = TP_init(trigger_pin, echo_pin);
  long distance;
  distance = microseconds / 29 / 2;
  if (distance == 0) {
    distance = 999;  // Si no se detecta nada, se asigna un valor alto
  }
  return distance;
}