iotdata, por Data Frontieriot
data
Programação em blocos

Sensor ultrassônico HC-SR04: como medir distância com o robô

Como o HC-SR04 mede distância pelo eco, a conta que transforma tempo em centímetros, por que o pino Echo precisa de divisor no ESP32, o que atrapalha a medição e como usar o sensor no braço robótico.

Engenharia Data Frontier· Publicado em 22 de outubro de 2026

O HC-SR04 é o "olho" mais comum dos robôs de bancada. Ele não enxerga: ele grita e escuta. Emite um som acima do que o ouvido humano alcança, espera o eco voltar e mede quanto tempo levou.

Como a medição acontece

O módulo tem quatro pinos: VCC (5 V), GND, Trig e Echo. Uma medição tem três tempos:

  1. A placa coloca o Trig em nível alto por pelo menos 10 µs.
  2. O módulo emite uma rajada de oito pulsos de 40 kHz e coloca o Echo em nível alto.
  3. Quando o eco volta, o Echo cai. O tempo em que ele ficou alto é o tempo de ida e volta do som.

Do tempo à distância

O som anda a cerca de 343 metros por segundo no ar a 20 °C, ou 0,0343 cm por microssegundo. Como o tempo medido é de ida e volta, divide-se por dois:

distância (cm) = tempo (µs) × 0,0343 ÷ 2

O datasheet resume a mesma conta como tempo em µs dividido por 58. Um eco de 580 µs é um objeto a 10 cm.

A velocidade do som muda com a temperatura, cerca de 0,6 m/s por grau. Para um robô de bancada, a diferença entre uma sala a 20 °C e outra a 30 °C é de menos de 2%: não vale a preocupação.

O que o datasheet promete

  • Alcance de 2 cm a 400 cm.
  • Ângulo de medição de cerca de 15 graus: ele enxerga um cone estreito à frente.
  • Intervalo de pelo menos 60 ms entre uma medição e a próxima, para o eco anterior não ser confundido com o novo.

O que atrapalha

  • Superfície inclinada: o som bate e vai para o lado, e o eco não volta. O sensor lê "nada" ou uma distância maior.
  • Material macio: espuma, tecido e pelúcia absorvem o som.
  • Objeto fino ou pequeno: um lápis de lado pode não devolver eco suficiente.
  • Mais perto que 2 cm: o eco volta antes de o módulo estar pronto para ouvir.

Por isso, num robô, nunca confie numa leitura só. Uma média de três medições, ou descartar valores que saltam demais, deixa o comportamento muito mais estável.

No Arduino Nano

O Nano é de 5 V, como o módulo: os quatro fios vão direto. Para medir o pulso, o Arduino tem a função pulseIn. Vale passar um tempo limite (por exemplo, 30.000 µs, o que corresponde a uns 5 metros): sem ele, se o eco não voltar, o programa fica parado esperando.

No ESP32: o divisor no Echo

O ESP32 trabalha em 3,3 V, e o Echo do HC-SR04 devolve 5 V. Ligar direto arrisca o pino. A solução é um divisor de tensão com dois resistores:

  • Echo do módulo → resistor de 1 kΩ → pino do ESP32.
  • Pino do ESP32 → resistor de 2 kΩ → GND.

O pino recebe cerca de 3,3 V. O Trig pode ir direto: 3,3 V é suficiente para o módulo entender o comando. Existem versões do módulo que funcionam em 3,3 V; confira a marcação antes de dispensar o divisor.

Em MicroPython, a função machine.time_pulse_us mede o pulso do Echo e devolve um número negativo quando o tempo limite estoura.

No braço robótico

O sensor preso na frente da garra permite dois comportamentos clássicos: apitar quando algo se aproxima e fechar a garra quando o objeto está ao alcance. Na IDE de blocos, o cartão "se a distância for menor que" pede os pinos Trig e Echo e o limite em centímetros. O código gerado já usa o tempo limite e ignora as leituras sem eco.

Na prática

A IoTData faz o cadastro e o envio por você.

Um engenheiro nosso responde: qual rede chega até o poço, o que o IGAM ou a ANA vão pedir, quanto custa e quem cuida do cadastro de operador.