Trabalho Prático 3 - Sensores
OBJETIVOS
O objetivo desta etapa foi de adicionar ao robô um sensor fotosensível baseado em LDR (Light Dependant Resistor) e (ao menos) um sensor óptico-reflexivo, e implementar com eles um detector de cor e um detector de estado (preto - branco) e o software segue-linha.
O robô desta etapa deveria ser capaz de identificar a cor de um objeto e seguir um trajeto definido por uma faixa preta em um fundo branco (mesa).
DESENVOLVIMENTO
O projeto foi implementado sobre as etapas anteriores, aprimorando alguns pontos e adicionando os componentes necessários para este trabalho.
O ROBÔ
A parte mecânica do projeto se construiu sobre o robô criado na etapa anterior, e simplesmente adicionamos os sensores à estrutura.
Optamos por utilizar um sensor baseado em LDR na frente do robô, adicionando uma pequena estrutura para sustentar a peça e dois sensores óptico-reflexivos na parte de baixo do robô, próximos ao eixo apontados para baixo.
O grupo optou por usar um LED RGB em associação ao LDR, segundo a montagem abaixo como referência :
O sensor foi conectado em uma das portas analógicas da Handyboard, visto que o sinal é analógico.
O funcionamento do sensor procede como segue:
Posiciona-se a parte frontal do robô (onde se localiza o sensor) de frente para o objeto cuja cor se deseja medir (no caso do trabalho prático, cubos de isopor pintados nas cores - amarelo, azul, preto, vermelho e verde), aproximando o sensor da superfície do objeto. O LED é então acionado uma cor de cada vez (vermelho, verde e amarelo), e a luz refletida no objeto incide sobre o LDR. A intensidade luminosa define a variação da resistência do LDR, e consequentemente, do sinal analógico enviado à Handyboard. Comparando o sinal derivado de cada cor, pode-se determinar a cor do objeto.
A caracterização do sensor foi feita lendo os sinal obtido para diferentes distâncias entre a superfície do objeto e o sensor.
O sensor funciona de forma mais eficiente a uma distância média de 0,5 cm da superfície do objeto, com um valor de sinal esperado para os leds vermelho, verde e azul de respectivamente: 209 ±5, 192 ±5, 199 ±6. Observa-se que o sensor é mais sensível ao vermelho e menos sensível ao verde, enquanto o azul está flutuando no meio. Isto deve ser levado em consideração quando os valores forem lidos para os três leds.
Um dos problemas encontrados na implementação foi a distância entre o sensor e o LED, que parece ter influenciado no nível do sinal. Outro problema foi a ausência da proteção do sensor, que envolve o LDR e ajuda a minimizar ruído de outras fontes luminosas. Devido à distância entre o LED e o LDR, a proteção utilizada estava impedidndo que parte da luz refletida pelo objeto voltasse no LDR, por isso optamos por removê-la, o que tornou o sensor mais sensível a mudanças de luminosidade.
Para o sensor óptico reflexivo, o grupo utilizou a montagem abaixo como referência:
Decidimos também utilizar dois sensores, paralelos ao eixo de simetria do robô, um do lado esquerdo e outro do lado direito, ambos apontados para baixo e a uma distância de cerca de 0,5 cm da superfície. Este sensor, ao contrário do LDR, deve identificar apenas a diferença entre uma superfície branca e outra preta. A maneira como ele funciona é parecida com a do anterior: O LED emissor emite luz em infravermelho e o receptor absorve a luz refletida, e o sinal resultante é enviado à Handyboard.
O problema mais grave encontrado pelo grupo na implementação foi o posicionamento dos sensores. Eles foram fixados a uma distância muito pequena entre si, e esta configuração impediu que o sinal fosse utilizado de maneira eficiente (a ideia era de observar a leitura de ambos os sinais, e caso um dos sensores acusasse estar fora da faixa, o robô giraria para reposicioná-lo. Mas como ambos os sensores foram colocados muito próximos do centro do eixo, quando o sensor acusava ter saído da faixa, o outro estava na iminência de sair, e quando a resposta do sistema fosse obtida, ambos já estariam fora da faixa.)
A melhor situação, que o grupo optou por implementar para a próxima etapa é a de dois sensores, um em cada lado da faixa, ao invés de dentro dela. Assim, podem ser detectadas bifurcações e finais de trajeto mais facilmente.
Outro problema foi o ângulo de giro do robô, que estava muito alto para fazer correções sutis na trajetória. Uma vez fora da reta definida pela faixa, o robô não conseguiu voltar a se endireitar. Esta situação é consequência da caixa de redução utilizada, que foi muito pequena para ajustes finos, pois com uma como a que estamos utilizando, o robô gira muito rápido e não tem torque suficiente para se mover em baixa potência. O grupo optou por refazer a caixa de redução.
A PROGRAMAÇÃO
Baseando-nos no software utilizado no projeto anterior, adicionamos as rotinas de configuração e leitura dos sensores, e o programa que implementa o movimento do robô.
Para o identificador de cor, implementamos um algoritmo que observa a resposta do sensor (valor do sinal) para cada uma das cores do LED acesas, vermelho, verde e azul. Observando os valores lidos e a cor do bloco, chegamos a uma função que compara os valores dos sinais e determina a faixa de cor do bloco (amarelo, azul, preto, verde ou vermelho) e exibe o resultado na tela do LCD. O problema desta função é que ela irá sempre reconhecer cores como sendo uma das cinco acima, mesmo que a cor não seja uma delas (marrom, por exemplo).
Foi feita também uma rotina que calcula o ruído ambiente e subtrai ele do sinal resultante, de forma a compensar a iluminação ambiente e permitir que o robô identifique cores em diferentes configurações de iluminação.
Para o segue-linha, usamos um algoritmo simples que faz com que o robô ande em linha reta enquanto estiver na faixa ou fora da faixa, e que rotacione sobre si mesmo caso esteja parcialmente fora da faixa, de forma que ele busque uma linha caso esteja fora dela e corrija a trajetória caso saia dela parcialmente.
CONCLUSÃO
Percebemos durante a realização do trabalho a importância de fazer corretamente a montagem dos sensores. A montagem e adição inteligente deles ao projeto facilita muito a programação e melhora extremamente o desempenho do robô. Por outro lado, uma montagem com os sensores descalibrados ou montados de maneira imprópria praticamente inviabiliza um projeto eficiente. Vê-se que mesmo com um controle em malha fechada não conseguimos fazer com que o robô fizesse o trajeto previsto.
É notável também a diferença que uma má decisão em projetos anteriores faz nos projetos futuros. Ao escolher reduzir o robô a um tamanho extremamente compacto e retirar parte da redução, tiramos dele a capacidade de fazer movimentos mais precisos e lentos.
VÍDEOS




