
Esta es la entrega del código que utilicé para hacer un SumoBot usando arduino. En esta primera parte anexo los códigos, posteriormente incluiré el diagrama de los circuitos y fotos del mismo.
__________________________________________________________________
/*Sumobot sobre piso blanco y círculo negro
el valor de color negro en los sensores infrarrojos
es de 480 .Se usó la comunicación serial para obtener estos valores.
*/
//Declaración de los pines
int motorR1 = 3;
int motorR2 = 4; //motor derecho
int motorL1 = 5;
int motorL2 = 6; //motor izquierdo
int sensFder = 7; //sens frontal derecho
int sensFizq = 8; //sens frontal izquierdo
int sensTder = 9; //sens trasero derechp
int sensTizq = 10; //sens trasero izquierdo
int sensDel = 0; //sens IR delantero
int sensTras = 1; //sens IR trasero
//Declaración de I/O's
void setup()
{
pinMode (motorR1, OUTPUT);
pinMode (motorR2, OUTPUT);
pinMode (motorL1, OUTPUT);
pinMode (motorL1, OUTPUT);
pinMode (sensFder, INPUT);
pinMode (sensFizq, INPUT);
pinMode (sensTder, INPUT);
pinMode (sensTizq, INPUT);
}
void loop()
{
float buf1, buf2, valord, valort;
valord=analogRead(sensDel);
valort=analogRead(sensTras);
buf1=valord*500/1024;
buf2=valort*500/1024;
//El bot se activa al presionar cualquier sensor de impacto
//si toca detecta linea blanca adelante retrocede, gira 4s. a la izquierda
//y continua haca atrás
if(buf1 >= 480) //mayor o igual que 480 es negro
{
atras();
izquierda();
delay(400);
atras();
}
//si detecta linea blanca atras avanza, gira 4s a la izquierda
//y continua haca adelante
if(buf2 >= 480) //mayor o igual de 480 es negro
{
adelante();
izquierda();
delay(400);
adelante();
}
//----------- ACCIONES IMPACTO-------------
if(digitalRead (sensFder)==HIGH )
{
golpeFder();
}
if(digitalRead (sensFizq)==HIGH)
{
golpeFizq();
}
if(digitalRead (sensTder)==HIGH)
{
golpeTder();
}
if(digitalRead (sensTizq)==HIGH)
{
golpeTizq();
}
}
//---------------MOVIMIENTOS--------------
int adelante()
{
digitalWrite (motorR1, LOW);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, LOW);
}
int atras()
{
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, LOW);
digitalWrite (motorL1, LOW);
digitalWrite (motorL2, HIGH);
}
int izquierda()
{
digitalWrite (motorR1, LOW);
digitalWrite (motorR2, HIGH);
digitalWrite (motorL1, LOW);
digitalWrite (motorL2, HIGH);
delay(100);
}
int derecha()
{
digitalWrite (motorR1, HIGH); //L
digitalWrite (motorR2, LOW);
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, LOW);//L
delay(100);
}
//--------------GOLPES-------------------
int golpeFder()
{
atras();
delay(1000);
derecha();
delay(300);
adelante();
}
int golpeFizq()
{
atras();
delay(1000) ;
izquierda();
delay(300);
adelante();
}
int golpeTder()
{
adelante();
delay(1000);
izquierda();
delay(300);
atras();
}
int golpeTizq()
{
adelante();
delay(1000);
derecha();
delay(300);
atras();
}
__________________________________________________________________