Caminho de construçãoInicianteUm fim de semana

Construa um robô com desvio de obstáculos

Um robô que percorre o ambiente sozinho, detecta obstáculos, procura aberturas e vira para espaços livres, com componentes que você compreendeu e ajustou primeiro na simulação.

Esquema técnico de Construa um robô com desvio de obstáculosCLEARANCE FIELD

Um robô com desvio de obstáculos é a próxima construção natural depois de um robô seguidor de linha. Um robô seguidor de linha segue — acompanha uma linha que alguém desenhou para ele. Este robô decide: sem traçado nem mapa, ele detecta o espaço ao redor e escolhe para onde ir. Essa única diferença — reagir ao ambiente em vez de seguir um traçado — é o primeiro contato real com a autonomia, e ainda é simples o bastante para ser compreendido por completo.

O núcleo é um laço curto e repetitivo: detectar–varrer–decidir–virar. O sensor ultrassônico HC-SR04 emite um pulso à frente e mede o tempo do eco para estimar a distância; quando algo fica mais próximo do que um limite de segurança, o robô para, varre o sensor para a esquerda e para a direita com um servo SG90 e vira para a direção mais livre. Esse limite não é arbitrário — é uma distância de segurança calculada a partir da velocidade atual, da latência entre detecção, decisão e atuação, da distância de frenagem (que cresce com o quadrado da velocidade), do raio do robô e de uma margem, todos visíveis na curva de distância de parada do simulador.

Você acrescenta a um robô móvel os componentes de que ele precisa e aprende o que cada um faz: um Arduino Uno com lógica de 5 V que tolera erros de fiação, o sensor ultrassônico e sua zona cega (a distância mínima abaixo da qual ele não consegue informar), o servo que dá ao feixe um segundo ponto de vista, a ponte H L298N que comuta a corrente dos motores que os pinos lógicos não conseguem fornecer, dois motoresredutores TT em que o redutor troca velocidade por torque utilizável, um chassi 2WD com rodízio para direção diferencial e um pacote de bateria que precisa alimentar motores e lógica em trilhos separados. A árvore tecnológica também percorre dois caminhos de aprendizagem, controle de motores e navegação reativa; então as mesmas ideias de PWM, odometria e filtragem que você conheceu no robô seguidor de linha retornam aqui em um contexto de navegação.

Depois, antes de gastar dinheiro ou arriscar uma fiação errada, ajuste o comportamento de desvio no simulador do navegador até que o robô desvie com segurança em um ambiente obstruído. A área de trabalho lá é vista de cima e é bidimensional, com raios instantâneos e sem ruído; um feixe ultrassônico real se espalha por cerca de 15°, é bloqueado pelo próprio corpo do robô e é perturbado por superfícies moles ou inclinadas, então filtre as leituras com um filtro de mediana e adicione um pequeno atraso de estabilização depois que o servo se move antes de confiar em uma distância na montagem real. Encontrar uma distância de parada segura e uma regra que escolha a direção mais livre na simulação elimina a maior parte das suposições antes de o robô se mover.

Só então você conecta o robô real — trigger e echo na tensão correta, sinal do servo em um pino com capacidade PWM, PWM e direção dos motores no driver, bateria dos motores somente no terminal VM do driver e todos os terras unidos — e deixa o robô percorrer um piso com caixas ou cadeiras. As mesmas lições de medição e filtragem levam diretamente ao Micromouse em labirinto com paredes, caso você queira aprender mapeamento depois, ou à navegação ROS 2 se adicionar um Raspberry Pi.

Siga a árvore tecnológica abaixo de cima para baixo. Cada nó é liberado quando seus pré-requisitos são concluídos, e seu progresso é salvo neste dispositivo, para que você possa construir o robô durante um fim de semana sem perder o ponto.

Lista de materiais

Peça Qtd. Custo aproximado Observações
Arduino Uno 1 US$ 5–8 A lógica de 5 V realmente ajuda aqui — o echo do HC-SR04 é 5 V
HC-SR04 1 US$ 2 Um VL53L0X é um bom segundo sensor, não um substituto
Servo SG90 1 US$ 2 Para o conjunto de varredura. Use MG90S se ele precisar funcionar por horas
L298N 1 US$ 2–4 Ou um TB6612FNG, que consome muito menos da bateria
Motorredutor TT 2 US$ 4
Chassi 2WD 1 US$ 6–10
Pacote de bateria 1 US$ 6 6×AA NiMH ou 2×18650
Sensores de batida 2 US$ 1 Adicione-os. Veja abaixo

Total: aproximadamente US$ 30–40.

Os dois sensores de batida são os melhores quarenta centavos do robô, e são a parte que a maioria das construções deixa de fora. Todo sensor de distância tem superfícies que não consegue detectar: um sonar não detecta cortinas nem paredes vistas em ângulo muito inclinado. E um robô sem detecção de contato empurrará uma cortina até algo ceder. Dois sensores atrás de um para-choque envolvente transformam “geralmente evita as coisas” em “nunca fica preso em algo que não pôde detectar”.

Como tudo se conecta

De Para Observação
VCC, GND do HC-SR04 5 V, GND ~15 mA, com picos durante um pulso
Trig do HC-SR04 D9 Qualquer pino digital
Echo do HC-SR04 D10 Saída de 5 V — funciona no Uno, exige divisor em uma placa de 3,3 V
Sinal do servo D6 A biblioteca Servo usa o Timer 1, que também gera PWM em D9/D10
Alimentação do servo 5 V separada, terra comum 650 mA com o servo em travamento — não o pino de 5 V do Arduino
ENA, ENB do driver D5, D3 Pinos com capacidade PWM. Remova os jumpers de habilitação do L298N
IN1–IN4 do driver D8, D7, D4, D2
Sensores de batida D11, D12, INPUT_PULLUP COM ao terra, NO ao pino
+ da bateria VM / +12V do driver Nunca o Arduino
Todos os terras Um ponto Arduino, driver, fonte do servo, negativo da bateria

Preste atenção ao conflito de temporizador: a biblioteca Servo assume o Timer 1, que no Uno gera PWM nos pinos 9 e 10. Coloque o PWM dos motores em 3, 5, 6 ou 11 e o servo em qualquer pino, e o problema nunca acontece. Coloque a habilitação de um motor no pino 9 e seu controle de velocidade parará silenciosamente de funcionar no momento em que você conectar um servo.

A distância de parada, calculada em vez de adivinhada

O limite de parada é o número mais importante deste projeto, e ele não é arbitrário. É a soma de quatro distâncias:

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Termo De onde vem Típico
Latência de detecção e decisão Pulso (até 25 ms), estabilização do servo, período do laço 60–100 ms
Distância de frenagem Velocidade ao quadrado dividida pelo dobro da desaceleração Cresce rapidamente
Raio do robô Da frente do chassi ao centro de pivô 80–100 mm
Margem Porque o cone do sensor tem 15° de largura e pode fornecer leituras imprecisas em superfícies macias 50 mm

Calculado para um robô a 0,3 m/s com 80 ms de latência e desaceleração de 1,0 m/s²:

= (0.3 x 0.08) + (0.09 / 2.0) + 0.09 + 0.05
= 0.024 + 0.045 + 0.09 + 0.05 = 0.21 m

Então cerca de 21 cm. Agora aumente a velocidade para 0,6 m/s:

= 0.048 + 0.18 + 0.09 + 0.05 = 0.37 m

O limite não dobrou — ele cresceu 76%, porque o termo de desaceleração acompanha o quadrado da velocidade. É por isso que um robô que evita obstáculos com confiabilidade mesmo em baixa velocidade começa a bater nas coisas quando você acelera, e por isso a solução é um limite dependente da velocidade, e não um único número fixo grande que deixa o robô tímido em todo lugar.

Construa em marcos

# Marco O teste Um resultado aprovado
1 Os motores giram Avançar, dar ré e girar para os dois lados sobre blocos Os seis estados funcionam; você conhece a zona morta de cada roda
2 A distância é medida Aponte para uma parede a 30 cm e imprima por um minuto Leituras estáveis dentro de um ou dois centímetros, sem zeros
3 O tempo limite funciona Aponte para o ar livre e para o teto O laço mantém a taxa — ausência de eco não pode significar um robô congelado
4 Filtro de mediana Agite uma mão repetidamente através do feixe Leituras isoladas absurdas desaparecem; a aproximação real continua sendo registrada
5 O servo varre Comande −60°, 0°, +60° e imprima a distância em cada um Varredura repetível, com atraso de estabilização antes de cada pulso
6 Atraso de estabilização comprovado Remova o atraso deliberadamente As leituras ficam indefinidas entre os ângulos — agora você conhece essa falha
7 Limite de parada Leve o robô contra uma parede e deixe-o parar Ele para com a margem calculada, não por sorte
8 Decisão de virada Coloque-o de frente para um canto com um lado livre Ele vira para o lado livre, não aleatoriamente
9 Histerese Deixe-o parado oscilando no limite Ele toma uma decisão em vez de oscilar repetidamente
10 Recuperação após batida Leve-o contra uma almofada O sonar não a detecta, o sensor de batida detecta, e o robô recua e vira
11 Percurso livre Cinco minutos em uma sala com obstáculos Ele sobrevive; quando fica preso, você consegue identificar o estado

O marco 10 é o que separa uma demonstração de um robô. Uma almofada absorve completamente o pulso ultrassônico, então o sensor informa espaço aberto e o robô entra nela em velocidade máxima. Sem uma chave de batida, ele empurra até os motores travarem.

Solução de problemas

Sintoma Causa provável Correção
O robô congela em intervalos aleatórios pulseIn sem tempo limite Passe um tempo limite de 25000 µs; trate “sem eco” explicitamente
Aciona a parada de emergência em uma sala vazia Tratar um tempo limite como 0 cm Um tempo limite significa longe, não perto. Retorne um valor sentinela
Entra em cortinas e almofadas Som absorvido — física, não bug Adicione sensores de batida
Bate nas paredes em ângulo O pulso reflete para longe do receptor Aplique a mesma correção; varra mais ângulos
Vira com convicção para uma parede Leitura antes de o servo estabilizar Adicione 100–200 ms depois de comandar o ângulo, antes de emitir o pulso
Oscila perto dos obstáculos Um limite, sem histerese Pare a 20 cm e não retome até 30 cm
O servo vibra e a placa reinicia Corrente do servo fornecida pelo Arduino Fonte separada de 5 V para o servo, com terra comum
O controle de velocidade dos motores parou A biblioteca Servo assumiu o Timer 1 (pinos 9, 10) Mova o PWM dos motores para 3, 5, 6 ou 11
Fica preso em um canto para sempre Sem memória — inerente à navegação reativa Adicione um componente aleatório e uma rotina de escape para detectar travamento
Desvia bem em baixa velocidade, mas colide em alta velocidade Limite fixo e termo de desaceleração quadrático Torne o limite dependente da velocidade
Leituras absurdas quando dois robôs passam juntos Eles ouvem as emissões de pulso um do outro Espaçar os pulsos no tempo

Para onde seguir

Adicione seguimento de parede. Um robô que mantém uma distância fixa de uma parede em um lado atravessa uma sala de forma determinística, em vez de vagar, e é o primeiro comportamento que começa a parecer um plano. É uma pequena mudança de código e uma grande mudança conceitual.

Adicione um segundo tipo de sensor. Um VL53L0X falha em superfícies quase exatamente opostas às problemáticas para o sonar — foscas escuras e espelhos, em vez de macias e inclinadas. Juntos, eles cobrem muito mais da sala do que qualquer um sozinho.

Aceite o limite e siga em frente. Um robô reativo não pode ser enviado a um destino, não pode garantir que cobriu o piso e pode percorrer indefinidamente um contorno em uma sala em forma de ferradura. Essas propriedades decorrem da ausência de mapa, não são bugs. Quando começarem a importar, o micromouse acrescenta mapeamento e planejamento, e o robô de cobertura enfrenta diretamente a pergunta “eu já passei por todo lugar?”.

Roteiro do projeto

O caminho de construção

Siga a árvore tecnológica das peças até um robô funcionando. Cada nó é desbloqueado quando seus pré-requisitos são concluídos, e seu progresso fica salvo neste dispositivo.

0 / 18 concluídos

100%
Tutorial

Como funciona o desvio de obstáculos

22 min

Abrir tutorial
Componente

Adicione o sensor ultrassônico

Componente

Ver componente
Componente

Adicione um servo de varredura

Componente

Ver componente
Componente

Adicione os motores de tração

Componente

Ver componente
Caminho de aprendizagem

Controle de motores

Caminho de aprendizagem

Abrir caminho
Caminho de aprendizagem

Fundamentos da eletrônica do robô

Caminho de aprendizagem

Abrir caminho
Caminho de aprendizagem

Navegação reativa

Caminho de aprendizagem

Abrir caminho
Tutorial

Direção diferencial e esterçamento

18 min

Abrir tutorial
Montagem

Conecte o robô

45 min

Montagem

Monte e execute

60 min

Objetivo

Robô com desvio de obstáculos concluído

Você construiu

Componentes

Tutoriais deste caminho

Pratique antes de fazer a fiação

Ajuste no simulador ao vivo

O caminho de construção passa por um laboratório no navegador. Acerte o comportamento aqui e depois transfira suas configurações para o robô real.

Perguntas frequentes

Como funciona um robô com desvio de obstáculos?

Ele avança enquanto um sensor ultrassônico monitora a distância à frente. Quando algo fica mais próximo do que um limite definido, o robô para, gira o sensor para a esquerda e para a direita com um servo para medir a distância em cada direção e vira para o lado mais livre — depois retoma a marcha. Tudo isso é um laço curto detectar–varrer–decidir–virar executado muitas vezes por segundo.

Qual é o melhor sensor para um robô com desvio de obstáculos?

O sensor ultrassônico HC-SR04 é o padrão: é barato, fácil de conectar e confiável a alguns metros. Um sensor de tempo de voo oferece uma leitura mais rápida e precisa, com um feixe mais estreito, se você precisar; mas, para um primeiro robô com desvio de obstáculos, o ultrassônico oferece o melhor equilíbrio entre custo e simplicidade.

Preciso comprar peças antes de começar este projeto?

Não. A medição e a lógica de desvio rodam no simulador do navegador, então você pode entender e ajustar o comportamento antes de comprar qualquer coisa. Somente as etapas finais — fiação e montagem — precisam do Arduino físico, do HC-SR04, do servo, do driver, dos motores, do chassi e da bateria.

Por que meu robô com desvio de obstáculos não está funcionando?

Os três culpados habituais são uma leitura ultrassônica ruidosa ou bloqueada (adicione um filtro de mediana e mantenha o sensor desobstruído), uma leitura feita antes de o servo terminar de se mover (adicione um pequeno atraso de estabilização) e a alimentação dos motores diretamente pelo Arduino em vez do driver (o que causa queda de tensão e reinicia a placa).

Como isso difere de um robô seguidor de linha?

Um robô seguidor de linha percorre um traçado destinado a ele; um robô com desvio de obstáculos não tem traçado e precisa decidir para onde ir. Ele acrescenta um sensor de varredura e um laço de decisão real, o que faz dele o segundo robô natural para construir depois de um seguidor de linha.