Este trabalho possui três objetivos:
Todos os itens citados devem ser facilmente organizados em um menu.
Foi feita a montagem dos LDRs com os polarizadores, como mostra a foto abaixo:
Esse módulo foi posicionado na parte traseira do robô, de forma que, ao se alinhar para a luz, o mesmo fique de frente para o lado livre da mesa.
Os valores de conversão analógica digital encontrados para as medições de luminosidade perto da luz são, para o lado A (logo em frente à porta): entre 200 e 300 com o robô voltado para luz e aproximadamente 600 para qualquer outro lado; para o lado B: aproximadamente 900 com o robô voltado para luz e 600 para qualquer outro lado.
Para a odometria, utilizou-se os pinos de interrupção, número 18 e 19, e um shaft encoder; cada interrupção é feita por um dente de uma engrenagem, que tem o total 24 dentes, e uma volta completa da roda equivale a 14cm.
Os cálculos de velocidade são feitos a cada segundo, gerando uma valores com unidades em cm/s. Esta velocidade é utilizada no controlador que trabalha para manter a velocidade em aproximadamente 10cm/s, a ideia é que ambas as rodas mantenham a mesma velocidade para que o robô faça uma reta e além de tudo completasse uma distância pré-determinada.
Utilizou-se o controlador da biblioteca PID, pareceu ser uma boa escolha já que seria possível abstrair a parte da criação do controlador, e a biblioteca permitia inserir parâmetros como KP, KI e KD. Seguindo essa linha de raciocínio, a biblioteca exigia um input para Setpoint e outro para valores reais dos parâmetros(no caso velocidade), assim a velocidade calculada é utilizada como parâmetro para alcançar a velocidade de setpoint.
Os maiores problemas durante a implementação foram o escorregamento das rodas, que ocorriam sempre, o que dificultou bastante tanto a parte de odometria, quanto qualquer outro movimento que fosse necessário. O escorregamento foi frequente, talvez, porque o robô ficou bastante estreito e as rodas ficaram bem próximas, além de essas serem bastante lisas. O outro problema foi a implementação do controle, o robô consegue andar reto, mas ao tentar realizar um quadrado, apesar de esse acertar o ângulo de giro, não era obtido o resultado esperado. Ao retornar da função de girar 90° e tentar fazer uma reta, o robô tendia para o lado contrário do giro, o que talvez seja por conta de o controlador tentar compensar a roda que fica parada durante o giro.
Um segundo problema está ligado a taxa de amostragem, tendo em vista que a velocidade das rodas eram baixas e havia somente 24 dentes, nem sempre os valores eram aquisitados num tempo ideal para fazer o controle no instante exato; dessa forma, ao começar a andar o robô ja iniciava tendendo para um lado até o controle ser feito.
Na tarefa de navegação o grupo usou 2 sensores óptico-reflexivos um do lado do outro na frente do robô para seguir uma linha preta no chão.
Para se orientar na linha é feita uma leitura digital em ambos os sensores, um resultado de 1 equivale a o sensor estar em cima da linha e um resultado 0 corresponde a estar no chão branco/fora da linha.
Um sensor devolver um valor 0 quer dizer que o robô está se movendo inclinando em determinada direção e saindo da linha, então o motor correspondente ao lado do sensor cuja leitura é 0, motor da esquerda se for o sensor da esquerda e motor direito se for o da direita, tem sua velocidade aumentada para que o robô comece a andar inclinado na direção oposta, voltando para a linha até ter uma leitura contrária, como o sensor do lado oposto retornando o valor 0 e fazendo um movimento semelhante para o outro lado, andando sempre em diagonal em cima da linha.
Dificuldades encontradas: