image 1 Saravati

Como Fazer um Radar de Velocidade com Arduino UNO, Dois Sensores Ultrassônicos e Display OLED

Tutorial passo a passo | Arduino • Sensores ultrassônicos • Eletrônica

Já imaginou construir um radar capaz de medir a velocidade de um carrinho utilizando componentes eletrônicos simples?

Neste projeto, vamos desenvolver um radar de velocidade utilizando Arduino UNO, dois sensores ultrassônicos HC-SR04 e um display OLED SSD1306.

A ideia é identificar o momento em que um carrinho passa por dois pontos diferentes, calcular o tempo necessário para percorrer essa distância e apresentar sua velocidade em quilômetros por hora.

O mais interessante é que a última velocidade permanece no display até que outro carrinho complete uma nova medição.

Esse projeto permite estudar conceitos importantes de eletrônica, programação, sensores, temporização e física, além de demonstrar como transformar informações captadas por sensores em resultados úteis.

1. Como funciona o radar de velocidade?

O princípio utilizado é o cálculo da velocidade média.

Vamos posicionar dois sensores ultrassônicos ao longo de uma pequena pista, separados inicialmente por 50 centímetros.

Quando o carrinho passa diante do primeiro sensor, o Arduino inicia a contagem de tempo. Ao passar diante do segundo, o cronômetro é interrompido.

Os dois sensores detectam o carrinho em sequência, permitindo calcular o tempo de deslocamento.

O Arduino realiza o cálculo da velocidade e apresenta o resultado no OLED. Depois, aguarda os sensores ficarem livres para preparar uma nova medição.

2. Componentes necessários

Para montar nosso radar, utilizaremos os seguintes componentes.

Arduino UNO

2 sensores HC-SR04

Display OLED SSD1306 128×32

Protoboard e jumpers

Também precisaremos de um cabo USB e de um carrinho para realizar os testes.

3. Conhecendo o sensor HC-SR04

O HC-SR04 é um sensor capaz de medir distâncias utilizando ondas ultrassônicas.

Ele possui quatro terminais: VCC, GND, TRIG e ECHO.

Quando o Arduino envia um pulso de aproximadamente 10 microssegundos ao TRIG, o sensor emite uma onda ultrassônica. Essa onda reflete em um objeto e retorna ao receptor.

docs.sunfounder.com

A distância pode ser calculada pela fórmula:

d=t0,03432

Nessa expressão, t representa o tempo do eco em microssegundos, enquanto d representa a distância em centímetros.

A divisão por dois é necessária porque a onda sonora percorre o trajeto de ida e volta.

No nosso radar, os sensores serão utilizados principalmente para identificar o momento em que o carrinho entra em cada região de detecção.

4. Ligações elétricas

Vamos conectar os dois sensores aos pinos digitais do Arduino UNO e utilizar a comunicação I²C para controlar o OLED.

ComponenteTerminalArduino UNO
Sensor 1TRIGD2
Sensor 1ECHOD3
Sensor 2TRIGD4
Sensor 2ECHOD5
Ambos sensoresVCC5V
Ambos sensoresGNDGND
OLEDSDAA4
OLEDSCLA5
OLEDVCC5V ou 3,3V, conforme o módulo
OLEDGNDGND

O endereço I²C utilizado no projeto é 0x3C.

Diagrama funcional das conexões

Diagrama funcional ilustrativo. Utilize a tabela para conferir as ligações individuais. *O OLED deve receber a tensão adequada ao modelo utilizado.

5. Calculando a velocidade

A velocidade média é obtida dividindo a distância percorrida pelo intervalo de tempo.

v=st

Para converter de metros por segundo para quilômetros por hora, multiplicamos por 3,6.

Por exemplo, se o carrinho percorrer 0,50 metro em 0,25 segundo:

v=0,500,253,6=7,2km/h

RADAR DE VELOCIDADE

7.2 km/h

Exemplo ilustrativo da informação exibida no OLED.

Esse cálculo será realizado automaticamente pelo Arduino sempre que o carrinho completar a passagem pelos dois sensores.

6. Preparando a Arduino IDE

Antes de carregar o programa, instale as bibliotecas necessárias para o display OLED: Adafruit SSD1306 e Adafruit GFX Library.

