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;
}