fbpx
ArduinoNovidadeRobótica Educacional

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.

Imagem do robô seguidor de linha
Figura 1- Imagem do robô seguidor de linha.

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ô.

Imagem da fixação do sensor.
Figura 2- Imagem da fixação do sensor.

Após fixar os dois sensores, eles devem estar posicionados conforme mostrado na Figura 3.

Imagem dos dois sensores fixados.
Figura 3- Imagem dos dois sensores fixados.

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.

Fixação da bateria 9V.
Figura 4- Fixação da bateria 9V.

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.

Fixação da ponte H e do Arduino.
Figura 5- Fixação da ponte H e do Arduino.

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.

Esquemático de ligação.
Figura 6- Esquemático de ligação.

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.

Vídeo 1- Seguidor de linha.

Obrigado, espero que tenham gostado, até a próxima!

Em caso de dúvidas, deixe um comentário abaixo.

Estagiário no setor de desenvolvimento na Casa da Robótica

Graduando em Engenharia da Computação pela Faculdade Independente do Nordeste. Estagiário do setor de desenvolvimento da Casa da Robótica.

Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.