Visualizações: 164 Autor: Grace Tempo de publicação: 2021-07-26 Origem: Site
O O sensor ultrassônico HC-SR04 é um dos módulos de medição de distância mais populares para projetos Arduino. É amplamente utilizado em robôs para evitar obstáculos, sensores de estacionamento, detecção de nível, lixeiras inteligentes, medidores de distância e outras aplicações de detecção sem contato.
O módulo emite ondas ultrassônicas de 40kHz através de um transmissor. Quando a onda sonora encontra um objeto, ela é refletida de volta para o receptor. Medindo o tempo de eco e usando a velocidade do som, o Arduino pode calcular a distância entre o sensor e o objeto.
| Parâmetro | Valor |
| Tensão de trabalho típica | 5V CC |
| Corrente de trabalho estática | Menos de 5mA em algumas versões do módulo |
| Frequência operacional | Onda ultrassônica de 40kHz |
| Distância de detecção | Faixa comum: 2cm a 400cm; algumas versões com ajuste de ganho podem suportar alcance mais longo. |
| Ângulo de detecção | Geralmente dentro de 15 graus; algumas versões com maior ganho podem chegar a cerca de 30 graus. |
| Precisão | Até cerca de 0,3 cm sob condições de teste adequadas |
| Zona cega | Cerca de 2 cm de distância mínima de medição |
O módulo ultrassônico HC-SR04 possui quatro pinos: VCC, TRIG, ECHO e GND. O Arduino envia um pulso curto de disparo para o pino TRIG e, em seguida, lê o pulso de retorno do pino ECHO.
| Pino HC-SR04 | Conexão Arduino | Função |
| CCV | 5V | Fonte de alimentação para o módulo ultrassônico. |
| TRIGO | Pino digital 9 | Entrada de gatilho. O Arduino aplica um pulso de 10us para iniciar o alcance. |
| ECO | Pino digital 10 | Saída de eco. O Arduino lê a largura do pulso para calcular a distância. |
| GND | GND | Conexão à terra. |
O HC-SR04 funciona através da medição do tempo de voo. O Arduino envia um sinal de disparo de alto nível de pelo menos 10 microssegundos para o pino TRIG. O módulo então envia automaticamente oito pulsos ultrassônicos de 40kHz e aguarda o eco refletido.
Quando o sinal ultrassônico refletido é detectado, o pino ECHO emite um pulso de alto nível. A duração deste pulso é o tempo de viagem de ida e volta da onda ultrassônica.
Distância = Tempo de alto nível do eco × Velocidade do som / 2
No código Arduino, a fórmula simplificada comum é:
Distância em cm = duração × 0,0343/2
O processo de temporização é simples: o Arduino mantém o TRIG baixo brevemente, envia um pulso alto de 10us e depois retorna o TRIG para baixo. O HC-SR04 envia uma explosão ultrassônica e define o ECHO como alto até que o sinal refletido retorne ou o tempo de medição expire.
Para evitar leituras instáveis, deixe um pequeno atraso entre as medições. Um ciclo de medição de cerca de 60 ms é comumente usado para que o eco ultrassônico anterior tenha tempo de desaparecer antes do próximo disparo.
A função Arduino pulseIn() é usada para medir quanto tempo um pino digital permanece ALTO ou BAIXO. Para HC-SR04, o Arduino usa pulseIn(echoPin, HIGH) para ler a largura de pulso de alto nível do pino ECHO.
| Sintaxe | Significado |
| pulseIn(pino, valor) | Lê a duração de um pulso ALTO ou BAIXO. |
| pulseIn(pino, valor, tempo limite) | Lê o pulso com um valor de tempo limite em microssegundos. |
É recomendado usar um tempo limite. Se nenhum eco for retornado, a função poderá parar de esperar e retornar 0 em vez de bloquear o programa por muito tempo.
A fiação é simples. Conecte VCC a 5V, GND a GND, TRIG a um pino de saída digital do Arduino e ECHO a um pino de entrada digital do Arduino. O exemplo a seguir usa Arduino Uno, TRIG no pino 9 e ECHO no pino 10.
O seguinte programa típico do Arduino envia um pulso de disparo de 10us, lê a largura do pulso ECHO, calcula a distância em centímetros e imprime o resultado no Monitor Serial.
const int trigPin = 9; const int echoPin = 10; longa duração; distância flutuanteCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); atrasoMicrossegundos(2); digitalWrite(trigPin, ALTO); atrasoMicrossegundos(10); digitalWrite(trigPin, LOW); duração = pulseIn(echoPin, HIGH, 30000); if (duração == 0) { Serial.println('Fora do intervalo'); } else { distânciaCm = duração * 0,0343/2; Serial.print('Distância: '); Serial.print(distânciaCm); Serial.println(' cm'); } atraso(60); }
Se você visualizar valores de distância no Monitor Serial, o sensor ultrassônico HC-SR04 e a fiação do Arduino estão funcionando corretamente. Você pode então usar os dados de distância para detecção de obstáculos, controle de movimento do robô, portas automáticas, lembretes de estacionamento ou projetos de nível de líquido.
Mantenha o objeto medido dentro da faixa de distância recomendada e fora da zona cega de 2 cm.
Use uma superfície alvo plana e sólida para melhor reflexão ultrassônica.
Evite medir materiais macios, angulares, porosos ou que absorvem som.
Use uma fonte de alimentação estável de 5 V e mantenha a fiação curta e segura.
Adicione um tempo limite a pulseIn() para evitar bloqueios longos quando nenhum eco retornar.
Filtre a média ou a mediana de várias leituras para reduzir o ruído.
Para maior precisão, compense a temperatura porque a velocidade do som muda com a temperatura do ar.
| Aplicativo | Como o HC-SR04 é usado |
| Robô para evitar obstáculos | Detecta objetos próximos e ajuda o robô a mudar de direção. |
| Sensor de distância de estacionamento | Mede a distância entre o veículo e um obstáculo. |
| Detecção de nível de líquido | Mede a distância do sensor à superfície do líquido sem contato. |
| Lixeira inteligente | Detecta uma mão ou objeto próximo e aciona a abertura automática da tampa. |
Para usar um sensor ultrassônico HC-SR04 com Arduino, conecte VCC a 5V, GND a GND, TRIG a um pino de saída digital e ECHO a um pino de entrada digital. Envie um pulso de disparo de 10us, leia a duração do eco com pulseIn() e calcule a distância com a fórmula do tempo de voo.
O HC-SR04 é barato, fácil de usar e adequado para muitos projetos de medição de distância do Arduino. Para obter melhores resultados, preste atenção à superfície do alvo, ângulo de medição, zona cega, potência estável, tratamento de tempo limite e efeitos de temperatura.
O Arduino envia um pulso de 10us para o pino TRIG. O HC-SR04 emite oito pulsos ultrassônicos de 40kHz e ajusta o pino ECHO para alto até que o som refletido retorne. O Arduino mede esse tempo de pulso e calcula a distância.
A fórmula é distância = duração × velocidade do som / 2. Em centímetros, uma fórmula comum do Arduino é distânciaCm = duração × 0,0343 / 2, onde a duração é medida em microssegundos.
O tempo de eco medido é o tempo de ida e volta do sensor ao objeto e de volta ao sensor. Dividir por 2 dá a distância unidirecional entre o sensor e o objeto.
Você pode usar a maioria dos pinos digitais do Arduino. Em muitos exemplos, TRIG está conectado ao pino digital 9 e ECHO está conectado ao pino digital 10. O código deve corresponder aos pinos usados na sua fiação.
As causas comuns incluem fiação solta, alimentação de 5 V instável, números de pinos TRIG ou ECHO incorretos, nenhum objeto no alcance, superfícies de alvo angulares, materiais macios, cabeças de sensor bloqueadas ou nenhum tempo limite na função pulseIn().
A zona cega é a distância mínima onde o módulo não pode medir de forma confiável. Para o HC-SR04, a zona cega é geralmente de cerca de 2 cm. Objetos mais próximos do que isso podem produzir leituras instáveis.
Sim, o HC-SR04 pode ser usado para projetos simples de nível de água sem contato se o sensor estiver protegido contra umidade e montado acima da superfície do líquido. Para tanques úmidos, externos ou industriais, recomenda-se um sensor ultrassônico à prova d'água.
Use uma fonte de alimentação estável, mantenha o sensor perpendicular ao alvo, evite superfícies macias ou angulares, adicione o tempo limite do pulseIn, faça múltiplas leituras, use filtragem mediana e aguarde cerca de 60 ms entre as medições.