Depois de montar o seu carrinho seguidor de linha e programar os sensores TCRT5000, chegou a hora de adicionar uma nova funcionalidade: a detecção de obstáculos utilizando o sensor ultrassônico HC-SR04.
Neste tutorial você aprenderá a integrar o ultrassônico ao código existente do carrinho, permitindo que ele pare automaticamente quando encontrar um obstáculo à frente e continue seguindo a linha quando o caminho estiver livre.
💡 Projeto da série: Este tutorial dá continuidade ao projeto do Carrinho Seguidor de Linha para OBR. Se você ainda não montou o robô, recomendamos começar pelo artigo "Como Montar um Robô Seguidor de Linha com Arduino ".
O que você vai aprender?
Ao final deste tutorial você será capaz de:✅ Integrar o sensor HC-SR04 ao código do carrinho.
✅ Medir distâncias utilizando ondas ultrassônicas.
✅ Exibir as leituras no Monitor Serial.
✅ Fazer o robô parar automaticamente diante de um obstáculo.
✅ Entender cada parte do código comentado.
Como funciona o programa?
O código executa continuamente o seguinte fluxo:- Lê os sensores seguidores de linha.
- Mede a distância com o HC-SR04.
- Verifica se existe um obstáculo.
- Caso exista, para o carrinho.
- Caso contrário, continua seguindo a linha.
Ligações Utilizadas
Sensor UltrassônicoHC-SR04 Arduino
VCC 5V
GND GND
TRIG D8
ECHO D9
Entendendo o Código
Vamos analisar cada parte do programa.1. Biblioteca Servo
Logo no início do código utilizamos a biblioteca responsável pelo controle dos servos.#include <Servo.h>
Ela permite controlar facilmente os servos utilizando apenas o método write().
2. Criando os motores
Em seguida criamos dois objetos Servo.Servo MOTOR_DIREITA;
Servo MOTOR_ESQUERDA;
Cada objeto será responsável por controlar uma das rodas do carrinho.
3. Definindo os pinos
Depois definimos todos os pinos utilizados.#define SENSOR_ESQUERDA 7
#define SENSOR_DIREITA 6
#define TRIG 8
#define ECHO 9
Os sensores continuam ligados aos pinos digitais 6 e 7, enquanto o sensor ultrassônico utiliza os pinos 8 e 9.
4. Configurando o hardware
Dentro da função setup() inicializamos todos os componentes.MOTOR_DIREITA.attach(11);
MOTOR_ESQUERDA.attach(10);
pinMode(SENSOR_ESQUERDA, INPUT);
pinMode(SENSOR_DIREITA, INPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
Aqui configuramos:
- Os dois servos;
- Os sensores seguidores de linha;
- O HC-SR04;
- O Monitor Serial.
5. Lendo os sensores de linha
A cada repetição do programa, os sensores são lidos.bool sensorEsquerda = digitalRead(SENSOR_ESQUERDA);
bool sensorDireita = digitalRead(SENSOR_DIREITA);
Cada sensor pode retornar dois valores:
- 0 → Branco
- 1 → Preto
6. Medindo a distância
Agora entra em ação o sensor ultrassônico.Primeiro enviamos um pequeno pulso pelo Trigger.
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
Esse pulso faz o HC-SR04 emitir uma onda ultrassônica.
Em seguida medimos o tempo de retorno.
duracao = pulseIn(ECHO, HIGH);
Quanto maior esse tempo, maior será a distância.
7. Calculando a distância
Depois aplicamos a fórmula.distancia = duracao * 0.0343 / 2;
Onde:
- 0,0343 representa a velocidade do som em centímetros por microssegundo;
- dividimos por 2, pois a onda percorre o caminho de ida e volta.
8. Exibindo informações no Monitor Serial
Durante os testes, o Monitor Serial é um grande aliado.Serial.print("E:");
Serial.print(sensorEsquerda);
Serial.print(" D:");
Serial.print(sensorDireita);
Serial.print(" Distancia:");
Serial.print(distancia);
Serial.println(" cm");
Assim é possível acompanhar em tempo real:
- Litura do sensor esquerdo;
- Leitura do sensor direito;
- Distância detectada.
E:0 D:0 Distancia:85 cm
E:1 D:0 Distancia:83 cm
E:0 D:1 Distancia:40 cm
E:0 D:0 Distancia:18 cm
9. Detectando obstáculos
Agora vem a principal novidade.if (distancia <= 20)
Sempre que um objeto estiver a 20 centímetros ou menos, o carrinho irá parar.
MOTOR_ESQUERDA.write(90);
MOTOR_DIREITA.write(90);
Também exibimos uma mensagem.
>>> Obstáculo Detectado!
Essa lógica evita colisões e torna o robô muito mais seguro durante os testes.
10. Continuando o seguimento de linha
Caso não exista obstáculo, o programa continua exatamente como antes.Ele verifica:
Sensor Esquerdo Sensor Direito Movimento
Branco Branco Frente
Preto Branco Corrige para a esquerda
Branco Preto Corrige para a direita
Preto Preto Para
Essa separação entre a lógica do ultrassônico e a lógica dos sensores de linha deixa o código mais organizado e fácil de entender.
Código Completo Comentado
Todo o código comentado deste projeto está disponível no GitHub.Lá você encontrará sempre a versão mais atualizada, além de futuras melhorias e novos recursos.
📥 Acesse o código
👉 GitHub do Projeto
▶️ Acesse nosso canal no YouTube
⭐ Gostou do projeto? Deixe uma estrela no repositório para apoiar a criação de novos conteúdos sobre Arduino, Robótica e Cultura Maker.
Acompanhe nossas publicações e continue explorando o universo da robótica com a gente!


Comentários
Postar um comentário