Na Arduino IDE, abra o Gerenciador de Bibliotecas, pesquise os nomes e instale as versões compatíveis.

Depois selecione a placa Arduino UNO e a porta COM correspondente.

7. Código completo do radar

O programa utiliza três estados: aguardando o carrinho, cronometrando a passagem e aguardando a liberação dos sensores para uma nova medição.

Ele mantém o último resultado no OLED até que uma nova passagem completa seja registrada.

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

// DISPLAY OLED 128×32

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 32

#define SCREEN_ADDRESS 0x3C

// SENSORES

#define TRIG1 2

#define ECHO1 3

#define TRIG2 4

#define ECHO2 5

Adafruit_SSD1306 display(

  SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1

);

// CONFIGURACOES

const float DISTANCIA_METROS = 0.50;

const float LIMITE_CM = 30.0;

const unsigned long TIMEOUT_MS = 5000;

enum Estado {

  AGUARDANDO,

  CRONOMETRANDO,

  REARMANDO

};

Estado estado = AGUARDANDO;

unsigned long inicio = 0;

unsigned long ultimaLeitura = 0;

float velocidade = 0;

bool possuiMedicao = false;

bool anterior1 = false;

bool anterior2 = false;

// LEITURA DO HC-SR04

float medirDistancia(int trig, int echo) {

  digitalWrite(trig, LOW);

  delayMicroseconds(3);

  digitalWrite(trig, HIGH);

  delayMicroseconds(10);

  digitalWrite(trig, LOW);

  unsigned long duracao =

    pulseIn(echo, HIGH, 12000UL);

  if (duracao == 0) return 999;

  return duracao * 0.0343 / 2.0;

}

// ATUALIZACAO DO OLED

void atualizarOLED() {

  display.clearDisplay();

  display.setTextColor(SSD1306_WHITE);

  display.setTextSize(1);

  display.setCursor(5, 0);

  display.println(“RADAR DE VELOCIDADE”);

  display.drawLine(

    0, 10, 127, 10, SSD1306_WHITE

  );

  if (possuiMedicao) {

    display.setTextSize(2);

    display.setCursor(8, 15);

    display.print(velocidade, 1);

    display.print(” km/h”);

  } else {

    display.setTextSize(1);

    display.setCursor(12, 19);

    display.print(“Aguardando carro”);

  }

  display.display();

}

// SETUP

void setup() {

  Serial.begin(9600);

  pinMode(TRIG1, OUTPUT);

  pinMode(ECHO1, INPUT);

  pinMode(TRIG2, OUTPUT);

  pinMode(ECHO2, INPUT);

  digitalWrite(TRIG1, LOW);

  digitalWrite(TRIG2, LOW);

  if (!display.begin(

        SSD1306_SWITCHCAPVCC,

        SCREEN_ADDRESS)) {

    Serial.println(“Erro no OLED!”);

    while (true);

  }

  atualizarOLED();

  Serial.println(“RADAR INICIADO”);

}

// LOOP PRINCIPAL

void loop() {

  if (millis() – ultimaLeitura < 65) {

    return;

  }

  ultimaLeitura = millis();

  float d1 = medirDistancia(TRIG1, ECHO1);

  // Reduz interferencia entre sensores

  delay(30);

  float d2 = medirDistancia(TRIG2, ECHO2);

  bool s1 = d1 >= 2 && d1 < LIMITE_CM;

  bool s2 = d2 >= 2 && d2 < LIMITE_CM;

  bool entrada1 = s1 && !anterior1;

  bool entrada2 = s2 && !anterior2;

  anterior1 = s1;

  anterior2 = s2;

  Serial.print(“S1: “);

  Serial.print(d1);

  Serial.print(” cm | S2: “);

  Serial.println(d2);

  Serial.println(” cm”);

  if (estado == AGUARDANDO) {

    if (entrada1 && !s2) {

      inicio = micros();

      estado = CRONOMETRANDO;

      Serial.println(“Sensor 1 acionado”);

    }

  }

  else if (estado == CRONOMETRANDO) {

    if (entrada2) {

      unsigned long fim = micros();

      float segundos =

        (fim – inicio) / 1000000.0;

      if (segundos > 0) {

        velocidade =

          (DISTANCIA_METROS / segundos) * 3.6;

        possuiMedicao = true;

        Serial.print(“Velocidade: “);

        Serial.print(velocidade, 2);

        Serial.println(” km/h”);

        atualizarOLED();

      }

      estado = REARMANDO;

    }

    else if (

      micros() – inicio > TIMEOUT_MS * 1000UL

    ) {

      Serial.println(“Tempo esgotado”);

      estado = REARMANDO;

    }

  }

  else if (estado == REARMANDO) {

    if (!s1 && !s2) {

      estado = AGUARDANDO;

      Serial.println(“Radar rearmado”);

    }

  }

}

