Tutorial: Carrinho seguidor de linha que desvia de obstáculos com plataforma Zumo e Arduino

 

Olá Garagistas! Neste tutorial vamos mostrar como você pode fazer um carrinho seguidor de linha que desvia de obstáculos utilizando Zumo Chassis (Montado), Arduino, Dual Motor Shield, Emissores e Receptores Infravermelhos.

 

Material Utilizado:

1x Arduino Uno

1x Dual Motor Shield

1x Zumo Chassis (Montado) 

1x Alguns Jumpers

2x LED Emissor Infravermelho

2x LED Receptor Infravermelho

2x Resistor 120R

2x Resistor 10KΩ

4x Pilhas AA1x Fita Isolante

1x Fita Dupla Face

1x Estação de Solda

1x Solda Chumbo - 100 gramas

 

 

1. Funcionamento

 

 

1.1) Pista 

 

Na imagem abaixo, à esquerda esta a pista utilizada neste tutorial, feita de fita isolante em uma cartolina branca, e à direita a pista Luigi Raceway do jogo Mario Kart 64 na qual a nossa foi inspirada:

 

Figura 1 - Circuito inspirado na pista Luigi Raceway do jogo Mario Kart 64

 

 

1.2) Dual Motor Shield

Imagem 1 - Dual Motor Shield

 

O Dual Motor Shield é um Shield para Arduino muito prático, e com a biblioteca desenvolvida pelo Laboratório de Garagem sua utilização fica bem mais simples, pois com apenas um comando você define o sentido e velocidade de até 2 motores DC. Muito prático, é uma excelente solução para quem quer controlar plataformas robóticas como o Zumo.

 

 

1.3) Biblioteca DualMotor.h

 

A biblioteca desenvolvida para o Shield é composta por poucas funções:

 

DualMotor dualmotor; //Instância a DualMotor

dualmotor.M1move(velocidade, sentido); //Aciona o motor 1, velocidade (0 a 255) e sentido (0 - Horário ou 1 - Anti-horário)

dualmotor.M2move(velocidade, sentido); //Aciona o motor 2, velocidade (0 a 255) e sentido (0 - Horário ou 1 - Anti-horário)

dualmotor.M1parar(); //Para o motor 1

dualmotor.M2parar(); //Para o motor 2

 

A biblioteca pode ser baixada clicando aqui. Basta você extrair a pasta e copia-la para dentro da pasta libraries do Arduino.

 

 

1.4) Emissor e Receptor Infravermelho

Figura 2 - Emissor e Receptor Infravermelho

 

Com um emissor e um receptor infravermelho é simples detectar a linha preta. O emissor emite a luz infravermelha e quando essa luz for refletida, o receptor irá receber a luz e através do Arduino é possível detectar essa recepção. Em nossa demostração utilizamos uma cartolina branca e fita isolante, quando for refletida e recebida pelo receptor, nos indica que abaixo do nosso receptor tem uma superfície que reflete a luz, no nosso caso essa superfície será a cartolina branca. Quando o sensor estiver acima da fita insolante, por ela ser preta, não refletirá luz, então com isso podemos afirmar que está sendo detectando a linha preta. Ao detectar se o carrinho esta saindo da linha, acionamos os motores de forma a nunca permitir que saia da linha.

Com essa montagem de emissor + receptor, estamos trabalhando com uma lógica binária, ou reflete luz, ou não reflete, ou seja, ou o sensor está acima da cartolina branca, ou o sensor está acima da linha preta.

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

 

Figura 3 - Lógica utilizada para controlar o Zumo

 

Os micromotores foram controlados pelo Dual Motor Shield, e esse Shield permite que controlemos cada um dos motores individualmente.

OBS: Foi pensado em uma maneira de parar o carrinho caso nenhum dos dois sensores receba a luz. Nesta situação o carrinho trava tentando recuar, isto também auxilia para que você possa proteger a sua pista com um fita isolante mais larga e impedir que o carrinho caia da mesa, ou superfície que ele estiver andando.

 

 

1.5) Sensor de Proximidade

 

Imagem 2 - Sensor de proximidade de curto alcance

 

Foi utilizado o sensor de proximidade de curta distância para detectar o objeto, e quando o mesmo estiver próximo, o Arduino irá executar uma rotina padrão de desvio do objeto, a trajetória de desvio pode ser vista na imagem abaixo:

 

Figura 4 - Trajetória de desvio do obstáculo 

 

 

2. Montagem

 

2.1) Monte o circuito da figura abaixo, utilizando solda. Onde estão indicados os pontos GND, Entrada Digital e +5V, utilize jumpers para fazer as conexões com o Arduino:

Figura 5 - Montagem para o sensor de linha

 

 

2.2) Após feito a solda, isole o Emissor do Receptor, utilizando fita isolante, conforme a imagem abaixo. Essa isolação impede que a luz seja recebida pelos "lados" do receptor, com isso a luz somente será recebida quando for refletida em algum objeto ou superfície que reflita luz:

Imagem 3 - Isolação do receptor infravermelho

 

 

2.3) Utilizando dupla face, cole um em cada lado do sensor de proximidade, conforme as imagens abaixo:

Imagem 4 - Posicionando os sensores de linha ao lado do sensor de proximidade

 

 

2.4) Conecte o Dual Motor Shield e faça as ligações dos sensores conforme a figura abaixo:

 

Figura 6 - Montagem dos sensores de linha e de proximidade com o Arduino

 

 

2.5) Faça as ligações dos motores e das pilhas com o Dual Motor Shield, conforme a imagem abaixo:

 

Imagem 5 - Ligações dos motores e das pilhas com o Dual Motor Shield

 

 

2.6) E por fim, a montagem estará completa:

 

 Imagem 6 - Montagem completa do carrinho seguidor de linha que desvia de obstáculos

 

 

3. Sketch

 

#include <DualMotor.h> //Inclui a biblioteca DualMotor.h

 

#define SENSOR_PROXIMIDADE A0 //SENSOR_PROXIMIDADE como A0
#define SENSOR_ESQ A2 //Define SENSOR_ESQ como A2
#define SENSOR_DIR A3 //Define SENSOR_DIR como A3

 

DualMotor dualmotor; //Instância a DualMotor

 

void setup()
{

 

pinMode(SENSOR_ESQ, INPUT_PULLUP); //Configura o pino A2 como entrada e com...
                                                                 //...resistor de pull-up ativo

pinMode(SENSOR_DIR, INPUT_PULLUP); //Configura o pino A3 como entrada e com...
                                                               //...resistor de pull-up ativo

delay(2000); //Aguarda 2 segundos para iniciar o programa

 

}

 

 

void loop()
{

 

  if(analogRead(SENSOR_PROXIMIDADE) > 430) //Se a leitura do sensor de proximidade for mais que 430
  {
    //Move para a Esquerda por 600 milissegundos
    dualmotor.M1move(255,0);
    dualmotor.M2move(255,1);
    delay(600);

 

    //Move para Frente por 900 milissegundos
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,1);
    delay(900);

 

    //Move para a Direita por 400 milissegundos
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,0);
    delay(400);

 

    //Move para Frente por 1 segundo
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,1);
    delay(1000);

 

    //Move para a Direita por 600 milissegundos
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,0);
    delay(600);

 

    //Move para a Frente por 550 milissegundos
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,1);
    delay(550);

 

    //Move para a Esquerda por 250 milissegundos
    dualmotor.M1move(255,0);
    dualmotor.M2move(255,1);
    delay(250);

}

 

  else if(digitalRead(SENSOR_ESQ) && digitalRead(SENSOR_DIR)) //Senão se nenhuma luz for refletida para os sensores
  {
    //Move para Trás com velocidade reduzida e aguarda 100 milissegundos
    dualmotor.M1move(100,0);
    dualmotor.M2move(100,0);
    delay(100);
  }

 

  else if(digitalRead(SENSOR_ESQ)) //Senão se o sensor da Esquerda detectar a linha preta
  {
    //Move para Esquerda
    dualmotor.M1move(255,0);
    dualmotor.M2move(255,1);
  }

 

  else if(digitalRead(SENSOR_DIR)) //Senão se o sensor da Direita detectar a linha preta
  {
    //Move para a Direita
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,0);
  } 

 

  else //Senão
  {
    //Move para Frente
    dualmotor.M1move(255,1);
    dualmotor.M2move(255,1);
  }

 

}

 

Então é isso Garagistas! Esperamos que tenham gostado deste tutorial!

C ya! =D

 

 

Referências:

http://labdegaragem.com/profiles/blogs/tutorial-seguidor-de-linha-com-plataforma-zumo

http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-dual-motor-shield

 

 

Exibições: 83819

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 douglas roberto silva em 17 junho 2014 às 13:33

Amigo, esta missão eu consegui fazer, agora preciso que meu robô continue seguindo a faixa preta e ao encontrar o próximo obstáculo, que ele ande em frente com o mesmo até chegar em um ponto todo escuro, onde eu irei declarar a programação pra ele parar.

Eu queria saber como incluir outra função para o reconhecimento de objeto, ou seja, toda esta programação está dentro do loop e ao reconhecer um objeto ele desvia, como fazer que ao reconhecer um segundo objeto ele avance na direção do objeto? abraços.

Comentário de Nathan Leão em 29 maio 2014 às 15:23

olá, sou novo nesse assunto, e quero saber se posso usar essa programação em uma placa romeo V2 

Comentário de Felipe Casseb em 29 maio 2014 às 13:16

Olá,

com este shield eu posso utilizar quais portas digitais para ligar leds, sensores e modulo bluetooth?

Comentário de Laboratório de Garagem em 12 maio 2014 às 11:47

Andrei: Você pode utilizar utilizar sim o HC-SR04, contudo você terá que tratar de modo diferente a parte de desvio de obstáculos, em nosso tutorial foi utilizado um Sensor de Proximidade Infravermelho, para esse seu sensor ultrassom você deve fazer um outro tipo de tratamento, adaptando-o também ao código.

Douglas: O Dual Motor Shield é utilizado para o acionamento dos motores, caso você tenha algum outro driver para motores, você pode utilizá-lo, provavelmente você terá que fazer alguma adaptações em seu código.

Atenciosamente,

Equipe LdG.

Comentário de DouglasRoberto em 6 maio 2014 às 22:44
Eu nao tenho um dualmotor shield anda da para fazer o projeto ?
Comentário de Andrei Oliveira Mota Porfiro em 4 abril 2014 às 13:43

Bom dia, ótimo tutorial, bem detalhado, estão de Parabéns Lab de Garagem!

Também estou fazendo um carrinho seguidor de linha que desvia de obstáculos, mas estou utilizando o sensor de distância ultrassônico HC-SR04, que contêm além dos pinos de Vcc e GND, o TRIG e o ECHO. Para implementar tal sensor, uso o mesmo procedimento desse tutorial?

Agradeço desde já!!!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço