Módulos sensores ultrassônicos HC-SR04

Índice

Este guia completo é o seu recurso único para explorar tudo o que há para saber sobre o HC-SR04. Começaremos pelo básico, compreendendo o seu princípio de funcionamento fundamental, que é a chave para desbloquear o seu potencial. Em seguida, passaremos a abordar aspectos importantes, tais como as suas especificações principais, como interligá-lo com microcontroladores populares e até mesmo aprofundar cenários de utilização avançados. Ao final deste guia, você estará bem equipado para aproveitar todo o potencial do HC-SR04 em seus próprios projetos.

O que é o módulo sensor ultrassônico HC-SR04?

O módulo sensor ultrassônico HC-SR04 é um dispositivo notável e altamente versátil que conquistou um nicho no vasto panorama dos projetos eletrônicos. O que o torna realmente diferenciado é sua relação custo-benefício, uma característica que o torna acessível a uma ampla gama de usuários, desde amadores preocupados com o orçamento até profissionais que buscam uma solução acessível para seus projetos.

Front and back view of HC SR04 Ultrasonic Sensor Module
Front and back view of HC - SR04 Ultrasonic Sensor Module

Especificações técnicas

Compreender as especificações técnicas do módulo sensor ultrassônico HC – SR04 é fundamental para qualquer implementação de projeto. Aqui está a tabela de especificações técnicas:

Tensão de Operação
+5V DC (4,5V a 5,5V)
Corrente de Operação
~15mA (Em espera: ~2mA)
Alcance
2cm a 400cm (0,8" a 13 pés)
Precisão
±3mm (Melhor caso, varia com o ambiente)
Resolução
0,3cm (1mm teoricamente possível com calibração)
Ângulo de Detecção
~15° de abertura de cone
Sinal de Gatilho de Entrada
Pulso ALTO (HIGH) de 10μs para iniciar a medição
Sinal de Saída de Eco
Largura do pulso proporcional à distância: 1μs = 0,017cm (baseado na velocidade do som de 340m/s)
Frequência Máxima
Frequência ultrassônica de 40kHz
Ciclo de Medição
≥60ms (para evitar interferência entre as medições)
Temperatura de Operação
-15°C a +60°C (5°F a 140°F)
Dimensões
45mm × 20mm × 15mm (módulo do sensor)
Peso
~5g (apenas o módulo)

Explicação:

  1. Alcance: O HC – SR04 tem um alcance operacional que varia de 2 cm a 400 cm (0,8 pol. a 157 pol.). Esse alcance relativamente amplo o torna adequado para uma variedade de aplicações. Por exemplo, em um projeto de robótica em pequena escala, em que o robô precisa navegar em uma sala, o alcance de 2 a 400 cm pode detectar com eficácia móveis ou paredes próximas. Em uma aplicação industrial em maior escala, ele pode ser usado para medir a distância entre os componentes da máquina dentro desse alcance. No entanto, é importante observar que a precisão pode variar ligeiramente nas extremidades desse alcance.
  1. Resolução: Com uma resolução de 0,3 cm, o HC-SR04 pode fornecer medições de distância bastante precisas. Esse nível de precisão é suficiente para a maioria dos aplicativos amadores e muitos aplicativos industriais. Em um projeto relacionado à impressão 3D, em que o sensor é usado para detectar a distância até a base de impressão para o nivelamento automático, a resolução de 0,3 cm pode garantir que o cabeçote da impressora esteja na altura correta acima da base, resultando em impressões de alta qualidade.
  1. Fonte de alimentação: Ele opera com uma fonte de alimentação de 5 V CC. Durante a operação, ele consome uma corrente operacional de 15 mA, o que é um consumo de energia relativamente baixo. No modo de espera, o consumo de corrente é ainda menor, inferior a 2 mA. Isso o torna uma opção energeticamente eficiente para projetos alimentados por bateria. Por exemplo, em um nó de sensor IoT alimentado por bateria que usa o HC-SR04 para detecção de distância, o baixo consumo de energia garante que a bateria possa durar por um longo período.
  1. Ângulo de operação: O ângulo de operação do HC-SR04 é inferior a 15°. Isso significa que o sensor tem um campo de visão relativamente estreito. Ele é mais eficaz na detecção de obstáculos que estão diretamente à sua frente. Em um sistema de segurança residencial inteligente, onde o sensor é usado para detectar intrusos se aproximando de uma porta, o ângulo de operação estreito permite a detecção focada de objetos que vêm diretamente em direção ao sensor, reduzindo alarmes falsos de objetos na área periférica.
  1. Interface: O módulo possui uma interface de 4 pinos, que inclui os pinos VCC, GND, Trig e Echo. Esse design de interface simples facilita a conexão com vários microcontroladores e outros componentes eletrônicos.

Explicação sobre a pinagem

Pino 1
Rótulo
VCC
Função
Fonte de Alimentação (Positivo)
Tensão
5V DC
Conexão
Arduino: 5V
Raspberry Pi: 5V (Terra comum com o módulo)
Pino 2
Rótulo
Trig (Gatilho)
Função
Entrada de Gatilho
▶ Pulso ALTO de 10μs para Iniciar a Medição
▶ Nível Baixo para Resetar
Conexão
Arduino: Qualquer Pino Digital (ex: D2)
Raspberry Pi: Qualquer GPIO (ex: GPIO17)
Pino 3
Rótulo
Echo
Função
Saída de Eco
▶ Duração em ALTO = Tempo de Ida e Volta das Ondas Ultrassônicas
▶ Tempo Máximo em ALTO: 38ms (Tempo Limite para Ausência de Obstáculo)
Conexão
Arduino: Qualquer Pino Digital (ex: D3)
Raspberry Pi: GPIO com **Divisor de Tensão** (5V→3.3V)
⚠️ Um sinal Echo direto de 5V para o Raspberry Pi pode danificar o GPIO! Use um divisor de tensão de 1kΩ + 2kΩ.
Pino 4
Rótulo
GND
Função
Terra de Alimentação (Terra Comum)
Conexão
Arduino/GND
Raspberry Pi/GND

Explicação:

O pino VCC é responsável por alimentar o módulo. Conectá-lo a uma fonte de alimentação estável de 5 V, de preferência da saída de 5 V do microcontrolador, garante que o módulo funcione corretamente. Uma fonte de alimentação estável é crucial para leituras precisas. Se a fonte de alimentação for instável, isso pode levar a medições de distância inconsistentes. Por exemplo, se houver picos ou quedas de tensão na fonte de alimentação do HC – SR04, o sensor pode emitir pulsos ultrassônicos incorretos ou interpretar erroneamente os ecos recebidos, resultando em cálculos de distância imprecisos.
O pino GND fornece a conexão de aterramento necessária. Ele completa o circuito elétrico e ajuda a manter uma tensão de referência estável para o módulo. Sem uma conexão de aterramento adequada, o módulo pode não funcionar ou produzir resultados irregulares. Em um projeto baseado em Arduino, o pino GND do HC-SR04 é normalmente conectado ao pino GND da placa Arduino para garantir uma referência de aterramento comum.
O pino Trig é onde a mágica começa. Quando um pulso de alto nível de 10μs é enviado para este pino, ele aciona o transmissor ultrassônico para enviar a rajada de 8 pulsos de ondas ultrassônicas de 40kHz. Em um projeto Raspberry Pi baseado em Python, você pode usar a biblioteca GPIO (General Purpose Input/Output) para gerar esse pulso de alto nível de 10 μs. Esse mecanismo simples de entrada digital permite o controle fácil do processo de medição de distância.

O pino Echo é a chave para obter as informações de distância. Assim que as ondas ultrassônicas são emitidas, o pino Echo vai para nível alto. Ele permanece alto até que as ondas refletidas sejam recebidas pelo receptor ultrassônico. A duração em que o pino Echo fica em nível alto é diretamente proporcional ao tempo que as ondas ultrassônicas levam para ir até o obstáculo e voltar. Ao medir essa duração de tempo, podemos calcular a distância até o obstáculo usando a fórmula Distância ( cm ) = Tempo ( μs ) × 0.0343 2 . Em um projeto baseado em Arduino com C++, você pode usar a função pulseIn() para medir a duração do pulso de nível alto no pino Echo.

Componentes principais e princípio de funcionamento

Componentes principais

Para compreender verdadeiramente como funciona o módulo sensor ultrassónico HC – SR04, é essencial familiarizar-nos primeiro com os seus componentes principais. Cada parte desempenha um papel distinto e crucial no funcionamento geral do módulo.

  1. Transmissor ultrassônico: este é o componente responsável pela etapa inicial do processo de medição de distância. Ele emite ondas ultrassônicas a uma frequência de 40 kHz. Essas ondas de alta frequência são inaudíveis ao ouvido humano, mas são fundamentais para o funcionamento do sensor. Quando acionado, o transmissor envia essas ondas para o ambiente circundante. Pense nele como um alto-falante potente que emite ondas sonoras em uma frequência muito além do que podemos ouvir. Em uma aplicação robótica, por exemplo, o transmissor ultrassônico em um robô enviaria essas ondas de 40 kHz na direção em que o robô está se movendo, preparando-se para detectar quaisquer obstáculos em seu caminho.
  1. Receptor ultrassônico: Como o nome indica, a função do receptor ultrassônico é capturar as ondas ultrassônicas que foram refletidas de volta a partir de quaisquer obstáculos no alcance do sensor. Depois que o transmissor envia as ondas, elas viajam pelo ar até atingirem um objeto. As ondas então ricocheteiam, e é tarefa do receptor captar essas ondas refletidas. É como um microfone altamente sensível que pode detectar os ecos mais fracos das ondas ultrassônicas. Em um sistema de automação residencial em que o HC – SR04 é usado para detectar a presença de uma pessoa em uma sala, o receptor captaria as ondas que ricocheteiam no corpo da pessoa.
  1. Circuito de controle: este é o cérebro por trás da operação. O circuito de controle gerencia toda a sequência de processamento do sinal. Ele coordena as ações do transmissor e do receptor. Quando recebe um sinal de disparo, ele instrui o transmissor a emitir as ondas ultrassônicas. Em seguida, ele monitora cuidadosamente o receptor para detectar as ondas refletidas que chegam. Uma vez que as ondas são recebidas, o circuito de controle calcula o tempo que levou para as ondas viajarem até o obstáculo e voltarem. Com base nesse tempo e na velocidade conhecida do som no ar, ele calcula a distância até o obstáculo. Em um ambiente industrial, o circuito de controle em um HC – SR04 usado para máquinas automatizadas gerenciaria com precisão essas operações para garantir medições precisas de distância para o funcionamento adequado das máquinas.

Como funciona

Agora que conhecemos os componentes principais, vamos ver passo a passo como o HC-SR04 realmente mede a distância.

Sinal de disparo: 

O processo começa com um sinal de disparo. Quando um pulso alto de 10 μs é aplicado ao pino Trig (disparo) do módulo HC-SR04, é como se fosse dado ao sensor um comando de "início". Esse pulso elétrico curto, mas significativo, inicia toda a sequência de medição de distância. Por exemplo, em um projeto baseado em Arduino, você usaria uma linha simples de código para enviar esse pulso alto de 10 μs ao pino Trig do HC-SR04, instruindo-o a iniciar o processo de medição.

Propagação de ondas: 

Uma vez acionado, o transmissor ultrassônico entra em ação. O módulo envia uma sequência de 8 pulsos ultrassônicos a uma frequência de 40 kHz. Esses pulsos são como uma série de "balas sônicas" invisíveis que são disparadas para o ambiente. Após enviar esses pulsos, o módulo entra em um estado de espera, aguardando pacientemente que as ondas atinjam um obstáculo e ricocheteiem de volta. Em um cenário real, se você estivesse usando o HC-SR04 para medir a distância até uma parede em uma sala, os 8 pulsos viajariam em direção à parede, espalhando-se em forma de cone com um ângulo relativamente estreito de cerca de 15 graus.

Detecção de eco: 

O pino Echo é a chave para detectar as ondas refletidas. Assim que as ondas ultrassônicas são enviadas, o pino Echo fica alto. Essa é a maneira do sensor indicar que iniciou o processo de medição. Em seguida, ele aguarda o retorno das ondas refletidas. Quando o receptor ultrassônico captura as ondas refletidas, o pino Echo fica baixo. A duração durante a qual o pino Echo permanece alto é igual ao tempo de viagem de ida e volta das ondas ultrassônicas. Em um projeto Raspberry Pi, você usaria uma função para medir o tempo em que o pino Echo fica alto, o que é uma etapa crucial no cálculo da distância.

Cálculo da distância:

Cálculo da Distância: O passo final é calcular a distância até o obstáculo. A fórmula para calcular a distância em centímetros é Distância (cm) = Tempo (μs) × 0,0343 2 . O fator 0,0343 vem da velocidade do som no ar, que é de aproximadamente 343 m/s. Como as ondas viajam até o obstáculo e voltam (uma viagem de ida e volta), dividimos a distância total percorrida por 2 para obter a distância de apenas um sentido até o obstáculo. Por exemplo, se o tempo medido para o pino Echo ficar em nível alto for de 2000μs, a distância será calculada como 2000 × 0,0343 2 = 34,3 cm. Esse cálculo é o mesmo, quer você esteja usando o HC-SR04 em um projeto simples de hobista ou em uma aplicação industrial complexa.

Interface com microcontroladores populares

Guia de configuração do Arduino

Diagrama de fiação

Conectar o módulo sensor ultrassônico HC-SR04 a um Arduino é um processo simples. Veja como fazer isso:

  • VCC: Conecte o pino VCC do HC – SR04 ao pino 5V do Arduino. Isso fornece a energia necessária para o módulo sensor. Uma fonte de alimentação estável de 5V do Arduino garante que o sensor funcione de maneira ideal.
  • GND: O pino GND (terra) do HC – SR04 deve ser conectado ao pino GND do Arduino. Isso estabelece uma referência de terra comum para o sensor e o Arduino, o que é crucial para uma comunicação elétrica adequada.
  • Trig: Conecte o pino Trig (Trigger) do HC – SR04 ao pino digital 2 do Arduino. Este é o pino onde o Arduino enviará o pulso de alto nível de 10μs para acionar o processo de medição de distância no HC – SR04.
  • Echo: O pino Echo do HC-SR04 é conectado ao pino digital 3 do Arduino. O Arduino lerá o pulso de alta duração neste pino para calcular a distância até o obstáculo.
Aqui está um diagrama de fiação simples para ilustrar as conexões:
				
					       HC - SR04         Arduino
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ Digital Pin 2
         Echo ------------ Digital Pin 3
				
			

Exemplo de código

Aqui está um exemplo básico de código Arduino para você começar a medir distâncias usando o HC – SR04:
				
					const int trigPin = 2;
const int echoPin = 3;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}
				
			
Na função de configuração, primeiro inicializamos a comunicação serial a uma taxa de transmissão de 9600, o que nos permite visualizar as leituras de distância no Monitor Serial do Arduino. Em seguida, definimos o trigPin como um pino de saída e o echoPin como um pino de entrada.
Na função loop, começamos definindo o trigPin como LOW por 2 microssegundos para garantir um início limpo. Em seguida, definimos como HIGH por 10 microssegundos para acionar o transmissor ultrassônico no HC – SR04. Depois disso, definimos o trigPin de volta como LOW.
A função pulseIn é então usada para medir a duração do pulso de alto nível no echoPin. Essa duração representa o tempo que as ondas ultrassônicas levaram para viajar até o obstáculo e voltar. Em seguida, calculamos a distância usando a fórmula distância = duração * 0,0343 / 2, onde 0,0343 é a velocidade do som em cm/μs e dividimos por 2 porque as ondas viajam até o obstáculo e voltam.
Por fim, imprimimos a distância calculada no Monitor Serial e adicionamos um atraso de 500 milissegundos antes da próxima medição.

Na função setup, primeiro inicializamos a comunicação serial a uma taxa de transmissão (baud rate) de 9600, o que nos permite visualizar as leituras de distância no Monitor Serial do Arduino. Em seguida, configuramos o trigPin como um pino de saída e o echoPin como um pino de entrada.

Na função loop, começamos definindo o trigPin como nível baixo (LOW) por 2 microssegundos para garantir um início limpo. Em seguida, definimos ele como nível alto (HIGH) por 10 microssegundos para disparar o transmissor ultrassônico no HC-SR04. Depois disso, definimos o trigPin de volta para nível baixo (LOW).

A função pulseIn() é então usada para medir a duração do pulso de nível alto no echoPin. Essa duração representa o tempo que as ondas ultrassônicas levaram para ir até o obstáculo e voltar. Em seguida, calculamos a distância usando a fórmula distance = duration * 0.0343 / 2, onde 0,0343 é a velocidade do som em cm/μs e dividimos por 2 porque as ondas viajam até o obstáculo e voltam.

Finalmente, imprimimos a distância calculada no Monitor Serial e adicionamos um atraso de 500 milissegundos antes da próxima medição.

Dicas

  1. Medição precisa de alta duração:

Ao usar a função pulseIn(), é importante observar que ela mede a duração de um pulso. No caso do HC-SR04, este é o tempo em que o pino Echo fica em nível alto. Para garantir medições precisas, certifique-se de que não haja outras interferências elétricas que possam afetar a duração do pulso. Além disso, esteja ciente de que, se o obstáculo estiver muito longe, o pulso poderá exceder o tempo limite (timeout). Você pode definir um valor de tempo limite na função pulseIn() para lidar com esses casos adequadamente. Por exemplo, long duration = pulseIn(echoPin, HIGH, 20000); onde 20000 é o valor do tempo limite em microssegundos.

  1. Evitar fontes de ruído:

