Trabalho Prático 2

1 - Caracterização do sensor

Para a realização deste item foram verificadas as condições apresentadas no roteiro do trabalho. Montamos o sensor óptico, oferecido juntamente com o conjunto de materiais da disciplina, no robô utilizado na apresentação do trabalho prático anterior. Para o anteparo de medição, foi utilizado um conjunto de 6 peças lego (32mm x 16mm x 9.6mm) da cor azul. Inicialmente, mantivemos a peça a 3mm do anteparo “protegida” por uma caixa de papelão, a fim de se evitar entradas modificantes na medição do sensor. O gráfico obtido para esta situação pode ser observado na figura 1.

Figura 1 – Gráfico do sensor com proteção
Figura 1 – Gráfico do sensor com proteção

Observamos que a medição do sensor não possui um valor exato devido à existência de diversas entradas modificantes existentes em um ambiente real. Entre estas entradas podemos citar modificações de temperatura, questões de quantizações na conversão analógica digital, ou mesmo modificações na própria intensidade luminosa. Para o critério de erro utilizamos 3 desvios padrões, critério este que também será utilizado nas próximas analises. Após avaliar a condição com a proteção, retiramos a proteção para verificar a interferência no processo de medição. O gráfico resultante pode ser observado na figura 2.

Figura 2 – Gráfico do sistema sem proteção
Figura 2 – Gráfico do sistema sem proteção

Para o sistema sem proteção observamos uma maior variabilidade do sinal do sensor. Podemos concluir que esta variabilidade é resultante de interferência da iluminação ambiente, mesmo em um pequeno intervalo de tempo. Sabemos que no ambiente estão presentes não apenas freqüências dentro do espectro visível, mas também freqüências mais baixas que podem interferir mais fortemente no sensor, segundo consta em seu próprio datasheet. Apesar da variação, observamos que a média do valor observado continua a mesma. Desta forma, concluímos que a filtragem dos dados, mesmo com interferências externas podem levar a obtenção de resultados bastante confiáveis. Finalmente, observamos a aquisição de valores do sensor com motor funcionando. Para isto, o motor foi utilizado com as rodas viradas para cima de tal forma a evitar seu movimento. Os valores obtidos podem ser verificados na figura 3.

Figura 3 – Gráfico com o motor funcionando
Figura 3 – Gráfico com o motor funcionando

Observamos que com o motor funcionando a variabilidade dos dados do sensor aumenta significativamente. Neste caso não será possível observar o valor médio, pois a condição utilizada não foi a mesma verificada anteriormente.

Obtenção das curva de calibração

Posicionamos o anteparo utilizado anteriormente em diferentes valores de distância do sensor infravermelho. Para cada valores de distancia observamos 15 medições diferentes. O resultado pode ser observado na figura 4.

Figura 4 – Variação da posição do anteparo
Figura 4 – Variação da posição do anteparo

Observamos que a medida de tensão do sensor varia com um caráter logarítmico, com uma grande sensibilidade a variações no começo de sua faixa, diminuindo gradativamente com o aumento da distancia. Podemos observar também que, com o aumento da distancia a variabilidade dos dados do sensor aumentam, indicando uma diminuição da confiança nos valores dos dados.

Linearização dos dados

Podemos observar no gráfico da figura 4 que para diferentes valores de distancia o sensor possui diferentes valores de sensibilidade. Vamos observar neste momento a possibilidade de linearização da curva de dados do sensor. Observando novamente a figura 4, podemos observar que o sensor possui uma característica aproximadamente linear para pequenos valores de distancia. Vamos tentar aproximar por duas retas e verificar qual delas apresenta uma melhor relação. O gráfico resultante pode ser observado na figura 5.

Figura 5 – Linearização
Figura 5 – Linearização

Na figura 5, podemos observar as duas retas aproximadas. Para observar a possibilidade de linearização, posicionamos o anteparo para as distancias de 6mm e 8mm. Tais valores foram escolhidos de tal forma a observar o quanto as duas retas geradas seriam capazes de validades dados através de interpolação e extrapolação. Para o valor de 6mm encontramos um valor de tensão de 1.59V. Substituindo na equação de y1 encontramos o valor de 6.04mm e na equação de y2 encontramos 5.94mm. Para 8mm, encontramos o valor de tensão de 3.39V, que substituindo na equação de y1 levou a 7.73mm e na equação de y2 8.25mm. Concluímos então que a aproximação através de uma reta pode levar a resultados satisfatórios para pequenos deslocamentos (até 7mm, aproximadamente). Sabe-se que existe uma patente da década de 1980 que trata da medição de pequenos deslocamentos através de fototransistores. Utilizando-se sensores de maior precisão, com uma faixa de aquisição de freqüências mais estreita, é possível medir com precisão de micrometros alguns deslocamentos da ordem de poucos milímetros. Sensores de baixo custo como os utilizados neste trabalho não permitem tal precisão, mas tal precisão seria de até mesmo desnecessária.

