0% acharam este documento útil (0 voto)
28 visualizações6 páginas

Arduino

O documento apresenta um guia para montar um robô seguidor de linha utilizando um Arduino Motor Shield e sensores ópticos. Ele detalha as portas disponíveis no shield, recomenda kits de chassi e descreve como conectar os sensores e motores. Além disso, inclui um código de exemplo para controlar o robô, baseado em um programa original de Michael McRoberts.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
28 visualizações6 páginas

Arduino

O documento apresenta um guia para montar um robô seguidor de linha utilizando um Arduino Motor Shield e sensores ópticos. Ele detalha as portas disponíveis no shield, recomenda kits de chassi e descreve como conectar os sensores e motores. Além disso, inclui um código de exemplo para controlar o robô, baseado em um programa original de Michael McRoberts.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

Como montar um Robô Seguidor de

Linha com Arduino Motor Shield172


Arduino, Robótica 24 de fevereiro de 2014 Adilson Thomsen
Quando publicamos o post Controle motor DC 12V com o Motor Shield Arduino, recebemos
várias mensagens dos leitores, com dúvidas sobre como utilizar as portas que “sobram” no
shield para ligar lâmpadas e sensores. Por isso vamos apresentar um projeto de um Robô
seguidor de linha, por muito conhecido também por robô segue faixa.

Segundo o fabricante deste shield, as portas utilizadas pelos motores são as seguintes :

 Controle de motores DC : Pinos 11, 3, 5 e 6


 Controle de motores de passo : Pinos 4, 7, 8 e 12
 Controle de servo motores : Pinos 9 e 10

Desta forma, as portas que podemos utilizar livremente são as 6 portas analógicas, assim
como as digitais 2 e 13, isso se estivermos falando de um Arduino Uno. Em um Arduino
Mega, por exemplo, todas as demais portas também estarão disponíveis.

Montando um Robô Seguidor de Linha:


Um bom exemplo de utilização deste Arduino motor shield é em aplicações de robótica,
como por exemplo na montagem de um robô seguidor de linha. Para facilitar sua vida
existem Kits de chassi para robôs com 2 ou 4 rodas e é claro que você
encontra na MakerHero tudo o que precisa:

Chassi 2 Rodas Robô

Chassi 4 Rodas Robô


Esses kits já vem com motores, suporte de baterias, acessórios e você só precisa adicionar
o Arduino (ou outra placa de sua preferência), os sensores e o circuito controlador de
motores. Para o caso do Arduino, recomendamos a utilização do Motor Shield citado acima,
já que ele se encaixa perfeitamente em um Arduino Uno economizando espaço na
montagem do robô.

Podemos utilizar como sensor os LDR´s (resistores dependentes de luz), ou


então sensores ópticos reflexivos, como o TCRT5000, que terão a função de “enxergar” a
linha e transmitir essa informação para o Arduino.

Projeto Robô Seguidor de Linha:


Para o nosso “carrinho” segue faixa, vamos utilizar 3 sensores ópticos ligados lado a lado.
Conforme a linha for detectada (ou não), cada sensor enviará ao Arduino as informações
sobre a intensidade do sinal infravermelho refletido, e o programa usará essas informações
para calcular a velocidade de cada motor. A ilustração abaixo mostra, de forma resumida,
como os sensores se comportam:

Imagem : RobotC
Transportando essa idéia para o nosso motor shield, vamos utilizar as portas A0, A1 e A2
para ligação dos sensores. O motor da esquerda será ligado ao conector M1, e o motor da
direita ao conector M4, utilizando a própria alimentação do Arduino (mantenha o jumper
PWR na placa).Demonstramos a ligação dos sensores em uma protoboard, utilizando
resistores de 330 ohms para o led infravermelho (parte superior/azul do sensor), e resistores
de 10 K na parte inferior (receptor) :
A maneira mais conveniente de ligar os sensores ao shield é utilizar uma barra de pinos
(macho ou fêmea) soldada à placa, como na imagem abaixo :

Controle do Robô Seguidor de Linha com


Arduino:
Para acionar o circuito vamos utilizar, com algumas adaptações, o programa criado por
Michael McRoberts e disponível no livro Arduíno Básico. Adicionamos as funções
da biblioteca AFMotor, responsável por comandar o motor shield. A biblioteca AFMotor
pode ser encontrada nesse link. Descompacte a pasta, renomeie para AFMotor, e coloque
essa pasta dentro da pasta LIBRARIES do programa (IDE) do seu Arduino. Não esqueça de
sair e carregar a IDE novamente para que a biblioteca seja reconhecida pelo programa.

1 //Programa : Motor shield com sensor TCRT5000


//Adaptacoes : MakerHero
2
//
3 //Baseado no programa original de Michael McRoberts
4
5 #include <AFMotor.h>
6
7 AF_DCMotor motor_esq(1); //Seleciona o motor 1
8 AF_DCMotor motor_dir(4); //Seleciona o motor 4
9
int SENSOR1, SENSOR2, SENSOR3;
10
11 //deslocamentos de calibracao
12 int leftOffset = 0, rightOffset = 0, centre = 0;
13 //pinos para a velocidade e direcao do motor
14 int speed1 = 3, speed2 = 11, direction1 = 12, direction2 = 13;
15 //velocidade inicial e deslocamento de rotacao
int startSpeed = 70, rotate = 30;
16 //limiar do sensor
17 int threshold = 5;
18 //velocidades iniciais dos motores esquerdo e direito
19 int left = startSpeed, right = startSpeed;
20
21 //Rotina de calibracao do sensor
void calibrate()
22
{
23 for (int x=0; x<10; x++) //Executa 10 vezes para obter uma media
24 {
25 delay(100);
26 SENSOR1 = analogRead(0);
SENSOR2 = analogRead(1);
27 SENSOR3 = analogRead(2);
28 leftOffset = leftOffset + SENSOR1;
29 centre = centre + SENSOR2;
30 rightOffset = rightOffset + SENSOR3;
31 delay(100);
}
32 //obtem a media para cada sensor
33 leftOffset = leftOffset /10;
34 rightOffset = rightOffset /10;
35 centre = centre / 10;
//calcula os deslocamentos para os sensores esquerdo e direito
36 leftOffset = centre - leftOffset;
37 rightOffset = centre - rightOffset;
38 }
39
40 void setup()
41 {
calibrate();
42 delay(3000);
43 }
44
45 void loop()
46 {
47 //utiliza a mesma velocidade em ambos os motores
left = startSpeed;
48 right = startSpeed;
49
50 //le os sensores e adiciona os deslocamentos
51 SENSOR1 = analogRead(0) + leftOffset;
52 SENSOR2 = analogRead(1);
SENSOR3 = analogRead(2) + rightOffset;
53
54 //Se SENSOR1 for maior do que o sensor do centro + limiar,
55 // vire para a direita
56 if (SENSOR1 > SENSOR2+threshold)
57 {
58 left = startSpeed + rotate;
right = startSpeed - rotate;
59 }
60
61 //Se SENSOR3 for maior do que o sensor do centro + limiar,
62 // vire para a esquerda
63 if (SENSOR3 > (SENSOR2+threshold))
{
64
left = startSpeed - rotate;
65 right = startSpeed + rotate;
66 }
67
68 //Envia os valores de velocidade para os motores
69 motor_esq.setSpeed(left);
motor_esq.run(FORWARD);
70 motor_dir.setSpeed(right);
71
72
73
74
75
76
77
motor_dir.run(FORWARD);
78 }
79
80
81
82
83
84
85

Você também pode gostar