Trabalho Prático II
O Trabalho Prático II consiste em adicionar sensores óticos (sensor infravermelho e LDR).
Caracterização dos sensores infravermelho
A caracterização dos sensores é a feita através da realização de diversas medidas para um ponto de operação.
Construimos um programa capaz de enviar para porta serial do computador as medidas dos sensores ligados na Handy Board.
Utilizando esse programa, colocamos uma peça de Lego localizada a 2mm dos sensores e cobrimos todo o conjunto com uma caixa de papelão. Realizamos 100 medidas e contruimos a gaussiana abaixo:
Analizando a curva acima, percebemos que nossos dados possuem um desvio padrão pequeno.
Em seguida, repetimos o procedimento acima com a luminosidade do ambiente (sem cobrir a montagem). A gaussiana, média e desvio padrão das medidadas são mostrados abaixo:
Analisando os gráficos acima, percebemos que a luminosidade do ambiente causou um “offset” nos dados(sensor 3 em 1,3% e sensor 5 em 3,4%). Além disso o desvio padrão também aumentou no sensor 3 em 1,3% e diminuiu no sensor 5 em 19,4%.
Agora realizando diversas medidas para uma distância e variando esta distância entre 1mm e 15mm, constrimos o gráfico de gaussianas e a tabela com as médias e desvio padrão:
Distância(mm) | 1 | 2 | 3 | 4 | 6 | 8 | 10 | 13 | 15 |
---|---|---|---|---|---|---|---|---|---|
Media Sensor3 | 229.4600 | 194.2500 | 168.9400 | 200.8600 | 223.0990 | 233.6040 | 246.0792 | 249.0594 | 249.9500 |
Sigma Sensor3 | 0.5009 | 0.4352 | 0.3120 | 0.3487 | 1.2042 | 0.5306 | 0.5601 | 0.4652 | 0.4352 |
Media Sensor5 | 226.1616 | 185.9600 | 141.0200 | 178.4600 | 218.7647 | 234.9412 | 247.3235 | 250.4412 | 251.1324 |
Sigma Sensor5 | 0.4451 | 0.1969 | 0.1407 | 0.5009 | 0.4273 | 0.5431 | 0.6094 | 0.6320 | 0.7104 |
Também plotamos os gráficos de Luminosidade X Distância:
Percebe-se que os gráficos de Luminosidade X Distância se comportam como uma função exponencial p/ valores entre 3mm e 15mm. A função poderia ser linearizada em torno da distância 5mm, sendo válido para os valores entre 3mm e 6mm.
A validação dos modelos exponencias foi realizada colocando o bloco utilizado a 4 distâncias diferentes das usadas anteriormente. Calulamos o erro médio entre o valor medido pelo sensor e o valor calculado pela sua função para cada medida:
Distancia(mm) | 5 | 7 | 9 | 11 |
---|---|---|---|---|
Luminosidade Sen.3 (medida) | 209 | 232 | 241 | 247 |
Luminosidade Sen.3 (calculada) | 211.8591 | 231.8159 | 241.3306 | 245.8668 |
Erro Sensor 3 | -2.8591 | 0.1841 | -0.3306 | 1.1332 |
Luminosidade Sen.5 (medida) | 199 | 228 | 244 | 249 |
Luminosidade Sen.5 (calculada) | 201.3360 | 228.8753 | 241.4451 | 247.1824 |
Erro Sensor 5 | -2.3360 | -0.8753 | 2.5549 | 1.8176 |
Identificação de cores
Desejamos identificar blocos de diferentes cores com os sensores de infravermelho. Descobrimos a distância ideal entre o bloco e o sensor, plotando os gráficos de luminosidade média e desvio padrão X distância.
Observando ambos os gráficos, percebemos que o valor mínimo da luminosidade média e desvio padrão ocorrem em 3mm para os dois sensores. Portanto, usaremos esta distância para identificar as cores dos blocos.
Coletamos 1000 medidas para cada cor e construimos os histogramas abaixo:
Criamos um programa capaz de identificar as cores amarela, azul e vermelha. Inicialmente calibra-se o sensor, informando a intensidade mínima e máxima de cada cor. Quando solicitado para identificar uma cor, o programa coleta várias medidas durante 5 segundos e utiliza a média desses valores para determinar a cor.
Sensores LDR
Inicialmente ligamos os sensores na Handy Board e a cada segundo mostravamos na tela o valor lido destes. Utilizamos o programa do livro normal.c e percebemos que poderiamos atuar no motor com um valor proporcional a leitura de um sensor. Realizamos diversos teste e verificamos a influência da luz do ambiente e sombras. Decidimos criar uma interface de calibração para estes sensores, dessa forma podemos compensar a variação da luminosidade do ambiente.
Andando na linha
Utilizamos os sensores LDR para fazer o robô seguir a linha preta. O programa criado atua nos motores proporcionalmente ao tempo, ou seja, quando um sensor toca a linha, um sinal de atuação cresce a medida que o tempo aumenta. Esse algoritmo é capaz de seguir uma linha preta. Quando ocorre uma bifurcação, giramos o robô 90 graus. Optamos por não utilizar a média de variás medidas (como foi feito para identificar as cores) devido não ocorrer problema caso uma leitura isolada do sensor esteja incorreta. O código do programa em *.ic está disponível no link abaixo.