Identificando cores com Sensor de Cor TCS34725 no Arduino

Todos os dias vemos centenas de tons de diversas cores. Muitas vezes elas passam batido e não nos perguntamos o porque delas? Ou porque são diferentes? 
Alguns sensores eletrônicos são capazes de distinguir certas cores, como utiliza-los?
Quer saber? Vem comigo!

Abaixo temos o circuito a ser montado:

Download das bibliotecas:
LiquidCrystal_I2C.h
Adafruit_TCS34725.h

E aqui temos a programação:

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
/************************** Marlon Nardi ******************************
  Projeto: Reconhecimento de cor com sensor TCS34725 com Arduino
  Autor: Marlon Nardi Walendorff
  Site: http://www.marlonnardi.com
  Youtube: https://www.youtube.com/marlonnardiw
  Facebook: https://www.facebook.com/professormarlonnardi
************************************************************************/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "Adafruit_TCS34725.h"

// Biblioteca com endereço I2C do display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// instância do sensor RGB
Adafruit_TCS34725 SensorDeCor = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);

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

  lcd.begin(16, 2);              // Iniciando o lcd
  lcd.home ();                   // Comando de posicionamento do cursor no inicio

  if (SensorDeCor.begin()) { // Se o sensor foi detectado, entao
    lcd.setCursor ( 0, 0 ); // Posiciona o cursor do display no inicio
    lcd.println("   Sensor OK    "); // Mensagem de sensor encontrado
  } else { // se sensor não encontrado
    lcd.setCursor ( 0, 0 ); // Posiciona o cursor do display no inicio
    lcd.println("Nao ha sensor"); // mensagem de nao sensor encontrado
    lcd.setCursor ( 0, 1 ); // Posiciona o cursor do display na linha inferior
    lcd.print("Verifique!"); // Mensagem de não sensor encontrado
  
  }
}

void loop()
{
  // Declarando variáveis locais
  uint16_t r, g, b, c, TemperaturaDaCor, LUX;

  // Tons de cores e luminosidade
  SensorDeCor.getRawData(&r, &g, &b, &c);

  // Cálculo dos níveis de cores
  TemperaturaDaCor = SensorDeCor.calculateColorTemperature(r, g, b);

  // Nível de intensidade luminosa
  LUX = SensorDeCor.calculateLux(r, g, b);

  Serial.print("Vermelho(R): ");
  Serial.print(r);

  Serial.print("   Verde(G): ");
  Serial.print(g);

  Serial.print("   Azul(B): ");
  Serial.print(b);

  Serial.print("   Temperatura: ");
  Serial.print(TemperaturaDaCor);

  Serial.print("   Intensidade: ");
  Serial.println(LUX);


  // Se intensidade luminosa for menor que 5000, então
  if (c < 5000) {
    if (r > b && r > g) { // Tom vermelho maior que azul e verde
      lcd.setCursor(0, 1);
      lcd.print("   Vermelho     ");
      delay(100);
    }
    else if (g > r && g > b ) { // Tom verde maior que azul e vermelho
      lcd.setCursor(0, 1);
      lcd.print("   Verde        ");
      delay(100);
    }
    else if (b > r && b > g) { // Tom azul maior que vermelho e verde
      lcd.setCursor(0, 1);
      lcd.print("   Azul         ");
      delay(100);
    }

  }
}

Veja o vídeo e diverta-se: