Robô seguidor de linha com Arduino e Kit Chassi 2 rodas 2WD com base de acrílico
O robô seguidor de linha é um tipo de robô autônomo que utiliza sensores para detectar e seguir uma linha traçada no chão. Essa linha geralmente é de cor preta sobre um fundo branco ou vice-versa. O robô ajusta sua trajetória continuamente para permanecer sobre a linha, realizando curvas e correções de percurso de acordo com os sinais recebidos pelos sensores.
Construir um robô seguidor de linha é um excelente projeto para iniciantes e entusiastas, pois introduz conceitos fundamentais de robótica, como sensores, motores, controle e programação. Este tipo de sensor é amplamente utilizado em competições de robótica.
Este tutorial apresentará os passos necessários para construção e programação de um robô seguidor de linha utilizando um Arduino e um Kit Chassi 2 rodas 2WD com base de acrílico.
MATERIAIS NECESSÁRIOS
1x Placa Uno SMD R3 Atmega328;
1x Cabo USB Tipo A – B Compatível com Arduino Uno / Mega;
2x Sensor de Linha Segue Faixa Infravermelho;
1x Kit Chassi 2 Rodas Base de Acrílico 2WD + Suporte de Pilhas;
1x Mini Protoboard 170 Furos;
1x Driver Ponte H Dupla L298N;
1x Kit Cabo Jumper Macho x Macho 20 cm;
1x Kit Cabo Jumper Macho x Fêmea 20 cm;
1x Cabo Adaptador de Alimentação Compatível com Arduino Bateria 9V.
COMO MONTAR
Para iniciar a construção do seu robô seguidor de linha, precisamos montar o chassi. Para isso, siga o tutorial de como montar o Kit Chassi 2 rodas 2WD com base de acrílico.
Em seguida, vamos posicionar os componentes eletrônicos no chassi. Começando com os sensores infravermelhos. Para fixar os sensores infravermelhos, insira parafusos no chassi e prenda-os com uma porca. Coloque outra porca no parafuso antes de posicionar o sensor. Isso permite ajustar a altura do sensor. Coloque o sensor no parafuso e prenda-o com uma segunda porca, conforme mostrado na Figura 2. Certifique-se de que os sensores estejam próximos ao chão para minimizar a interferência de luz externa.
ATENÇÃO: Recomendamos o uso de trava rosca nos parafusos que seguram os sensores e as porcas para garantir que não se soltem durante a operação do robô.
Após fixar os dois sensores, eles devem estar posicionados conforme mostrado na Figura 3.
Agora, vamos fixar as baterias de 9V na parte inferior do robô, um pouco atrás dos sensores. Consulte a Figura 4 para orientação.
Em seguida, vamos fixar o Arduino, a protoboard e a ponte H, conforme a Figura 5.
Observação: Antes de fixar o Arduino e a ponte H no chassi, aplique fita isolante na parte inferior desses componentes. Isso evita que pontos do circuito entrem em contato direto com parafusos e porcas do chassi de acrílico, prevenindo possíveis curtos-circuitos.
ESQUEMÁTICO DE LIGAÇÃO
Agora que todos os componentes estão posicionados corretamente, vamos proceder com as ligações. Siga o esquemático da Figura 6, mas antes de iniciar certifique-se de que a alimentação esteja desligada para evitar danos durante a montagem.
Ao montar o circuito, observe os seguintes pontos:
- O Arduino irá alimentar os dois sensores. Para isso, conecte um jumper ligando uma linha da protoboard ao pino 5V do Arduino. Em seguida, conecte o VCC de cada módulo sensor a um dos pinos alimentados pela linha criada na protoboard;
- Conecte os pinos de saída dos sensores infravermelhos às portas digitais do Arduino: D0 do sensor infravermelho da esquerda ao pino 2 e D0 do sensor infravermelho da direita ao pino 3;
- Conecte um jumper do pino GND do Arduino a uma linha da protoboard, criando um ponto comum de GND para o projeto. Ligue a essa linha de GND todos os GND dos componentes, incluindo os dois sensores e a ponte H;
- Note que a ponte H precisará de dois fios GND conectados à mesma porta: um para a alimentação e outro para garantir que todos os componentes do circuito tenham a mesma referência;
- Ligue os pinos de controle da ponte H às portas digitais do Arduino conforme a seguinte configuração: IN1 da ponte H ao pino 7, IN2 da ponte H ao pino 6, IN3 da ponte H ao pino 5 e IN4 da ponte H ao pino 4.
Recomendamos o uso de pilhas alcalinas, que possuem maior eficiência energética.
ATENÇÃO: Ao ligar o robô seguidor de linha, coloque-o sobre um objeto ou plataforma que impeça suas rodas de tocarem a mesa ou o chão, criando uma espécie de suporte elevado. Durante a realização dos testes, o robô pode se mover de forma inesperada, e não queremos que ele caia ou que você precise correr atrás dele 😂.
ELABORANDO O CÓDIGO
Com o robô e circuito montados, vamos a programação. A proposta desse projeto é construção e programação de um robô seguidor de linha utilizando um Arduino e um Kit Chassi 2 rodas 2WD com base de acrílico.
Acompanhe os passos a seguir para melhor compreensão da lógica de programação:
1. Declarar as variáveis
As constantes in1, in2, in3, e in4 definem as portas digitais 7, 6, 5 e 4 do Arduino, conectadas aos pinos de controle da ponte H.
sensorEsquerdaD0 e sensorDireitaD0 definem as portas digitais 2 e 3 do Arduino conectadas aos pinos de saída dos sensores infravermelhos.
2. Configurações iniciais
Na função setup(), configuramos as portas de controle da ponte H como saídas e as portas conectadas aos sensores infravermelho como entradas.
3. Função loop()
Inicializaremos a função loop() realizando a leitura dos sensores infravermelhos. Se o sensor detecta a linha (linha preta), a leitura será LOW; caso contrário, será HIGH.
Em seguida, usaremos estruturas condicionais para que o robô decida o seu movimento com base nas leituras dos sensores.
- Se ambos os sensores detectam a linha (LOW), o robô deve andar para frente;
- Se apenas o sensor esquerdo detecta a linha (LOW), o robô deve virar à esquerda;
- Se apenas o sensor direito detecta a linha (LOW), o robô deve virar à direita;
- Se nenhum sensor detecta a linha (HIGH), o robô para.
4. Criar as funções de controle do movimento do robô
Criamos funções específicas para cada movimento possível do robô. Cada função configura os estados dos pinos dos motores para direcionar o robô para frente, esquerda, direita ou para pará-lo, da seguinte forma:
- A função andarParaFrente() ativa o motor 1 (in1 HIGH e in2 LOW) e o motor 2 (in3 HIGH e in4 LOW) para mover o robô para frente;
- A função virarEsquerda() inverte a direção do motor 1 (in1 LOW e in2 HIGH) enquanto o motor 2 continua para frente (in3 HIGH e in4 LOW) para fazer o robô virar à esquerda;
- A função virarDireita() mantém o motor 1 para frente (in1 HIGH e in2 LOW) enquanto inverte a direção do motor 2 (in3 LOW e in4 HIGH) para fazer o robô virar à direita;
- A função parar() desliga ambos os motores (in1 LOW e in2 LOW para o motor 1 e in3 LOW e in4 LOW para o motor 2) para parar o robô.
Para entender melhor o funcionamento dos motores com a ponte H e a criação das funções, recomendamos que veja o tutorial de Como controlar motor DC utilizando o Driver Ponte H L298N.
No final, o código ficará da seguinte maneira:
// Definição das portas da ponte H const int in1 = 7; const int in2 = 6; const int in3 = 5; const int in4 = 4; // Definição das portas dos sensores infravermelhos const int sensorEsquerdaD0 = 2; const int sensorDireitaD0 = 3; void setup() { // Configuração das portas da ponte H como saídas pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // Configuração das portas dos sensores infravermelhos como entradas pinMode(sensorEsquerdaD0, INPUT); pinMode(sensorDireitaD0, INPUT); } void loop() { // Leitura dos sensores infravermelhos int leituraEsquerda = digitalRead(sensorEsquerdaD0); int leituraDireita = digitalRead(sensorDireitaD0); // Caso os dois sensores detectem a linha (ambos sensores na linha) if (leituraEsquerda == LOW && leituraDireita == LOW) { andarParaFrente(); } // Caso o sensor da esquerda detecte a linha (ajustar para a esquerda) else if (leituraEsquerda == LOW && leituraDireita == HIGH) { virarEsquerda(); } // Caso o sensor da direita detecte a linha (ajustar para a direita) else if (leituraEsquerda == HIGH && leituraDireita == LOW) { virarDireita(); } // Caso nenhum sensor detecte a linha (parar ou tomar uma ação específica) else { parar(); } } void andarParaFrente() { //motor 1 digitalWrite(in1, HIGH); digitalWrite(in2, LOW); //motor 2 digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } void virarEsquerda() { //motor 1 digitalWrite(in1, LOW); digitalWrite(in2, HIGH); //motor 2 digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } void virarDireita() { //motor 1 digitalWrite(in1, HIGH); digitalWrite(in2, LOW); //motor 2 digitalWrite(in3, LOW); digitalWrite(in4, HIGH); } void parar() { //motor 1 digitalWrite(in1, LOW); digitalWrite(in2, LOW); //motor 2 digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
ATENÇÃO: A luz do ambiente pode interferir na identificação da linha. Por isso, é necessário fazer testes e ir calibrando o sensor através do potenciômetro de acordo com a necessidade.
Veja o vídeo do funcionamento do nosso projeto.
Obrigado, espero que tenham gostado, até a próxima!
Em caso de dúvidas, deixe um comentário abaixo.