Professional Documents
Culture Documents
CNY70 dos pilas de 9V que alimentan al controlador de motores y otra de 9 voltios que alimenta
arduino, lo que debería hacer es buscar otro robot en un circulo sin sobresalirse de este mismo el
problema que tengo es que hasta el momento mi robot solo hace la maniobra de buscar a otros
robots, pero no los busca.
Es decir el robot se mueve en busca de ellos pero parece que los sensores no detectaran ningún
objeto, llegue a pensar que los sensores de ultrasonidos estaban dañados y los comprobé con otro
programa, pero con el serial print puedo ver perfectamente como me da la lectura de la distancia sin
ningún tipo de problema, los CNY70 también funcionan sin ningún tipo de problema.
Así que no es el hardware sino el software, estuve mirando la programación durante horas y
quitando condiciones para facilitarle las cosas a Arduino. También pense que podrían ser los delays
así que fui quitando hasta más no poder, pero aún y así todavía quedan muchos los que creo que son
totalmente necesarios.
long distancia;
long tiempo;
//Declaración de I/O's
void setup()
{
pinMode (sensFs, OUTPUT); /*activación del pin 7 como salida: para el pulso ultrasónico*/
pinMode (sensFe, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del
ultrasonido*/
pinMode (sensTs, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
pinMode (sensTe, INPUT); /*activación del pin 10 como entrada: tiempo del rebote del
ultrasonido*/
void loop()
{
if(buttonStateDi=0){
blancodelanteizq();
}/*
else
{
Buscar();
}*/
if(buttonStateDd=0){
blancodelanteder();
}/*
else
{
Buscar();
}*/
{
// lectura del pin 1
int buttonStateTi = digitalRead(sensTrasi);
if(buttonStateTi=1){
blancoatrasizquierda();
}/*
else
Buscar();
}*/
{
// lectura del pin 1
int buttonStateTd = digitalRead(sensTrasd);
// imprision del resultado
Serial.println(buttonStateTd);
delay(100); // delay in between reads for stability
if(buttonStateTd=1){
blancoatrasderecha();
}/*
else
Buscar();
}*/
if(distancia< 25)
{
golpeFder();
}
else
{
Buscar();
}
digitalWrite(sensTs,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(sensTs, HIGH); /* envío del pulso ultrasónico trig*/
delayMicroseconds(10);
tiempo=pulseIn(sensTe, HIGH); /* Función para medir la longitud del pulso entrante. Mide el
tiempo que transcurrido entre el envío
del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a
recibir el rebote, HIGH, hasta que
deja de hacerlo, LOW, la longitud del pulso entrante*/
distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
/*Monitorización en centímetros por el monitor serial*/
Serial.println("Distancia ");
Serial.println(distancia);
Serial.println(" cm");
delay(1000);
if(distancia< 25)
{
golpeTder();
}/*
else
{
Buscar();
}*/
/*
if(digitalRead (sensFizq)==HIGH)
{
golpeFizq();
}
else
{
Buscar();
}
*/
/*
if(digitalRead (sensFizq)==HIGH)
{
golpeTizq();
}
else
{
Buscar();
}
*/
}
}
}
//---------------MOVIMIENTOS--------------
int adelante () {
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW); //motor izquierdo
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENB,70);
delay(2);
analogWrite(ENB,120);
delay(2);*/
analogWrite(ENB,160);
/*delay(2);
analogWrite(ENB,255);
delay(2000);*/
int atras()
{
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH); //motor izquierdo
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENB,70);
delay(2);
analogWrite(ENB,120);
delay(2);*/
analogWrite(ENB,160);
/*delay(2);
analogWrite(ENB,255);
delay(2000);*/
int izquierda()
{
delay(100);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH); //motor izquierdo
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENB,70);
delay(2);
analogWrite(ENB,120);
delay(2);*/
analogWrite(ENB,100);
/*delay(2);
analogWrite(ENB,255);
delay(2000);*/
int derecha()
{
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW); //motor izquierdo
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENB,70);
delay(2);
analogWrite(ENB,120);
delay(2);*/
analogWrite(ENB,100);
/*delay(2);
analogWrite(ENB,255);
delay(2000);*/
//--------------GOLPES-------------------
int Buscar()
{
izquierda();
delay(2000);
adelante();
delay(2000);
}
int golpeFder()
{
adelante();
delay(2000);
/*adelante();
delay(2000);
atras();
delay(2000);*/
}
/*
int golpeFizq()
{
atras();
delay(1000) ;
izquierda();
delay(300);
adelante();
}*/
int golpeTder()
{
atras();
delay(2000);
/*atras();
delay(2000);
adelante();
delay(2000);*/
}
/*
int golpeTizq()
{
adelante();
delay(1000);
derecha();
delay(300);
atras();
}*/
int blancodelanteizq()
{
atras();
delay(1000);
derecha();
delay(2000);
adelante();
delay(1000);
}
int blancodelanteder()
{
atras();
delay(1000);
izquierda();
delay(2000);
adelante();
delay(1000);
}
int blancoatrasizquierda()
{
adelante();
delay(1000);
derecha();
delay(2000);
adelante();
delay(1000);
}
int blancoatrasderecha()
{
adelante();
delay(1000);
izquierda();
delay(2000);
adelante();
delay(1000);
}