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:
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
Comentar
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.
olá, sou novo nesse assunto, e quero saber se posso usar essa programação em uma placa romeo V2
Olá,
com este shield eu posso utilizar quais portas digitais para ligar leds, sensores e modulo bluetooth?
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.
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á!!!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)