As ondas ultrassônicas podem ser afetadas por fontes de ruído alto. Ao colocar o HC – SR04 em seu projeto, evite áreas com som de alta intensidade, como perto de alto-falantes ou em um ambiente industrial muito barulhento. O ruído pode interferir nas ondas ultrassônicas emitidas pelo sensor, levando a medições de distância imprecisas. Se você precisar usar o sensor em uma área barulhenta, considere o uso de materiais ou invólucros que absorvam o som para proteger o sensor do ruído.

Integração com Raspberry Pi

Cuidado com a tensão

Uma das principais considerações ao integrar o HC – SR04 com um Raspberry Pi são os níveis de tensão. Os pinos GPIO (General – Purpose Input/Output) em um Raspberry Pi só podem aceitar uma tensão máxima de 3,3 V. No entanto, o HC – SR04 opera com 5 V, e o pino Echo do HC – SR04 pode emitir um sinal de 5 V. Conectar um sinal de 5 V diretamente a um pino GPIO do Raspberry Pi pode danificar o Pi.

Para resolver esse problema, você pode usar um circuito divisor de tensão. Um divisor de tensão simples usando um resistor de 1kΩ e um de 2kΩ pode ser usado para converter a saída de 5V do pino Echo do HC-SR04 em um sinal compatível com 3,3V para o Raspberry Pi. A fórmula para calcular a tensão de saída V out de um divisor de tensão é V out = V in × R 2 R 1 + R 2 , onde V in é a tensão de entrada (5V neste caso), R 1 é o primeiro resistor (1kΩ) e R 2 é o segundo resistor (2kΩ). Substituindo os valores, obtemos V out = 5 × 2000 1000 + 2000 ≈ 3,33 V , que está dentro da faixa segura para o pino GPIO do Raspberry Pi.

Fiação

  • VCC: Conecte o pino VCC do HC – SR04 ao pino 5V no Raspberry Pi. Isso liga o módulo sensor HC – SR04.

  • GND: O pino GND do HC – SR04 deve ser conectado ao pino GND no Raspberry Pi para estabelecer um terra comum.
  • Trig: Conecte o pino Trig do HC – SR04 ao GPIO 17 no Raspberry Pi. O Raspberry Pi usará este pino para enviar o pulso de disparo de alto nível de 10μs para o HC – SR04.
  • Echo: O pino Echo do HC – SR04, após passar pelo circuito divisor de tensão (resistores de 1kΩ e 2kΩ), é conectado ao GPIO 27 no Raspberry Pi. O Raspberry Pi lerá o pulso de alta duração neste pino para calcular a distância.
A fiação pode ser resumida da seguinte forma:
				
					       HC - SR04         Raspberry Pi
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ GPIO 17
         Echo (through voltage divider) ------------ GPIO 27
				
			

Código Python

Aqui está um exemplo de código Python usando a biblioteca RPi.GPIO para conectar o HC-SR04 a um Raspberry Pi:
				
					import RPi.GPIO as GPIO
import time

# Set the GPIO mode
GPIO.setmode(GPIO.BCM)

# Define the pins
TRIG = 17
ECHO = 27

# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

def measure_distance():
    # Send a 10μs high - level pulse to trigger the sensor
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    # Wait for the echo to start
    while GPIO.input(ECHO)==0:
        pulse_start = time.time()

    # Wait for the echo to end
    while GPIO.input(ECHO)==1:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start
    distance = pulse_duration * 17150  # Speed of sound in cm/s divided by 2
    distance = round(distance, 2)

    return distance

try:
    while True:
        dist = measure_distance()
        print(f"Distance: {dist} cm")
        time.sleep(1)

except KeyboardInterrupt:
    print("Measurement stopped by User")
    GPIO.cleanup()

				
			

Neste código, primeiro importamos as bibliotecas necessárias, RPi.GPIO para controlar os pinos GPIO no Raspberry Pi e time para adicionar atrasos. Em seguida, definimos o modo GPIO como BCM (numeração de canais SOC da Broadcom). Definimos os pinos TRIG e ECHO e configuramos o pino TRIG como uma saída e o pino ECHO como uma entrada.

A função measure_distance é onde a mágica acontece. Ela envia um pulso de nível alto de 10μs para o pino TRIG para disparar o HC-SR04. Em seguida, ela aguarda o pino ECHO ir para o nível alto (indicando o início do eco) e registra o tempo de início. Depois, ela aguarda o pino ECHO ir para o nível baixo (indicando o fim do eco) e registra o tempo de término. A diferença de tempo entre o início e o término é usada para calcular a distância. A distância é calculada multiplicando a duração do pulso pela velocidade do som em cm/s (34300 cm/s) e dividindo por 2 (já que o som viaja até o obstáculo e volta).

No bloco try, medimos continuamente a distância e a imprimimos no console a cada segundo. Se o usuário pressionar Ctrl + C (KeyboardInterrupt), o programa limpa os pinos GPIO e é encerrado de forma adequada.

Configuração do ESP32

Atribuição de pinos

O ESP32 é um microcontrolador potente com vários pinos GPIO (General Purpose Input/Output, ou Entrada/Saída de Propósito Geral). Ao conectar o HC-SR04 a um ESP32, você pode usar os 5 V do pino VOUT do ESP32 para alimentar o HC-SR04. Para os pinos Trig e Echo, você pode conectá-los a qualquer pino GPIO disponível. Por exemplo, você pode conectar o pino Trig ao GPIO 14 e o pino Echo ao GPIO 15. No entanto, certifique-se de escolher pinos que ainda não estejam sendo usados por outros componentes do seu projeto.

Código do Arduino IDE

O código para usar o HC – SR04 com um ESP32 no Arduino IDE é bastante semelhante ao código Arduino. Aqui está um exemplo:
				
					const int trigPin = 14;
const int echoPin = 15;

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}

				
			

Na função setup, inicializamos a comunicação serial a uma taxa de transmissão (baud rate) de 115200. Em seguida, configuramos o trigPin como um pino de saída e o echoPin como um pino de entrada.

Na função loop, o processo de disparo do HC-SR04 e medição da distância é o mesmo do código do Arduino. Enviamos um pulso de nível alto de 10μs para o trigPin para disparar o sensor, medimos a duração do pulso de nível alto no echoPin usando pulseIn e calculamos a distância.

No entanto, ao usar o ESP32 no Arduino IDE, certifique-se de selecionar a placa ESP32 correta no IDE. Além disso, se você planeja integrar o ESP32 com recursos de IoT (Internet das Coisas), como WiFi ou Bluetooth, você precisa lidar com a inicialização desses recursos em seu código. Por exemplo, se você deseja enviar os dados de distância por WiFi, será necessário adicionar código para se conectar a uma rede WiFi e configurar um servidor ou cliente para enviar os dados.

Ideias criativas para projetos usando HC-SR04

Robô para evitar obstáculos

O robô que evita obstáculos é uma aplicação fascinante e prática do módulo sensor ultrassônico HC-SR04. Sua função principal é navegar com segurança pelo ambiente, detectando obstáculos em seu caminho. Isso é feito usando vários sensores HC-SR04 posicionados estrategicamente no robô.

Os sensores são configurados para detectar obstáculos de diferentes direções. Por exemplo, um conjunto de sensores é colocado na parte frontal do robô para detectar quaisquer obstáculos diretamente em seu caminho de avanço. Além disso, sensores são colocados nas laterais do robô para detectar obstáculos que possam estar se aproximando pelos lados. Quando um obstáculo é detectado, o sistema de controle do robô, que geralmente é baseado em um microcontrolador como o Arduino, calcula a distância até o obstáculo usando os dados dos sensores HC-SR04.

Com base nessas informações de distância, o sistema de controle determina a ação apropriada a ser tomada para evitar o obstáculo. Isso geralmente envolve dirigir os motores de forma a alterar a direção do robô. Por exemplo, se um obstáculo for detectado no lado esquerdo do robô, o sistema de controle pode instruir o motor esquerdo a desacelerar ou reverter, enquanto o motor direito continua a funcionar em velocidade normal. Isso faz com que o robô vire para a direita, afastando-se do obstáculo.

Para construir este projeto, você precisará de vários componentes essenciais. Um Arduino serve como o cérebro da operação. Ele processa os dados recebidos dos sensores HC-SR04 e envia comandos aos motores. Os motores são necessários para acionar as rodas do robô, permitindo que ele se mova. Um driver de motor, como o L298N, é essencial para controlar os motores. O L298N pode lidar com os requisitos de corrente relativamente altos dos motores e permite que o Arduino controle a velocidade e a direção dos motores de forma eficaz. E, claro, vários sensores HC-SR04 são necessários para a detecção frontal e lateral. Ao combinar esses componentes e escrever o código apropriado para controlá-los, você pode criar um robô totalmente funcional para evitar obstáculos.

Lixeira Inteligente

A lata de lixo inteligente é um ótimo exemplo de como o módulo sensor ultrassônico HC – SR04 pode ser usado para melhorar a funcionalidade de objetos do dia a dia. Nesta aplicação, a lata de lixo inteligente foi projetada para ter um recurso de tampa com abertura automática. Esse recurso é acionado pela presença de uma pessoa se aproximando da lata de lixo.

O sensor HC-SR04 é montado na lata de lixo de forma a detectar a distância até qualquer objeto à sua frente. Quando alguém se aproxima da lata de lixo, o sensor mede a distância entre a lata de lixo e a pessoa. Se a distância medida ficar abaixo de um limite pré-definido (por exemplo, 20 cm), isso indica que uma pessoa está perto o suficiente da lata de lixo para precisar usá-la. Nesse momento, o sensor envia um sinal para um servomotor.

O servomotor está conectado à tampa da lata de lixo e é responsável por abri-la e fechá-la. Quando recebe o sinal do sensor HC-SR04, o servomotor gira para abrir a tampa. Essa operação sem uso das mãos não é apenas conveniente para o usuário, mas também ajuda a manter a lata de lixo limpa e higiênica, pois não há necessidade de tocar diretamente na tampa.

Ao escrever o código para este projeto, definir o limite de distância é uma etapa crucial. Você precisa calibrar cuidadosamente esse valor com base nos requisitos específicos da sua lata de lixo inteligente. Se o limite for definido muito alto, a tampa pode abrir desnecessariamente quando alguém ainda estiver a alguma distância da lata de lixo. Por outro lado, se o limite for definido muito baixo, a tampa pode não abrir a tempo quando o usuário se aproximar. Um limite de distância bem calibrado garante que a lata de lixo inteligente funcione de maneira ideal.

Monitor de nível de água

O monitor do nível da água é uma aplicação prática do módulo sensor ultrassônico HC – SR04, especialmente em situações em que é necessário acompanhar o nível da água em um tanque. Isso pode ser em um tanque de armazenamento de água doméstico, um tanque de retenção de água industrial ou até mesmo um aquário.

O sensor HC – SR04 é instalado acima do tanque de água. Ele emite ondas ultrassônicas para baixo, em direção à superfície da água. Essas ondas viajam pelo ar e ricocheteiam quando atingem a superfície da água. O sensor então mede o tempo que as ondas levam para viajar até a superfície da água e voltar. Usando a velocidade conhecida do som no ar, é possível calcular a distância do sensor até a superfície da água.

Em muitos casos, o monitor de nível de água é integrado a um sistema IoT (Internet das Coisas). Por exemplo, ele pode ser conectado a um aplicativo Blynk. Os dados calculados do nível de água são enviados ao aplicativo, permitindo que os usuários monitorem o nível de água remotamente. Isso é especialmente útil para aplicações industriais, onde o monitoramento em tempo real dos níveis de água é crucial para o funcionamento adequado dos processos.

Um aspecto importante a considerar ao configurar um monitor de nível de água é a calibração. Como o sensor é instalado a uma certa altura acima da base do tanque, essa altura precisa ser levada em consideração nos cálculos de distância. Por exemplo, se o sensor estiver instalado 50 cm acima da base do tanque e a distância calculada do sensor até a superfície da água for de 30 cm, então o nível real da água no tanque é de 20 cm. Ao calibrar com precisão a altura do sensor e realizar os cálculos necessários, você pode garantir que o monitor de nível de água forneça leituras precisas e confiáveis.

Solução de problemas comuns

Leituras inconsistentes

Um dos problemas mais comuns que os usuários encontram com o módulo sensor ultrassônico HC – SR04 são leituras inconsistentes. Isso pode ser bastante frustrante, especialmente quando você depende de medições precisas de distância para o seu projeto.

Causa: Reflexões multipath ou alimentação instável

As reflexões multipath ocorrem quando as ondas ultrassônicas emitidas pelo sensor ricocheteiam em várias superfícies antes de atingir o receptor. Isso pode acontecer em ambientes complexos com muitos objetos ou em áreas com superfícies grandes e reflexivas. Por exemplo, em uma sala com muitos móveis e espelhos, as ondas ultrassônicas podem ricochetear nos móveis, paredes e espelhos antes de serem detectadas pelo receptor. Isso dificulta o cálculo preciso da distância até o objeto pretendido pelo sensor, resultando em leituras inconsistentes.

A energia instável é outro culpado. Se a fonte de alimentação do HC-SR04 não for estável, isso pode causar o mau funcionamento do sensor. As flutuações de tensão podem afetar o funcionamento adequado do transmissor e do receptor ultrassônicos, levando a medições de distância irregulares. Por exemplo, se você estiver usando uma bateria com pouca carga ou um adaptador de energia com regulação de tensão deficiente, o sensor pode não receber uma fonte de alimentação consistente de 5 V, o que pode afetar seu desempenho.

Solução: Adicione uma caixa protetora para o sensor e use uma fonte de alimentação regulada de 5 V.

Adicionar uma caixa protetora ao redor do sensor pode ajudar a reduzir o impacto das reflexões multipath. A caixa pode ser projetada para direcionar as ondas ultrassônicas de maneira mais focada, reduzindo as chances de as ondas ricochetearem em superfícies indesejadas. Uma caixa simples de papelão ou plástico com uma abertura estreita na frente pode ser eficaz nesse sentido.

Usar uma fonte de alimentação regulada de 5 V é crucial para uma operação estável. Uma fonte de alimentação com regulação de tensão integrada, como um adaptador de parede de alta qualidade ou um módulo de alimentação com regulação de tensão, garante que o HC-SR04 receba 5 V consistentes. Isso ajuda a eliminar quaisquer problemas causados por flutuações de tensão e melhora a precisão e a consistência gerais das leituras do sensor.

Sem sinal de saída

Outro problema comum é quando o HC – SR04 não consegue produzir um sinal de saída. Isso pode ser um sinal de alguns problemas diferentes, e é importante verificar sistematicamente cada possibilidade para que o sensor volte a funcionar.
Verifique: Verifique a fiação (especialmente VCC/GND), o divisor de tensão para Raspberry Pi e a lógica do código para o tempo de disparo/eco.
Em primeiro lugar, verifique cuidadosamente a fiação. Certifique-se de que os pinos VCC e GND estejam conectados corretamente à fonte de alimentação e ao terra, respectivamente. Uma conexão solta ou incorreta pode impedir que o sensor seja ligado corretamente ou pode causar curtos-circuitos que interrompem o funcionamento normal do módulo. Em muitos casos, uma simples inspeção visual e reconexão dos fios podem resolver o problema.

Se você estiver usando o HC-SR04 com um Raspberry Pi, não se esqueça de verificar o circuito divisor de tensão. Como mencionado anteriormente, os pinos GPIO do Raspberry Pi só podem lidar com 3,3 V, e um divisor de tensão é frequentemente usado para converter a saída de 5 V do pino Echo do HC-SR04 em um sinal compatível com 3,3 V. Se os componentes do divisor de tensão (geralmente resistores) estiverem danificados ou conectados incorretamente, isso pode resultar na não recepção do sinal de saída pelo Raspberry Pi.

A lógica do código para o tempo de disparo/eco também é uma área crítica a ser verificada. Certifique-se de que o código está enviando o sinal de disparo correto (um pulso de nível alto de 10μs) para o pino Trig e que está medindo corretamente a duração do pulso de nível alto no pino Echo. Um código incorreto pode impedir que o sensor seja acionado ou pode fazer com que o microcontrolador interprete incorretamente o sinal de eco, levando à ausência de saída ou cálculos de distância incorretos. Por exemplo, se os tempos de atraso no código estiverem definidos incorretamente, isso pode interromper a sequência adequada de acionamento do sensor e leitura do eco.

Erros fora do intervalo

Erros fora do alcance podem ocorrer quando o objeto que está sendo detectado está muito próximo ou muito distante do sensor HC-SR04. Isso pode causar problemas em seu projeto, especialmente se seu código não estiver devidamente equipado para lidar com tais situações.
Solução: Implemente um tempo limite (por exemplo, 38 ms para nenhum eco) e lide com valores 0 ou ∞ de maneira adequada no código.
Implementar um tempo limite no seu código é uma maneira útil de lidar com casos em que o objeto está muito longe para que o sensor detecte um eco dentro de um tempo razoável. Por exemplo, se nenhum eco for recebido em 38 ms, é uma boa indicação de que o objeto está além do alcance do sensor. No seu código, você pode configurar um temporizador que começa quando o sinal de disparo é enviado e para quando um eco é recebido. Se o temporizador atingir o valor de tempo limite sem receber um eco, você pode presumir que o objeto está fora do alcance e tomar as medidas adequadas, como exibir uma mensagem de erro ou definir um valor de distância padrão.

Também é importante lidar com valores 0 ou ∞ (infinito) de maneira adequada no código. Um valor de distância 0 pode indicar que o sensor está muito próximo de um objeto, mais próximo do que seu alcance mínimo detectável. Nesses casos, você pode definir um limite mínimo de distância no seu código e ajustar o valor da distância de acordo. Da mesma forma, se o código calcular um valor de distância extremamente grande (próximo do infinito), é provável que seja uma indicação de um erro, como um problema com a detecção de eco ou cálculos incorretos. Seu código deve ser capaz de lidar com esses casos de maneira adequada, por exemplo, registrando uma mensagem de erro ou tentando medir novamente a distância.

