Oi pessoal desculpe a demora para responder é que eu estava com o tempo meio apertado esses dias (muita prova).... vou passar a programação que a gente usou um cara ajudou a gente dar uma arrumada e que deu certo para o carrinho : #include <Servo.h> #include <Ultrasonic.h> Servo myservo; int pos = 90; //posição inicial do servo int echopin = 9; // a saido echo do SRF05 liga no pin 9 int trigerpin = 8; // a saida triger do SRFo5 liga no pin 8 int BUZZER = 11; // Ligar o buzzer (Som) no pino 11 int in1 = 4; // pino 1 do motor 1 int in2 = 5; // pino 2 do motor 1 int in3 = 6; // pino 1 do motor 2 int in4 = 7; // pino 2 do motor 2 unsigned long pulsetime = 0; // Variavel que faz a leitura do pulso unsigned long distancia = 0; //Variavel que que armazena a distancia void stopMotor() { //para os motores digitalWrite(in1, LOW); digitalWrite(in2, LOW); //delay(500); digitalWrite(in3, LOW); digitalWrite(in4, LOW); //delay(500); } void setup() { pinMode(BUZZER,OUTPUT);// define o pino do buzzer como saída. myservo.attach(10); // anexa o servo lógico ao fisico no pino 10 pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(trigerpin, OUTPUT); // define o pino triger como saída pinMode(echopin, INPUT); // define o pino echo como entrada } void loop() { distancia = leiaDistancia(); //executa a funcao que retorna a distancia em cm if (distancia > 16) // se a distancia for maior que 16 cm { andeParaFrente(); //continua andando. } else { //senão, lógico, a distancia frontal é MENOR ou IGUAL a 16. stopMotor(); //pare o motor delay(1000); //aguarde 1 segundo int distEsquerda = 0; int distDireita = 0; myservo.write(175); //gira o servo a 175 graus delay(1000); // tem que ser ajustado para esperar o servo chegar no 175 distEsquerda = leiaDistancia(); myservo.write(90); //gira o servo para 90 graus - deve ser a posicao inicial ou central. //vamos analisar o que foi lido na Esquerda if (distEsquerda > 16) // se a distancia ESQUERDA for maior que 16 cm { giraParaEsquerda(3000); //invoca a funcao que gira para ESQUERDA por 3 segundos. Favor ajustar esse valor. } else { //senão, lógico, a distancia esquerda é MENOR ou IGUAL a 16. Vamos analisar a DIREITA, então. myservo.write(5); delay(1000);//tem que esperar o servo chegar em 5 graus. distDireita = leiaDistancia(); // lendo a distancia da DIREITA myservo.write(90); //gira o servo para 90 graus - deve ser a posicao inicial ou central. if(distDireita > 16){ giraParaDireita(3000); // mesma coisa. ajute esse TEMPO para que o robo gire os 5 graus. } if(distDireita <= 16) { girar180graus(3000); } } } } int leiaDistancia(){ //funcao que devolve a distancia em cm digitalWrite(trigerpin, HIGH); delayMicroseconds(50); digitalWrite(trigerpin,LOW); pulsetime = pulseIn(echopin, HIGH); return pulsetime/58; // converte para cm } void andeParaFrente(){ digitalWrite(in1, LOW); // apenas pinos secundarios em HiGH, definindo o movimento para frente digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); } void giraParaEsquerda(long tempo){//funcao para girar a esquerda. Observe o tempo em millissegundos. digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(tempo); //o motor só deve ficar ligado esse tempo. stopMotor(); //agora eu desligo. } void giraParaDireita(long tempo){//funcao para girar a direita. Observe o tempo em millissegundos. digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(tempo); //o motor só deve ficar ligado esse tempo. stopMotor(); //agora eu desligo. } void girar180graus(long tempo){//funcao para girar 180 graus. Observe o tempo em millissegundos. tone(11,300,300); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(1000); //o motor só deve ficar ligado esse tempo. tone(11,300,300); stopMotor(); //agora eu desligo. }