O velocímetro é um dispositivo comumente encontrado em veículos para medir a velocidade do veículo em tempo real. Ele fornece informações sobre a velocidade em quilômetros por hora (km/h) ou milhas por hora (mph), permitindo que o motorista esteja ciente da velocidade do veículo. No entanto, neste tutorial, estaremos construindo um “velocímetro” que medirá a velocidade de um objeto se aproximando ou se afastando de um sensor de distância ultrassônico HC-SR04. Este projeto é uma demonstração simples das capacidades do sensor HC-SR04 e do Arduino na medição de distâncias e cálculo de velocidades.
Como Funciona um Velocímetro:
Um velocímetro tradicional funciona medindo a rotação das rodas de um veículo e convertendo essa rotação em velocidade linear. No nosso caso, o “velocímetro” medirá a velocidade em relação a um sensor HC-SR04.
A fórmula básica para calcular a velocidade é: Velocidade = Distância percorrida / Tempo, em que Distância percorrida = Distancia inicial – Distância final
Neste caso, medimos a distância entre o objeto e o sensor HC-SR04 em um intervalo de tempo. A diferença na distância dividida pelo tempo nos dará a velocidade do objeto em relação ao sensor. No nosso caso o tempo é 1 (1 segundo) o que resulta no próprio número dividido, só nos resta calcular a diferença das distâncias (distância percorrida em 1 segundo).
O sensor HC-SR04 é um sensor de distância ultrassônico que usa ondas sonoras de alta frequência para medir distâncias. Funciona com base no tempo que leva para um pulso ultrassônico ser transmitido e refletido de volta para o sensor. O sensor possui quatro pinos:
– VCC: Alimentação (5 V)
– Trig: Pino de transmissão do pulso ultrassônico
– Echo: Pino de recepção do pulso ultrassônico
– GND: Terra
O funcionamento básico do sensor envolve os seguintes passos:
A distância é calculada com base no tempo que o pulso leva para ir e voltar. Neste projeto, o Arduino lerá as leituras de distância do sensor HC-SR04 e calculará a velocidade com base na diferença entre duas leituras intercaladas pelo intervalo.
Vamos analisar o código e entender cada parte
#include <HCSR04.h> // Inclui a biblioteca HCSR04 para uso do sensor de distância HC-SR04. double distLida; // Variável para armazenar a distância lida anteriormente. double distAtual; // Variável para armazenar a distância lida atual. double veloc; // Variável para armazenar a velocidade calculada. double measure; // Variável para armazenar a leitura de distância atual do sensor. UltraSonicDistanceSensor distanceSensor(2,3); // Cria uma instância do sensor HC-SR04 no pino 2 (Trig) e 3 (Echo). void setup() { Serial.begin(9600); // Inicializa a comunicação serial a 9600 bps para enviar dados para o monitor serial. } void loop() { measure = constrain(distanceSensor.measureDistanceCm(), -0, 300); // Mede a distância atual e a armazena em "measure" limitando-a entre 0 e 300 cm. distLida = measure; // Atribui a leitura atual a "distLida". delay(500); // Aguarda 500 milissegundos. measure = constrain(distanceSensor.measureDistanceCm(), -0, 300); // Realiza uma segunda leitura de distância e a armazena em "measure", novamente limitando-a entre 0 e 300 cm. distAtual = measure; // Atribui a nova leitura a "distAtual". veloc = (distLida - distAtual) * 2; // Calcula a velocidade com base na diferença entre as leituras, multiplicando por 2 (2*500ms = 1s). if (distLida < distAtual) { // Verifica se o objeto está se afastando. Serial.print("distanciando a: "); } else { // Caso contrário, o objeto está se aproximando. Serial.print("aproximando a: "); } Serial.print(veloc); // Imprime a velocidade calculada. Serial.println("cm/s"); // Imprime a unidade de medida (centímetros por segundo). distAtual = 0; // Zera a leitura atual. distLida = 0; // Zera a leitura anterior. measure = 0; // Zera a leitura atual para a próxima iteração. }
Explicação:
Inclusão de Bibliotecas e Declaração de Variáveis:
Configuração Inicial (setup):
Loop Principal (loop):
Este código realiza medições de distância e calcula uma estimativa de velocidade com base nas leituras do sensor HC-SR04. É importante notar que a precisão das medições pode ser afetada por várias variáveis incluindo a qualidade do sensor, superfície do objeto e o próprio código, que resulta em baixa exatidão.
Exemplo de Funcionamento:
Este projeto simples demonstra como usar o sensor HC-SR04 e o Arduino para criar um “velocímetro” para medir a velocidade de objetos em relação ao sensor. No entanto, é importante estar ciente de algumas limitações e possíveis problemas:
– Precisão do código: A precisão desse projeto é limitada principalmente pelo fato de realizar amostras da distância a cada 500ms e não a cada 1s, isso foi feito a fim de diminuir o tempo de resposta do código. Outro limite imposto é o raio de alcance do sensor que foi limitado a 3m para não perder muita precisão.
– Precisão do sensor HC-SR04: A precisão pode variar com base em fatores como a superfície do objeto e a qualidade do sensor, o que pode resultar na leitura de movimentos e aceleração mesmo quando está parado, ou fora da medida real, além de que o seu alcance é de aprox. 4 metros. As irregularidades ou convexidades causam imprecisões absurdas. Para aplicações que exigem medições precisas, você pode considerar sensores mais avançados ou até acelerômetros digitais como o chip MPU6050.
– Objetos em Movimento: Este projeto assume que os objetos se movem de maneira constante entre as leituras. Se o objeto estiver acelerando ou desacelerando, a estimativa de velocidade será imprecisa.
– Este projeto é uma demonstração simples e não deve ser usado em aplicações críticas de segurança ou medições precisas de velocidade.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!