Introdução
Os sensores ultrassônicos são sensores que emitem sinais ultrassônicos e calculam pelo tempo de resposta desses sinais a distância de um ponto ou objeto. Isso permite utilizá-los na robótica para detecção de obstáculos, como também servem para detectar níveis de água em reservatórios através de suas versões blindadas a prova d'água.
![]() |
Animação mostrando o princípio de funcionamento do sensor ultrassônico |
Também existem versões industriais de maior precisão e alcance que permitem medir alturas de pilhas de embalagem, diâmetros de bobinas, níveis em silos, etc. Por ser um sensor facilmente encontrado, usaremos o HC-SR04 como padrão para estudar sensores ultrassônicos.
Conhecendo o HC-SR04
O HC-SR04 é um módulo contendo componentes periféricos e dois sensores cilíndricos principais, um responsável por transmitir o sinal ultrassônico (trigger)e outro responsável por receber o retorno desse sinal (echo).
![]() |
Representação de um HC-SR04 com sensores e terminais |
Conta também com quatro terminais: VCC, TRIG, ECHO e GND. O terminal TRIG será conectado a um pino digital de saída do Arduino e o ECHO a um pino digital de entrada. O sinal de 5v enviado pelo pino de saída faz com que o sensor envie pulsos de 40khz em direção a um obstáculo.
Se o objeto estiver a uma distância de 2 cm a 4 metros, haverá retorno deste sinal captado pelo receptor. O intervalo entre envio e recebimento determina um tempo de duração de sinal.
Se multiplicarmos esse tempo pela velocidade do som que é 340 metros por segundo e dividirmos por dois, já que o sinal foi e voltou, teremos um medida que representa a distância do sensor ao objeto, mas podemos utilizar alguns artifícios e simplificar essa conta apenas dividindo esse tempo de duração por 58 e já ter o valor da distância em centímetros.
Para aqueles que não gostam de fazer contas, podemos utilizar bibliotecas que nos dá o valor da distância mais facilmente.
Segundo nossas pesquisas, a taxa de atualização dessas leituras é de cerca de 100 vezes por segundo, com uma precisão de 3mm, trabalhando com uma corrente entre 2 e 15 mA.
![]() |
Tabela com as especificações de um HC-SR04 genérico |
É bom lembrar que, dependendo do projeto, esses sensores precisarão de algum tipo de suporte, que pode ser fixo para os projetos de robótica ou móveis quando o projeto exige que o sensor seja apontado para diferentes direções.
![]() |
Suporte fixo para HC-SR04 |
Também temos "cases", isto é, encapsulamentos prontos para abrigar o sensor, conferindo a eles certa proteção. Alguns deles podem ser encontrados em lojas virtuais, como também na forma de arquivos para download e posterior impressão 3D.
![]() |
Case direcionável para HC-SR04 |
Montagem
Sua montagem é relativamente fácil, não exigindo resistores externos, por isso farei algo muito simples, apenas para mostrar como o sensor com e sem bibliotecas, mas deixarei no final um link para um projeto mais elaborado.
![]() |
Simulação da montagem no Wokwi |
Link: https://wokwi.com/projects/413576535125184513
Sketch
Temos duas opções de Sketch para essa mesma montagem: Uma utiliza a fórmula de cálculo da distância que falei e a outra utiliza um biblioteca que facilita nossa vida dispensando o cálculo. Vamos ao primeiro:
- int trig=9;
- int echo=8;
- int duracao=0;
- void setup() {
- Serial.begin(9600);
- pinMode(trig, OUTPUT);
- pinMode(echo, INPUT);
- }
- void loop() {
- digitalWrite(trig, HIGH);
- delayMicroseconds(10);
- digitalWrite(trig, LOW);
- duracao= pulseIn(echo, HIGH);
- Serial.print("Distância em centimetros: ");
- Serial.println(duracao / 58);
- delay(1000);
- }
Nesse código estamos declarando nas primeiras linhas as três variáveis que utilizaremos: duas para os pinos de trig e echo, além de uma para guardar a duração do intervalo em micro segundos. Na função setup() estamos apenas iniciando o monitor serial e configurando os pinos como saída e entrada.
A mágica toda acontece na função loop() onde ativamos o sinal de trigger, estabelecemos um intervalo de 10 microssegundos com a função delayMicroseconds() e desligamos em seguida o sinal.
Com a função pulseIn() pegamos o intervalo de resposta do echo, depois é só fazer a conta e imprimir o resultado no monitor serial.
Não gostou de fazer contas?
Tudo bem. Eu vou colocar também aqui um link para outra montagem onde utilizei a biblioteca do pessoal da Robo Core (ver referências). Veja como fica mais fácil:
- #include "Ultrasonic.h"
- int trig=9;
- int echo=8;
- HC_SR04 sensor(trig,echo);
- void setup() {
- Serial.begin(9600);
- }
- void loop() {
- Serial.print("Distância em centimetros: ");
- Serial.println(sensor.distance());
- delay(1000);
- }
Nesse código temos a inclusão de uma biblioteca que na realidade são dois arquivos: um cpp onde temos a classe que vai ser utilizada e outro de cabeçalho. Repare isso nos arquivos adicionais da montagem do link abaixo.
Aqui temos na linha 5 o instanciamento do objeto sensor com base na classe HC_SR04 do arquivo cpp que utiliza como parâmetro os pinos de trig e echo. O resto do código é bem parecido com o primeiro, descontado o que não foi utilizado. Na hora da impressão da distância utilizamos um método distance() que calcula pra gente.
Link para essa montagem com a biblioteca: https://wokwi.com/projects/413578863051030529
Um projeto de Sustentabilidade
Durante o curso Sistemas Embarcados na Fatec, fizemos uma disciplina de Sustentabilidade onde apresentei um projeto que utilizava dois desses sensores: um para verificar o nível de um reservatório inferior com água de reuso proveniente de um telhado e outro para verificar o nível de um reservatório superior que utilizava essa água para descarga e outros fins.
![]() |
Projeto de Sustentabilidade com uso e HC-SR04 e Relê |
Se o nível do reservatório superior estivesse baixo e o inferior estivesse cheio, um relê acionava uma bomba para mandar água do reservatório inferior para o superior. Vou deixar aqui o link para uma representação do projeto no Tinkercad.
![]() |
Simulação no Tinkercad para Projeto de Sustentabilidade |
Esclareço que no lugar da bomba, o Tinkercad só me permitiu colocar uma lâmpada para representá-la, mas acho que serve como exemplo de uso. Também cabe lembrar que para projetos como esse, o recomendável é a utilização de sensores blindados como o da figura abaixo:
![]() |
Sensor ultrassônico a prova d'água |
Link do Tinkercad: Clique aqui.
Nas próximas aulas veremos display LCD para dispensar o uso do monitor serial.
Referências
BALLUFF. Sensor ultrassônico: como ele funciona e de que modo pode ajudar a sua indústria? Disponível em <https://balluffbrasil.com.br/sensor-ultrassonico-como-ele-funciona-e-de-que-modo-pode-ajudar-a-sua-industria/> Acesso em 01 nov 2024.
BLOG ELETROGRATE. Sensor Ultrassônico HC-SR04 com Arduino. Disponível em <https://blog.eletrogate.com/sensor-ultrassonico-hc-sr04-com-arduino/> Acesso em 01 nov 2024.
MAKER HERO. Sensor de Distância Ultrassônico HC-SR04. Disponível em <https://www.makerhero.com/produto/sensor-de-distancia-ultrassonico-hc-sr04/> Acesso em 01 nov 2024.