Buenas estoy haciendo un robot de sumo con arduino UNO, tiene dos sensores de ultrasonidos, 4 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.
Agradecería vuestra ayuda ya que soy relativamente nuevo en esto de arduino.
Os dejo mi programa aquí:
P.D. Gracias de antemano!
/*Sumobot sobre suelo 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 IN1 = 5; // Input1 conectada al pin 5
int IN2 = 6; // Input2 conectada al pin 6 MOTOR DERECHO
int ENA = 10; // ENB conectada al pin 12 de Arduino
int IN4 = 3; // Input3 conectada al pin 3
int IN3 = 4; // Input4 conectada al pin 4 MOTOR IZQUIERDO
int ENB = 11; // ENB conectada al pin 11 de Arduino
int sensFs = 7; //sensor frontal delantero salida del pulso trig
int sensFe = 8; //sensor frontal delantero entrada del pulso
int sensTs = 9; // sensor trasero salida del pulso trig
int sensTe = 12; //sensor trasero entrada del pulso
int sensDeli = 0; //sensor IR delantero
int sensDeld = 2; //sensor IR delantero
int sensTrasi = 1; //sensor IR trasero
int sensTrasd = 13; //sensor IR trasero
long distancia;
long tiempo;
//Declaración de I/O's
void setup()
{
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT); //Motor derecho
pinMode (ENA, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT); //Motor izquierdo
pinMode (ENB, OUTPUT);
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*/
pinMode (sensDeli, INPUT); /*activación del pin 0 como salida*/
pinMode (sensDeld, INPUT); /*activación del pin 2 como salida*/
pinMode (sensTrasi, INPUT); /*activación del pin 1 como salida*/
pinMode (sensTrasd, INPUT); /*activación del pin 13 como salida*/
}
void loop()
{
// lectura del pin 0
int buttonStateDi = digitalRead(sensDeli);
// imprision del resultado
Serial.println(buttonStateDi);
delay(100); // delay in between reads for stability
if(buttonStateDi=0){
blancodelanteizq();
}/*
else
{
Buscar();
}*/
// lectura del pin 0
int buttonStateDd = digitalRead(sensDeld);
// imprision del resultado
Serial.println(buttonStateDd);
delay(100); // delay in between reads for stability
if(buttonStateDd=0){
blancodelanteder();
}/*
else
{
Buscar();
}*/
{
// lectura del pin 1
int buttonStateTi = digitalRead(sensTrasi);
// imprision del resultado
Serial.println(buttonStateTi);
delay(100); // delay in between reads for stability
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();
}*/
//----------- ACCIONES IMPACTO-------------
digitalWrite(sensFs,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(sensFs, HIGH); /* envío del pulso ultrasónico trig*/
delayMicroseconds(10);
tiempo=pulseIn(sensFe, 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(100);
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);*/
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW); //motor derecho
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENA,70);
delay(2);
analogWrite(ENA,120);
delay(2);*/
analogWrite(ENA,160);
/*delay(2);
analogWrite(ENA,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);*/
/*digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH); //motor derecho
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
analogWrite(ENA,70);
delay(2);
analogWrite(ENA,120);
delay(2);*/
analogWrite(ENA,160);
/*delay(2);
analogWrite(ENA,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);*/
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW); //motor derecho
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENA,70);
delay(2);
analogWrite(ENA,120);
delay(2);*/
analogWrite(ENA,100);
/*delay(2);
analogWrite(ENA,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);*/
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH); //motor derecho
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENA,70);
delay(2);
analogWrite(ENA,120);
delay(2);*/
analogWrite(ENA,100);
/*delay(2);
analogWrite(ENA,255);
delay(2000);*/
}