Tabela de conteúdos

Trabalho Prático 2

Objetivo

Após o primeiro trabalho prático que nos ajudou a familiarizar com a montagem e com a programação da HandyBoard é hora de darmos sentidos ao nosso robô. Utilizando sensores óticos e as ferramentas ensinadas na disciplina, temos como objetivo fazê-lo “enxergar” cores, avaliar distâncias e por fim, seguir a linha preta utilizando os sentidos.

Montagem elétrica e fixação

Assim como no trabalha anterior, inicialmente nos preocupamos com a montagem elétrica e mecânica do robô. Pelo fato de já termos feito as calibração no trabalho anterior decidimos erroneamente manter a montagem mecânica e apenas arrumar uma forma de fixar os sensores que seriam utilizados.

O primeiro problema encontrado foi decidir qual tipo de sensor ótico seria utilizado: LDR ou Opto. Por existir essa dúvida, decidimos por utilizar ambos, sendo o Opto utilizado para avaliar distância e cor, enquanto o LDR ajudaria o robô a reconhecer a linha preta no percurso.

LDR

Como já estudamos, o LDR é um dispositivo cuja resistência varia de acordo com a luminosidade do ambiente. Para proteger o sensor de ruídos externos, utilizamos carcaças metálicas de motores estragados cobertas internamente com fita isolante. O sensor foi fixado em uma tampa de refrigerante também protegida com fita isolante e termos retrátil. Na imagem a seguir podemos ver a montagem feita.

Opto Sensor

Pelo fato de a primeira tarefa pedir para medir distância, optamos por utilizar o sensor opto por acreditarmos ser mais adequado. O esquema elétrico foi montado de acordo com as especificações, utilizando um resistor de 330Ω para não queimar o LED emissor. Na imagem a seguir podemos ver a o sensor montado.

Como decidimos utilizar o mesmo sensor para identificar cores, utilizamos uma capa protetora para manter fixa a distância entre o sensor e os blocos.

Fixação

Para fixar os sensores LDR na parte inferior do robô utilizamos as próprias peças do Lego, sem nenhum tipo de cola ou braçadeira, já que, aparentemente, os sensores se mostravam fixos. No momento da apresentação, verificamos que a fixação das carcaças metálicas não estavam corretamente presas, acabando por cair e prejudicar o funcionamento do algoritmo de seguir a linha.

Já o sensor opto foi deixado “solto” de forma a se assimilar a uma antena.

Caracterização do Sensor

A primeira tarefa após a montagem elétrica é conseguir capturar os dados da HandyBoard. Utilizando as funções disponibilizadas no site, conseguimos enviar caracteres pela porta serial. Como desejávamos enviar valores numéricos, se, por exemplo, enviássemos 65, o hyperterminal do Windows mostrava 'A', ou seja, o caracter da tabela ASCII correspondente a 65. Primeiramente verificou-se a possibilidade de converter os caracteres em números utilizando uma função específica do MatLab, chamada unicode2native, que realiza a conversão. Porém, alguns valores recebidos na tabela ASCII correspondiam a caracteres de controle, que não eram impressos em documentos texto. Dessa forma optou-se por fazer a conversão do número em caracteres, enviando algarismo por algarismo e após uma vírgula. Utilizando o Notepad++, substituiu-se as vírgulas por '\n', e os valores foram corretamente lidos pela função textread do MatLab. Segue os gráficos obtidos para as situações com luz ambiente e motores ligados, com valores coletados durante 20s.

No caso acima, o valor médio é de 13,5385.

Com a entrada de ruído, os valores coletados variaram bastante. Nesse caso o valor médio foi de 59,7949.

Com o motor ligados obsevou-se apenas alguns picos nos valores coletados. O valor médio não foi muito afetado, sendo ele igual a 14,00.

Nesse caso, mesmo tendo a presença de ambas fontes de ruído, para nossa surpresa o valor médio obtido foi próximo do esperado, sendo ele igual a 16,8462.

Analisando os gráficos acima notamos uma clara interferência da luz ambiente (ruído) e dos motores.

Calibração da distância

Pelo fato de utilizarmos o sensor opto para verificar a distância e seu valor variar de acordo com a cor do objeto, optamos por calibrar as medidas utilizando o bloco amarelo, cujo valor mínimo (3mm de distância do sensor) era o menor valor dentre os outros blocos, dessa forma é possível verificar distancias maiores.

Ao contrário dos ensaios iniciais, para fazermos a calibração da distância, achamos mais fácil coletar os dados manualmente, variando a distância e anotando os valores. Com os valores coletados foi possível plotar o gráfico e tentar uma linearização. Inicialmente acreditamos ser uma equação da forma d=A-exp(Bv), onde 'd' é a distância e 'v' o valor do Opto sensor. Porém, utilizando o MatLab, viu-se que dividindo a curva em duas regiões lineares os valores obtidos seriam melhores. Segue a curva obtida e as linearizações realizadas.

As relações encontradas foram:

Seguir linha

Nesta parte do trabalho, utilizaremos sensores para fazer com que o robo siga uma linha preta.

Utilizando-se da mesma montagem do robô feita para as partes anteriores do trabalho, acoplamos 2 resistores LDR a parte de baixo do robô. Utilizamos a informação obtida destes sensores (LDR) para determinar se o robô esta sobre uma superfície clara ou escura.

Para diminuir a influência da luz ambiente montamos o LDR dentro de uma tampinha de refrigerante envolvida por material opaco (fita isolante). E para aumentar a confiabilidade dos valores obtidos dos LDR e filtrar parte do ruído implementamos a leitura dos valores utilizando histerese.

O controle do robô foi feito a partir de uma máquina de estados finitos (figura abaixo). Tal escolha se deve a facilidade de implementação e de o robô ter se comportado muito bem durante os testes. Entretanto esta abordagem é extremamente dependente da calibração dos motores, como observamos no dia da apresentação.