HC-SR04 vs. Outros sensores de distância

vs. Sensores infravermelhos

Tabela 1: HC-SR04 (Ultrassônico) vs Sensores Infravermelhos

HC-SR04

Alcance: 2cm–400cm (Resumo 1, 6)

Precisão: ±3mm (condições ideais, Resumo 1)

Tensão: 5V (fixa, Resumo 1)

Prós: Sem interferência de luz, maior alcance (Resumo 5)

Contras: Precisão reduzida em curto alcance, sensibilidade a ruído ultrassônico (Resumo 1)

Infravermelho

Alcance: Tipicamente <100cm (Resumo 1, 5)

Precisão: ±5mm–1cm (afetado por cor/material, Resumo 5)

Tensão: 3,3V–5V (flexível, Resumo 5)

Prós: Tamanho pequeno, baixo custo (Resumo 1)

Contras: Interferência de luz ambiente/cor (Resumo 5)

A tabela 1 destaca a relação entre a detecção robusta de longo alcance do HC-SR04 (2 cm a 400 cm) e o tamanho compacto/baixo custo dos sensores infravermelhos, observando a imunidade do HC-SR04 à interferência da luz em comparação com a vulnerabilidade do infravermelho à luz ambiente e à cor do material.

vs. Sensores a laser

Tabela 2: HC-SR04 vs Laser/ToF (VL53L0X)

HC-SR04

Alcance: 2cm–400cm (Resumo 1, 4)

Precisão: ±3mm (Resumo 4)

Taxa de Atualização: 60ms (Resumo 4)

Custo: ~$2–3 (Resumo 1)

Desvantagem: Ângulo de cone de 15°, ruído ambiental (Resumo 1)

Laser/ToF (VL53L0X)

Alcance: 5cm–200cm (Resumo 1, 3)

Precisão: ±1mm–3mm (Resumo 3)

Taxa de Atualização: 20ms (mais rápida, Resumo 4)

Custo: ~$10–15 (Resumo 1)

Vantagem: Feixe estreito de 5°, resistente a interferências (Resumo 3)

A tabela 2 compara a relação custo-benefício do HC-SR04 (US$ 2–3) e seu amplo alcance (400 cm) com a precisão superior (±1 mm) e velocidade (taxa de atualização de 20 ms) dos sensores a laser/ToF, ideais para aplicações que exigem alta precisão em ambientes controlados.

vs. EUA - Módulo 100

Tabela 3: HC-SR04 vs US-100 (Ultrassônico)

HC-SR04

Alcance: 2cm–400cm (Resumo 2, 6)

Precisão: ±3mm (nominal, Resumo 2)

Tensão: Apenas 5V (Resumo 6)

Característica: Apenas GPIO, sem compensação de temperatura (Resumo 3)

Problema: Valores aleatórios acima de 400cm (Resumo 6)

US-100

Alcance: 2cm–450cm (Resumo 2, 3)

Precisão: ±2mm (melhor em testes, Resumo 3)

Tensão: 3,3V–5V (Resumo 3)

Característica: Compensação de temperatura (modo UART), códigos de erro (Resumo 6)

Desvantagem: Custo mais alto ($5–8), configuração UART necessária (Resumo 3)

A tabela 3 mostra o alcance aprimorado do US-100 (450 cm), melhor precisão (±2 mm) e compatibilidade com 3,3 V/5 V em comparação com a simplicidade do HC-SR04 (apenas GPIO), destacando o recurso de compensação de temperatura do US-100 para uso industrial a um custo mais alto (US$ 5–8).

Técnicas avançadas e otimizações

Calibração multissensor

Para aplicações mais complexas, especialmente em cenários onde uma visão de 360° é essencial, o uso de vários sensores HC-SR04 pode ser um divisor de águas. Em uma aplicação robótica, por exemplo, ter vários sensores HC-SR04 estrategicamente posicionados ao redor do corpo do robô pode permitir que ele detecte obstáculos de todas as direções, proporcionando uma visão abrangente do ambiente ao seu redor.

No entanto, ao usar vários sensores, a interferência de crosstalk pode se tornar um problema significativo. O crosstalk ocorre quando as ondas ultrassônicas emitidas por um sensor interferem na operação de outro sensor. Isso pode levar a leituras imprecisas, pois os sensores podem interpretar erroneamente as ondas interferentes como ecos de obstáculos reais.

Para mitigar a interferência de cross-talk, várias técnicas podem ser empregadas. Uma abordagem é fazer a multiplexação temporal dos sensores. Isso envolve ativar os sensores um de cada vez, com intervalos de tempo suficientes entre cada ativação. Por exemplo, se você tiver quatro sensores HC-SR04 em um robô, pode ativar o sensor 1, esperar que ele conclua seu ciclo de medição e, em seguida, ativar o sensor 2 e assim por diante. Ao fazer isso, você garante que as ondas ultrassônicas de um sensor não se sobreponham às de outro sensor, reduzindo as chances de interferência cruzada.

Outra técnica é usar materiais de blindagem. Colocar uma barreira física, como uma fina folha de metal ou um material absorvente de som, entre os sensores pode ajudar a bloquear as ondas ultrassônicas de um sensor de atingir outro. Isso pode ser especialmente útil em situações em que os sensores estão colocados muito próximos uns dos outros.

A calibração também é crucial ao usar vários sensores. Cada sensor pode ter características ligeiramente diferentes, como sensibilidade ou ângulo do feixe. Ao calibrar os sensores, você pode levar em conta essas diferenças e garantir que os dados de todos os sensores sejam consistentes. Isso pode envolver medir a distância até um objeto conhecido com cada sensor e ajustar as leituras com base nas diferenças.

Filtragem de ruído

Em alguns ambientes, as leituras do HC – SR04 podem ser instáveis, com pequenas flutuações na distância medida que podem ser causadas por vários fatores, como ruído elétrico, pequenas correntes de ar ou interferência de outros aparelhos eletrônicos próximos. Para resolver esse problema, podem ser aplicadas técnicas de filtragem de ruído.

Um método comumente usado é o filtro de média móvel. O filtro de média móvel funciona calculando a média de uma série de leituras de distância consecutivas. Por exemplo, em vez de usar uma única leitura de distância, você pode pegar as últimas 5 leituras e calcular a média delas. Isso suaviza as leituras instáveis, pois as pequenas flutuações tendem a se cancelar quando calculadas na média. Em Python, a implementação de um filtro de média móvel simples para as leituras de distância do HC-SR04 poderia ser assim:
				
					distance_readings = []
num_readings = 5

def moving_average_filter(new_distance):
    distance_readings.append(new_distance)
    if len(distance_readings) > num_readings:
        distance_readings.pop(0)
    return sum(distance_readings) / len(distance_readings)

				
			

Outro método de filtragem eficaz é o filtro mediano. O filtro mediano substitui cada leitura de distância pelo valor mediano de um conjunto de leituras consecutivas. A mediana é menos sensível a valores extremos ou outliers em comparação com a média. Por exemplo, se você tiver um conjunto de 5 leituras de distância [20, 22, 18, 50, 21], o valor mediano é 21. Ao usar o filtro mediano, o valor atípico de 50 não afetaria significativamente o resultado filtrado. No Arduino, a implementação de um filtro mediano poderia ser a seguinte:

				
					const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;

void addReading(int newReading) {
  total = total - readings[readIndex];
  readings[readIndex] = newReading;
  total = total + readings[readIndex];
  readIndex = readIndex + 1;
  if (readIndex >= numReadings) {
    readIndex = 0;
  }
}

int getMedian() {
  int sortedReadings[numReadings];
  for (int i = 0; i < numReadings; i++) {
    sortedReadings[i] = readings[i];
  }
  for (int i = 0; i < numReadings - 1; i++) {
    for (int j = i + 1; j < numReadings; j++) {
      if (sortedReadings[i] > sortedReadings[j]) {
        int temp = sortedReadings[i];
        sortedReadings[i] = sortedReadings[j];
        sortedReadings[j] = temp;
      }
    }
  }
  return sortedReadings[numReadings / 2];
}

				
			

Modos de trabalho personalizados

Algumas das versões mais recentes do módulo sensor ultrassônico HC – SR04 oferecem flexibilidade adicional por meio de modos de trabalho personalizados. Esses modos podem ser configurados por meio de ajustes de resistência, permitindo diferentes protocolos de comunicação e características operacionais.
Um desses modos é o modo GPIO (Entrada/Saída de Propósito Geral), que é o modo padrão para a maioria das aplicações básicas. Neste modo, o módulo funciona conforme descrito nas seções anteriores, com os pinos Trig e Echo usados para acionar a medição de distância e receber o sinal de eco, respectivamente.

No entanto, também existem os modos UART (Receptor/Transmissor Assíncrono Universal) e I2C (Circuito Integrado Inter) disponíveis em certas versões do HC – SR04. No modo UART, o módulo pode se comunicar com um microcontrolador usando comunicação serial. Isso pode ser útil em aplicações onde um protocolo de comunicação serial mais padronizado é preferível, como em alguns sistemas de controle industrial ou ao integrar com dispositivos que possuem interfaces UART integradas.

O modo I2C, por outro lado, permite a comunicação através de um barramento I2C. Isso é benéfico em configurações com vários dispositivos, onde vários sensores ou componentes precisam se comunicar com um único microcontrolador. O barramento I2C permite um uso mais eficiente dos pinos do microcontrolador, pois vários dispositivos podem compartilhar o mesmo barramento de dois fios (SDA – Linha de Dados Serial e SCL – Linha de Relógio Serial).

Para configurar o módulo para esses modos personalizados, você precisa consultar a documentação do módulo para determinar os valores de resistência apropriados. Por exemplo, para habilitar o modo UART, pode ser necessário conectar uma resistência específica entre dois pinos no módulo. Depois que as resistências estiverem configuradas corretamente, o módulo pode ser programado para se comunicar no modo desejado. Isso pode envolver a escrita de um código diferente em seu microcontrolador para lidar com os protocolos de comunicação UART ou I2C. Por exemplo, em um projeto Raspberry Pi usando o HC – SR04 configurado para I2C, você usaria a biblioteca smbus em Python para se comunicar com o sensor através do barramento I2C.

HC-SR04: temporização, adaptação de nível e fontes de erro

O HC-SR04 estima distância pelo tempo de ida e volta de uma rajada ultrassônica, usando distância = tempo do eco × velocidade do som / 2. Variantes podem diferir; confira alimentação e nível de Echo e adapte uma saída de 5 V antes de uma entrada somente de 3,3 V.

  • Gere o disparo: forneça a largura exigida pelo módulo e meça o pulso Echo retornado.
  • Defina limite de tempo: pare de esperar sem eco para o programa não travar.
  • Compense a velocidade: temperatura muda a conversão e o movimento do ar adiciona erro.
  • Respeite a geometria: superfícies macias, inclinadas, estreitas ou próximas absorvem ou desviam a rajada.
  • Evite interferência: alterne sensores e rejeite saltos impossíveis com filtragem limitada.

Conclusão

O módulo sensor ultrassônico HC – SR04 continua sendo um item básico em projetos eletrônicos devido ao seu preço acessível, facilidade de uso e versatilidade. Ao dominar seu princípio de funcionamento, fazer a interface com microcontroladores populares e explorar aplicações criativas, você pode liberar todo o seu potencial para tudo, desde medições básicas de distância até sistemas complexos de IoT. Tem dúvidas ou ideias para projetos? Compartilhe-as conosco pelo formulário flutuante! 🛠️

Sobre o autor

Picture of Aidan Taylor
Aidan Taylor

Sou Aidan Taylor e tenho mais de 10 anos de experiência na área de engenharia reversa de PCB, design de PCB e desbloqueio de IC.

Compartilhar

Postagem recomendada

Precisa de ajuda?

Rolar para cima

Instant Quote

Cotação instantânea