Buenos días,
Tengo un problemilla, soy novato en Arduino y he adquirido una placa Arduino UNO, el modelo "Renacuajo" de BQ con los componentes de fábrica.
De primeras he hecho el típico programa para seguir una línea de cinta adhesiva, todo parece estar OK pero a la hora de la prueba es como si los sensores no estuvieran calibrados: en lugar de andar sobre negro y parar sobre blanco lo que ocurre es que detecta cualquier objeto, no diferencia los tonos. Es decir: lo pongo en el suelo, y como detecta el mismo suelo como un objeto, se queda parado como si hubiera detectado blanco. En el momento en que lo levanto del suelo ya no detecta nada , negro, y empieza a rodar. ¿Cómo calibro los tonos de negro y blanco para que diferencie ambos colores en lugar de detectar si hay o no un objeto?
#include <Servo.h>
Servo servoL; // crear 2 objetos servo = 2 motores
Servo servoR;
int servo_pin_L = 9; //pines de los servos
int servo_pin_R = 6;
int IRL = 2;
int IRR = 3; // pines de los sensores IR
const int BLACK = 0;
const int WHITE = 1;
int VL = 0;
int VR = 0; // variables en las que guardaremos los valores de la lectura
void setup(){
pinMode(IRL, INPUT); // configurar el pin de los sensores IR como entrada
pinMode(IRR, INPUT);
servoL.attach(servo_pin_L); //configurar el pin 9 como servo
servoR.attach(servo_pin_R); //configurar el pin 6 como servo
servoL.write(90); //parar
servoR.write(90);
delay(10);
}
void loop(){
VL = digitalRead(IRL); // leer el valor del sensor
VR = digitalRead(IRR);
if (VL == BLACK){ // si el IR IZQUIERDO lee negro (BLACK)
if (VR == BLACK){ // si el IR IZQUIERDO lee negro y el IR DERECHO lee negro
servoL.write(0); // avanzar
servoR.write(180);
delay(20);
}
else { // si el IR IZQUIERDO lee negro y el IR DERECHO lee blanco
servoL.write(90); // gira a la izquierda
servoR.write(180);
delay(20);
}
}
else {
if (VR == BLACK){ // si el IR IZQUIERDO lee blanco y el IR DERECHO lee negro
servoL.write(0); // gira a la derecha
servoR.write(90);
delay(20);
}
else { // si el IR IRQUIERDO lee blanco y el IR DERECHO lee blanco
servoL.write(90); // parar
servoR.write(90);
delay(20);
}
}
}
¡Muchas gracias por la ayuda!