Quem começa em robótica logo se pergunta: como um robô “enxerga” um obstáculo à sua frente? Uma das respostas mais simples e baratas é o sensor ultrassônico HC-SR04. Com ele e uma placa Arduino é possível medir distâncias, acionar alarmes de proximidade, fazer um carrinho desviar de paredes ou criar um medidor digital de nível. Neste artigo você vai entender o princípio de funcionamento, como fazer as ligações e como escrever o código básico.
Como o sensor ultrassônico funciona
O princípio é parecido com o do sonar de um morcego. O módulo emite um pulso de som de frequência acima da audição humana (ultrassom). Esse pulso viaja pelo ar, bate em um objeto e volta como eco. O sensor mede quanto tempo se passou entre a emissão e o retorno. Como a velocidade do som no ar é conhecida (aproximadamente 343 metros por segundo à temperatura ambiente), basta fazer uma conta para descobrir a distância.
Como o som vai até o objeto e volta, o tempo medido corresponde a uma viagem de ida e volta. Por isso, a distância é calculada dividindo o resultado por dois.
Os quatro pinos do HC-SR04
| Pino | Função | Ligação no Arduino |
|---|---|---|
| VCC | Alimentação de 5 V | Pino 5V |
| Trig | Dispara o pulso ultrassônico | Pino digital 9, por exemplo |
| Echo | Devolve um sinal com a duração do eco | Pino digital 10, por exemplo |
| GND | Terra | Pino GND |
Os números dos pinos digitais são apenas uma sugestão: você pode usar outros, desde que ajuste o código. O importante é ligar o VCC ao 5 V e o GND ao terra, e nunca inverter essas conexões.
Materiais necessários
- Uma placa Arduino (Uno, Nano ou equivalente);
- Um sensor ultrassônico HC-SR04;
- Protoboard e quatro jumpers;
- Cabo USB para ligar a placa ao computador;
- Opcional: um LED e um resistor para sinalizar proximidade.
Código básico para medir a distância
O programa abaixo envia um pulso curto ao pino Trig, mede a duração do pulso no pino Echo e converte o tempo em centímetros. Os resultados aparecem no Monitor Serial da IDE do Arduino.
const int trigPin = 9;
const int echoPin = 10;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duracao = pulseIn(echoPin, HIGH);
float distancia = duracao * 0.0343 / 2;
Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println(" cm");
delay(300);
}
Entendendo cada parte do código
Primeiro, definimos quais pinos serão usados e configuramos o Trig como saída e o Echo como entrada. Em seguida, o programa garante que o Trig esteja em nível baixo, envia um pulso de 10 microssegundos (é o que o sensor espera para iniciar a medição) e volta a baixar o sinal.
A função pulseIn mede, em microssegundos, quanto tempo o pino Echo permanece em nível alto, e esse tempo é proporcional à distância percorrida pelo som. A fórmula usa 0,0343 centímetros por microssegundo (o equivalente a 343 m/s) e divide por dois por causa da ida e volta. O delay final evita leituras excessivamente rápidas e deixa a saída legível no monitor.
Limitações e cuidados
O HC-SR04 é simples, mas não é perfeito. Conhecer seus limites evita frustrações:
- Alcance limitado: costuma funcionar bem em algumas dezenas de centímetros até alguns metros, conforme especificação do fabricante; consulte a folha de dados do seu módulo.
- Superfícies macias: tecidos, espumas e objetos muito inclinados absorvem ou desviam o som e podem gerar leituras instáveis.
- Objetos pequenos ou finos: podem não refletir o eco de forma consistente.
- Temperatura: a velocidade do som varia com a temperatura do ar, o que pode introduzir pequenos erros em aplicações de precisão.
- Ruídos e interferências: vários sensores operando juntos podem captar o eco um do outro; faça medições em momentos diferentes.
Ideias de projetos para praticar
Depois de dominar a leitura básica, você pode evoluir para projetos mais interessantes. Um alarme de proximidade acende um LED ou toca um buzzer quando algo se aproxima de determinada distância. Um carrinho robô pode parar ou desviar ao detectar um obstáculo. Um medidor de nível pode mostrar quanto falta para encher um reservatório, desde que o sensor seja protegido da umidade. Outra ideia é exibir a distância em um display LCD, tornando o equipamento independente do computador.
Dicas para obter leituras melhores
Uma técnica simples é fazer várias leituras seguidas e calcular a média, o que suaviza oscilações. Também é possível descartar valores zerados, que normalmente indicam que o eco não retornou. Fixe o sensor firmemente, de modo que ele aponte sempre na mesma direção, e evite deixar fios soltos que possam causar mau contato. Por fim, teste sempre com uma fita métrica para conferir se os resultados estão coerentes.
Erros comuns de quem está começando
O primeiro erro costuma ser inverter os pinos Trig e Echo, o que faz o monitor serial mostrar sempre zero. O segundo é alimentar o módulo com a tensão errada ou deixar o GND sem conexão comum com o Arduino, situação em que o circuito simplesmente não responde. Outro tropeço frequente é colocar o delay com valor muito baixo e achar que o sensor está travando, quando na verdade ele está recebendo pulsos antes de terminar a leitura anterior. Por fim, muitos esquecem de apontar o sensor para uma superfície plana e perpendicular: se o objeto estiver inclinado, o eco se perde. Quando algo não funcionar, revise as ligações, teste com um objeto plano a cerca de 20 centímetros e confira a velocidade da porta serial no monitor.
Conclusão
O sensor ultrassônico é um excelente primeiro passo para entender como máquinas percebem o mundo. Com poucos componentes, você aprende conceitos de eletrônica, de programação e de física ao mesmo tempo. Se quiser avançar de forma organizada, vale conhecer os cursos de Arduino, robótica e eletrônica da Cursa, que guiam você de projetos simples até automações mais completas.
















