====== Trabalho Prático 2 ====== O objetivo deste trabalho prático é familiarizar o aluno com sensores, sua aplicação e utilidade através da construção, avaliação e processamento dos sinais medidos. Após isso, esses sinais serão processados e utilizados com o propósito de auxiliar o robô nas suas tarefas. ===== Objetivos ===== O robô deve ser capaz de: -Localização. Utilizando o sensor diferencial, o robô deverá demonstrar que sabe localizar-se e mover-se em direção à fonte de luz especificada no menu (selecionar polarização desejada) a partir de qualquer ponto do campo; -Seguir linha. O robô deverá demonstrar que consegue seguir linhas marcadas no campo de competição. Para isso deverá utilizar sensor(es) óptico(s); -Utilizando o sensor de identificação de blocos, o robô deverá locomover-se seguindo uma das linhas pretas da mesa de competição no laboratório sobre a qual estarão blocos de isopor coloridos. O robô tomará ações com base na cor do bloco identificado. A ação correspondente ao bloco será selecionada no menu. Bloco Azul → vire à direita 90 graus; Bloco Amarelo → vire à esquerda 90 graus; Bloco Vermelho → Pare; Bloco Verde → Siga em frente por X segundos (O valor de X deverá poder ser ajustado no menu). ===== Desenvolvimento do Robo ===== ==== Construção de Sensores Ópticos Ativos ==== Nesta etapa, optamos por construir sensores ópticos ativos a partir de pares led/LDR(Light Dependent Resistor). Os sensores responsáveis pela localização foram constituídos de LDR+Polarizador de forma que os polarizadores estejam defasados de 90º, permitindo que um sensor seja sempre mais sensível a determinada lâmpada polarizada(presente nas extremidades do campo de competição) do que o outro. Os sensor responsável pela identificação das cores consiste de um LDR unido à quatro LEDs: vermelho, amarelo, azul e verde. Isso permite uma maior exatidão na determinação das cores dos blocos, já que pressupõe-se que o bloco verde, por exemplo, reflita mais a luz verde do que a luz das outras cores. Já para a detecção das linhas marcadas no campo de competição foram utilizadas duas montagens. A primeira contém dois LDRs e dois LEDs brancos. A segunda utiliza um sensor pronto, constituído de um emissor infravermelho e um receptor responsável pela captação do sinal. ==== Caracterização do sensor ==== Nesta etapa, colocamos o bloco de cor verde a uma distância de cerca de 3mm do sensor e, mantendo as condições de iluminação constantes, adquirimos dados do sensor por cerca de 10 segundos. Obtivemos o seguinte gráfico: {{cursos:introrobotica:2008-2:grupo2:grafico1.png|}} Removendo a caixa de papelão que mantinha as condições de iluminação constantes, efetuamos um novo teste e obtivemos o seguinte gráfico: {{cursos:introrobotica:2008-2:grupo2:grafico2.png|}} A influência da variação da luz ambiente altera a qualidade das medições e para isso utilizamos tubos de termo retráteis fixados à frente dos LDRs na tentativa de “isolar” o sensor destas perturbações não desejadas. Repetindo os testes com os motores acionados, obtivemos os seguintes resultados: {{cursos:introrobotica:2008-2:grupo2:grafico3.png|}} {{cursos:introrobotica:2008-2:grupo2:grafico4.png|}} Observamos que o movimento dos motores alterou as medidas fornecidas pelo sensor, o que comprova o efeito da perturbação introduzida pelo motor. ==== Influência da distância e cor do objeto ==== Colocamos o bloco colorido a 3 distâncias diferentes: 1cm, 1.5cm e 2cm. O erro médio entre a medida fornecida pelo sensor e o valor médio calculado anteriormente para a distância 3mm são visualizados nos gráficos seguintes: {{cursos:introrobotica:2008-2:grupo2:grafico5.png|}} {{cursos:introrobotica:2008-2:grupo2:grafico6.png|}} {{cursos:introrobotica:2008-2:grupo2:grafico7.png|}} {{cursos:introrobotica:2008-2:grupo2:grafico8.png|}} {{cursos:introrobotica:2008-2:grupo2:grafico9.png|}} {{cursos:introrobotica:2008-2:grupo2:grafico10.png|}} A partir dos vários testes realizados pudemos definir uma distância “ótima” para a determinação das cores dos blocos. Para todos os blocos essa distância foi d = 3mm. A tabela abaixo resume o comportamento do sensor nesse caso: {{cursos:introrobotica:2008-2:grupo2:tabela.png|}} ==== Sensores diferenciais ==== Utilizando um LDR, conectamos este sensor a uma das portas analógicas da Handy Board e observamos a variação da leitura do sensor relacionada à qualidade da luz externa. Para o sensor que fará a localização do robô no campo, construímos um sensor diferencial com 2 LDRs. Cada LDR foi coberto por um tubo de termo retrátil contendo um polarizador na extremidade. A orientação destes polarizadores foi ajustada de forma a obter a melhor medição para cada uma das fontes de luz polarizada presentes no campo de competição ==== Localização ==== Para executar a tarefa de localização em relação às luzes polarizadas, utilizamos o seguinte princípio: o robô gira 360º e registra o maior valor lido (ou menor dependendo da polaridade da luz de destino). Após um giro completo, o robô volta até o ponto da leitura de interesse e realiza um movimento de translação na direção da luz polarizada. Durante o movimento de translação, o valor lido pelo sensor é analisado. Caso sua intensidade sofra uma grande variação, o robô interrompe o movimento de translação e inicia novamente o processo, ou seja, gira 360º registrando o maior valor lido. ==== Detecção das linhas marcadas ==== Para executar a tarefa de seguir reta utilizamos três sensores. Dois na parte traseira do robô são responsáveis por identificar o erro no trajeto do robô e o sentido em que ocorreu esse erro. O sensor dianteiro é responsável por realocar o robô na linha caso os outros sensores detectem o erro na trajetória. Além disso, o sensor dianteiro é responsável pela orientação do robô em trajetos curvilíneos. ==== Identificação de cores ==== A execução dessa tarefa foi feita da seguinte maneira. Foi criado um algoritmo de calibração do sensor. Insere-se o bloco da cor de interesse na frente do sensor e executa-se o algoritmo. Então são feitas várias medidas e extraída a média dos valores (os valores iniciais são descartados porque são sobrecarregados de ruído). Esse valor é registrado como uma identificação para aquela cor. Para identificar as cores, o sensor faz várias medidas e analisa o erro médio em relação aos valores calibrados. A cor visualizada é, portanto, aquela cujo erro médio possui a menor amplitude. ===== Conclusões ===== Este trabalho nos permitiu uma maior familiarização com os sensores, suas características e detalhes de instalação. Um dos maiores problemas foi a escolha dos sensores, sua construção no robô e respectiva calibração, que era influenciada por detalhes do ambiente, como luminosidade e distância dos objetos. Apesar disso, foi interessante analisar como o processo de identificar cores/linha preta alterava a saída dos sensores, assim como a variabilidade das medições fornecidas, o que nos permitiu concluir que não é possível confiar em somente uma medição do sensor. Várias medidas devem ser levadas em conta e manipuladas de forma que o robô tome as decisões de forma correta. ===== Código fonte ===== [[Main.c]] -- Função principal que abre o menu. [[Sensor.c]] -- Engloba todas as funções que controlam as leituras dos sensores. [[Led.c]] -- Engloba funções que controlam os leds. [[Calibra.c]] -- Engloba funções e menus de calibração.