Skip to Content

Interligar ESP32 e Sensor de Cor RGB TCS34725 – Um Tutorial Completo

Interligar ESP32 e Sensor de Cor RGB TCS34725 – Um Tutorial Completo

Neste artigo, vou mostrar como usar o sensor de cor RGB TCS34725 com um microcontrolador ESP32 para medir a temperatura de cor de um objeto e a informação de lux.

O sensor de cor TCS34725 é usado em controlo de processos industriais, indústrias de processamento alimentar, instalações de triagem, smartphones, tablets, grandes monitores de TV e eletrodomésticos para deteção de luz ambiente.

O sensor RGB TCS34725 é um sensor preciso e potente. A sensibilidade é excelente, por isso pode manter o sensor dentro de um vidro, protegê-lo e ainda assim fazê-lo funcionar para aplicações de deteção de cor e luz ambiente.

Também tem funcionalidades interessantes, tornando-o a minha escolha número um para aplicações de deteção de cor.

Este artigo vai mostrar como usar um sensor de cor TCS34725 com um ESP32. Partilho um guia de ligação, código de exemplo para ESP32 para o sensor de cor, e também respondo a algumas perguntas frequentes sobre o TCS34725.

Vamos começar!

Componentes necessários para construir o projeto ESP32 e sensor RGB TCS34725

Componentes de hardware

Software

Guia

Fundamentos do sensor de cor RGB TCS34725

Vamos entender o princípio básico de funcionamento, características, pinagem e aplicações do sensor de cor RGB. Conhecer estes detalhes dá-lhe confiança para escolher o sensor RGB TCS34725 para aplicações adequadas.

O TCS34725 é um sensor de cor para digital. Pode detetar:

  • Vermelho
  • Verde
  • Azul
  • E luz clara

A um nível elevado, o diagrama abaixo ilustra o que o TCS34725 faz. A luz entra no sensor através de um filtro infravermelho (IR). Os quatro sensores independentes são sensíveis apenas a uma cor de luz específica.

Color Sensing
Deteção de cor

Os sensores fornecem um valor analógico convertido em valor digital por 4 conversores analógico-digital (ADCs) internos ao sensor de cor. Os dados podem ser lidos usando I2C.

 Agora pode usar esta informação para construir sensores de cor e luz ambiente e outros projetos úteis.

Aqui está o diagrama de blocos do sensor.

Block diagram of TCS34725
Diagrama de blocos do TCS34725

Vou explicar os conceitos essenciais que precisa de conhecer!

Características

Os fotodíodos são usados para detetar a quantidade de luz que incide sobre eles. A corrente do fotodíodo varia conforme a luz que incide. Tome as características do fotodíodo como exemplo.

Light sensing characteristics of TCS34725
Características de deteção de luz do TCS34725

O diagrama acima mostra que, à medida que a intensidade da luz aumenta, a corrente inversa aumenta. No caso do sensor de cor, os fotodíodos têm filtro vermelho, filtro verde, filtro azul e sem filtro.

Assim, o fotodíodo com filtro vermelho só vê a cor VERMELHA e nada mais. Em outras palavras, o díodo responde apenas à cor VERMELHA.

De forma semelhante, os fotodíodos verde e azul respondem apenas às cores verde e azul. O quarto fotodíodo responde a todas as cores (sem filtro). Parece simples?

4 ADCs convertem simultaneamente esta corrente dos fotodíodos em valores digitais, que pode ler usando o ESP32.

Responsividade

Para uma fonte de luz de teste, aqui está como o sensor TCS34725 responde.

Spectral Responsivity of TCS34725
Responsividade espectral do TCS34725

Pode ver como os quatro sensores de cor são sensíveis às cores correspondentes.

Por exemplo, o sensor azul tem pico acima de 450 nm até 500 nm. De forma semelhante, os sensores de luz verde e vermelha têm picos em comprimentos de onda específicos.

Consulte a tabela abaixo para as cores e respetiva faixa de comprimento de onda.

Wavelength ranges of TCS34725
Faixas de comprimento de onda do TCS34725

Agora vou explicar todos os registos internos do sensor de cor TCS34725. Isso ajudará a configurá-los no futuro para necessidades específicas, como adicionar mais tempo de espera ou aumentar o ganho (para condições de pouca luz), etc.

Antes de apresentar todos os registos, quero mostrar uma tabela onde pode entender como as configurações dos registos afetam o tempo de conversão e o consumo de corrente.

Na tabela abaixo, pode ver como o consumo médio de corrente do dispositivo varia ao ativar diferentes durações de espera usando os bits WEN, WTIME e WLONG.

WEN WTIME WLONG ESTADO DE ESPERA CORRENTE MÉDIA DD CORRENTE
0 n/a n/a 0 ms 291 μA
1 0xFF 0 2,40 ms 280 μA
1 0xEE 0 43,2 ms 152 μA
1 0x00 0 614 ms 82 μA
1 0x00 1 7,37 s 67 μA

Você escolhe o compromisso entre consumo de corrente e velocidade!

Registos do TCS34725

Abaixo encontrará os registos e o seu significado. Vou resumir todos os registos na próxima secção.

Endereço Nome do Registo Função do Registo Valor de reset
−− COMANDO Especifica o endereço do registo 0x00
0x00 ENABLE Ativa estados e interrupções 0x00
0x01 ATIME Tempo RGBC 0xFF
0x03 WTIME Tempo de espera 0xFF
0x04 AILTL Limite baixo de interrupção clara, byte baixo 0x00
0x05 AILTH Limite baixo de interrupção clara, byte alto 0x00
0x06 AIHTL Limite alto de interrupção clara, byte baixo 0x00
0x07 AIHTH Limite alto de interrupção clara, byte alto 0x00
0x0C PERS Filtro de persistência de interrupção 0x00
0x0D CONFIG Configuração 0x00
0x0F CONTROL Controlo 0x00
0x12 ID ID do dispositivo ID
0x13 STATUS Estado do dispositivo 0x00
0x14 CDATAL Dados claros, byte baixo 0x00
0x15 CDATAH Dados claros, byte alto 0x00
0x16 RDATAL Dados vermelhos, byte baixo 0x00
0x17 RDATAH Dados vermelhos, byte alto 0x00
0x18 GDATAL Dados verdes, byte baixo 0x00
0x19 GDATAH Dados verdes, byte alto 0x00
0x1A BDATAL Dados azuis, byte baixo 0x00
0x1B BDATAH Dados azuis, byte alto 0x00

Registo de Comando

O registo de comando especifica o endereço do registo alvo para operações futuras de escrita e leitura. Usa este comando para selecionar o tipo de transação do protocolo.

Escolhe qual registo quer ler ou escrever usando este registo de comando.

Registo Enable

O registo Enable é usado principalmente para ligar e desligar o dispositivo TCS3472, e ativar funções e interrupções.

Registo de tempo RGBC

O registo de tempo RGBC controla o tempo de integração interno dos ADCs dos canais RGBC claro e IR em incrementos de 2,4 ms

Aumentar o tempo de integração melhora a sensibilidade ao custo de tempo. Se estiver disposto a gastar alguns 100 ms, recomendo escolher tempos de integração mais longos.

Registo de tempo de espera

Usa o registo de tempo de espera para inserir tempos de espera entre conversões. Ajuda a reduzir o consumo médio de corrente.

Registos de limiar de interrupção RGBC

Usa estes registos para definir os limiares do sinal ADC. O IC do sensor de cor ativará o sinal INT (interrupção) se a leitura de cor ultrapassar este limiar. Útil para agir quando o processo de mistura de cores falha (produção industrial, por exemplo).

Registo de persistência

O registo de persistência controla como o dispositivo filtra as interrupções. Pode configurá-lo para receber uma interrupção após cada ciclo de integração ou quando a integração ultrapassar os valores definidos pelo registo de limiar durante um período específico.

Registo de configuração

Este registo ajuda a definir o tempo de espera longo. Se escrever 1 no bit WLONG, o atraso (programado no registo WTIME) será multiplicado por 12x.

Registo de controlo

O registo de controlo oferece oito bits para controlar várias funções no bloco analógico. Estes bits são usados para ajustar as configurações de ganho e outras funções semelhantes.

Registo ID

Fornece o ID do IC. É um registo só de leitura. Para o TCS34725 o ID será 0x44. Para o TCS34723, será 0x4D.

Registo de estado

Pode ler o estado interno do IC usando este registo.

Registos de dados do canal RGBC

Por último, mas não menos importante, este é o registo que vai ler o tempo todo! Pode obter os dados digitais do sensor para vermelho, verde, azul e luz clara aqui.

Como programar um tempo de integração específico?

Suponha que quer integrar os dados do sensor por 100 ms. O valor a programar no registo ATIME é calculado como mostrado abaixo.

valor = 256 – (100/2,4) = 256 – 42 = 214 = 0xD6

Gestão de energia no sensor de cor RGB TCS34725

Como sabe que o sensor consome apenas 65 uA durante o estado de espera, pode usar esta informação para gerir o consumo de energia.

Pode adicionar mais estados de espera para reduzir o consumo médio de corrente. Isto é muito útil quando alimenta o sensor com bateria.

Variando os estados de espera, pode controlar a corrente média total do sensor.

A imagem acima dá uma ideia de como os diferentes valores WAIT, juntamente com o bit WLONG, podem ajudar a reduzir a corrente média de alimentação do sensor para quase o mesmo valor da corrente em standby!

Nas próximas secções, vamos ver a pinagem do sensor de cor RGB seguida do guia de ligação.

Características do sensor de cor RGB TCS34725

Aqui estão as principais características do sensor de cor TCS34725 resumidas numa tabela:

Parâmetro Intervalo
Corrente de alimentação (ativo) 330 uA (máximo)
Corrente em modo sleep 10 uA (máx)
Tamanho do passo de integração ADC 2,56 ms
Contagem ADC por passo 1024 contagens
Valor máximo da contagem ADC 65535 contagens
Tamanho do passo de espera 2,4 ms
Frequência do relógio I2C 400 kHz
Tensão de alimentação 2,7 V a 3,6 V
Temperatura de funcionamento -30 ℃ a 70 ℃

Aplicações do sensor de cor RGB TCS34725

Existem muitas aplicações diferentes para o sensor de cor RGB TCS34725, incluindo:

  1. Eletrónica de consumo: O sensor TCS34725 é um excelente candidato para usar onde pode detetar a luz ambiente disponível e ajustar automaticamente o brilho do ecrã ou o modo do ecrã (normal / modo noturno).
  1. Indústria automóvel – Pode usar o sensor para ajustar as luzes programáveis para corresponder à garagem ou ao local de fundo onde o veículo está.
  1. Cuidados de saúde – Pode usar o sensor de cor RGB TCS34725 para monitorizar a cor de fluidos de teste como urina e sangue para diagnóstico automatizado mais rápido.
  1. Processamento alimentar – Frite até as cebolas ficarem douradas! O sensor pode ajudar a detetar isso. Também pode ajudar a classificar frutas com base na cor (maduras ou não)
  1. Robótica – pode usar codificação por cor e pedir aos robôs para executar tarefas dedicadas com base no código de cor no dispositivo / caixa.

Para que está a usar o sensor? Conte-me na secção de comentários abaixo.

Definição dos pinos do sensor de cor RGB TCS34725

A imagem abaixo mostra a vista superior do IC TCS34725 com os detalhes dos pinos.

Pinout of TCS34725
Pinagem do TCS34725

A tabela seguinte fornece os detalhes dos pinos do sensor de cor TCS34725.

Número do pino Nome do pino Função do pino
1 VDD Tensão de alimentação
2 SCL Linha de relógio I2C para comunicação serial I2C
3 GND Terra
4 NC Sem ligação – Não ligue nada a este pino.
5 INT Interrupção – Dreno aberto (ativo baixo)
6 SDA Linha de dados I2C para comunicação serial I2C

Como ligar o módulo sensor de cor RGB TCS34725 ao ESP32

Agora, vou mostrar como construir um projeto usando um ESP32 e o sensor de cor RGB TCS34725. Vamos começar pelas ligações de hardware.

Existem muitas variantes disponíveis para as placas do sensor. Como já conhece bem os fundamentos dos sensores e as definições da pinagem, não precisa de se preocupar.

 Vai sentir-se confiante a usar as placas seguindo o guia de ligação. Vamos começar.

Passo 1: Complete as ligações de hardware

O sensor de cor TCS34725 comunica via I2C. No mínimo, precisa de ligar alimentação, terra e linhas I2C. As ligações são simples de entender e seguir, como pode ver no diagrama acima.

Comece sempre pelas ligações à terra. Alimente todo o sistema apenas depois de completar todas as ligações.

Estou a usar GPIO21 e GPIO22 no meu exemplo. Pode escolher outros pinos também.  Se usar pinos diferentes, edite o código em conformidade.

O resumo das ligações entre o sensor de cor RGB TCS34725 e o ESP32 está na tabela abaixo.

SDA Linha de dados I2C
SCL Linha de relógio I2C
3V3 Alimentação de 3,3 V
GND Ligações à terra

No próximo passo, vamos programar a placa ESP32.

Passo 2: Programe o ESP32 com o código do sensor RGB abaixo

Siga o próximo passo para entender a implementação do código. Pode usar o código abaixo para testar o módulo ESP32 e o módulo sensor RGB conectado baseado no sensor de cor TCS34725.

#include "Wire.h"
#include "Adafruit_TCS34725.h"
/*
  Connect SCL to analog 5
  Connect SDA to analog 4
  Connect VDD to 3.3V DC
  Connect GROUND to common ground */

/* Initialise with default values (int time = 2.4ms, gain = 1x) */
// Adafruit_TCS34725 tcs = Adafruit_TCS34725();

/* Initialise with specific int time and gain values */
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);

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

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  // Now we're ready to get readings!
}

void loop(void) {
  uint16_t r, g, b, c, colorTemp, lux;

  tcs.getRawData(&r, &g, &b, &c);
  colorTemp = tcs.calculateColorTemperature(r, g, b);
  lux = tcs.calculateLux(r, g, b);

  Serial.print("Color Temp: "); Serial.print(colorTemp, DEC);
  Serial.print(" K - ");
  Serial.print("Lux: "); Serial.print(lux, DEC); Serial.print(" - ");
  Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");
  Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");
  Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");
  Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");
  Serial.println(" ");
}

Passo 3: Análise do código para o sensor de cor TCS34725

Vamos analisar o código. Este exemplo é para o sensor de cor RGB TCS34725. Começa o código incluindo a biblioteca wire para comunicação I2C e a biblioteca TCS34725 da Adafruit.

Pode desenvolver o seu projeto a partir deste código para contar ou classificar objetos que controlem módulos de relé com base no valor lido pelos sensores de cor.

(Pense em separar tomates maduros dos não maduros)

#include "Wire.h"
#include "Adafruit_TCS34725.h"

Existem duas formas de inicializar o sensor de cor: com valores padrão (tempo de integração de 2,4 ms e ganho de 1x) ou com valores específicos de tempo de integração e ganho.

O método usado neste código é o último, com tempo de integração de 700 ms e ganho de 1x.

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

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  // Now we're ready to get readings!
}

Na função setup() a comunicação serial é inicializada a 9600 baud. Depois, a função tcs.begin() é chamada para inicializar o sensor de cor. A mensagem “ Found sensor ” é impressa no monitor serial se o sensor for encontrado.

Caso contrário, a mensagem “ No TCS34725 found … check your connections ” é impressa, e o programa fica preso num ciclo infinito.

while (1);

É necessário reiniciar após verificar as ligações.

Na função loop(), as leituras do sensor de cor são obtidas chamando a

função tcs.getRawData(&r, &g, &b, &c), que armazena os valores vermelho, verde, azul e claro nas variáveis r, g, b e c, respetivamente.

De seguida, calcula a temperatura de cor e os valores de lux usando as funções tcs.calculateColorTemperature(r, g, b) e tcs.calculateLux(r, g, b), respetivamente.

Finalmente, a temperatura de cor, lux, vermelho, verde, azul e valores claros são impressos no monitor serial.

Espero que a explicação do código do sensor de cor RGB TCS34725 tenha ajudado.

Perguntas frequentes sobre o sensor RGB TCS34725

Incluí uma lista das perguntas mais frequentes sobre o sensor de cor TCS34725.

Qual é a interface de comunicação usada pelo TCS34725?

Pode usar a interface I2C para comunicar com o sensor. O sensor suporta modo rápido (até 400 kbits/s).

Qual é a faixa de tensão de operação do sensor de cor TCS34725?

O TCS34725 opera numa faixa de tensão de 2,7 V a 3,6 V. Se o barramento I2C estiver puxado para 1,8 V, a tensão máxima é 3,3 V.

Qual é a resposta espectral do TCS34725?

A resposta espectral do sensor é semelhante ao olho humano.

Consulte a secção Fundamentos neste artigo para saber mais sobre sensibilidade de cor e outras informações interessantes sobre o sensor.

Qual é a resolução do TCS34725?

O TCS34725 tem uma resolução de 16 bits por canal, permitindo mais de 16 milhões de combinações de cor diferentes. Cada cor tem um ADC dedicado seguido pelo fotossensor. Além dos bits RGB, também tem 16 bits de informação sobre a luz clara.

Para que aplicações é usado o TCS34725?

O TCS34725 é usado em aplicações de deteção de cor e luz ambiente. Para entender porque o sensor TCS3725 é tão adequado, consulte a secção de fundamentos deste artigo.

  • Produtos de saúde/fitness
  • Deteção de luz ambiente (para ajustar automaticamente o brilho da TV, por exemplo)
  • Controlo de processos industriais (para monitorizar a qualidade dos produtos com base na cor)
  • Automação de diagnósticos médicos e mais.

O TCS34725 é compatível com ESP32?

Sim, o TCS34725 é totalmente compatível com ESP32. Não precisa de usar conversores de nível. Na minha opinião, o sensor pode ser mais compatível com ESP32 do que com um Arduino UNO.

Conclusão

Este artigo cobriu todas as informações essenciais sobre o sensor RGB TCS34725, incluindo como funciona, detalhes dos pinos, informações dos registos, características principais e aplicações.

Conhecer informações detalhadas sobre os sensores ajuda a decidir e construir projetos mais potentes usando o sensor TCS34725.

Também partilhei um guia de ligação para ESP32 e algum código de exemplo com explicação, que pode usar para testar e adaptar aos seus próprios projetos.

Se tiver mais perguntas sobre os sensores, por favor coloque-as na secção de comentários.

Gostaria muito de ouvir de si! Diga-nos se há algo mais que gostaria que eu abordasse em futuros artigos.