Tutorial: Seguidor de linha com plataforma Zumo e Garagino

Adquira estes componentes na Loja do Lab de Garagem

Olá Garagistas!!!

Neste tutorial montamos um seguidor de linha baseado na plataforma robótica Zumo junto com sensores de linha do tipo digital. A pista foi feita com fita isolante sobre um pedaço de cartolina branca, inspirada no circuito Luigi Raceway do jogo Mario Kart 64.

  

Lista de materiais

1 x Garagino Rev 1 ou Arduino Uno Rev 3 

1 x Chassis Zumo

1 x Pololu Motor Driver 1A Dual TB6612FGN

2 x Micro motor com caixa de redução de metal 75:1

2 x Sensores de Linha - QRE1113 -Digital

1 x Protoboard

1 x  Fita dupla-face

1 x Fita Isolante 

4 x Pilhas recarregáveis ( se utilizar pilhas normais você necessit...

Alguns jumpers

 

Funcionamento

O sensor de linha digital, devolve um valor dependendo da refletância da superfície na qual ele esta apontando. Com isto detectamos se o carrinho esta saindo da linha e acionamos os motores de forma a nunca permitir que saia da linha.

Para mais informações sobre o sensor de linha digital acesse este outro tutorial: http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-breakout-de-sensor-de-linha-com-arduino

Na figura abaixo você pode ver o resumo da lógica utilizada para controlar o Zumo:

Os micromotores foram controlados pelo driver de motores que utiliza o circuito integrado TB6612FGN, que consiste em duas pontes H e utilizamos cada uma delas para controlar os motores individualmente.

Foi pensado em uma maneira de parar o carrinho caso ele fosse de encontro com uma linha preta de frente, neste caso os dois sensores iriam acionar . Nesta situação o carrinho trava tentando recuar em velocidade reduzida. Isto serve para você proteger a sua pista com um fita isolante mais larga e impedir que o carrinho caia da mesa que ele estiver andando.

Fotos da montagem

 

Plataforma Zumo montada com os micromotores, fita dupla face e os sensores de linha.

A distância entre os sensores deve ser um pouco maior que a largura da fita isolante.

 Cabos dos sensores (fios amarelos 5V, fios verdes GND e os fios azuis para os pinos digitais 11 e 12 do Garagino)

Fios soldados no suporte para as pilhas que vem no Zumo

Cabo dos micromotores com termo retrátil

 Protoboard com a montagem entre o Driver dos motores (ponte H) e o Garagino

Montagem da Protoboard junto com a ligação dos sensores no Zumo

A Pista

Na imagem abaixo, à esquerda você vê nossa pista de fita isolante e à direita a pista Luigi Raceway do jogo Mario Kart 64 na qual a nossa foi inspirada:

Dêem um desconto...Fiz tudo com fita isolante.

Sketch

Este sketch foi baseado nos tutorias que estão nos links de referência deste tutorial.

//Definição do pino que inibe o funcionamento dos motores

#define PARAR 10 //Parar o Carrinho

//Definições para controlar o Motor A (esquerda)
#define PWMA  3 //Controle de Velocidade
#define AIN1  7 //Direção
#define AIN2  8 //Direção
#define MOTOR_E 1 //Define motor da Direita com valor 1

//Definições para controlar o Motor B (direita)
#define PWMB  9  //Pino de Controle da Velocidade
#define BIN1  6  //Pino de Direção
#define BIN2  5  //Pino de Direção
#define MOTOR_D 2 //Define motor da Direita com valor 2

//Definição dos pinos onde estão os sensores
#define linhaD 11
#define linhaE 12

void setup()
{
  //Define pinos como saída
  pinMode(PARAR, OUTPUT);

pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);

pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
}

void loop(){

int val_sensores = lesensores();

switch(val_sensores){
  case 0:
    move(MOTOR_E, 255, 1); //Motor da Esquerda, a toda velocidade, sentido de rotação
    move(MOTOR_D, 255, 1); //Motor da Direita, a toda velocidade, sentido de rotação
    break;

case 1:
    move(MOTOR_D, 0, 1); //Motor da Direita, para o Motor, sentido de rotação
    move(MOTOR_E, 255, 1); //Motor da Esquerda, a toda velocidade, sentido de rotação
    break;

case 2:
    move(MOTOR_E, 0, 1); //Motor da Esquerda, para o Motor, sentido de rotação
    move(MOTOR_D, 255, 1); //Motor da Direita, a toda velocidade, sentido de rotação
    break;

case 3:
    move(MOTOR_E, 100, 2); //Motor da Esquerda, baixa velocidade, reverso
    move(MOTOR_D, 100, 2); //Motor da Direita, baixa velocidade, reverso
    break;

  }
}

