13 fevereiro 2014

Sensor de reconhecimento de cor TCS230 / TCS3200

O artigo de hoje fala sobre como utilizar o Arduino para montar um sistema de reconhecimento de cores usando o módulo TCS230 / TCS3200.

Modulo reconhecimento de cor TCS230 - TCS3200

Esse módulo usa o sensor TCS230 (datasheet), que é composto por 64 fotodiodos. Desses 64 fotodiodos, 16 tem filtros para a cor vermelha, 16 para a cor verde, 16 para a cor azul e 16 não tem filtro algum.

Distribuídos uniformemente sobre o sensor, esses sensores captam a luminosidade, filtrando as cores, e geram na saída um sinal de onda quadrada com as informações sobre a intensidade das cores vermelho (R = Red), verde (G = Green) e Azul (B = Blue).

Como no módulo mostrado acima, o sensor TCS230 geralmente vem montado em conjunto com quatro leds brancos para iluminação, e oito pinos para conexão.

O módulo aceita alimentação de 3 à 5 volts e são utilizados 5 pinos para conexão ao Arduino : os pinos de controle S0, S1, S2, S3, e o pino OUT, que é o responsável pelo envio das informações.

O pino OE (Output Enable, ou saída habilitada/ativada) deve ser ligado ao GND, já que o módulo vai enviar informações continuamente ao Arduino.

Circuito TCS230 - TCS3200 Arduino Uno

No circuito adicionei 3 leds nas cores correspondentes, para que acendam quando determinada cor for reconhecida pelo sensor. Apesar de trabalhar nesse experimento apenas com as 3 cores primárias, nada impede que outras combinações sejam usadas no programa, de acordo com os níveis do sinal RGB.

No programa, os pinos S0 e S1 são colocados em nível alto e então são alternados os estados dos pinos S2 e S3, que determinam qual fotodiodo será ativado. Veja na tabela abaixo as combinações que determinam o tipo de frequência de saída e também o padrão de ativação dos fotodiodos :

Tabela de ativação TCS230 / TCS3200


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Programa : Detector de cores usando modulo TCS230  
// Alteracoes e comentarios : Arduino e Cia  
//  
// Baseado no programa original de Martin Mason  
   
//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, LOW);  
}  
    
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 < 100)  
  {  
   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);  
}

Carregue o programa e aproxime objetos de diferentes cores ao sensor. O led correspondente irá acender, e também é gerada uma saída como essa no serial monitor, onde você pode ver exatamente os níveis de sinal das cores detectadas :

Circuito TCS230 - Saida serial monitor



Em breve um vídeo demonstrando a utilização deste programa. Até lá !

Atualizado : Veja neste link o vídeo de demonstração deste experimento.



81 comentários:

  1. Olá primeiramente obrigado pelo tutorial, muito util.Mas notei um erro no seu uma linha de código está escrito:
    if (red < blue && red < green && red > 50)
    {
    Serial.println("Vermelho");
    mas na sua leitura serial pude notar:
    Vermelho:20 Verde:35 Azul : 32
    Vermelho

    O que seria um caso que não detecteria o vermelho, segundo o algoritmo. Não seria red <50?

    ResponderExcluir
    Respostas
    1. Boa noite Vinicius, e obrigado pela visita.

      Esse red>50 que eu coloquei no programa, na verdade, foi uma forma do circuito não ter "falsos acionamentos", porque eu notei que qualquer nível de vermelho, até mesmo o da luz de uma lâmpada, estava acionando o led vermelho sem necessidade, foi o que aconteceu quando eu tirei o print screen da leitura serial.

      Na hora de montar o circuito com os leds, eu adicionei esse red>50 para que o led só acendesse caso algum objeto vermelho fosse colocado em frente ao sensor.

      Como você pode ver, esse circuito ainda precisaria de alguns ajustes para ser mais preciso, mas basicamente é isso. rs.

      Abraço e obrigado !

      Excluir
    2. obrigado pelas postagens, esse sensor tem uma biblioteca pra outros funcionamentos?

      Excluir
    3. Boa tarde,

      Obrigado. Com relação à biblioteca, não encontrei nenhuma específica para esse sensor.

      Abraço !

      Excluir
  2. Olá!
    estou desenvolvendo uma aplicação científica com sensoriamento de cor e vou utilizar este código como base. está bem leve e pratico para o projeto.
    manterei-os informados sobre o andamento
    alguma forma especial para citar os créditos ?
    abç

    ResponderExcluir
    Respostas
    1. Boa noite,

      Obrigado pela visita. Se puder mencionar o site Arduino e Cia, agradeço. A autoria do post é de Adilson Thomsen.

      Aguardo informações sobre o andamento do projeto. Sucesso.

      Abraços e obrigado !

      Excluir
  3. Boa noite, eu fiz este experimento e não lia nenhuma cor. Tem alguma ideia de qual é o problema?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Nos meus testes eu tive que praticamente encostar o objeto no sensor para que a cor fosse detectada. Talvez algum sistema utilizando lentes melhore esse processo de leitura.

      Abraço !

      Excluir
  4. Boa noite.
    eu utilizei esta programação no arduino,os leds etc. Porem ao funcionar,o led azul ficava ligado como se o sensor estivesse detectando esta cor.acredito que seja algo na programação.
    Vc tem alguma ideia do que possa ser?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Eu tive um problema parecido, mas com a cor vermelha. O que eu descobri foi que a luz ambiente, seja ela a luz do monitor ou uma lâmpada fluorescente, influi nos resultados.

      De qualquer forma, veja o tipo de saída que há no serial monitor, e se necessário altera o valor no final dessa linha :

      if (red < blue && red < green && red > 50)

      Abraço !

      Excluir
  5. Olá, pretendo utilizar este sensor na análise da coloração de líquidos.
    Para isso pretendo incluir algumas ou algumas combinações de cores, você poderia me informar de como incluir isto na programação ja feita?
    Desde já agradeço!

    ResponderExcluir
    Respostas
    1. Bom dia,

      O que você pode fazer é colocar o sensor em frente ao objeto/liquido na cor XYZ, e anotar os valores que aparecem no serial monitor, por exemplo, digamos que ele mostre :

      Vermelho : 30 Verde : 20 Azul : 10

      Depois disso, você deve colocar um IF no programa, mais ou menos assim :

      IF (red = 30 & green = 20 & blue = 10)
      {
      cor_detectada = "XYZ"
      }

      E fazer isso para cada cor que você quiser detectar.

      Espero ter ajudado. Abraço !

      Excluir
    2. Ajudou sim, muito obrigado!!

      Excluir
  6. Hello
    Program is working .Thank you for that good codes (only you must change red color line ....<50 details first comments

    I want ask that how can read other colour for example yellow ,black and white etc
    thanks for circuit and codes (or algoritms)
    regards

    ResponderExcluir
    Respostas
    1. Hello,

      Thanks for the message. For do this you will need to check exactly how much red, green and blue you got when pointing the sensor to the object.

      I´m only concerned about the precision of the sensor. Maybe you need to do something to get a best "read" of the color.

      Maybe a blackbox and lens ? Is an option. :-)

      Regards !

      Excluir
  7. como faço para o arduino fazer as médias das medições e tomar decisões a partir da média e não de medições absolutas como está no programa?

    ResponderExcluir
    Respostas
    1. Boa tarde Guilherme,

      Você pode fazer isso por meio de um loop, guardando por exemplo 10 valores, depois calcular a média.

      Eu usei isso nesse post aqui, mas para medir a temperatura :

      http://www.arduinoecia.com.br/2013/03/display-lcd-16x2-e-sensor-de.html

      Eu faço a leitura da temperatura 8 vezes, nessa parte do código :

      // Loop que faz a leitura da temperatura 8 vezes
      for(i = 0;i<=7;i++)
      {
      samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
      //A cada leitura, incrementa o valor da variavel tempc
      tempc = tempc + samples[i];
      delay(100);
      }

      // Divide a variavel tempc por 8, para obter precisão na medição
      tempc = tempc/8.0;

      Veja se ajuda.

      Abraço !

      Excluir
  8. help me please download scheme to mail xy_lig_an91@mail.ru

    ResponderExcluir
    Respostas
    1. Hi !

      Circuit and program sent by email.

      Best regards !

      Excluir
  9. Muito Obrigado Amigao, estava com dificuldade e o seu code caiu como uma luva,

    Aplicacao: Pulseira que detecta dinheiro para deficientes visuais, !

    Um projeto final de uma Amiga, funcionou perfeitamente Gracas a ajuda de vcs,

    Mais uma X Obrigado

    ResponderExcluir
    Respostas
    1. Oi Alexandre !

      Muito interessante o seu projeto. Bom poder ajudar. :-)

      Abraço !

      Excluir
  10. help me please i want the program and shematic
    my email babonji91@gmail.com

    ResponderExcluir
  11. Adilson, a minha maior duvida esta no acionamento dos pinos s2 e s3. Se eu quiser identificar qualquer tipo de cor, durante a programação eu tenho que alternar o estado dos pinos para LL, LH, HL e HH?

    Obrigado

    Ítalo.

    Poderia me enviar um email italomoura91@yahoo.com.br

    ResponderExcluir
    Respostas
    1. OI Ítalo,

      Isso mesmo. Para cada cor você vai ter a intensidade de Vermelho, Verde e Azul. Basta você armazenar esses 3 valores para a cor que você quer identificar.

      Abraço !

      Excluir
    2. ola boa noite Arduino e Cia,eu não entendi quando vc falar que deve alternar os pino LL,LH,HL, HH e armazenar elas,eu devo colocar essa condição uma vez de cada vez ou colocar de uma vez só,me desculpa pela pergunta sou novo nesse ramo.

      Excluir
    3. Boa noite,

      O programa já faz isso, da linha 85 à linha 98. Ele lê os valores de vermelho, verde e azul e armazena nas variáveis red, green e blue.

      Abraço !

      Excluir
  12. Adilson, na linha de comando abaixo, ate onde pude entender, a variavel red vai receber o valor dos pulsos no pino out (lidos pela função pulseIn). Ja o digitalRead(out) vai verificar o estado de out (alto ou baixo). Não entendi a partir do == HIGH ? LOW : HIGH). por que vc usa essa interrogação e depois os dois pontos? E por que vc coloca high, low e high novamente.

    Peço desculpas por encomoda-lo novamente, mas necessito entender o funcionamento do codigo e não apenas copia-lo.

    red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

    Muito obrigado.

    Ítalo.

    ResponderExcluir
    Respostas
    1. Boa noite Ítalo,

      Não é incômodo nenhum, só espero consegui sanar a sua dúvida. :-)

      O ?: é um operador condicional, que retorna um dos dois valores (LOW ou HIGH) se a condição for FALSE ou TRUE. Você encontra mais informações e exemplos nesse link :

      http://www.learnconline.com/2010/03/conditional-operator-in-c-programming-language.html

      Abraço !

      Excluir
    2. Muito obrigado!

      Abraço!

      Excluir
  13. can u send me whole topic in english plzzz

    ResponderExcluir
    Respostas
    1. Hi !

      Please send me your email address using the contact form in the right side of this page.

      Regards !

      Excluir
    2. babonji91@gmail.com this is my email
      i just need the simulation file not the picture because i need to use it for my college project
      thank you for considering my request .

      Excluir
    3. Hi Akram,

      I sent an email on december/2014, with the code and the schematic. Did you receive ?

      Regards.

      Excluir
  14. Ola Boa noite, gostaria se e possível ligar no Arduíno uno um sensor de cores e também um motor de passos, o sensor ao identificar um cor específica ativa o motor, depois de um tempo o motor gira inversamente, abrigado, gostei muito do seu projeto, parabéns!

    ResponderExcluir
    Respostas
    1. Boa noite Cristiano,

      É possível sim, só não tenhum nenhum projeto pronto com isso ainda, mas a ideia é interessante.

      Obrigado e um abraço !

      Excluir
    2. estou com um projeto como esse!
      estou usando um motor de passo, e uma ponte H porque o arduino não tem potencia suficiente para ligar o motor sozinho e ele roda para um lado ou para o outro depedendo da cor que o sensor reconhece!
      Projeto( Plataforma de Separação Por cor).
      abraços;
      e obg pelos post....

      Excluir
  15. Boa noite,

    É possível utilizar a mesma lógica do código para a programação em FPGA?

    Desde já agradeço.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Teoricamente sim, você só precisa adaptar o código.

      Abraço.

      Excluir
  16. hola muy buen tutorial, te felicito... te puedo preguntar si se puede sensar otro color como por ejemplo el color negro(preto) o amarillo(amarelo) como podría modificarlo, perdon soy nuevo en el mundo de la programacion y me cuesta entender.. tambien funciona con un sensor TCS3200... desde ya muchas gracias pro tu ayuda amigo.. saludos

    ResponderExcluir
    Respostas
    1. Buenas tardes,

      Gracias. Sí, funciona con sensor TCS3200.

      Lo que tienes que hacer es escribir el valor de rojo, azul y verde al acercarse a un sensor de objetos amarilla, y el uso de estos valores en un IF dentro del programa.

      Supongamos que acercarse a un sensor de objetos de color amarillo y tiene los valores de 30 para el rojo, 10 para el azul y 40 para el verde (comprobar estos valores en el monitor de serie), el SI se vería así:

      //Verifica se a cor amarela foi detectada
      else if (red = 30 && blue = 10 && green = 40)
      {
      Serial.println("Amarelo");
      }

      Espero que esto ayude.

      Saludos!

      Excluir
    2. muy agradecido hermano, me ayudo y si funciona... gracias de verdad.

      Excluir
  17. Olá tudo bem?Parabéns pela matéria

    Gostaria de saber se é possível pegar somente uma cor através deste sensor, como por exemplo o verde? Para está cor, eu posso ligar o S0, S1, S2e S3 em 5 volts e somente pegar o número de pulso funciona?

    Muito obrigado
    Eduardo

    ResponderExcluir
  18. boa noite Arduino e Cia, se eu nao ligar os pinos S0 e S1 pode mudar algo na hora do sensor pegar as cores

    ResponderExcluir
    Respostas
    1. Boa noite,

      sim, recomendo ligar os pinos S0 e S1.

      Abraço !

      Excluir
  19. Ola, o seu artigo me ajudou muito a entender o funcionamento do sensor de cor, obrigado. Contudo eu acabei modificando bastante o codigo para poder detectar melhor as cores. Foram duas as principais mudanças, primeiro a medida dos pulsos tomei a media de alguns pulsos de forma a minimizar erros de uma unica leitura. Segundo converti as cores RGB para HSL. Nesse formato, a cor verde, por exemplo, fica a 120 graus. Então caso o H (do HSL) fique nas proximidades de 120 ele detecta como verde. Caso queira que eu mande o código para compartilhar com demais visitantes do site me avise.
    Masaki

    ResponderExcluir
    Respostas
    1. Eu gostaria de ver o seu código se for possivel obrigado.

      Excluir
  20. Ola, o seu artigo me ajudou muito a entender o funcionamento do sensor de cor, obrigado. Contudo eu acabei modificando bastante o codigo para poder detectar melhor as cores. Foram duas as principais mudanças, primeiro a medida dos pulsos tomei a media de alguns pulsos de forma a minimizar erros de uma unica leitura. Segundo converti as cores RGB para HSL. Nesse formato, a cor verde, por exemplo, fica a 120 graus. Então caso o H (do HSL) fique nas proximidades de 120 ele detecta como verde. Caso queira que eu mande o código para compartilhar com demais visitantes do site me avise.
    Masaki

    ResponderExcluir
    Respostas
    1. Boa noite Masaki,

      Obrigado. Eu planejava melhorar esse código mas realmente não tive tempo de ver isso. Se puder me mandar, agradeço. Faço um teste e complemento o post, será muito útil para os outros leitores.

      Abraço !

      Excluir
    2. Você postou esse código? Gostaria de testá-lo.

      Excluir
    3. Bom dia, Masaki ou Arduino e Cia poderiam compartilhar o código-fonte em que as cores são convertidas de RGB para HSL, por favor? Muito obrigado!

      Excluir
  21. Este comentário foi removido pelo autor.

    ResponderExcluir
  22. Olá Boa Noite!
    Por que as portas semelhantes S0 e S1 / S2 e S3 não são ligadas nas mesmas portas do arduino?

    s0 = 8;
    s1 = 9; PWM
    s2 = 12;
    s3 = 11; PWM


    Obrigada

    ResponderExcluir
    Respostas
    1. Boa noite Jessica,

      Sim, elas são ligadas em portas PWM, mas na verdade o estado delas é apenas alto (High) ou baixo (Low), poderiam ser ligadas em outras portas do Arduino, sem problemas.

      Abraço!

      Excluir
  23. hola buenas noches queria saber porque no me sale la ventana donde se pueden ver los niveles de señal exactas de colores detectados y si me podria ayudar de antemano gracias

    ResponderExcluir
  24. hola buenas noches queria saber porque no me sale la ventana donde se pueden ver los niveles de señal exactas de colores detectados de antemano gracias

    ResponderExcluir
  25. hola al probarlo no me sale la ventana donde se pueden ver los niveles de señal exactas de colores detectados quería ver si me podría ayudar con esto de antemano gracias

    ResponderExcluir
  26. Olá! Parabéns pelo post, muito bom mesmo.

    Gostaria de saber se é possível detectar a cor amarela e se for possível o que acrescentaria no código?

    ResponderExcluir
    Respostas
    1. Boa noite Larissa,

      É possível sim. O que você tem que fazer é ver qual nível de vermelho, verde e azul é detectado pelo sensor, e fazer um IF que testa isso.

      Exemplo: você aproxima um objeto de cor amarelo e faz a leitura dos sensores, dái ele mostra:

      Vermelho: 40
      Verde : 50
      Azul: 20

      Ai vc monta um IF mais ou menos assim:

      IF (vermelho == 40 & verde == 50 & azul == 20)
      {
      Serial.println("Cor amarela detectada")
      }

      É mais ou menos isso. :)

      Abraço!

      Excluir
  27. Boa tarde! Obrigado pelo ótimo artigo e pelo código. Estou fazendo um trabalho com esse sensor para um cliente e ainda estou estudando o datasheet do módulo, bem como a matematica envolvida para transformar o RGB em CIELAB, mas percebi uma coisa na confiuguração que vc usou e vendo os comentários acredito que possa ser o problema do falso acionamento do vermelho. Pela configuração usada com S0 e S1 em HIGH, a frequencia de sensibilidade é de 600KHz, o que acredito ser muito para detectar com o pulseIn() do Arduino. Vc chegou a testar os outros 2 niveis em 20% e 2%? Acho q o ideal seria usar o 2% para a frequencia de operação ficar entre 10Khz e 12Khz, que é mais tranquilo de trabalhar, pois teríamos taxas de amostragens na escala de 10uS, contra 1,6667uS da configuração em 100%. Acredito ser esse o problema da sensibilidade e nessa taxa de amostragem de 1,6uS por sampling o Arduino não pode fazer mais nada, senão vai perder leitura. Talvez isso resolva o problema de "falso acionamento" da cor vermelha. Vou fazer uns testes e volto a postar, se houver interesse de sua parte. Qqer coisa só me avisar no email renato.aloi@gmail.com -- Abcs Renato Aloi

    ResponderExcluir
    Respostas
    1. Boa noite Renato !

      Tudo bem ? Rapaz, sinceramente eu não testei mais esse sensor, apesar de estar na minha lista de "posts a melhorar". Só testei ele com 100%, mas o que você falou faz sentido. Se você puder contribuir, agradeço. Vou ter mandar um email daí conversamos.

      Obrigado pela visita. E também pelos seus vídeos, aprendi muito com eles. :)

      Abraço!

      Excluir
    2. Obrigado! Fico feliz em saber que meus videos ajudaram de alguma forma! Obrigado mesmo! Eu avancei nos estudos e realmente a função pulseIn() trabalha na faixa "from 10 microseconds to 3 minutes" (https://www.arduino.cc/en/Reference/PulseIn), então 1,6 microsegundos é muito rápido para a função. Vou ajustar o código pra funcionar na fequencia dos 2% e lhe passo como forma de contribuição. Me escreve um email para mantermos contato e eu lhe passar o código atualizado. Parabéns pela contribuição para a comunidade Arduino q vc presta. Eu sei o trabalho q dá :) Valeu! Abcs Renato

      Excluir
    3. Oi Renato!

      Show. valeu pelo retorno. Te envio o email em seguida.

      Abraços e obrigado!

      Excluir
  28. Boa tarde! Estou desenvolvendo um projeto de misturador de tinta! Pode me auxiliar na programação e no circuito? Obrigado!

    ResponderExcluir
  29. Olá, estou desenvolvendo um robô na minha escola(CEFET) para competir na OBR e pensei em utilizar este sensor de cor para fazer leitura das faixas no chão, mas estou em duvida se eu consigo diferenciar, branco/preto/verde com ele a uma distancia de cerca de 2 a 3 centímetros, também gostaria de saber se existe algum outro sensor de cor melhor(para arduino) e se a como você me enviar um e-mail com o datasheet do modulo o circuito e o codigo, desde já agradeço;

    albertoelias@live.com

    ResponderExcluir
  30. Boa Tarde, porque os valores de rgb são inversamente proporcionais? a cor indicada é sempre a de menor valor.

    ResponderExcluir
  31. Boa noite, alguém sabe me dizer se o tempo de resposta deste sensor é bom?
    Porque preciso desenvolver um projeto em que o arduino reconheça o objeto pela cor, porém esses objetos irão passar a cada dois segundo em frente ao sensor... a Duvida é se ele será capaz de fazer essa leitura, desde já obrigado..

    ResponderExcluir
  32. Bom dia!
    Necessito de uma programação para que o robô de arduino vire para esquerda quando detectar a cor verde. Poderia me enviar uma programação?
    Agradeço desde já!

    ResponderExcluir
  33. Olá!
    Comprei o módulo a não muito tempo e estou desenvolvendo um projeto de identificador de cores. Gostaria de saber se posso fazer com que o módulo reconheça outras cores além do RGB, e se sim como eu aplicaria isso na programação. Não sei se existe uma tabela de valores referente a cada cor, mas enfim, desde já agradeço.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      tente esta biblioteca, por favor: https://github.com/Swap-File/tron-suit/tree/master/Disc/Software/Libraries/MD_TCS230

      Abraço!

      Excluir
  34. Olá! Tenho uma dúvida referente ao módulo TCS230 sensor de cor, usei o programa abaixo para fazer a leitura RBG, porém notei que para mesma cor houve uma variação extrema, exemplo: objeto azul primeira medição (43,43,43 ) segunda medição (103; 56; 155); terceira medição com mesmo objeto (205;155;33) e por nas medições seguintes variando, em algumas vez o valor se manteve por 3 medições até alterar novamente. Basicamente a unica cor que não variou foi a branca que se manteve (255;255;255);
    Gostaria de saber o que posso estar fazendo para diminuir esta variação e identificar corretamente as cores, ou se módulo esta apresentando falhas e este seria uma forma de sinal que a identificação da cor não está sendo reconhecida; ou se até mesmo seja algum procedimento de setup que deveria ter feito no primeiro uso.
    Segue abaixo o programa:

    #include
    #include

    // Pinos

    #define S0_OUT 8
    #define S1_OUT 9
    #define S2_OUT 12
    #define S3_OUT 13
    #define OE_OUT 2

    MD_TCS230 CS(S2_OUT, S3_OUT,S1_OUT, S0_OUT, OE_OUT);

    colorData rgb;

    void setup()
    {
    Serial.begin(57600);
    CS.begin();
    }

    int readSensor(int i)
    {
    static bool waiting;
    if (!waiting)
    {
    CS.read();
    waiting = true;
    }
    else
    {
    if (CS.available())
    {
    CS.getRGB(&rgb);
    waiting = false;
    }
    }
    return rgb.value[i];
    }

    void loop()
    {
    Serial.print(readSensor(TCS230_RGB_R));
    Serial.print(";");
    Serial.print(readSensor(TCS230_RGB_G));
    Serial.print(";");
    Serial.println(readSensor(TCS230_RGB_B));
    delay(1000);
    }

    ResponderExcluir
    Respostas
    1. Oi Tatiane,

      Quais bibliotecas vc usou ? Não veio no comentário...

      Abraço!

      Excluir
  35. Olá, montei um sensor de cor tcs3200, porém mesmo antes de eu colocar algum objeto sobre ele, ele fica enviando automaticamente valores R,G,B para o serial monitor, por que será que isto esta acontecendo?

    ResponderExcluir
    Respostas
    1. Oi Matheus,

      Provavelmente é a incidência de luz sobre o sensor. Faça testes com diferentes fontes de luz (lanterna, led, fluorescente, sol, etc) e veja o que acontece. :)

      Abraço!

      Excluir
    2. Opa muito obrigado, também duvidei que fosse isso. Será que no escuro ou com pouca iluminação ambiente os valores serão mais condizentes com o objeto? O que vc acha? Agradecido.

      Excluir
    3. Oi Matheus,

      Creio que sim, inclusive para gravar o vídeo do Youtube eu utilizei iluminação reduzida...

      Abraço!

      Excluir
    4. Ok obrigado. Última pergunta, o sensor de cor tcs3200 ele pode funcionar dando os valores de RGB sem necessariamente eu ligar com os leds na placa protoboard como vc colocou no post? Obrigado.

      Excluir
    5. Oi Matheus,

      Pode sim, mas para isso existe até uma biblioteca que já te dá os valores em RGB na saída. Só não testei ainda...

      Abraço!

      Excluir
    6. Olá, fiz os testes e o sensor está mostrando valores acima de 255, por exemplo, as vezes ele mostra 456, 640 os niveis de RGB, e o máximo não teria que ser até 255? Por que será que isto está acontecendo? Será que eu preciso fazer alguma calibração? Me ajude, por favor.

      Excluir
  36. Olá, teria como calibrar o sensor para que ele informasse valor mais preciso?
    Sabe como faríamos isso?
    Obrigado.

    ResponderExcluir
  37. Oi, tem como alterar a frequência para ler outras cores como o roxo por exemplo?

    ResponderExcluir