Tutoriais

Velocímetro com Arduino e Sensor HC-SR04

Eletrogate 12 de dezembro de 20235

Introdução ao Velocímetro 

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).


Como Funciona o Sensor HC-SR04 

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: 

  1. O pino Trig emite um pulso ultrassônico.
  2. O sensor aguarda a detecção do eco refletido.
  3. O pino Echo recebe o eco refletido e o tempo que leva para isso é registrado.

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.


Código

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:

  1.   Incluímos a biblioteca HCSR04 para usar o sensor HC-SR04.
  2.   Declaramos variáveis para armazenar a distância lida anteriormente (distLida), a distância lida atualmente (distAtual), a velocidade calculada (veloc), a leitura atual do sensor (measure), e criamos uma instância do sensor HC-SR04 no pino 2 (Trig) e 3 (Echo).

Configuração Inicial (setup):

  •   Inicializamos a comunicação serial a uma taxa de 9600 bps para que possamos enviar dados para o monitor serial e visualizar as leituras.

Loop Principal (loop):

  •   Medimos a distância atual entre o objeto e o sensor HC-SR04 e armazenamos a leitura em “measure”. Essa leitura é limitada entre 0 e 300 cm para evitar valores inválidos.
  •   Atribuímos a leitura atual a “distLida”.
  •   Aguardamos 500 milissegundos.
  •   Realizamos uma segunda leitura de distância, armazenando-a em “measure” e limitando-a entre 0 e 300 cm.
  •   Atribuímos a nova leitura a “distAtual”.
  •   Calculamos a velocidade com base na diferença entre “distLida” e “distAtual”, multiplicando por 2 para obter a velocidade em cm/s.
  •   Verificamos se o objeto está se afastando ou se aproximando com base na comparação entre “distLida” e “distAtual”.
  •   Imprimimos a velocidade calculada no monitor serial, acompanhada da unidade de medida “cm/s”.
  •   Zeramos as variáveis “distAtual”, “distLida” e “measure” para a próxima iteração.

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:

  


Considerações Finais e Soluções de Problemas

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.


Sobre o Autor


Daniel Vasconcelos

Tenho 14 anos, meu primeiro contato com eletrônica foi aos 5 anos, e com o Arduino aos 12. Desde então venho explorando mais desse mundo incrível.


Eletrogate

12 de dezembro de 2023

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!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!