Tive um problema com o meu projeto. A idéia é um sensor ultrassônico colado no atuador de um servomotor com giro de 180 graus (restringido de 15 a 165 graus no projeto), e um LCD para escrever a ditância medida pelo sensor. Eu queria que o LCD mostrasse cada nova medida de distância que o sensor faz a cada grau que ele gira. 15 graus, escreve uma medida, 16 graus, escreve outra, etc. O problema é que o LCD só está transcrevendo as medidas obtidas pelo sensor quando o ciclo de rotação do sensor acaba e volta a posição de 15 graus; de 16 a 165 e voltando de 165 a 16 ele não escreve nada.
Aqui está meu código:
#include <LiquidCrystal.h>
#include<Servo.h>
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
int trigPin=8;
int echoPin=9;
float duracao; //duracao da viagem do ping
float alvoDistancia;
float velocidadeDoSom=1224;
Servo servo;
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);
//rotação do servo
for(int i=15;i<=165;i++){
servo.write(i);
delay(100);}
for(int i=165;i>15;i--){
servo.write(i);
delay(100);}
}
Eu acho que o problema seja que a rotina de giro do servo impeça as outras partes do programa de rodarem normal, mas saber mesmo oque está errado eu não sei.
Aqui estão algumas fotos, tenho certeza que o problema não é físico mas é sempre bom mandar…
Se for necessário mandar um vídeo do funcionamento do projeto pra que se entenda melhor oque está errado eu mando.
Tem como alguém me ajudar com esse problema? Agradeço desde já.