#include <LiquidCrystal.h>
// Definindo os pinos para o display LCD
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Definindo os pinos do sensor ultrassônico
const int trigPin = 2;
const int echoPin = 3;
// Variáveis para armazenar os tempos e distâncias
unsigned long time1, time2;
float distance1, distance2;
float speed;
void setup() {
Serial.begin(9600); // Inicializa a comunicação serial para depuração
lcd.begin(16, 2); // Inicializa o display LCD com 16 colunas e 2 linhas
lcd.print("Aguarde leitura"); // Exibe a mensagem inicial
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Medir a primeira distância
distance1 = measureDistance();
time1 = millis();
}
void loop() {
// Medir a segunda distância
distance2 = measureDistance();
time2 = millis();
// Calcular a velocidade
speed = calculateSpeed(distance1, distance2, time1, time2);
// Atualizar os valores para a próxima medição
distance1 = distance2;
time1 = time2;
// Calcular a velocidade em km/h
float speedKmH = speed * 0.036; // Convertendo de cm/s para km/h
// Calcular a velocidade em metros por segundo (m/s)
float speedMS = speed / 100.0; // Convertendo de cm/s para m/s
// Exibir a velocidade no LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Km/h: ");
lcd.print(speedKmH, 1); // Mostra a velocidade em km/h com uma casa decimal
lcd.setCursor(0, 1);
lcd.print("m/s: ");
lcd.print(speedMS, 2); // Mostra a velocidade em m/s com duas casas decimais
// Debug: Imprime no Serial Monitor
Serial.print("Speed: ");
Serial.print(speed);
Serial.println(" cm/s");
// Aguardar um curto intervalo antes da próxima leitura
delay(200); // Ajustado para 200 ms para melhorar a precisão
}
float measureDistance() {
// Enviar pulso para o pino Trig
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lê o tempo de resposta no pino Echo
unsigned long duration = pulseIn(echoPin, HIGH);
// Calcular a distância em centímetros
float distance = duration * 0.0343 / 2.0; // Fator de conversão ajustado
return distance;
}
float calculateSpeed(float d1, float d2, unsigned long t1, unsigned long t2) {
float distanceDiff = d2 - d1; // Diferença de distância em cm
float timeDiff = (t2 - t1) / 1000.0; // Diferença de tempo em segundos
if (timeDiff == 0) return 0; // Evitar divisão por zero
// Calcular a velocidade em cm/s
float speed = distanceDiff / timeDiff;
return speed; // Retorna a velocidade em cm/s
}