Tem algum sensor de cor de arduino que além de ler rgb lê preto e branco?

Exibições: 937

Responder esta

Respostas a este tópico

Um dia comprarei um sensor de cor RGB e farei os testes.

A teoria é uma, mas a realidade pode ser outra.

Esse assunto sobre cores é muito interessante !

Sou fotógrafo amador. 

Kaione bom dia, 

O site do Lab tem  apresentado lentidão.

Isso pode ter influenciado você à postar repetidamente. 

Já vi casos aqui com inúmeras repetições de tópicos.

Acho que o problema é no site. 

Valeu galera, vou fazer as compras e testar, caso não consiga, vou comprar ldrs e o sensor de cor e irei fazer uma placa de circuito impresso com ambos..

Teste tudo antes no Protoboard !

Depois de tudo testado com sucesso, faça a sua placa PCI !

Entendido, obrigado.

Olá Eduardo!

Peguei a fórmula que você enviou e fiz alguns testes no Excel e no Paint. Gerando as cores e testando a fórmula.

Então acho que  é possível detectar o preto e branco da seguinte forma:

O branco e preto nunca é perfeito, então precisamos definir uma margem de tolerância.

Defini esses fatores de tolerância como 5 e 250, com base em testes visuais, mas esses valores podem ser refinados de acordo com a preferência.

Com base no fato de que o sensor TCS pode fornecer os fatores RGB das cores detectadas e, supondo que essas fatores estejam nas variáveis R,G e B, então podemos fazer o seguinte código:

float Y = 0.299*R + 0.587*G + 0.114*B;

if (Y <= 5) {

  Serial.print("Cor preta");

  } else if (Y >= 250) {

  Serial.print("Cor branca");

  }

Testei visualmente no Paint vários resultados e bateu com o código.

Kaione, quando você tiver o sensor, teste esse código e nos informe.

O caminho é esse mesmo.

Essa rotina calcula CVMod que é o modulo dos vetores, que representa a pureza da cor.

Calcula ainda o Brilho (equivalente em cinza).

E usando o angulo dentro do circulo de cores conclui o nome humano da cor.

void defcor(void)
{ unsigned int i;
i=30*CorR;
i/=400;
CVLum=i;
i=59*CorG;
i/=400;
CVLum+=i;
i=11*CorB;
i/=400;
CVLum+=i;
Brilho=CVLum;
Vx=60 + (CorG*cos30*Fator)- (CorR*cos30*Fator);
Vy= 70-(CorB*Fator)+
(CorR*sen30*Fator)+
(CorG*sen30*Fator);
if (Vy==70.0) Vy=69.0;
VDy=-(Vy-70.0);
VDx=Vx;
VDx-=60.0;
if (VDy==0) VDy=1;
if (VDx==0) VDx=1;
CVAng=(int) (57.29578*atan(VDy/VDx));
if (VDx<0) CVAng=180+CVAng; else
if (VDy<0) CVAng=CVAng+360;
CVMod=(int) (sqrt((VDx*VDx)+(VDy*VDy)));


if (CVMod<6) {
if ((CVLum>0) && (CVLum<81)) CVCor=CPreto;
if ((CVLum>80) && (CVLum<=139)) CVCor=CCinza;
if ((CVLum>140) && (CVLum<=255)) CVCor=CBranco;
}
if (CVMod>=6)
{
if ((CVAng>=0) && (CVAng<=26)) CVCor=CVerde;
if ((CVAng>=27) && (CVAng<=49)) CVCor=CCiano;
if ((CVAng>=50) && (CVAng<=125)) CVCor=CAzul;
if ((CVAng>=126) && (CVAng<=184)) CVCor=CRoxo;
if ((CVAng>=185) && (CVAng<=226)) CVCor=CVermelho;
if ((CVAng>=227) && (CVAng<=254)) CVCor=CLaranja;
if ((CVAng>=255) && (CVAng<=275)) CVCor=CAmarelo;
if ((CVAng>=276) && (CVAng<=360)) CVCor=CVerde; }

}

Boa tarde!

Só como curiosidade!

Essa fórmula

float Y = 0.299*R + 0.587*G + 0.114*B;

Resolve um problema que eu tive há muito tempo atrás.

Na época, nós precisávamos desenvolver um utilitário em Java para Windows que tinha que ler uma arquivo de imagem  (JPG) colorido e convertê-lo para tons de cinza. Fizemos um algoritmo maluco cheio de IFs.

Com essa fórmula, o algoritmo para isso fica mais simples e rápido.

Legal.

Esse valores vem de:

https://en.wikipedia.org/wiki/YCbCr

O YCbCr foi um formato criado para a TV colorida. Originalmente ela era preto e branco (apenas Y) e era preciso enfiar a informação de cor no Y sem gerar incompatibilidade. Não vou entrar em detalhes de como, mas foi somado ao sinal o CbCr. Assim um sinal colorido era captado por uma tv preto e branco que via apenas o Y. As coloridas percebiam os 3 sinais e decodificavam em R,G e B usando para isso apenas ganhos em amplificadores, já que foi criada sem circuito digital algum. Pura valvula e depois transistor. Essa equação é de antes dos anos 50, quando começou a TV colorida no mundo.

A forma usada para modular colorido onde antes se modulava apenas preto ou branco é comparável ao que fazem hj de enfiar um sinal digital em outro analógico com as interfaces Hart. Uma "novidade" tecnológica..

Ref:

https://en.wikipedia.org/wiki/Highway_Addressable_Remote_Transducer...

Veja que projeto legal !  Use um led WS2812 !

https://github.com/eletronite/arduino/tree/master/projetos/Sensor-d...

Obrigado turma, farei os testes, gostei bastante da dica José Augusto, e achei muito interessante o vídeo José Gustavo, farei ambos os testes, obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço