Componentes · 3 min de leitura

Sensor de distância HC-SR04: medição ultrassônica de distância com Arduino

Como funciona o sensor ultrassônico de distância HC-SR04 e como ligar no Arduino? Pinos TRIG e ECHO, fórmula da distância, ligação no ESP32 e no Pico e dicas para mais precisão.

O HC-SR04 é um sensor barato e muito comum que mede a distância até um objeto à sua frente usando som. Ele funciona do mesmo jeito que os morcegos se orientam: emite um som de alta frequência que você não consegue ouvir e mede quanto tempo o eco leva para voltar. Ele é a base de sensores de estacionamento, robôs que desviam de obstáculos, medidores de nível de tanque e medidores de altura.

HC-SR04
HC-SR04: dois transdutores ultrassônicos, um emissor e um receptor, e 4 pinos (VCC, TRIG, ECHO, GND).

Como o HC-SR04 funciona?

  1. O Arduino envia um pulso de 10 microssegundos ao pino TRIG.
  2. O sensor emite 8 pulsos sonoros de 40 kHz.
  3. O som bate no objeto e volta; enquanto isso, o pino ECHO fica em HIGH.
  4. O Arduino mede quanto tempo o ECHO fica em HIGH e calcula a distância.

O som viaja pelo ar a cerca de 343 m/s, então percorre um centímetro em cerca de 29 microssegundos. O tempo medido inclui a ida e a volta, por isso é dividido por dois: distância (cm) = tempo (µs) × 0,0343 / 2, ou simplesmente tempo / 58.

Especificações

CaracterísticaValor
Alimentação5 V, cerca de 15 mA
Alcance2–400 cm
ResoluçãoCerca de 3 mm
Ângulo do feixeCerca de 15°
PinosVCC, TRIG, ECHO, GND

Medindo distância com Arduino

Ligue o VCC ao 5V, o GND ao GND, o TRIG ao pino 9 e o ECHO ao pino 10. O código abaixo mostra a distância no Monitor Serial e avisa separadamente quando não há objeto ou ele está longe demais.

C++ (Arduino IDE)
1const int TRIG_PIN = 9;    // tetik / trigger
2const int ECHO_PIN = 10;   // yankı / echo
3
4void setup() {
5  pinMode(TRIG_PIN, OUTPUT);
6  pinMode(ECHO_PIN, INPUT);
7  Serial.begin(9600);
8}
9
10void loop() {
11  digitalWrite(TRIG_PIN, LOW);
12  delayMicroseconds(2);
13  digitalWrite(TRIG_PIN, HIGH);      // 10 µs darbe / 10 µs pulse
14  delayMicroseconds(10);
15  digitalWrite(TRIG_PIN, LOW);
16
17  long duration = pulseIn(ECHO_PIN, HIGH, 30000); // en fazla 30 ms bekle / wait max 30 ms
18  if (duration == 0) {
19    Serial.println("Menzil dışı / out of range");
20  } else {
21    float cm = duration * 0.0343 / 2;   // gidiş-dönüş / round trip
22    Serial.print(cm);
23    Serial.println(" cm");
24  }
25  delay(100);                          // ölçümler arası / between readings
26}
O tempo limite de 30.000 µs passado para o pulseIn corresponde a cerca de 5 metros. Sem tempo limite, o código pode esperar até 1 segundo quando não há objeto.

Usando com ESP32 e Raspberry Pi Pico

O pino ECHO do HC-SR04 tem saída de 5 V, enquanto os pinos do ESP32 e do Pico são de 3,3 V. Não ligue o ECHO diretamente: monte um divisor de tensão com resistores de 1 kΩ e 2 kΩ ou use a versão HC-SR04P, que funciona com 3,3 V.

Dicas para leituras precisas

  • Superfícies macias e inclinadas: tecido, espuma e superfícies em ângulo não refletem bem o som; algumas leituras podem falhar.
  • Faça uma média: usar a mediana de 3–5 leituras elimina saltos repentinos.
  • Efeito da temperatura: a velocidade do som muda cerca de 0,6 m/s a cada 1 °C; para trabalhos precisos, corrija com um sensor de temperatura.
  • Vários sensores: sensores disparados ao mesmo tempo ouvem os ecos uns dos outros; dispare um depois do outro.
  • Intervalo entre medições: deixe pelo menos 60 ms entre as leituras para que o eco anterior se dissipe.

Para combinar o sensor com um buzzer e criar um sensor de estacionamento, veja O que é buzzer? e, para conhecer outros sensores, leia o Guia de sensores para Arduino.

Perguntas frequentes

Até que distância o HC-SR04 consegue medir?

Em teoria, até 4 metros. Na prática, você obtém resultados confiáveis até 2–3 metros em uma superfície plana e rígida.

Por que meu HC-SR04 sempre mostra 0 ou um valor enorme?

O TRIG e o ECHO podem estar trocados, o objeto pode estar fora do alcance ou o sensor pode estar virado para uma superfície que não reflete som. Confira a ligação e use um tempo limite no pulseIn.

O HC-SR04 consegue medir o nível de água?

Sim, monte-o virado para baixo na tampa de um tanque e meça a distância até a superfície da água. Em ambientes úmidos ele precisa de proteção; o JSN-SR04T, à prova d'água, é uma escolha melhor.

Que outros sensores de distância existem para Arduino?

O infravermelho TCRT5000 é usado para distâncias curtas e detecção de linha, e o VL53L0X, baseado em laser, para precisão milimétrica. O HC-SR04 é o mais comum graças ao equilíbrio entre preço e alcance.

Ver todos os projetos
Medição de distância com HC-SR04 (Monitor Serial)
#27Iniciante

Medição de distância com HC-SR04 (Monitor Serial)

O sensor HC-SR04 funciona como um morcego que se orienta no escuro: emite um som que você não consegue ouvir, escuta o eco e mede a distância até o objeto à sua frente. O Arduino escreve essa distânci

4.6(46)
71
Sensor de estacionamento com HC-SR04
#28Intermediário
Premium

Sensor de estacionamento com HC-SR04

Uma versão em miniatura do sensor de estacionamento de um carro: quanto mais perto um objeto chega, mais rápidos ficam os bipes. O sensor de distância mede a distância até o objeto à sua frente; se el

4.8(64)
85
Medição de distância com display LCD
#31Avançado
Premium

Medição de distância com display LCD

Uma ferramenta que mede distâncias sem régua: aproxime e afaste a mão na frente do sensor e veja o número mudar. O HC-SR04 emite uma onda sonora e escuta seu eco, e o Arduino calcula a distância em ce

4.6(45)
59
Projeto de medição de altura
#33Intermediário
Premium

Projeto de medição de altura

Um medidor de altura preso ao batente da porta que informa, em centímetros, a altura de quem está embaixo dele. Primeiro, você pressiona o primeiro botão sem ninguém embaixo, e o sensor de distância m

4.5(25)
34
Robô que desvia de obstáculos
#81Avançado
Premium

Robô que desvia de obstáculos

Que tal construir um veículo inteligente que encontra seu próprio caminho? O robô que desvia de obstáculos monitora o ambiente constantemente com o sensor ultrassônico na parte da frente. Ao encontrar

5.0(38)
49
Medidor ultrassônico de distância HC-SR04 com ESP32
#116Intermediário

Medidor ultrassônico de distância HC-SR04 com ESP32

O sensor ultrassônico HC-SR04 calcula a distância medindo o tempo que a onda sonora emitida leva para atingir um objeto e retornar (tempo de voo). Neste projeto, enviaremos um pulso de 10 microssegundos do ESP32 ao pino TRIG do sensor e leremos a duração do eco no pino ECHO com pulseIn(). Exibiremos a distância calculada em centímetros em um LCD I2C 16x2. Como o HC-SR04 opera a 5V, é preciso usar um divisor de tensão no pino ECHO; caso contrário, o GPIO de 3,3V do ESP32 será danificado.

4.9(28)
45
Contador de rakats para oração com ESP32 (HC-SR04 + OLED SSD1306 + 2 botões)
#136Avançado
Premium

Contador de rakats para oração com ESP32 (HC-SR04 + OLED SSD1306 + 2 botões)

Você às vezes esquece quantos rakats já fez durante a oração? Este projeto cria um contador de rakats que fica ao lado do tapete de oração e conta as prostrações quando você aproxima a mão. O sensor ultrassônico de distância HC-SR04 detecta a aproximação da mão, o display OLED SSD1306 mostra a contagem de rakats e dois botões permitem selecionar 2, 3 ou 4 rakats e zerar a contagem.

4.8(11)
14
Sensor de estacionamento com ESP32 (HC-SR04 + barra de 5 LEDs + buzzer + OLED)
#142Avançado
Premium

Sensor de estacionamento com ESP32 (HC-SR04 + barra de 5 LEDs + buzzer + OLED)

A versão com ESP32 do sensor de estacionamento de carro! Usamos o sensor ultrassônico HC-SR04 para medir a distância até o objeto à sua frente. Conforme a distância diminui, a barra de 5 LEDs vai se preenchendo (verde → amarelo → vermelho) e o intervalo entre os bipes do buzzer diminui. Quando o objeto chega muito perto (menos de 10 cm), o alarme soa continuamente e todos os LEDs acendem.

0.0(0)
14