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.

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:
Explicação:
- 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.
- 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.
- 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.
- Â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.
- 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
Raspberry Pi: 5V (Common ground with module)
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Raspberry Pi: Any GPIO (e.g., GPIO17)
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
Raspberry Pi/GND
Explicação:
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 . 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
- 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.
- 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.
- 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 . 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 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
- 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.
HC - SR04 Arduino
VCC ------------ 5V
GND ------------ GND
Trig ------------ Digital Pin 2
Echo ------------ Digital Pin 3
Exemplo de código
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);
}
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
- 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.
- 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
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 of a voltage divider is , where is the input voltage (5V in this case), is the first resistor (1kΩ), and is the second resistor (2kΩ). Plugging in the values, we get , 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.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Código Python
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
Código do Arduino IDE
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.
Ideias criativas para projetos usando HC-SR04
Robô para evitar obstáculos
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
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 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
Causa: Reflexões multipath ou alimentação instável
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.
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
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
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
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
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
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
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
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
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.




