Eu estava precisando saber as cores de determinados objetos, mas como fazer isso?

Pesquisei na internet, achei alguns componentes que fazem essa leitura, mas são caros, difíceis de encontrar e são encontrados em sites gringos, ou seja o frete é caro demais para um componente de 1 ou 2 gramas e demorado para chegar.

Nessas condições fui obrigado a fuçar e pesquisar a respeito de gambiarras rs, cheguei a seguinte conclusão,
de usar um photoresistor (LDR) para descobrir a cor, para esse projeto eu usei o Arduino Duemilinove pois estava com ele parado e é bem fácil e prático de trabalhar com ele.

Veremos agora um pouco da física, do que é necessário saber para entendermos o funcionamento de um Sensor de Cor:

Todos sabemos que a luz branca é a união das cores primárias:

Cores primárias para quem não se lembra é o famoso RGB (Vermelho(Red), Verde(Green), Azul(Blue)).

O que acontece é, quando a luz chega em um objeto azul por exemplo, será refletido apenas a luz azul:

No caso de um objeto vermelho, será refletido apenas a cor vermelha, e assim sucessivamente, para podermos saber que cor é o objeto, usaremos as cores básicas para iluminar o objeto e captarmos os dados do nosso photoresistor (LDR). Para iluminar o objeto usei o LED RGB, que possui uma alta intensidade luminosa, chegando a quase 8000 mcd.

Nosso LED RGB:

Até aqui tudo certo, mas temos um problema, se você testar cada cor do LED com o LDR, verá que uma cor possue um brilho maior que a outra, e como podemos resolver isso? Vamos usar uma cartolina branca (de preferencia) colocarmos ela a uma determinada distancia do LDR, lembrando que essa distancia deve ser +/- igual a que os objetos ficaram do Sensor. E guardaremos os dados de cada cor do LED, mas por que isso?

A cartolina sendo branca retorna todas as cores, sendo assim quando o LED vermelho por exemplo acender ele retorna todo o vermelho, e teremos +/- o valor ideal captado pelo sensor, usaremos esses valores da calibração para normalizarmos os valores que receberemos dos objetos coloridos.

Vamos ver um exemplo de como faremos essa normalização:

Colocamos a nossa cartolina branca na frente do sensor e guardamos os valores obtidos, por exemplo:

Vermelho:  942.0f         –      Verde: 955.0f        –       Azul: 916.0f

(Aqui podemos ver com a cartolina branca que o verde possui um brilho maior que o azul e vermelho, e o vermelho maior que o azul, isso não pode acontecer, temos que igualar esses “brilhos” rs)

Agora colocaremos uma cartolina azul na frente do sensor e obtemos o valor (lido pelo LDR):

Vermelho:  1004.0f         –      Verde: 994.0f        –       Azul: 934.0f

Agora usaremos nossos valores da calibração com os valores lidos e calcularemos o valor correto da cor do objeto, usando a seguinte fórmula:

Math.round(255.0f*(1024.0f-(float)CorLida[i])/(1024.0f-(float)CorCalibracao[i]))

(O Math.roud é uma função que arredonda o valor, está em Java)

Se jogarmos nossos valores na fórmula iremos obter:

Vermelho:  62.0f         –      Verde: 111.0f        –       Azul: 213.0f

Agora podemos ver que está correto, o azul está com o valor maior que todos e se procuramos em uma tabela de cores (pode ser na do paint) obteremos uma cor azul.

(Foi usado o editor de cores do paint)

É isso galera, espero que tenham gostado, qualquer duvida só postar aqui que irei tira-las 🙂

Fica algumas fotos e o video!

[]’s

Advertisements