Chassi 2WD como Seguidor de Linha:

O seguidor de linha é um dos primeiros projetos de robótica móvel que todos os entusiastas, hobistas ou profissionais constroem no intuito de nos ensinar o quão simples e ainda sim inigualável é a cultura maker e as tecnologias de interação entre nós e os objetos e entre os objetos. Precipuamente, antes de irmos para a montagem do Robô Seguidor de Linha com Sensor TCRT5000  vamos aprender sobre os principais componentes para o seu funcionamento, sendo o restante conectores, alimentação e a carcaça do carrinho. Para a construção do seguidor de linha utilizaremos o Módulo segue faixa(TCRT5000), Módulo Driver ponte H HG7881 L9110S, Protoboard, jumpers e Adaptador P4/KRE Macho para a conexão e, o Chassi 2WD que é a carcaça do Robô.

Imagem do seguidor de faixa

kit robotica educacional com Arduino ESP ou Microbit

Para melhor entendimento deste tutorial é necessário que você já tenha um conhecimento prévio sobre Arduino e ponte H. Entretando não se preocupe, pois nossa equipe já produziu outros tutoriais sobre esses assuntos e você pode conferir alguns destes nos seguintes links: Entradas e Saídas Analógicas e Módulo Ponte H L298n.

– Robô Seguidor de Linha com Sensor TCRT5000 nas escolas

Em início, como já sabemos, o seguidor de linha já é muito utilizado em indústrias, mas para que utilizar nas escolas? Bem, com um projeto deste, mesmo que simples, podemos integrá-lo em diversas áreas. O robô seguidor de linha, em suma, foi criado para competições interdisciplinares e ajudar jovens a trabalhar em equipe e desenvolver o cognitivo.

Então, na História, filosofia e sociologia podemos aprender como se desenvolveu a tecnologia até a criação do robô, bem como surgiu o arduino ou como a cultura maker, sendo está uma arte, é tão disseminada por todo o globo terrestre. Na geografia como robôs e equipamentos eletrônicos foram e são tão importantes para descobertas e no nosso dia a dia como, por exemplo, prever o clima. Já na matemática temos a rotação dos motores e na física a energia elétrica que passa pelo circuito e o funcionamento óptico do sensor de faixa e suas cores preta e branca.

– Como funciona um Robô Seguidor de Linha com Sensor TCRT5000 ?

Imaginemos uma pista de corrida preta e um carro sobre ela com sensores de detecção de infravermelho embaixo do carro, quando o carro sair da pista a cor do chão irá mudar e os sensores irão detectar está mudança fazendo o que o carro vire voltando assim de volta para pista. No caso da imagem abaixo somente quando ele receber o infravermelho que ele irá virar, pois será quando o carro saiu da pista preta.

Imagem de um carro em uma pista de corrida

Similarmente o seguidor de linha deve seguir andando por cima de uma linha de cor preta (fita isolante) ou branca. Os circuitos podem alternar entre as cores do campo e da faixa, no nosso caso iremos assumir que a pista é branca e a faixa é preta, ou seja, quando o carro detectar a cor preta, não recebendo o infravermelho de volta ele irá virar. Usaremos 2 sensores infravermelhos que detectam a presença ou não desta faixa. De acordo com a combinação dos sensores, o carrinho irá para frente ou virar para um dos lados.

Imagem do funcionamento do sensor de faixa

Na imagem acima temos um carrinho com dois sensores nas laterais onde quando detectar a presença do preto o carrinho vira. Enquanto o carrinho não está detectando a cor preta o motor das rodas fica girando em uma velocidade constante com 360°graus de rotação em linha reta.

– Funcionamento do sensor infravermelho

O módulo sensor TCRT5000 emite uma luz infravermelha por um LED negro e capta o reflexo com um LED receptor (LED claro). Como sabemos pela física, a luz reflete em superfícies claras, sendo a branca a que mais reflete, e é absorvida em superfícies escuras, sendo a preta a que mais absorve, como a fita isolante. Sendo assim o LED receptor irá detectar a luz infravermelha no branco e não detectar no preto. Entretanto, para uma melhor eficácia do sensor, a superfície em contraste com a faixa preta deve ser branca.

Funcionamento do sensor infravermelho

Muitas vezes haverá a necessidade de ajustarmos a sensibilidade do sensor por isso ele possui um potenciômetro de calibração.

– Diferença entre sensores infravermelhos obstaculo e o TCRT5000