Observação: as leituras dos dois sensores e o funcionamento do OLED foram confirmados durante o desenvolvimento. A versão integrada do cálculo de velocidade deve ser validada com passagens reais do carrinho antes de ser tratada como um medidor calibrado.

8. Testando o funcionamento

Com o código carregado, abra o Monitor Serial em 9600 baud.

Inicialmente, o OLED deverá apresentar a mensagem “Aguardando carro”.

Passe lentamente

8. Testando o funcionamento do radar

Com todas as conexões realizadas e o código carregado no Arduino UNO, chegou o momento de testar nosso radar de velocidade.

Antes de utilizar o carrinho, abra o Monitor Serial em 9600 baud e verifique se os dois sensores HC-SR04 estão realizando as leituras corretamente.

Inicialmente, o display OLED deverá apresentar:

RADAR DE VELOCIDADE

Aguardando carro

Agora passe lentamente o carrinho diante do primeiro sensor. Quando o Arduino detectar o objeto, ele deverá registrar o instante inicial da medição.

No Monitor Serial, aparecerá uma mensagem semelhante a:

Sensor 1 acionado

Continue movimentando o carrinho até o segundo sensor.

Quando o segundo HC-SR04 identificar a passagem, o Arduino calculará o intervalo de tempo e determinará a velocidade média.

Por exemplo, considerando uma distância de 50 centímetros percorrida em 0,25 segundo, o display apresentará:

RADAR DE VELOCIDADE

7.2 km/h

Exemplo ilustrativo da velocidade calculada.

O resultado permanece na tela até que outro carrinho complete uma nova passagem. Dessa maneira, conseguimos observar e registrar a velocidade sem precisar acompanhar o display durante o movimento.

9. Ajustando a distância entre os sensores

Uma das vantagens desse projeto é que podemos alterar facilmente a distância entre os dois HC-SR04.

No código, encontramos:

const float DISTANCIA_METROS = 0.50;

Esse valor indica que a separação considerada no cálculo é de 50 centímetros.

Se quisermos utilizar uma distância de 30 centímetros, basta alterar para:

const float DISTANCIA_METROS = 0.30;

Para uma separação de 1 metro:

const float DISTANCIA_METROS = 1.00;

É importante lembrar que os sensores ultrassônicos possuem um cone de detecção. Portanto, a distância efetiva entre os pontos em que o carrinho é detectado pode não corresponder exatamente à distância física entre os módulos.

Para obter resultados mais consistentes, mantenha os sensores alinhados, na mesma altura e voltados para regiões equivalentes do carrinho.

10. Ajustando a sensibilidade dos sensores

Outra configuração importante é a distância máxima utilizada para considerar que um objeto foi detectado.

No programa, utilizamos:

const float LIMITE_CM = 30.0;

Isso significa que o Arduino considera uma detecção quando a distância medida está dentro da faixa válida e abaixo de 30 centímetros.

Se o carrinho passar muito próximo dos sensores, podemos reduzir esse limite:

const float LIMITE_CM = 15.0;

Essa alteração ajuda a evitar que os sensores identifiquem objetos mais distantes, como suportes, paredes ou outros elementos próximos à pista.

O ideal é ajustar esse limite observando as distâncias reais apresentadas no Monitor Serial.

11. Problemas comuns e soluções

Durante o desenvolvimento, encontramos uma situação interessante: o display OLED estava funcionando corretamente, e os sensores apresentavam valores de distância no Monitor Serial, mas o radar não iniciava a medição.

Isso acontece porque medir uma distância corretamente não significa necessariamente detectar a passagem do carrinho.

Para resolver esse tipo de problema, é importante verificar separadamente o funcionamento de cada sensor.

Se o display continuar mostrando “Aguardando carro”, verifique se o primeiro sensor realmente muda de estado quando o carrinho entra na área de detecção.

Se o cronômetro iniciar, mas não houver resultado, verifique se o segundo sensor está identificando a passagem antes do tempo máximo configurado.

Se as velocidades apresentarem grande variação, confira o posicionamento dos sensores e a distância efetiva entre os pontos de detecção.

Também é importante evitar que os dois sensores ultrassônicos realizem medições simultâneas, pois isso pode provocar interferências entre os sinais sonoros.

No nosso código, utilizamos leituras sequenciais para reduzir esse problema.

12. Como melhorar a precisão do projeto?

O HC-SR04 é um excelente sensor para aplicações didáticas, mas possui limitações quando utilizado para medir a velocidade de objetos em movimento.

Como ele utiliza ondas ultrassônicas, a geometria do objeto, a posição dos sensores e o tempo de resposta influenciam os resultados.

Além disso, o programa realiza leituras sequenciais, introduzindo um pequeno atraso entre as medições.

Por isso, o projeto é mais indicado para demonstrações com carrinhos em velocidades moderadas, e não para medições de alta precisão.

Uma alternativa para aumentar a precisão seria substituir os sensores ultrassônicos por duas barreiras infravermelhas, capazes de identificar a passagem do objeto por meio da interrupção de um feixe luminoso.

O princípio do cálculo permaneceria exatamente o mesmo: distância dividida pelo tempo.

13. Possíveis melhorias e novas funcionalidades

Depois de concluir o radar básico, podemos acrescentar diversas funcionalidades.

Uma possibilidade é instalar um buzzer para emitir um sinal sonoro sempre que uma nova velocidade for registrada.

Também podemos criar um sistema que armazene a maior velocidade medida, permitindo comparar diferentes passagens.

Outra evolução interessante seria utilizar um ESP32 para enviar os resultados para uma página web, permitindo acompanhar as medições pelo celular ou computador.

Para aplicações educacionais, podemos ainda acrescentar um contador de veículos, um histórico das últimas velocidades e indicadores visuais para diferentes faixas de velocidade.

Essas melhorias transformariam nosso radar em um pequeno sistema de instrumentação eletrônica.

14. Conclusão

Neste projeto exploramos como construir um radar de velocidade utilizando Arduino UNO, dois sensores ultrassônicos HC-SR04 e um display OLED SSD1306.

Com componentes relativamente simples, desenvolvemos a lógica de um sistema capaz de identificar a passagem de um objeto por dois pontos, medir o intervalo de tempo entre essas detecções e calcular sua velocidade média.

Durante o desenvolvimento, trabalhamos com conceitos importantes de eletrônica e programação, incluindo leitura de sensores, temporização com micros(), comunicação I²C, máquinas de estados e conversão de unidades.

Também aprendemos uma lição fundamental no desenvolvimento de projetos eletrônicos: testar cada componente individualmente antes de integrar todo o sistema.

Embora os sensores ultrassônicos tenham limitações para medições de alta precisão, o projeto é uma excelente ferramenta didática para compreender como sistemas embarcados podem transformar informações do ambiente em dados úteis.

E esse é um dos aspectos mais interessantes da eletrônica: com criatividade, programação e alguns componentes, conseguimos transformar conceitos teóricos em aplicações práticas.

Continue explorando, testando e desenvolvendo seus próprios projetos. Afinal, na Sara Educação, acreditamos que o conhecimento se transforma em oportunidades quando é c

Saiba mais sobre a parceria Saravati e Sara Educação

Este “Guia de Montagem” é uma colaboração especial entre a Saravati e a Sara Educação, criado pelo Professor Felipe Rosa. Nosso objetivo é enriquecer a comunidade de entusiastas da eletrônica, IoT e automação com recursos educacionais de alta qualidade. Através dessa parceria, buscamos inspirar e capacitar criadores em seus projetos, disponibilizando esses guias em nosso blog e nas redes sociais.

@saravatirobotica no Instagram e Tiktok

@sara.educacao no Instagram e Tiktok

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *