O sensor de cor RGB TCS34725 pode detectar cores como Vermelho, Verde e Azul (RGB é do nome respectivo dessas cores em inglês) e, também, luz clara. O sensor possui um filtro IR embutido na placa, que minimiza o espectro Infravermelho. Este funciona através do protocolo de comunicação I₂C, que facilita o uso do sensor por se tratar apenas de dois fios para a comunicação. Segundo a fabricante, esse sensor é bom para projetos de: medição da temperatura de luz clara, classificação de cores de produtos ou até controle de luzes ambientes.
O circuito será o seguinte:
O código será o seguinte:
//Incluindo as bibliotecas #include <Adafruit_SSD1306.h> #include "Adafruit_TCS34725.h" //Configurando o endereço do sensor e do display Adafruit_TCS34725 sensTCS = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_300MS, TCS34725_GAIN_1X); Adafruit_SSD1306 display(-1); void setup() { //Inicia o display display.begin(SSD1306_SWITCHCAPVCC, 0x3C); Serial.begin(9600); //Inicia o sensor e diz se ele conectou ou não if (sensTCS.begin()) { Serial.println("Sensor conectado"); } else { //Se o sensor não conectou , mostra a mensagem de erro Serial.println("Sensor com problema"); } //Limpa o display antes de começar display.clearDisplay(); } void loop() { //declaramos as variáveis uint16_t r, g, b, c, TempCor, LUX; //O sensor lê os valores do Vermelho (R), Verde(G), Azul(B) sensTCS.getRawData(&r, &g, &b, &c); //Calcula a temperatura da cor TempCor = sensTCS.calculateColorTemperature(r, g, b); //Calcula a luminosidade LUX = sensTCS.calculateLux(r, g, b); Serial.print("Vermelho(R): "); Serial.print(r); //escreve no monitor serial o valor do Vermelho Serial.print(" Verde(G): "); Serial.print(g);//escreve no monitor serial o valor do Verde Serial.print(" Azul(B): "); Serial.print(b);//escreve no monitor serial o valor do Azul Serial.print(" Temperatura: "); Serial.print(TempCor); //escreve no monitor serial o valor da Temperatura da Cor Serial.print(" Intensidade: "); Serial.println(LUX); //escreve no monitor serial o valor da intensidade luminosa //escreve no display a cor referente a leitura do sensor if (c < 5000) { if (r > b && r > g && r > 100) { // faz a comparação dos valores para ver se é vermelho display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(20,8); display.println("Vermelho"); display.display(); delay(100); } else if (g > r && g > b && g > 100 ) { // faz a comparação dos valores para ver se é verde display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(30,8); display.println("Verde"); display.display(); delay(100); } else if (b > r && b > g && b > 100) { // faz a comparação dos valores para ver se é azul display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(30,8); display.println("Azul"); display.display(); delay(100); } } }
Nesse exemplo, ele compara se o Verde(G) é maior do que o Vermelho(R), compara se o Verde(G) é maior que o Azul(B), e se o valor dado é maior do que 100.
Caso precise de fazer algum ajuste, é possível ver os valores lidos em tempo real ao abrir o monitor serial.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!