Robot Seguidor de linea Negra

Esto es lo que tengo hasta ahora, también he realizado algunos cambios para tenerlo más claro.

He realizado pruebas, he variado la velocidad (más, menos)... he juntado lo máximo los sensores, tengo pensado ampliar la pista porque lo que he hecho es una pista oval (con dos cartulinas grandes blancas) y creo que el coche no se agarra lo suficiente. Además me da la impresión de que el coche tarda en poner marcha atras cuando pierde la linea negra en las curvas.

Si me puedes sugerir mejoras ... te lo agradecería.
.
.

/*
 * SEGUIDOR DE LINEA NEGRA
 * COMPONENTES:
 * 
 * Aduino Uno R3, 
 * Shield Motor L293D, 
 * (3) Sensores TCRT5000 IR infrared line track foller sensor
 * (1) Sensor IR Keyes
 * (4) Motores 6v 
 * 1 Bateria 9v para Arduino (con interruptor ON-OFF)
 * 1 Bateria 12v para Shield Motor L293D (con interruptor ON-OFF)
 * 
 * VALORES:
 * 0 = NEGRO
 * 1 = BLANCO
 * 
 * con la ayuda de surbyte (foro arduino)
 */
#include <AFMotor.h>

#define BLANCO HIGH
#define NEGRO LOW

  // IZQ.EXT    IZQ.    DCHA.    DCHA.EXT
  //   (s4)     (s3)    (s2)       (s1)

const byte s1 = A3;      // sensor Izquierda Externo al pin A3.
const byte s2 = A4;      // sensor Izquierda al pin A4.
const byte s3 = A5;      // sensor Derecha al pin A5.
const byte s4 = A2;      // sensor Derecha Externo al pin A2.

bool sensorValors1;      // guardamos el valor del sensor de la DERECHA EXTERNO.
bool sensorValors2;      // guardamos el valor del sensor de la DERECHA.
bool sensorValors3;      // guardamos el valor del sensor de la IZQUIERDA.
bool sensorValors4;      // guardamos el valor del sensor de la IZQUIERDA EXTERNO.

AF_DCMotor m1DD(1);       // motor Derecha Delante.         ***************
AF_DCMotor m2DI(2);       // motor Izquierda Delante.       * m2DI - m1DD *
AF_DCMotor m3AI(3);       // motor Atras Izquierda.         *             *
AF_DCMotor m4AD(4);       // motor Atras Derecha.           * m3AI - m4AD *
                                                            ***************
void setup() {
  
  Serial.begin(9600);     // abrimos el monitor serial
  
  pinMode(s1, INPUT);     // declaramos los sensores como entrada
  pinMode(s2, INPUT);     
  pinMode(s3, INPUT);       
  pinMode(s4, INPUT);     
  
  m1DD.setSpeed (180);    // Configura velocidad a 180 (de 0 a 255).
  m2DI.setSpeed (180);
  m3AI.setSpeed (180);
  m4AD.setSpeed (180);
}

void loop() {

  // Recogemos los valores y los enviamos al monitor serial
  
  sensorValors4 = !digitalRead(A3);  
  Serial.print("Izquierda Exterior = ");
  Serial.println( sensorValors4);

  sensorValors3 = digitalRead(A4);
  Serial.print("         Izquierda = ");
  Serial.println( sensorValors3);
    
  sensorValors2 = digitalRead(A5);
  Serial.print("           Derecha = ");
  Serial.println( sensorValors2);

  sensorValors1 = digitalRead(A2);               
  Serial.print("  Derecha Exterior = ");
  Serial.println( sensorValors1);
   
  Serial.println("--------------------------------");

  // Accion a realizar según los resultados de los sensores.
  
  // IZQ.EXT    IZQ.    DCHA.    DCHA.EXT
  //   (s4)     (s3)    (s2)       (s1)

  // Con los 2 sensores centrales
  
   if (digitalRead(s3) == NEGRO && digitalRead(s2) == NEGRO)
       
      avanzamos();   
         
   if (digitalRead(s3) == NEGRO && digitalRead(s2) == BLANCO)    
       
      giroAizquierda();
       
   if (digitalRead(s3) == BLANCO && digitalRead(s2) == NEGRO)    
      
      giroAderecha();

   if (digitalRead(s3) == BLANCO && digitalRead(s2) == BLANCO)    
      atras();

// ----------------------------------------------------------------------------------------------------------------
   
  // Con los 4 sensores
   
  if (digitalRead(s4) == NEGRO && digitalRead(s3) == NEGRO && digitalRead(s2) == NEGRO && digitalRead(s1) == NEGRO)  
     
      avanzamos();  
     
  if (digitalRead(s4) == NEGRO && digitalRead(s3) == NEGRO && digitalRead(s2) == BLANCO && digitalRead(s1) == BLANCO)  
     
     giroAizquierda();
          
  if (digitalRead(s4) == BLANCO && digitalRead(s3) == BLANCO && digitalRead(s2) == NEGRO && digitalRead(s1) == NEGRO)  
     
     giroAderecha();
          
  if (digitalRead(s4) == BLANCO && digitalRead(s3) == BLANCO && digitalRead(s2) == BLANCO && digitalRead(s1) == BLANCO)  
     
     atras();  
}

// ACCIONES: avanzamos, giroAizquieda, giroAderecha, atras

void avanzamos() {
    m1DD.run(FORWARD);   // si los dos sensores derecha y izquierda 0 = negro
    m2DI.run(FORWARD);   // entonces avanzamos
    m3AI.run(FORWARD);
    m4AD.run(FORWARD);
}

void giroAizquierda() {
    m1DD.run(FORWARD);   // giramos a la izquierda
    m2DI.run(BACKWARD);  
    m3AI.run(BACKWARD);
    m4AD.run(FORWARD);    
}

void giroAderecha() {
    m1DD.run(BACKWARD);   // giramos a la derecha
    m2DI.run(FORWARD);   
    m3AI.run(FORWARD);   
    m4AD.run(BACKWARD);
}

void atras() {
    
    m1DD.run(BACKWARD);   // si todos estan en 1 = Blanco
    m2DI.run(BACKWARD);   // entonces atras
    m3AI.run(BACKWARD);
    m4AD.run(BACKWARD);
}