2 - Distribuição entre a cor dos blocos

Para determinar uma forma de se diferenciar a cor dos bloquinhos de isopor forncecidos na disciplina, optamos por inicialmente utilizar a distancia de três milímetros. Segundo o próprio fabricante, a distancia de três milímetros do sensor é o ponto onde este possui o seu funcionamento ótimo.

Desta forma, o primeiro teste foi posicionar cada um dos blocos a uma distancia de três milímetros do sensor. Para verificar a variabilidade do sinal, posicionamos quatro faces diferentes de cada bloco, e para cada face fizemos 15 aquisições de tal forma a verificar a consistência do sinal. O resultado pode ser verificado na figura 1.

Figura 1 – Gráfico para 3mm
Figura 1 – Gráfico para 3mm

Podemos observar que a cor amarela pode ser relativamente bem identificada. Entretanto, a cor vermelha não se apresenta muito bem identificada, dificultando a identificação das demais cores. Observamos também que nesta faixa de operação específica quaisquer pequenas variações na distância do bloco podem gerar grandes alterações de valor aquisitado. Desta forma, optou-se por verificar o padrão em outras distancias.

Tentou-se então verificar o padrão apresentado para uma distância de 5mm. A metodologia adotada foi a mesma verificada para a distancia de 3mm. Os resultados podem ser verificados na figura 2.

Figura 2 – Gráfico para 5mm
Figura 2 – Gráfico para 5mm

Verificamos então que mais uma vez a cor amarela pode ser facilmente identificada, assim como a cor azul pode ser identificada desta vez. As cores verde e vermelha ainda não podem ser facilmente identificadas, de tal forma que resolveu-se utilizar uma outra distancia que possibilitasse uma melhor identificação das cores. O passou seguinte foi observar o padrão apresentado par 10mm. O resultado gerado pode ser verificado na figura 3.

Figura 3 – gráfico para 10mm
Figura 3 – gráfico para 10mm

Pela terceira vez observamos que a cor amarela é aquela que pode ser mais facilmente identificada. Entretanto, as demais cores mostraram-se difíceis de serem distinguidas. Foi realizado então um quarto teste, partindo-se da mesma metodologia, para observar os resultados em 20mm. A figura 4 pode identificar os valores observados.

Figura 4 – Gráfico para 20mm
Figura 4 – Gráfico para 20mm

Finalmente, parece ter sido obtido um resultado que permita encontrar uma forma de se indentificar bem os blocos de isopor. Entretando, observando-se bem pode-se observar que a diferença entre os valores aquisitados parece ser apenas de um valor numérico do conversor A/D da Handyboard. Desta forma não parece ser confiável observar esta diferença. Além disto, observou-se que a intensidade luminosa ambiente interfere significativamente nos resultados obtidos.

3 - Exercícios

Item 4

1) Para saber quais valores usar de máximo e mínimo para conversão da função “normalize”, serão feitas 10 medidas na claridade máxima e mínima do ambiente para cada sensor(foram feitos para os dois sensores LDR).

Sensor 1 na claridade máxima Sensor 2 na claridade máxima Sensor 1 na claridade mínima Sensor 1 na claridade mínima 10 10 251 254 11 9 252 253 12 9 253 252 10 9 252 254 8 10 251 254 10 8 251 253 11 8 252 252 8 8 254 253 9 10 253 254 8 9 253 254

Portanto, como valores máximo e mínimo, serão utilizados os valores 8 como mínimo e 254 como máximo para ambos os sensores.

2) Ao invés de utilizarmos a função “normalize” como pedido, foi enviado para a handyboard o seguinte código:

void main(){

  int max= 8;
  int min = 254;
  while(1){
      int light = analog(1);
      int output = 100 - ((light - max)*100)/(min - max);
      if (output<0){output = 0;}
      if (output>100){output = 100;}
      printf("normal=%d\n",output);
      sleep(0.1);
  }

}

Para o sensor 2, que foi ligado na entrada analógica 3 foi feita uma pequena alteração no código para que a variável “light” seja lida da entrada 3.

Os resultados obtidos foram exatamente o que eram esperados. Para ambos os sensores, quando foram apontados diretamente para a luz ambiente na janela, a marcação variou de 95 a 100. Quando os colocamos em uma caixa fechada, medimos uma faixa de valores que variou de 0 a 4.

3) Como os valores medidos para serem o valores máximos e mínimos foram medidos experimentalmente, uma variação no ambiente podem fazer com que a medição no escuro seja maior que 254, o que faria o valor da variável “output” ser menor que zero, ou menor que 8, o que causaria um valor de “output” maior que 100.

Item 5

1) O número de amostras armazenadas é função do tamanho do vetor “line” através da seguinte função: n° de amostras = (tamanho do vetor – 7) x 2.Como o tamanho de vetor é 50 elementos, teremos 86 amostras armazenadas. Assim, com uma taxa de amostragem de 7.8125Hz, levará 11 segundos para encher o buffer histórico do sensor.

2) Foi colocada uma fita parede e o sensor apontado de forma que ficasse de frente para ela. Então, foi feita a calibração dos sensores e finalmente foi iniciada a execução. Inicialmente, o robô foi cuidadosamente posicionado a aproximadamente 5mm da parede com a fita colada. Quando o robô partiu, conseguiu seguir a linha por alguns centímetros até que se distanciasse da parede, provavelmente por irregularidades no chão. Neste momento, ele virou para a esquerda para procurar novamente a linha e não conseguiu voltar mais.

3) O robô foi colocado em uma ambiente fechado com uma forte iluminação e com o sensor apontado para a fonte de luz. O valor lido foi durante todo o tempo foi igual a 2. O resultado observado foi que o robô não se moveu, como já era esperado.

6) Neste exercício fizemos uma função para ler o valor da saída dos motores, o qual é um número de 8 bits no endereço de memória 0x0e. Os quatro bits mais significativos indicam quais motores estão ligados e os quatro menos significativos representam a direção que o motor correspondente foi ligado.

4 - O robô

Seguindo a linha preta

O robô foi feito utilizando apenas um sensor para identificar a linha preta. A estratégia utilizada pode ser definida nos seguintes passos:

Inicialmente, o robô gira para a esquerda formando uma circunferência de um raio razoavelmente grande, de forma que seja fácil identificar algum ponto da linha preta.

Após encontrar a linha preta ele continua seu movimento de giro até que saia da linha preta. Como o raio da circunferência realizada pelo giro do robô é grande, seu movimento num curto espaço de tempo é somente um pouco curvo. Dessa forma, no espaço de tempo entre o robô entrar na linha preta e sair dela, ele faz uma oscilação pequena em torno da linha preta.

Quando o sensor sai da linha preta, o robô da uma pequena pausa e, então, liga os motores de forma invertida, de tal modo que inicie uma circunferência de mesmo raio da anterior, porém para o sentido oposto.

Esse movimento se repete até que o botão de stop seja pressionado ou até que o tempo limite pré-estabelecido tenha passado. Esse tempo limite pode ser regulado através de uma função na própria handyboard e pode variar de 30 a 50 segundos

Dessa forma, o movimento to robô é um movimento que oscila entre a linha preta, indo em cada momento para um lado diferente.

Identificando cores

Para a identificação das cores, foi construída uma pequena plataforma onde foi acoplado o sensor. Essa plataforma tem espaço suficiente para comportar cada um dos blocos individualmente.

Com relação à interface de identificação de cores, foi feito um menu na handyboard para este fim. Este menu contém duas opções: uma para calibrar os sensores e outra para identificar as cores.

Quando o menu para calibrar os sensores é selecionado, ele pede um bloco de cada vez em uma ordem pré-estabelecida e espera a tecla start ser pressionada. Quando isto ocorre são feitas dez leituras do sensor e então é tirada a média das leituras. Esse processo se repete até que todos os 4 blocos tenham sido verificados. Então, esses valores são ordenados em ordem crescente e os limiares são calculados baseados nos valores já ordenados, de forma que seja possível testar os valores medidos na ordem crescente durante a identificação das cores.

Quando o menu de identificar as cores é selecionado, ele faz dez leituras do sensor e calcula a média dos valores lidos. Então compara esse valor com cada um dos limiares calculados na ordem em que eles foram ordenados. A resposta é dada de acordo com essa comparação com os limiares.

Fotos
dsc00353.jpgdsc00354.jpgdsc00355.jpg

O código fonte do programa implementado está no arquivo zip do link: código fonte

cursos/introrobotica/2007-2/grupo8/tp2.txt · Última modificação: 2007/10/18 19:56 (edição externa)