Boa noite galera, gostaria de ajuda como uso deste sensor. Gostaria de usa-lo para quando identificar uma cor acionar um motor vibra call de celular para as cores azul , verde e vermelho com pulsações diferentes. Quero me me ajudem com a programação que estou com muita dificuldade por não entender quase nada de programção.

achei na net  este exemplo mas a cor vermelha o objeto tem que estar muito proximo ai sensor.

//Pinos de conexao do modulo TCS230
const int s0 = 8;
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;

//Pinos dos leds

int pinoledverm = 2;
int pinoledverd = 3;
int pinoledazul = 4;


//Variaveis que armazenam o valor das cores
int red = 0;
int green = 0;
int blue = 0;
void setup()
{ pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
pinMode(pinoledverm, OUTPUT);
pinMode(pinoledverd, OUTPUT);
pinMode(pinoledazul, OUTPUT);
Serial.begin(9600);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop()
{
color(); //Chama a rotina que le as cores //Mostra no serial monitor os valores detectados
Serial.print("Vermelho :");
Serial.print(red, DEC);
Serial.print(" Verde : ");
Serial.print(green, DEC);
Serial.print(" Azul : ");
Serial.print(blue, DEC);
Serial.println(); //Verifica se a cor vermelha foi detectada
if (red < blue && red < green && red > 50)

{ Serial.println("Vermelho");
digitalWrite(pinoledverm, HIGH); //Acende o led vermelho
digitalWrite(pinoledverd, LOW);
digitalWrite(pinoledazul, LOW);
} //Verifica se a cor azul foi detectada
else if (blue < red && blue < green)
{ Serial.println("Azul");
digitalWrite(pinoledverm, LOW);
digitalWrite(pinoledverd, LOW);
digitalWrite(pinoledazul, HIGH); //Acende o led azul }
//Verifica se a cor verde foi detectada
else if (green < red && green < blue)
{ Serial.println("Verde");
digitalWrite(pinoledverm, LOW);
digitalWrite(pinoledverd, HIGH);
//Acende o led verde
digitalWrite(pinoledazul, LOW);
}
Serial.println(); //Aguarda 2 segundos, apaga os leds e reinicia o processo
delay(2000);
digitalWrite(pinoledverm, LOW);
digitalWrite(pinoledverd, LOW);
digitalWrite(pinoledazul, LOW);
}

void color()
{ //Rotina que le o valor das cores
digitalWrite(s2, LOW);
digitalWrite(s3, LOW); //count OUT, pRed, RED
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
//count OUT, pBLUE, BLUE
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH); //count OUT, pGreen, GREEN
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); }
 

Exibições: 728

Responder esta

Respostas a este tópico

Nao conheço esse sensor, mas já fiz alguma coisa com sensores de cor da Avago (ADJD-S371).

Depois de uma rotina vc deve chegar a um numero que corresponde a intensidade de cada cor sendo "vista". Vamos pensar desse ponto pra frente, assim não importa qual o sensor.

Recomendo antes de mais nada vc fazer uma rotina boba de escrever por ex R=XXX G=XXX B=XXX na serial (monitor) de forma a entender melhor o que está acontecendo.

Com amostras de cada cor colocadas na frente do sensor (pegue amostras pela sua casa, imprima, etc), veja o resultado de cada cor nos numeros. 

Aih fazendo exatamente a análise que seu programa está fazendo vai chegar a bons resultados.

Se tiver mais verde que outras cores, então é verde !

Para cores mais complexas vc teria que fazer contas. Basicamente vale aquele anel de cores do corewdraw:

http://en.wikipedia.org/wiki/HSL_and_HSV

Se entendi seu projeto seria para cegos, é isso ?

Sim para cegos mas tenho grande problema com a programação , quero fazer uma bengala para auxiliar os deficientes visuais.

Legal.

Do jeito que está que valores ele mostra no monitor serial para uma peça verde, vermelha e azul ?

Eu desmontei tudo para fazer outros testes mas assim que montar novamente eu mando aqui 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço