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: 73463

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 LUCAS EDUARDO LEME DE ALMEIDA em 9 maio 2017 às 19:28

Olá. Seria possível adaptar uma garra ou quem sabe até mesmo um braço robótico sobre um carrinho destes para por exemplo o transporte de alguma peça?

Comentário de Israel Bulcão Farias Luz Tavares em 20 janeiro 2016 às 2:34

Olá seria a mesma coisa com os sensores ópticos reflexivos, como o TCRT5000 ??

Comentário de maria vanessa abreu de farias em 16 outubro 2015 às 19:43

ola, gostaria de ajuda, fiz todo o procedimento da montagem e programação mas o carro nao anda ele apenas se move um pouco e depois para. 

Comentário de Rodrigo Anderson Peres em 8 outubro 2015 às 18:51

o que devo fazer ?

Comentário de Rodrigo Anderson Peres em 8 outubro 2015 às 18:44

o programa do tutorial não compila devido a biblioteca DualMotor.h

Comentário de Messias Silva em 10 maio 2015 às 17:39

Tem como explicar aonde os motores estão sendo ligados?

Comentário de Messias Silva em 10 maio 2015 às 17:37

Boa tarde, gostaria de saber se a shield usada pode só controlar os sensores, sem o carro precisar do sensor de presença, tem como mandar a programação?

Comentário de joao gabriel carlos frança em 19 março 2015 às 16:52

opa boa tarde qual as polaridades dos leds?

Comentário de Laboratório de Garagem em 18 agosto 2014 às 14:55

Olá pessoal, vamos lá:

Felipe Casseb: O Dual Motor Shield utiliza os pinos D5, D6, D7 e D8, todos os outros ficam livres para uso geral.

Nathan Leão: Não temos informações sobre essa placa romeo V2, muito provavelmente você não conseguirá utilizar exatamente a mesma programação.

Douglas Roberto: Você pode acrescentar mais sensores como o de ultrassom ou até outros sensor de proximidade, nas laterais por exemplo, contudo você deverá aplicar isso na programação também.

João Paulo: Não fizemos cálculos, apenas fizemos uma rotina padrão para que ele detectasse o objeto e fizesse uma rota que garantisse o total desvio do mesmo.

Abraços a todos.

Comentário de Joao Paulo Santa Rita em 29 julho 2014 às 2:19

Olá , ótimo trabalho feito.

Estou tentando fazer esse projeto e gostaria de saber como você fez os cálculos para saber os tempos de desvio dos obstáculos.

Desde já agradeço.   Abraços. 

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço