O problema está no "for", tenta entender: você manda o lcd imprimir as informações, seu servo está em 15°, depois de você manda no primeiro "for" ele ir de 15º para 165º, logo em seguida você manda ele de 165° para 15°.
Quando ele dá o loop o servo está em 15º, logo a leitura que o sensor de distância é quando ele está em 15°.
O ideal seria a cada ciclo do programa ele incrementasse o valor do grau.
#include <LiquidCrystal.h>
#include<Servo.h>
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
const int trigPin=8;
const int echoPin=9;
float duracao; //duracao da viagem do ping
float alvoDistancia;
float velocidadeDoSom=1224;
Servo servo;
int grauServo = 15;
boolean sentidoGiro = false;
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.attach(10);
lcd.begin (16, 2);
lcd.setCursor(0,0);
lcd.print("distancia alvo");
}
void loop(){
digitalWrite(trigPin, LOW);
delayMicroseconds(200);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
delayMicroseconds(10);
duracao = pulseIn(echoPin, HIGH); //duracao covertida para microsegundos
duracao=duracao/1000000.; //convertendo para segundos
duracao=duracao/3600.; //convertendo pra horas
alvoDistancia= velocidadeDoSom*duracao; //velocidade estara em quilometros
alvoDistancia=alvoDistancia/2; //divide em 2 porque viagem do ping é ida e volta
alvoDistancia= alvoDistancia*100000; //converte quilometros em centimetros
lcd.setCursor(0,1); //colocar cursor na primeira coluna da segunda linha
lcd.print(" ");//escrever nada para limpar a linha
lcd.setCursor(0,1); //colocar cursor na primeira coluna da segunda linha novamente
lcd.print(alvoDistancia); //escrever ditancia medida
lcd.print(" cm"); //escrever "cm"
delay(250);
if((sentidoGiro == false) && (grauServo<165)){
grauServo++;
} else if ((sentidoGiro == true) && (grauServo>15)){
grauServo--;
}
if(grauServo== 165) {
sentidoGiro = true;
}
if (grauServo== 15){
sentidoGiro = false;
}
servo.write(grauServo);
delay(100);
}