Problema Carro que evade obstáculos con 3 HC-SR04

Que tal amigos!!

Tengo un problema con mi proyecto final de cuatrimestre, el proyecto consiste en un carro que se guíe automáticamente y que evada obstáculos, me he hecho con el código en un portal de brasil, pero por mas que he intentado arreglarlo no logro corregir.
El problema es que cuando detecta un objetivo a menos de 10 cm este gira pero si vuelve a detectarlo con el otro sensor este lo ignora y sigue su camino. des afortunadamente no tengo fotos o video ya que aun no tengo conexión en casa y el inte de la facu no funciona bien.

Alguna idea?

//Motor Derecha
int vel_motor_der =13;
int d1 = 12;
int d2 = 11;
//Motor Izquierda
int vel_motor_izq = 10;
int i1 = 9;
int i2 = 8;
//Sensor
int trigger_frente = 2;
int echo_frente = 3;
int trigger_izq = 4;
int echo_izq = 5;
int trigger_der = 6;
int echo_der =  7;
long duracion_frente, duracion_izq, duracion_der, derecha, izquierda, frente;

void setup() {
 pinMode(trigger_frente, OUTPUT);
 pinMode(echo_frente, INPUT);
 pinMode(trigger_izq, OUTPUT);
 pinMode(echo_izq, INPUT);
 pinMode(trigger_der, OUTPUT);
 pinMode(echo_der, INPUT);
 pinMode(vel_motor_izq, OUTPUT);
 pinMode(vel_motor_der, OUTPUT);
 pinMode(i1, OUTPUT);
 pinMode(i2, OUTPUT);
 pinMode(d1, OUTPUT);
 pinMode(d2, OUTPUT);
}

void loop() {
   digitalWrite(trigger_frente, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger_frente, HIGH);
  delayMicroseconds(5);
  digitalWrite(trigger_frente, LOW);
  duracion_frente = pulseIn(echo_frente, HIGH);
  frente = duracion_frente/29/2;

  digitalWrite(trigger_izq, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger_izq, HIGH);
  delayMicroseconds(5);
  digitalWrite(trigger_izq, LOW);
  duracion_izq = pulseIn(echo_izq, HIGH);
  izquierda = duracion_izq/29/2;

  digitalWrite(trigger_der, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger_der, HIGH);
  delayMicroseconds(5);
  digitalWrite(trigger_der, LOW);
  duracion_der = pulseIn(echo_der, HIGH);
  derecha = duracion_der/29/2;

  analogWrite(vel_motor_izq, 0);
  analogWrite(vel_motor_der, 0);
  digitalWrite(i1, LOW);
  digitalWrite(i2, LOW);
  digitalWrite(d1, LOW);
  digitalWrite(d2, LOW);
  
if(frente >8)
  {
    if(derecha >8 && derecha <13)
    {
      analogWrite(vel_motor_izq, 255);
      analogWrite(vel_motor_der, 255);
      digitalWrite(i1, HIGH);
      digitalWrite(i2, LOW);
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
    }
    if(derecha >=13)
    {
      analogWrite(vel_motor_izq, 200);
      analogWrite(vel_motor_der, 200);
      digitalWrite(i1, HIGH);
      digitalWrite(i2, LOW);
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
    }
   if(izquierda <=8)
    {
      analogWrite(vel_motor_izq, 200);
      analogWrite(vel_motor_der, 200);
      digitalWrite(i1, HIGH);
      digitalWrite(i2, LOW);
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
    }
    if(derecha <=8)
    {
      analogWrite(vel_motor_izq, 200);
      analogWrite(vel_motor_der, 200);
      digitalWrite(i1, HIGH);
      digitalWrite(i2, LOW);
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
    }
  }
  if(izquierda <=20 && derecha >20 && frente <=8) der();
  if(izquierda >20 && derecha >20 && frente <=8) der();
  if(derecha <=20 && izquierda >20 && frente <=8) izq();
  if(derecha <=20 && izquierda <=20 && frente <=8) voltiar();
}
void izq()
{
      analogWrite(vel_motor_izq, 0);
      analogWrite(vel_motor_der, 0);
      delay(100);
      analogWrite(vel_motor_izq, 200);
      analogWrite(vel_motor_der, 200);
      digitalWrite(i1, LOW);
      digitalWrite(i2, HIGH);
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
      delay(700);  
}
void der()
{
      analogWrite(vel_motor_izq, 0);
      analogWrite(vel_motor_der, 0);
      delay(100);
      analogWrite(vel_motor_izq, 200);
      analogWrite(vel_motor_der, 200);
      digitalWrite(i1, HIGH);
      digitalWrite(i2, LOW);
      digitalWrite(d1, LOW);
      digitalWrite(d2, HIGH);
      delay(800);  
}
void voltiar()
{
      analogWrite(vel_motor_izq, 200);
      analogWrite(vel_motor_der, 200);
      digitalWrite(i1, HIGH);
      digitalWrite(i2, LOW);
      digitalWrite(d1, HIGH);
      digitalWrite(d2, LOW);
      delay(1400);  
}

que tal este? RC Truck to Arduino Robot

o este otro Wheeled Robot Motoric With 3 Ultrasonic Sensors