Latest Entries »

Postei anteriormente como podemos fazer um Sensor de Cor usando um simples LDR e alguns LEDs.

Porém não havia postado o código que devemos gravar no Arduino e os materiais usados.

Então aqui está para quem quer montar um :)

  • 3 Transistores NPN (BC337, BC338, BC547, BC548, etc…)
  • 1 Resistor 330Ohm
  • 1 Resistor 2,2kOhm
  • 3 LEDs RGB de 5mm
  • 1 LDR (Photoresistor)
Aqui está o esquema de como deve ser montado a placa (no caso fiz usando uma protoboard, pois é mais simples no programa que uso):
E o código usado no Arduino:
#define PIN_R 13
#define PIN_G 11
#define PIN_B 12
#define PIN_SENSOR 5

int SensorValue=0;

void setup()
{
	Serial.begin(9600);

	pinMode(PIN_R, OUTPUT);
	digitalWrite(PIN_R, LOW);

	pinMode(PIN_G, OUTPUT);
	digitalWrite(PIN_G, LOW);

	pinMode(PIN_B, OUTPUT);
	digitalWrite(PIN_B, LOW);
}

void loop()
{
	digitalWrite(PIN_R, HIGH);
	delay(100);
	Serial.print(analogRead(PIN_SENSOR));
	Serial.print(" ");
	digitalWrite(PIN_R, LOW);

	digitalWrite(PIN_G, HIGH);
	delay(100);
	Serial.print(analogRead(PIN_SENSOR));
	Serial.print(" ");
	digitalWrite(PIN_G, LOW);

	digitalWrite(PIN_B, HIGH);
	delay(100);
	Serial.print(analogRead(PIN_SENSOR));
	Serial.print(" ");
	digitalWrite(PIN_B, LOW);

	Serial.print("\n");

	delay (1000);
}

[]‘s

Sensor de Cor

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

Follow

Get every new post delivered to your Inbox.