Problema con sensores con un Siguelineas

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!

prueba alejarlos un poco mas del suelo, quizas estan muy cerca. muestra los sensores y las conexiones hechas.

por qué los inicializas como si fueran servos? Yo cuando hice el siguelineas, alimentábamos los motores a través de un L293D y funcionaba a la perfección… ahora te lo digo de memoria, pero creo que metíamos las señales de los sensores por las entradas analógicas y con cinta aislante negra y blanca veíamos el valor en V que nos daba cuando era blanco o negro y poníamos esos valores como límites para que Arduino entendiera que lo que leía el CNY70 (el sensor que utilizabamos) era una cosa u otra.

Están en Euskera, con lo que no se si los entenderas… pero ya que me tuve que currar estos dos tutoriales para clase, habrá que aprovecharlos! :stuck_out_tongue: (e? ionhs?? XD) Eso si, nosotros utilizabamos 4 sensores!!

control de motores DC con L293D: http://www.youtube.com/watch?v=OTJZ2JJrV-s
Sensores CNY70: http://www.youtube.com/watch?v=dnaPRn_t-Qw