Nos pode usar diferentes sensores infravermelhos para o projeto seguidor de linha, o que precisamos considerar é as especificações de cada um. Um sensor infravermelho amplamente utilizado é o TCRT5000, o qual utilizaremos neste tutorial, que tem como vantagem seu tamanho e preço. Porém, ele precisa está próximo ao chão para que seja capaz de identificar a faixa, uma vez que seu alcance é de até 8mm. Entretanto, ele possui a vantagem de sofrer menos interferências de luzes infravermelhas externas.

Módulo Sensor de linha TCRT5000

Em contrapartida, a vantagem de usar o sensor de obstaculo é o seu maior alcance possuir ajuste, porem ele é mais suscetível a interferências das luzes ambientes.

Sensor de obstáculo infravermelho

Nesse tutorial, usaremos o TCRT5000. Dessa forma, caso esteja usando o sensor de obstaculo infravermelho, fique atento com as interferências. O local precisa estar bem iluminado e sem reflexo de luzes que possam mudar a cor da superficie que o sensor incidir.

Controlando motores com Ponte H

Quando lidamos com controle de cargas que consomem grande quantidade de energia, é importante que essas cargas sejam controladas com circuitos que separem o circuito de controle do circuito de potência. Para controlar motores, é comum usarmos um circuito chamado ponte H, ele é capaz por controlar o sentido de giro do motor e a sua velocidade, usando o PWM.

– PWM

PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados analógicos por meios digitais (Leia mais sobre Grandezas digitais e analógicas e PWM). Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser controlada a porcentagem do tempo em que a onda permanece em nível lógico alto, alterando, assim, a tensão média.

Por exemplo, se a saída é de 5V, porém ela fica apenas 50% do tempo em 5V e outros 50% do tempo em nível lógico baixo, isso resulta em uma tensão média de 2,5V (50% x 5V). Dessa forma, esta variável de tempo é capaz de controlar de velocidade do nosso carrinho alterando a tensão média aplicada no motor. Os valores de PWM variam de 0 (parado) até 255 (velocidade máxima ou 5 V).

– Controlando a velocidade do motor através da Ponte H

Existem várias opções de Ponte H, nesse tutorial usaremos o Módulo Driver Ponte H HG7881 L9110S que dispões de duas pontes H, sendo capaz de controlar dois motores. Cada ponte H possui um pino que ativa ou não a ponte H. Caso tenha um sinal de 5V aplicado nele, a ponte estará ligada, caso seja 0V a ponte estará desligada.

Imagem da ponte H

O “Motor A” e “Motor B” da parte superior utilizaremos como conexões de saída para alimentação dos motores A e B. No entanto, já o “Motor A” e o “Motor B” da parte inferior utilizaremos  para receber e passar informação para os motores A e B, respectivamente. Através desses pinos conectados ao Arduino podemos controlar a velocidade e o sentido de rotação dos motores A e B, respectivamente. A parte de alimentação serve para alimentar o modulo com tensão entre 2.5 a 12V (Corrente Contínua).

Apesar de a ponte H ser controlada por um sinal de 5V, elá pode chavear uma tensão diferente. Podemos, por exemplo, controlar uma tensão de 6V, vindo de um conjunto de 4 pilhas AA. Nesse caso, apesar de o sinal PWM ser de 5V ele modulará os 6V nos motores. Vai depender da tensão necessária para o funcionamento dos motores.

Podemos calcular a tensão de alimentação com a fórmula: Vm = Va + 1,5V (Vm = tensão mínima necessária para alimentar o motor, Va = tensão nominal do motor DC). Como exemplo temos que caso o motor tenha uma tensão nominal de 3,5 V a tensão mínima da fonte externa deve ser de 5,0V.

Datasheet

No datasheet do chip L9110S podemos obter diversas informações de como é o funcionamento e controle da ponte H por esse chip. Em suma, uma das observações que podemos fazer é na tabela de tensão e conrrente, onde está indicando que a tensão minima é 2.5V e a maxima é 12V. Já a corrente de operação, podemos observar que a minima é de 200 microampere e a maxima é de 500 microampere. Em contrapartida, temos outra tabela ao lado sobre os pinos de rotação horaria e anti-horaria do motor como na tabela abaixo:

Tabela de rotação dos motores

Ou seja, existem apenas dois tipos de rotação, a normal e a invertida. No nosso programa nos só queremos a rotação normal, sendo assim utilizaremos a primeira linha de High e Low.

 

Mãos a obra – Montando um Robô Seguidor de Linha com Sensor TCRT5000

Componentes Necessários

– Montando o projeto do Robô Seguidor de Linha com Sensor TCRT5000

Abaixo segue o esquema de ligações e montagem eletrônica do driver Ponte H HG7881:

Diagrama de montagem da Ponte H

A carcaça do robô deve ser montada conforme o manual. Agora segue o esquema de ligações e montagem eletrônica dos Módulos TCRT5000:

Diagrama de montagem dos Módulos TCRT5000 

Os módulos devem ser fixos na frente do chassi em direção ao chão na parte de baixo para poder detectar o caminho a ser seguido. Como resultado aos esquemas anteriores temos um esquema completo de montagem Ponte H + Módulos TCRT5000:

Diagrama de montagem Ponte H + Módulos TCRT5000

Este projeto possui um procedimento de montagem complexo devido ao fato da necessidade de termos que passar vários fios por um espaço limitado ao tamanho do chassi do carrinho. Como resultado da montagem do robô temos as imagens abaixo:

Imagens do carrinho pronto

 

PS: Devemos Lembrar que o suporte das baterias deve ficar instalado embaixo do carrinho.

– Calibração do Sensor infravermelho

Ao usar o sensor infravermelho, seja o TCRT5000 ou o sensor de obstaculo, você precisa calibrar o sensor para que seja capaz de detectar adequadamente a mudança de cor entre preto e branco. Esta calibração deve ser feita no próprio sensor com o auxílio de uma chave de fenda no potenciômetro acoplado a ele.

Potenciometro(Trimpot) de ajuste do sensor

– Programando o Robô Seguidor de Linha com Sensor TCRT5000

Neste instante vamos conectar o arduino no computador e abrir a IDE arduino. Desta forma iremos escrever o programa abaixo na IDE e compilar o programa para o seu arduino.

Em contrapartida, antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#define M1AA 10 //Definição do pino que controla o motor A
#define M1AB 11 //Definição do pino que controla o motor A
#define M2BA 5  //Definição do pino que controla o motor B
#define M2BB 6  //Definição do pino que controla o motor B

#define pinS1 7 //Definindo o pino 7 como pino do primeiro sensor
#define pinS2 8 //Definindo o pino 8 como pino do segundo sensor

bool Sensor1 = 0; //Declarando a variavel "Sensor1" e atribuindo a ela o valor "0"
bool Sensor2 = 0; //Declarando a variavel "Sensor2" e atribuindo a ela o valor "0"

int velocidade = 125; //Declarando a variavel "velocidade" e atribuindo a ela o valor "125"

void setup(){
  pinMode(M1AA, OUTPUT); // Define o pino de controle do motor A como saída
  pinMode(M1AB, OUTPUT); // Define o pino de controle do motor A como saída
  pinMode(M2BA, OUTPUT); // Define o pino de controle do motor B como saída
  pinMode(M2BB, OUTPUT); // Define o pino de controle do motor B como saída


  digitalWrite(M1AB, LOW);  // Setamos a direção inicial do motor 1 como 0, isto fará com que o motor gire para frente
  digitalWrite(M2BB, LOW);  // Setamos a direção inicial do motor 2 como 0, isto fará com que o motor gire para frente
  
  pinMode(pinS1, INPUT); // Define o pino do sensor 1 como entrada
  pinMode(pinS2, INPUT); // Define o pino do sensor 2 como entrada


}

void loop(){
  Sensor1 = digitalRead(pinS1); // A variavel "Sensor1" recebe o valor digital lido pelo sensor 1
  Sensor2 = digitalRead(pinS2); // A variavel "Sensor2" recebe o valor digital lido pelo sensor 2
  
  if((Sensor1 == 0) && (Sensor2 == 0)) // Os dois lados detectaram branco
  {
    analogWrite(M1AA, velocidade); //O motor A recebe velocidade 125
    analogWrite(M2BA, velocidade); //O motor B recebe velocidade 125
    delay(25);
  }
  if((Sensor1 == 1) && (Sensor2 == 0)) // O primeiro sensor detectou preto e o segundo branco
  {
    analogWrite(M1AA, 0); //O motor A recebe velocidade 0
    analogWrite(M2BA, 140); //O motor B recebe velocidade 140, girando assim o carrinho
    delay(25); //Espera de 25 milissegundos
  }
  if((Sensor1 == 0) && (Sensor2 == 1)) // O primeiro sensor detectou branco e o segundo preto
  {
    analogWrite(M1AA, 140); //O motor A recebe velocidade 140, ficando assim ligado
    analogWrite(M2BA, 0); //O motor B recebe velocidade 0, desligando-o e fazendo assim o carrinho virar no outro sentido
    delay(25); //Espera de 25 milissegundos
  }
}

 

– Testando o funcionamento do Robô Seguidor de Linha com Sensor TCRT5000:

Agora é só pôr o carrinho para rodar na pista!

Video do carrinho funcionando e seguindo a faixa

– Problemas recorrentes e como resolver

Bateria baixa – Os testes podem ter consumido a bateria e talvez seja necessário o uso de uma nova. Baterias abaixo de 6,5 Volts já começam a diminuir a eficiência do carrinho e já pode não ser mais suficiente para energizar os motores como vimos anteriormente.

Carrinho saindo da pista – Isso pode acontecer por ele estar rápido de mais ou por falha do infravermelho. Em caso de ele estar muito rápido basta trocar a velocidade dos motores em cada situação. Se o problema for com o contraste da pista (talvez parte dela esteja mais escura) use 2 LEDs de alto brilho na frente do carrinho para iluminar a pista próximo aos sensores. Os LEDs podem ir conectados direto no 5 V do arduino (lembrando de por um resistor de 300Ohms). Também pode ser que os sensores não estejam detectando o chão, pois foram colocados em uma posição que não facilita a leitura ou podem estar acima de 8mm do chão dificultando a leitura.

Carrinho não anda – Este é um problema complexo, pois podem ter infinitas possibilidades. Tente isolar os componentes e testar 1 por 1, principalmente os motores e a ponte H. Em alguns casos pode ser problemas de aterramento da bateria também, ou seja, a conexão dos jumpers.

 

PS: Vale ressaltar que o robô pode não fazer o percurso de primeira, o que significa que ajustes devem ser feitos no código ou até mesmo no hardware.

 

Entendendo a fundo

Software

– Definições e Declarando variáveis utilizadas no projeto do Robô Seguidor de Linha com Sensor TCRT5000

Inicialmente a instrução #define apenas associa os pinos do arduino nomes referente aos componentes conectados nestes pinos.  Semelhantemente, temos logo depois a declaração de variaveis e atribuições de valores a estas variaveis. Nas variaveis declaradas “Sensor1” e “Sensor2” do tipo bool atribuimos a elas o valor “0”. Já na variavel declarada do tipo int atribuimos a ela o valor “125”, pois é o valor de velocidade que queremos para os motores.

#define M1AA 10 //Definição do pino que controla o motor A
#define M1AB 11 //Definição do pino que controla o motor A
#define M2BA 5  //Definição do pino que controla o motor B
#define M2BB 6  //Definição do pino que controla o motor B

#define pinS1 7 //Definindo o pino 7 como pino do primeiro sensor
#define pinS2 8 //Definindo o pino 8 como pino do segundo sensor

bool Sensor1 = 0; //Declarando a variavel "Sensor1" e atribuindo a ela o valor "0"
bool Sensor2 = 0; //Declarando a variavel "Sensor2" e atribuindo a ela o valor "0"

int velocidade = 125; //Declarando a variavel "velocidade" e atribuindo a ela o valor "125"

Função Void Setup()

A função setup é aquela que irá rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função pinMode serve para definir quais serão os pinos de entrada e de saida. Repare que apenas os que declaramos com #define anteriormente, estão no pinMode, isto é porque as outras são variaveis que escolhemos para atribuir valores. Na função pinMode definimos que M1AB, M1AA, M2BA, M2BB (pinos dos motores) são saida e os pinos dos sensores pinS1 e pinS2 são entradas.

pinMode(M1AA, OUTPUT); // Define o pino de controle do motor A como saída
pinMode(M1AB, OUTPUT); // Define o pino de controle do motor A como saída
pinMode(M2BA, OUTPUT); // Define o pino de controle do motor B como saída
pinMode(M2BB, OUTPUT); // Define o pino de controle do motor B como saída

pinMode(pinS1, INPUT); // Define o pino do sensor 1 como entrada
pinMode(pinS2, INPUT); // Define o pino do sensor 2 como entrada

– Definindo sentido de giro dos motores no projeto do Robô Seguidor de Linha com Sensor TCRT5000

Proseguindo temos a função digitalWrite que escreve nas portas do M1AB e M2BB nivel logico baixo, ou seja, o motor não irá girar para trás, fazendo assim com que os motores girem somente para frente.

digitalWrite(M1AB, LOW);  // Setamos a direção inicial do motor 1 como 0, isto fará com que o motor gire para frente
digitalWrite(M2BB, LOW);  // Setamos a direção inicial do motor 2 como 0, isto fará com que o motor gire para frente

Função  Void Loop ()

Por analogia, a função loop ao contrário da setup rodará tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa.

– Leituras dos Sensores no projeto do Robô Seguidor de Linha com Sensor TCRT5000

De inicio temos as variaveis Sensor1 e Sensor2 recebendo o valor (0 ou 1, pois é digital) da leitura dos pinos dos sensores pinS1 e pinS2, sendo a função responsável por está leitura a digitalRead().

Sensor1 = digitalRead(pinS1); // A variavel "Sensor1" recebe o valor digital lido pelo sensor 1
Sensor2 = digitalRead(pinS2); // A variavel "Sensor2" recebe o valor digital lido pelo sensor 2

– Controlando a direção do robô

Logo após as variaveis receberem esses valores vamos para a estrutura de decisão if onde temos as condições que se os dois sensores receberem o valor “0”, ou seja, detectaram a cor branca, será escrito nos pinos dos motores a velocidade 125 declarada anteriormente fazendo com que o carrinho continue andando reto.

if((Sensor1 == 0) && (Sensor2 == 0)) // Os dois lados detectaram branco
{
  analogWrite(M1AA, velocidade); //O motor A recebe velocidade 125
  analogWrite(M2BA, velocidade); //O motor B recebe velocidade 125
  delay(25);
}

Agora, caso a varivel Sensor1 receba o valor 1(o sensor detectou assim a cor preta)e  a variavel Sensor2 receba o valor 0(o sensor detectou a cor branca) a estrutura de decisão abaixo que será verdadeira e não a de cima, fazendo com que escreva no pino do motor 1 a velocidade 0 e no pino do motor 2 a velocidade 140, girando assim o carrinho como mostra na Imagem do funcionamento do sensor de faixa.

if((Sensor1 == 1) && (Sensor2 == 0)) // O primeiro sensor detectou preto e o segundo branco
 {
   analogWrite(M1AA, 0); //O motor A recebe velocidade 0
   analogWrite(M2BA, 140); //O motor B recebe velocidade 140, girando assim o carrinho
   delay(25); //Espera de 25 milissegundos
 }

Em ultima alternativa temos o contrario da anterir. Caso não seja o primeiro sensor que detectou o preto, mas sim o segundo a estrutura de decisão abaixo que será verdadeira e não as anteores fazendo com que escreva no pino do motor 1 a velocidade 140 e no pino do motor 2 a velocidade 0, girando assim carrinho para o outro lado como mostra na Imagem do funcionamento do sensor de faixa.

 if((Sensor1 == 0) && (Sensor2 == 1)) // O primeiro sensor detectou branco e o segundo preto
  {
    analogWrite(M1AA, 140); //O motor A recebe velocidade 140, ficando assim ligado
    analogWrite(M2BA, 0); //O motor B recebe velocidade 0, desligando-o e fazendo assim o carrinho virar no outro sentido
    delay(25); //Espera de 25 milissegundos
  }
}

Hardware

O carrinho funciona com uma comunicação entre os sensores, o Arduino e a ponte H controlando os motores. Por meio das leituras que os sensores fazem do meio e enviam para o Arduino por meio das portas digitais, o controlador irá acionar um motor mais rápido ou mais devagar do que o outro. Os sensores emitem 5 V (faixa preta) ou 0 V(pista branca) para as portas digitais. O Arduino modula os valores de velocidade pelos valores PWM que variam de 0 volts (0) até 5 volts (255), fazendo isso ao longo de todo trajeto. A bateria que alimenta o Arduino energiza não somente o controlador como também a ponte H dos motores por meio do pino Vin do Arduino.

 

Considerações finais:

Neste tutorial mostramos como funciona e como montar o robô seguidor de faixa. Caso queria veja também o tutorial “ROBÔ SEGUIDOR DE LINHA”, nele utilizamos o sensor de obstáculos para construir o seguidor de faixa. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Privacy Preference Center