Seguidor de Linha
A tarefa seguinte foi montar os sensores de luz infravermelha para o seguidor de linha. Os dois sensores são montados na parte dianteira do carro, apontados para o chão, e podem identificar a diferença entre uma placa de MDF branca e uma faixa de fita isolante preta. O carro segue a faixa. Se um dos sensores indica que o carro está se desviando da faixa, ajustamos a direção.Para simplificar a montagem, retiramos o servomotor do projeto, e deixamos o sensor de distância fixo novamente.
Foi necessário rearrumar os fios de alimentação dos componentes mais uma vez, para poder alimentar os dois sensores com 5V e terra (GND). Os sensores foram ligados aos pinos analógicos A0 e A1 do Arduino.
Criamos duas funções, para testar se a faixa foi detectada à esquerda ou à direita: faixa_a_esquerda() e faixa_a_direita(). Também foi necessário criar duas novas funções de movimento, porque esquerda() e direita() giram 90°, e para ajustar a direção precisamos de giros de menos de 15º. As novas funções: ajuste_esquerda() e ajuste_direita().
Não precisamos usar a leitura analógica para os pinos do seguidor de faixa. Os componentes que usamos têm ajustes que permitem regular a sensibilidade de forma que a faixa de fita isolante e a tábua branca sejam identificadas simplesmente com um teste lógico: se branco, o sinal no pino fica próximo de 0V, e é lido como falso; se preto, o sinal fica próximo de 5V, e é lido como verdadeiro.
Na lógica principal, combinamos o uso das novas funções com comandos se/senão.
Foram
necessários vários testes para escolher o valor adequado para
tempo_ajuste. Também precisamos mudar a velocidade do carro. E no
tempo de espera ao final do bloco principal do programa. Nos
primeiros testes, o carro estava muito rápido, e perdia a faixa com
frequência. O tempo de ajuste também estava elevado, e o carro
girava mais do que os 10 a 15 graus necessários. Com a redução da
velocidade, os motores começaram a falhar. Parece que o novo
conjunto de motores ou a placa de potência que recebemos para o
segundo carro (já o terceiro conjunto) não funciona bem a baixas
velocidades.
Nota
Em projetos passados, o primeiro comando dentro das funções de ajuste de direção era um comando parar(). Isto torna o movimento do carro mais picado, mas evita que o mesmo perca o caminho com tanta facilidade. Recomendamos que se faça a tentativa de incluir o comando parar(), e que se compare o funcionamento com o anterior.
Código criado para o seguidor de linha:
int velocidade;
int tempo_giro;
int tempo_ajuste;
int direcao;
int tempo_eco;
int dist;
int ajuste_velocidade;
// Verifica se a faixa esta encostando no sensor da direita (pino A1).
boolean faixa_a_esquerda() {
if (digitalRead(A1)) {
return true;
}
return false;
}
// Verifica se a faixa esta encostando no sensor da esquerda.
boolean faixa_a_direita() {
if (digitalRead(A0)) {
return true;
}
return false;
}
// Ajusta direcao de 10 a 15 graus para a esquerda
void ajuste_esquerda() {
direcao = 3;
acionar_motores();
delay(tempo_ajuste);
parar();
}
// Ajusta direcao de 10 a 15 graus para a direita
void ajuste_direita() {
direcao = 2;
acionar_motores();
delay(tempo_ajuste);
parar();
}
void setup() {
pinMode(A1, INPUT); // Sensor IR da esquerda (seguidor de faixa)
pinMode(A0, INPUT); // Sensor IR da direita (seguidor de faixa)
pinMode(12, OUTPUT); // Buzina
pinMode(A5, INPUT); // Sensor de luz
pinMode(13, OUTPUT); // Farol
pinMode(2, OUTPUT); // Pulso do ultrassom (sensor de distancia)
pinMode(3, INPUT); // Eco do ultrassom (sensor de distancia)
pinMode(4, OUTPUT); // Pinos de controle do motor
pinMode(9, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(5, OUTPUT);
velocidade = 150; // Velocidade do carro
tempo_giro = 270; // Tempo para girar 90 graus
tempo_ajuste = 50; // Tempo para girar 12 graus
}
void loop() {
if (tem_luz()) {
apagar_farol();
} else {
acender_farol();
}
if (faixa_a_direita()) {
// Faixa dos dois lados é uma transversal.
// Chegou ao destino!
if (faixa_a_esquerda()) {
parar();
delay(3000);
} else {
ajuste_direita();
}
} else if (faixa_a_esquerda()) {
ajuste_esquerda();
} else {
avancar();
}
delay(200);
}
Mais Detalhes
Para o seguidor de linha, utilizamos sensores intra-vermelhos reflexivos. Nesses componentes, um LED (diodo emissor de luz) produz luz infravermelha (que nós não enxergamos). Ao lado desse LED, um fototransistor sensível a luz infravermelha capta a luz refletida por alguma superfície colocada em frente ao componente. A luz gera um sinal elétrico que é amplificado pelo fototransistor. No terminal de saída, teremos um sinal próximo de 5V se objeto é escuro, ou se não há objeto à frente do componente, e próximo a 0V se o objeto é claro. No componente, existe um ajuste de sensibilidade, que podemos utilizar para distinguir um objeto de cor clara de outro com cor escura.Se montamos os sensores no carro apontando para baixo, eles podem identificar a presença de uma faixa preta em uma superfície branca. Se tivermos um sensor do lado direito do carro e outro do lado esquerdo, separados por cerca de 5cm, e colocarmos o carro sobre uma faixa criada com fita isolante, os sensores podem indicar toda vez que a faixa estiver mais para a esquerda ou para a direita. Quando isso acontece, ajustamos a direção do carro para que ele fique no centro da faixa.
Um bom texto explicando como montar o seguidor de linha e como criar o programa para controlar o carro pode ser encontrado em: https://portal.vidadesilicio.com.br/robo-seguidor-de-linha-sensor-infravermelho-e-pwm/
Passar à Parte 9



Nenhum comentário:
Postar um comentário