Creating a Line-Following Robot Using Open-Source Hardware
Table of Contents
Por que construir um robô que segue linhas?
A construção de um robô que segue linhas é um dos pontos de entrada mais gratificantes na robótica e sistemas incorporados. O projeto ensina-lhe integração de sensores, controle motor, loops de feedback e depuração prática, tudo enquanto cria uma máquina que navega por conta própria. O hardware de código aberto torna isto acessível a qualquer pessoa com um ferro de solda e uma vontade de experimentar.
Quer seja um estudante que se prepara para uma competição de robótica, um hobbyista à procura de um projeto de fim de semana, ou um educador que procura uma atividade prática STEM, um seguidor de linha oferece resultados imediatos e visíveis. Você pode começar simples e progressivamente adicionar complexidade: controle PID, velocidades mais rápidas, lógica de resolução de labirintos ou telemetria sem fio.
Como os robôs que seguem linhas funcionam
Um robô que segue linhas lê o contraste entre uma linha escura e um fundo claro (ou vice-versa) usando sensores ópticos virados para baixo. A maioria dos projetos usa sensores de refletância infravermelhos (IR), que emitem luz de infravermelhos e medem quanto é refletido. Uma superfície escura absorve IR, retornando um sinal baixo; uma superfície de luz reflete-o, retornando um sinal alto.
O microcontrolador lê estes valores do sensor, aplica um algoritmo de decisão e comanda os motores para orientar o robô ao longo do caminho. A abordagem mais simples usa dois sensores e um controlador de bang-bang: vire à esquerda quando o sensor direito vir a linha, vire à direita quando o sensor esquerdo o vir e siga em frente quando ambos virem a linha. Os sistemas mais avançados usam três, cinco ou até oito sensores dispostos em um array para estimar a posição da linha com precisão do sub- sensor e aplicar controle proporcional ou PID para rastreamento suave e de alta velocidade.
Colocação de sensores e óptica
Altura e espaçamento do sensor. Montar os sensores 5 – 15 mm acima do chão, perto o suficiente para obter uma leitura limpa, mas suficientemente alta para evitar raspar em superfícies irregulares. Espalhe- os de modo que, quando o robô estiver centrado na linha, o sensor esquerdo esteja fora da linha para a esquerda e o sensor direito esteja apenas fora da linha para a direita. Para uma linha de 15 – 20 mm de largura, um espaçamento centro- a- centro de aproximadamente 15 – 25 mm entre os sensores funciona bem. A experimentação é esperada & mdash; cola os sensores temporariamente até encontrar o ponto doce.
Componentes de Hardware de Código Aberto
O ecossistema de código aberto oferece uma ampla gama de peças compatíveis e acessíveis. Abaixo está uma proposta de materiais para um robusto seguidor de linha de dois sensores. Os preços variam de acordo com a região e o fornecedor, mas o total é tipicamente de US$ 50.
- Microcontrolador: Arduino Uno R3, Arduino Nano, ou um clone (por exemplo, Elegoo, Robotdyn). O Nano é menor e mais fácil de montar em um chassi compacto.
- Sensores de linha: Dois módulos de sensores de IR baseados em TCRT5000 (muitas vezes vendidos como "módulos de sensores de rastreamento"). Estes têm potenciômetros ajustáveis para sensibilidade.
- Motores: Dois motores de corrente contínua com rodas (tipicamente 100 – 300 RPM a 6V). Os motores de engrenagem de micro-metais N20 são populares para robôs pequenos.
- Motorista: Módulo L298N para motores maiores ou L9110S ou DRV8833 para motores menores. O L298N é volumosa, mas indulgente. O DRV8833 é compacto e eficiente.
- Chassis: Um kit de chassis de acrílico ou plástico de duas camadas (muitos estão disponíveis no AliExpress ou Amazon). Você também pode imprimir laser ou 3D.
- Fonte de alimentação: Uma bateria de 6V ou 7,4V (por exemplo, 4x AA NiMH ou um LiPo 2S). Inclua um interruptor de alimentação e um regulador de tensão se os seus componentes exigirem 5V.
- Rodas e rodízios: Duas rodas accionadas (40–65 mm de diâmetro) e uma rodízio de bola ou uma roda giratória pequena para a frente ou para trás.
- Placa de pão, fios de jumper, e hardware de montagem: Parafusos de nylon ou bronze M3, parafusos, fechos zip, e fita de espuma de dupla face.
Escolher um Motor Driver
O condutor do motor liga a lógica de baixa corrente do microcontrolador (5V, 40 mA máx. por pinos) e dos motores de maior corrente. Procure um condutor que possa lidar com a corrente de paragem dos seus motores (normalmente 0,5 –2 A por canal). Habilite os pinos permite- lhe usar PWM para controlar a velocidade. O L298N requer uma tensão de desactivação mais elevada (cerca de 2V), por isso, alimente- o pelo menos 7V se precisar de 5V nos motores. O DRV8833 funciona até 2,7V e inclui a limitação de corrente, que protege os seus motores e o condutor da sobrecarga.
Selecionar um Microcontrolador
As placas compatíveis com arduino dominam o espaço iniciante devido à sua grande comunidade, extensas bibliotecas e IDE simples. Para um seguidor de linha, você precisa de pelo menos quatro pinos de entrada digitais/analog (dois para sensores) e quatro pinos de saída (dois para direção do motor, dois para velocidade PWM). O Arduino Uno oferece um amplo I/O, mas o Nano ou Pro Mini é mais compacto. Se você quiser Wi-Fi ou Bluetooth para telemetria, considere um ESP32 ou ESP8266— eles podem executar o código Arduino e adicionar conectividade sem fio.
Acomodando o robô
Trabalhe metodicamente. Montar o chassis primeiro, montar os motores, depois adicionar a eletrônica. Teste cada subsistema antes de conectar tudo.
Montagem Mecânica
Anexar os motores ao chassis utilizando os suportes fornecidos no seu kit ou com parafusos e estandes M3. Assegurar que os eixos do motor são paralelos e as rodas giram livremente. Anexar a roda ou a rodízio na extremidade oposta do chassis. O robô deve sentar-se com todas as rodas tocando o chão. Se usar um chassi de dois níveis, montar os motores e bateria no nível inferior e o microcontrolador e placa de pão no nível superior para manter o centro de gravidade baixo.
Fio os motores para os terminais de saída do motorista do motor. Torça os fios do motor juntos ou prenda-os com fechos para evitar que eles de pegar em obstáculos.
Montagem Eletrónica
Coloque o microcontrolador no chassi. Se usar um Arduino Uno, uma placa de montagem com impasses funciona bem. Para um Nano, uma pequena tábua de pão ou um PCB personalizado pode segurá-lo com segurança. Conecte os pinos lógicos do driver do motor aos pinos digitais Arduino. Um pinout típico:
- Direcção do motor esquerdo: pino 7
- Motor esquerdo PWM: pino 6 (ou qualquer pino com capacidade para PWM)
- Direcção do motor direito: pino 8
- Motor direito PWM: pino 5 (ou qualquer pino com capacidade para PWM)
Conecte os módulos do sensor IR. Cada módulo tem VCC, GND e um pino de saída analógico ou digital. Para leitura analógica, conecte a saída a uma entrada analógica no Arduino (A0 e A1 são convenientes). Para saída digital, conecte-se a pinos digitais. A abordagem analógica lhe dá um controle mais fino sobre a detecção de limiar.
Ligar a bateria positiva à entrada de energia do condutor do motor e, através de um regulador de tensão 5V (se necessário), ao pino Arduino VIN. Ligar todos os terrenos. Um terreno comum entre as secções lógica e de energia é essencial.
Testando cada subsistema
Antes de carregar o código completo de linha, teste cada parte individualmente:
- Sensores: Envie um esboço simples que leia os valores analógicos e imprima- os no Monitor Serial. Coloque o sensor sobre uma superfície escura e uma superfície clara e observe as leituras. Ajuste o potenciômetro em cada módulo do sensor até que a diferença exceda 200 contagens (em uma escala 0–1023).
- Motores: Carregue um esboço que roda cada motor para a frente e para trás a uma velocidade fixa. Verifique se ambas as rodas giram na direcção correcta e se o robô se move em linha recta quando ambos os motores correm em valores iguais de PWM.
- Potência: Medir a tensão no microcontrolador e no condutor do motor com um multímetro sob carga. Certifique-se de que a tensão permanece dentro da especificação. Uma queda de tensão abaixo de 4.8V em um trilho 5V pode fazer com que o Arduino reset.
Programação do robô
O algoritmo de controle determina quão graciosa e confiável o robô segue a linha. Comece com um simples controlador de bang-bang, então atualize para controle proporcional ou PID conforme sua confiança cresce.
Controlo Bang-Bang (Dois Estados)
Esta é a abordagem mais simples: cada sensor retorna um valor binário (linha ou nenhuma linha). A tabela lógica é:
- Sensor esquerdo on-line, sensor direito off-line: vire à esquerda (parar ou retardar o motor direito, rodar o motor esquerdo para a frente).
- Sensor direito ligado, sensor esquerdo desligado: vire à direita.
- Ambos os sensores em linha: vão em frente.
- Sem sensor on-line: parar e pesquisar (rotar no lugar até que um sensor detecte a linha).
Este controlador funciona em curvas suaves e seções retas, mas pode oscilar em curvas acentuadas ou em velocidades mais altas. Reduza a velocidade e amplie o espaçamento do sensor para melhorar o desempenho.
Controlo proporcional
Com os sensores analógicos, você pode calcular a posição da linha com mais precisão. Para uma configuração de dois sensores, calcule um sinal de erro simples: [[FLT: 0]]. Quando centrado, o erro é próximo de zero. Quando o robô se afasta para a esquerda, o sensor direito vê mais linha e produz um valor maior, dando um erro negativo e vice- versa. Use este erro para ajustar as velocidades do motor:
onde o Kp é um ganho proporcional que você afina experimentalmente. Comece com um pequeno Kp (0.1–1.0) e aumente-o até que o robô rastreie suavemente sem sobrevoar.
Controle de IDP
Para robôs de alta velocidade ou competitivos, adicione termos integrais e derivados para eliminar erros de estado estacionário e as oscilações de amortecimento. O termo integral acumula erros passados para corrigir a deriva persistente, enquanto o termo derivado antecipa o erro futuro com base na taxa de mudança atual. Um array de três sensores ou cinco sensores fornece melhores estimativas de posição e permite uma afinação mais agressiva do PID. Biblioteca PID Arduino simplificar a execução.
Calibração e ajuste
Um robô bem calibrado pode lidar com diferentes cores do chão, condições de iluminação e larguras de linha. Calibrar seus sensores cada vez que você muda o ambiente.
Ajustando Limiares de Sensor
Coloque o robô com todos os sensores sobre uma seção branca (ou luz) da faixa. Leia e grave os valores analógicos. Depois coloque- o sobre a linha preta (ou escura) e grave esses valores. Defina o limiar digital no ponto médio entre as duas leituras. Se usar o controle analógico, normalize as leituras dos sensores para uma escala de 0 – 100% com base nestes valores de calibração.
Velocidade do motor de ajuste e constantes PID
Iniciar a afinação em baixa velocidade (30–40% do máximo PWM). Ajustar o Kp até que o robô siga uma linha reta sem oscilar excessivamente. Se o robô oscilar, reduz o Kp. Se ele responder lentamente, aumente o Kp. Uma vez que o Kp seja satisfatório, adicione um Ki pequeno (0, 01–0, 1) para corrigir as curvas longas.
Adicione o Kd (0, 5–5) para reduzir a sobreposição. Afina nesta ordem: Kp, então o Kd, então o Ki. Use o Plotter Serial no IDE Arduino para visualizar o sinal de erro, saídas motoras e leituras dos sensores em tempo real. Este feedback é inestimável.
Ajustes Mecânicos
Se o robô puxar consistentemente para um lado, verifique se ambos os motores recebem o mesmo valor PWM para movimento reto. Arrastar mecânico de um rolamento de roda apertado ou uma rodízio de montagem desigual pode causar viés. Ajustar o deslocamento PWM em software ou corrigir o problema mecânico. Também verificar se as rodas estão centradas e que o peso do chassi é equilibrado.
Técnicas Avançadas
Uma vez que o seu seguidor básico de linha está trabalhando de forma confiável, você pode explorar várias atualizações que ensinam conceitos mais profundos de robótica.
Arrays multi-sensores
Usando três, cinco ou oito sensores em um array permite ao robô estimar o centro de linha com resolução do sub- sensor. Uma abordagem comum é atribuir a cada sensor um peso (por exemplo, -3, -2, -1, 0, 1, 2, 3 para um array de sete sensores) e calcular a média ponderada dos sensores que detectam a linha. Isto dá um valor de posição de ponto flutuante entre - 3 e + 3 que você alimenta diretamente no controlador PID. O resultado é um rastreamento muito mais suave em velocidades mais altas. Bibliotecas como Sensores Pololu QTR lidar com a calibração e leitura para você.
PID Tuning com Ziegler-Nichols
Se quiser um método sistemático para encontrar ganhos de PID, use o método de ajuste de circuito fechado Ziegler- Nichols. Defina Ki e Kd como zero. Aumente o Kp até que o robô oscila com amplitude constante (o "ganho final" Ku). Meça o período de oscilação (Tu). Depois, defina Kp = 0,6 * Ku, Ki = 2 * Kp / Tu e Kd = Kp * Tu / 8.
Isto dá- lhe um ponto de partida estável que poderá ajustar manualmente.
Controle de velocidade e aceleração Rampas
Mudanças súbitas da velocidade do motor causam movimento de charneira e podem jogar o robô fora da linha. Implemente rampas de aceleração que aumentam suavemente a velocidade de zero para o valor alvo ao longo de algumas centenas de milissegundos. Da mesma forma, rampas de desaceleração antes de uma curva afiada melhorar a tração e a linha de fixação. Você pode implementar isso com uma máquina de estado baseada em temporizador simples ou usando a função para avançar gradualmente o ponto de ajuste de velocidade.
Maze Solution e navegação de rede de linha
Um robô que pode seguir uma linha também pode aprender a navegar por uma rede de caminhos. Use um algoritmo baseado em pilhas (profundidade- primeira pesquisa) ou a "regra da esquerda" para resolver labirintos sem saída. Grave cada decisão de junção e o caminho entre as junções. Após a primeira execução, o robô pode refazer o caminho ideal. Esta é a base para muitas competições de robóticas como os desafios do labirinto de micro- rato ou seguidor de linhas.
Para um guia detalhado sobre a implementação da solução de labirintos num Arduino, veja Maze Linha de Pololu Resolvendo tutorial.
Monitoramento e Telemetria sem fio
Adicione um módulo HC- 05 Bluetooth ou um módulo ESP8266 Wi- Fi para transmitir valores do sensor, velocidades do motor e erro PID a um portátil ou smartphone. Isto permite- lhe ajustar o robot em tempo real sem o parar. Trace os dados numa ferramenta como o SerialPlot ou o Python Matplotlib para visualizar como o loop de controlo se comporta em diferentes condições de pista. Uma etapa importante de depuração é registar o sinal de erro ao lado das saídas do motor para ver se o robô está a corrigir ou a corrigir de forma excessiva.
Questões comuns e solução de problemas
Até mesmo construtores experientes encontram problemas. Aqui estão os mais comuns e como resolvê-los.
O robô não se move
Verifique a potência primeiro. Medir a tensão da bateria em carga. Se a tensão estiver abaixo da tensão mínima de funcionamento do condutor do motor, os motores não rodarão. Verifique todas as ligações do solo são sólidas. Teste o condutor do motor enviando um sinal manual do Arduino (HIGH/LOW) sobre os pinos de direcção e um valor PWM de 200 sobre os pinos de activação. Se os motores ainda não se moverem, o condutor ou a fiação do motor podem estar defeituosos.
Robots saem da linha
Isto normalmente indica um problema de calibração do sensor ou um viés mecânico. Recalibra os sensores usando o procedimento descrito acima. Verifique o alinhamento da roda: levante o robô e execute os motores com valores idênticos de PWM; ambas as rodas devem girar na mesma velocidade. Se uma roda for mais lenta, troque os canais do condutor do motor para ver se o problema segue o canal (problema de software) ou permanece com o motor (problema mecânico ou elétrico). Também garantir que a roda da rodízio não está ligada.
Oscilação em Seções Retas
A oscilação é causada por ganho proporcional (Kp) ou ganho derivado insuficiente (Kd). Reduza o Kp em 20–30% e veja se o robô se estabiliza. Se o robô ainda oscila, aumente o Kd gradualmente. Verifique também se as leituras dos seus sensores não são ruidosas. Adicione uma pequena quantidade de suavização analógica (por exemplo, um filtro médio móvel de 3 –5 amostras) para reduzir o ruído antes de alimentar os valores na alça de controle.
Robô perde curvas afiadas
As curvas em Sharp exigem que o robô diminua a velocidade. Introduza uma redução de velocidade quando o erro exceder um determinado limiar. Por exemplo, se o valor da posição da linha indicar uma curva acentuada, reduza a velocidade da base em 30 –50%. Você também poderá aumentar o diferencial de velocidade do motor usando um Kp maior para situações de alto erro (uma técnica chamada agendamento de ganho). Outra abordagem é usar uma matriz de sensores mais ampla que possa "ver" a curva que vem antes do robô ser comprometido.
Desempenho inconsistente em iluminação diferente
Os sensores de IR são sensíveis à luz ambiente, especialmente à luz solar e luminárias fluorescentes. Calibre os sensores no ambiente real onde o robô irá correr. Proteja os sensores com uma capa ou um tubo curto feito de tubos de encolher calor ou um sudário impresso em 3D para bloquear IR ambiente. Alternativamente, use o sensor ativo: meça a RI refletida com o emissor ligado, então meça com o emissor desligado e subtraia para cancelar IR ambiente.
Concorrência e recursos comunitários
Robôs que seguem linhas são um elemento fundamental das competições de robótica em todo o mundo. Seguidor de Linhas Júnior RoboCup e a Concurso Internacional de Robótica Virtual Home-Schooled. Participar em competições proporciona um objetivo estruturado e uma oportunidade de aprender com os outros.
A comunidade de código aberto produziu excelentes projetos de referência e bases de código. Pololu Zumo Robot e suas bibliotecas associadas são um ótimo ponto de partida para um seguidor de linha de alto desempenho. Projeto Lino Robot fornece um robô de acionamento diferencial baseado em ROS completo que pode ser adaptado para seguir a linha.
Expandir Além da Linha Seguir
As habilidades que você desenvolve construindo uma transferência de seguidor de linha diretamente para muitos outros projetos de robótica:
- Evitar obstáculos: Substitua os sensores de linha IR por sensores ultrassônicos ou de tempo de voo e reescreva a lógica de controle.
- Parede seguinte: Montar sensores laterais e usar o controle PID para manter uma distância constante até uma parede.
- Robôs sumô: Use sensores de linha para detectar a borda do anel e voltar.
- Resolução de labirintos autônomos: Adicionar um codificador de IMU e roda para navegação de retorno morto entre junções.
- Integração dos ROS: Monte um Raspberry Pi executando ROS, adicione uma câmera, e use a visão do computador para seguir linhas coloridas ou caminhos.
Cada um desses projetos reutiliza a mesma base de hardware e os mesmos conceitos de controle PID ou estado-máquina que você já aprendeu.
Considerações Finais
A construção de um robô que segue linhas com hardware de código aberto não é apenas um projeto iniciante & mdash; é uma plataforma para aprendizagem contínua. O controlador simples de dois sensores, bang- bang, funciona e é profundamente satisfatório para ver em ação. A próxima iteração adiciona PID. A seguinte adiciona um array de oito sensores e um PCB personalizado. Em pouco tempo, você está desenhando seu próprio chassis, escrevendo um aplicativo de telemetria sem fio e entrando em competições. O ecossistema de código aberto garante que você nunca comece do zero.
Esquema, código e conselhos de solução de problemas estão disponíveis livremente de uma comunidade global de fabricantes e engenheiros.
Peça suas peças, ligue o ferro de solda, e comece a seguir essa linha. Cada especialista construtor de robôs que você admira uma vez começou exatamente aqui.