Módulos sensores ultrassônicos HC-SR04

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:

Operating Voltage
+5V DC (4.5V to 5.5V)
Operating Current
~15mA (Standby: ~2mA)
Range
2cm to 400cm (0.8" to 13ft)
Accuracy
±3mm (Best case, varies with environment)
Resolution
0.3cm (1mm theoretically possible with calibration)
Angle of Detection
~15° cone angle
Trigger Input Signal
10μs HIGH pulse to initiate ranging
Echo Output Signal
Pulse width proportional to distance: 1μs = 0.017cm (based on sound speed 340m/s)
Maximum Frequency
40kHz ultrasonic frequency
Measurement Cycle
≥60ms (to avoid interference between measurements)
Operating Temperature
-15°C to +60°C (5°F to 140°F)
Dimensions
45mm × 20mm × 15mm (sensor module)
Weight
~5g (module only)

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

Pin 1
Label
VCC
Function
Power Supply (Positive)
Voltage
5V DC
Connection
Arduino: 5V
Raspberry Pi: 5V (Common ground with module)
Pin 2
Label
Trig (Trigger)
Function
Trigger Input
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Connection
Arduino: Any Digital Pin (e.g., D2)
Raspberry Pi: Any GPIO (e.g., GPIO17)
Pin 3
Label
Echo
Function
Echo Output
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Connection
Arduino: Any Digital Pin (e.g., D3)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
⚠️ Direct 5V Echo to Raspberry Pi may damage GPIO! Use 1kΩ + 2kΩ voltage divider.
Pin 4
Label
GND
Function
Power Ground (Common Ground)
Connection
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.

The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula Distance ( cm ) = Time ( μs ) × 0.0343 2 . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.

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:

Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is Distance (cm) = Time ((μs)) × 0.0343 2 . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as 2000 × 0.0343 2 = 34.3 cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.

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.

In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.

The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.

Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.

Dicas

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

When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.

  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.

To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage V out of a voltage divider is V out = V in × R 2 R 1 + R 2 , where V in is the input voltage (5V in this case), R 1 is the first resistor (1kΩ), and R 2 is the second resistor (2kΩ). Plugging in the values, we get V out = 5 × 2000 1000 + 2000 3.33 V , which is within the safe range for the Raspberry Pi GPIO pin.

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()

				
			

In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.

The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).

In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.

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);
}

				
			

In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the distance.

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

Table 1: HC-SR04 (Ultrasonic) vs Infrared Sensors

HC-SR04

Range: 2cm–400cm (Abstract 1, 6)

Accuracy: ±3mm (ideal conditions, Abstract 1)

Voltage: 5V (fixed, Abstract 1)

Pros: No light interference, longer range (Abstract 5)

Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)

Infrared

Range: Typically <100cm (Abstract 1, 5)

Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)

Voltage: 3.3V–5V (flexible, Abstract 5)

Pros: Small size, low cost (Abstract 1)

Cons: Ambient light/color interference (Abstract 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

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

HC-SR04

Range: 2cm–400cm (Abstract 1, 4)

Accuracy: ±3mm (Abstract 4)

Update Rate: 60ms (Abstract 4)

Cost: ~$2–3 (Abstract 1)

Weakness: 15° cone angle, environmental noise (Abstract 1)

Laser/ToF (VL53L0X)

Range: 5cm–200cm (Abstract 1, 3)

Accuracy: ±1mm–3mm (Abstract 3)

Update Rate: 20ms (faster, Abstract 4)

Cost: ~$10–15 (Abstract 1)

Strength: 5° narrow beam, interference-resistant (Abstract 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

Table 3: HC-SR04 vs US-100 (Ultrasonic)

HC-SR04

Range: 2cm–400cm (Abstract 2, 6)

Accuracy: ±3mm (nominal, Abstract 2)

Voltage: 5V only (Abstract 6)

Feature: GPIO-only, no temperature compensation (Abstract 3)

Issue: Random values beyond 400cm (Abstract 6)

US-100

Range: 2cm–450cm (Abstract 2, 3)

Accuracy: ±2mm (better in tests, Abstract 3)

Voltage: 3.3V–5V (Abstract 3)

Feature: Temperature compensation (UART mode), error codes (Abstract 6)

Downside: Higher cost ($5–8), UART setup required (Abstract 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.

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! 🛠️

Compartilhar em:

Rolar para cima

Instant Quote