void move(int motor, int speed, int direction){
  digitalWrite(PARAR, HIGH); //Desabilita o standby

boolean inPin1 = LOW;
  boolean inPin2 = HIGH;

if(direction == 1)
  {
    inPin1 = HIGH;
    inPin2 = LOW;
  }

if(motor == 1)
  {
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }
  else
  {
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
   }
}

int lesensores(){

//Ler Sensor da Direita
  int sensores = 0;
  pinMode( linhaD, OUTPUT );
  digitalWrite( linhaD, HIGH );
  delayMicroseconds(10);
  pinMode( linhaD, INPUT );
  long time = micros();

  while (digitalRead(linhaD) == HIGH && micros() - time < 3000);
  int diff = micros() - time;

if (diff > 1600)
    sensores += 1;

// Ler Sensor da Esquerda
  pinMode( linhaE, OUTPUT );
  digitalWrite( linhaE, HIGH );
  delayMicroseconds(10);
  pinMode( linhaE, INPUT );
  long time1 = micros();

  while (digitalRead(linhaE) == HIGH && micros() - time1 < 3000);
  int diff1 = micros() - time1;

  if (diff1 > 1600)
    sensores += 2;

  return sensores;
}

Isto é tudo pessoal!!! Se gostaram deste tutorial ou se tiverem alguma dúvida, comentem abaixo e deixe sua opnião.

Referências

http://bildr.org/2012/04/tb6612fng-arduino/

http://bildr.org/2011/06/qre1113-arduino/

http://www.pololu.com/catalog/product/713

http://kile.stravaganza.org/project/lego-robot-line-follower

Exibições: 19362

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Carlos Eduardo Costa Soares em 13 abril 2015 às 18:50

Olá pessoal. Fiz o projeto acima seguindo todos os passos deste tutorial, porém o sensor do lado direito quando detecta a linha preta não para o motor direito, acho que o código para controlar os motores com o sensor infravermelho ( QRE1113 Digital ) está errado. Alguém sabe me informar como solucionar esse problema? Ou seria possível revisar o código fornecido pelo site?

Comentário de Nelson Roder Junior em 30 julho 2014 às 19:49

Sugestão:

Seria bem aceito o esquema elétrico do projeto, para os iniciantes ir aprendendo  ler esquemas.

Na foto 6 fica a desejar as ligações.

Comentário de Raul Pinto Ferreira Neves em 26 agosto 2013 às 23:29

Oi Boa Noite...

Curti muito esse Projeto e Estou tentando fazer o meu mais, não estou conseguindo fazer o Código, estou com alguas duvidas em relação ao que fazer, se possível gostaria de receber o código completo para que possa avaliar onde estou errando. Sou novo nessa area de programação... se possivel enviar o codigo nesse email. bodevelho12@hotmail.com 

Comentário de Marcelo Moraes em 21 agosto 2013 às 0:35

Parabéns pelo projeto.

Veja meus projetos no blog do Arduino By Myself

Seguidor de linha com controle PID

http://arduinobymyself.blogspot.com.br/2013/03/linusbot-line-follow...

Comentário de herbert em 19 maio 2013 às 0:18

Retificando. O carrinho sai do quadrado A deve seguir o caminho e entrar no quadrado B e parar.

Comentário de herbert em 19 maio 2013 às 0:14

Possuo esse kit e tenho algumas duvidas:

1- como faço para fazer o motor rodar ao contrario (sentido anti-horario  ) apos um determinado tempo? Sem ter que virar o carrinho.

2 - no projeto da faculdade o carrinho está em um quadrado preto de 30 cm x 30cm então ele deve sair desse quadrado e seguir uma linha . Que tipo de programação eu devo fazer para ele poder acionar os dois motores dentro do quadrado preto e depois seguir com a programação que voce orientou no tutorial ?

 

Na foto abaixo está o desenho do circuito e o  caminho do carrinho deve ser feito de A para B ( quando chegar no preto deve parar ):

 

 Alguem poderia me ajudar, por favor? Desde ja agradeço pela ajuda.

Comentário de Laboratório de Garagem em 3 maio 2013 às 10:50

Olá Wesley Perreira

Na verdade cada cor vai devolver um valor diferente de refletância. Utilizamos preto e branco devido ao grande diferença entre a refletância dos dois.

Comentário de Wesley Pereira em 2 maio 2013 às 11:12

muito bom esse projeto bem interessante.

mas tenho uma duvida esse sensor só reconhece preto e branco? por exemplo se na pista ou local onde ou colocar o carrinho tiver cores diferente qual o nível de eficiência o sensor terá?

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço