Grove - Sensor de Cor I2C

Este módulo é baseado no sensor de cor TCS3414CS com saída digital I2C. Com base na matriz de fotodiodos filtrados 8*2 e conversores analógico‑digitais de 16 bits, você pode medir a cromaticidade de cor da luz ambiente ou a cor de objetos. Dos 16 fotodiodos, 4 têm filtros vermelhos, 4 têm filtros verdes, 4 têm filtros azuis e 4 não têm filtro (claros). Com o pino de entrada de sincronização, uma fonte de luz pulsada externa pode fornecer controle de conversão síncrona precisa.
Observe que a versão mais recente V2.0 substituiu o CI pelo TCS3472 e a biblioteca antiga também foi atualizada. Se você estiver usando a versão V2.0, use a nova biblioteca.
Recursos
- Interface compatível com Grove
- Saída digital de 16 bits com I2C
- Entrada SYNC sincroniza o ciclo de integração com fontes de luz moduladas
- Faixa de temperatura de operação de -40°C a 85°C
- Função de interrupção programável com configurações de limite superior e inferior definidas pelo usuário
- Compatível com RoHS
Para mais detalhes sobre módulos Grove, consulte o Grove System
Especificações
| Parâmetro | Valor/Faixa |
|---|---|
| Tamanho da PCB | 2,0 cm * 4,0 cm |
| Interface | Conector tipo pino passo 2,0 mm |
| VCC | 3,3 - 6,0 V |
| Velocidade I2C | 400 kHz |
Plataformas Suportadas
| Arduino | Raspberry Pi | |||
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
As plataformas mencionadas acima como suportadas são uma indicação da compatibilidade teórica ou de software do módulo. Na maioria dos casos, fornecemos apenas biblioteca de software ou exemplos de código para a plataforma Arduino. Não é possível fornecer biblioteca de software / código de demonstração para todas as possíveis plataformas de MCU. Portanto, os usuários precisam escrever sua própria biblioteca de software.
Primeiros Passos
Os documentos a seguir ajudam o usuário a começar a usar o Grove.
Conexões de Hardware
Os produtos Grove têm um ecossistema e todos têm o mesmo conector que pode ser encaixado no Grove Base Shield. Conecte este módulo à porta I2C do Base Shield. No entanto, você também pode conectar o Grove - I2C Color Sensor ao Arduino sem o Base Shield usando jumpers.
| Arduino UNO | Grove - I2C Color Sensor |
|---|---|
| 5V | VCC |
| GND | GND |
| SDA | SDA |
| SCL | SCL |
Instalação de Software
Baixe o Arduino e instale o driver do Arduino
Primeiros Passos com Seeeduino/Arduino
Demonstrações
Este módulo pode ser usado para detectar a cor da fonte de luz ou a cor de objetos. Quando usado para detectar a cor da fonte de luz, o interruptor do LED deve estar desligado e a fonte de luz deve incidir diretamente sobre o sensor. Quando usado para detectar a cor de objetos, o LED deve estar ligado e você deve colocar o objeto bem próximo à parte superior da caixa. A teoria para detectar a cor de objetos é a Teoria de Detecção Refletiva. Como na imagem abaixo.

Biblioteca do Sensor de Cor
Nós criamos uma biblioteca para ajudar você a começar rapidamente a brincar com o Seeeduino/Arduino; nesta seção, mostraremos como configurar a biblioteca.
Configuração
- Baixe o código da biblioteca como um arquivo zip da página Grove_I2C_Color_Sensor no GitHub. Se você estiver usando a versão mais recente V2.0 (o CI é TCS3472), use esta nova biblioteca
- Descompacte o arquivo baixado em …/arduino/libraries.
- Renomeie a pasta descompactada para "Color_Sensor"
- Inicie a IDE do Arduino (ou reinicie se ela já estiver aberta).
Descrição da função
Esta é a função mais importante/útil da biblioteca; convidamos você a olhar os arquivos .h e .cpp para ver todas as funções disponíveis.
Ler dados RGB por meio da função da biblioteca
readRGB(int *red, int *green, int *blue)
- red: O endereço da variável para salvar R.
- green: O endereço da variável para salvar G.
- blue: O endereço da variável para salvar B.
void loop()
{
int red, green, blue;
GroveColorSensor colorSensor;
colorSensor.ledStatus = 1; // When turn on the color sensor LED, ledStatus = 1; When turn off the color sensor LED, ledStatus = 0.
while(1)
{
colorSensor.readRGB(&red, &green, &blue); //Read RGB values to variables.
delay(300);
Serial.print("The RGB value are: RGB( ");
Serial.print(red,DEC);
Serial.print(", ");
Serial.print(green,DEC);
Serial.print(", ");
Serial.print(blue,DEC);
Serial.println(" )");
colorSensor.clearInterrupt();
}
}
Exemplos/Aplicações do Sensor de Cor
Este exemplo mostra como usar recursos do Grove - I2C Color Sensor e exibir a cor detectada com um Grove LED RGB Encadeável.
Se você ainda não baixou a biblioteca Grove-Chainable RGB LED para sua IDE do Arduino, baixe e configure a biblioteca primeiro.
- Abra File->Examples->Color_Sensor->example->ColorSensorWithRGB-LED para um exemplo completo ou copie e cole o código abaixo em um novo sketch do Arduino.
Descrição: Este exemplo pode medir a cromaticidade de cor da luz ambiente ou a cor de objetos e, por meio do Grove LED RGB Encadeável, exibir a cor detectada.
Você também pode usar outros módulos de exibição para mostrar a cor detectada pelo Grove - I2C Color Sensor.
#include <Wire.h>
#include <GroveColorSensor.h>
#include <ChainableLED.h>
#define CLK_PIN 7
#define DATA_PIN 8
#define NUM_LEDS 1 //The number of Chainable RGB LED
ChainableLED leds(CLK_PIN, DATA_PIN, NUM_LEDS);
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
int red, green, blue;
GroveColorSensor colorSensor;
colorSensor.ledStatus = 1; // When turn on the color sensor LED, ledStatus = 1; When turn off the color sensor LED, ledStatus = 0.
while(1)
{
colorSensor.readRGB(&red, &green, &blue); //Read RGB values to variables.
delay(300);
Serial.print("The RGB value are: RGB( ");
Serial.print(red,DEC);
Serial.print(", ");
Serial.print(green,DEC);
Serial.print(", ");
Serial.print(blue,DEC);
Serial.println(" )");
colorSensor.clearInterrupt();
for(int i = 0; i<NUM_LEDS; i++)
{
leds.setColorRGB(i, red, green, blue);
}
}
}
- Carregue o código na placa de desenvolvimento.
- Em seguida, o Grove_-_Chainable_RGB_LED exibirá a cor que for detectada.
Brincar com Raspberry Pi
Hardware
- Passo 1. Itens usados neste projeto:
| Raspberry pi | Grove Base Hat para RasPi | Grove-I2C_Color_Sensor |
|---|---|---|
|
|
|
| Adquira agora | Adquira agora | Adquira agora |
- Passo 2. Conecte o Grove Base Hat ao Raspberry.
- Passo 3. Conecte o Grove-I2C_Color à porta I2C do Base Hat.
- Passo 4. Conecte o Raspberry Pi ao PC através de um cabo USB.

Software
Se você estiver usando Raspberry Pi com Raspberrypi OS >= Bullseye, você deve usar esta linha de comando apenas com Python3.
- Passo 1. Siga Setting Software para configurar o ambiente de desenvolvimento.
- Passo 2. Entre no ambiente virtual relevante.
source ~/grove_env/env/bin/activate
cd ~/grove_env/grove.py/grove
-
Passo 3. Execute o comando abaixo para rodar o código.
-
O seguinte é para verificar o código thegrove_i2c_color_sensor_v2.py.
less grove_i2c_color_sensor_v2.py
import time
from grove.i2c import Bus
_CMD = 0x80
_AUTO = 0x20
_ENABLE = 0x00
_ATIME = 0x01
_WTIME = 0x03
_AILT = 0x04
_AIHT = 0x06
_PERS = 0x0C
_CONFIG = 0x0D
_CONTROL = 0x0F
_ID = 0x12
_STATUS = 0x13
_CDATA = 0x14
_RDATA = 0x16
_GDATA = 0x18
_BDATA = 0x1A
_AIEN = 0x10
_WEN = 0x08
_AEN = 0x02
_PON = 0x01
_GAINS = (1, 4, 16, 60)
class GroveI2cColorSensorV2:
"""Driver for Grove I2C Color Sensor (TCS34725)"""
def __init__(self, bus=1, address=0x29):
self.address = address
self.bus = Bus(bus)
self.awake = False
if self.id not in (0x44, 0x4D):
raise ValueError('Not find a Grove I2C Color Sensor V2')
self.set_integration_time(24)
self.set_gain(4)
def wakeup(self):
enable = self._read_byte(_ENABLE)
self._write_byte(_ENABLE, enable | _PON | _AEN)
time.sleep(0.0024)
self.awake = True
def sleep(self):
enable = self._read_byte(_ENABLE)
self._write_byte(_ENABLE, enable & ~_PON)
self.awake = False
def is_awake(self):
return self._read_byte(_ENABLE) & _PON
def set_wait_time(self, t):
pass
@property
def id(self):
return self._read_byte(_ID)
@property
def integration_time(self):
steps = 256 - self._read_byte(_ATIME)
return steps * 2.4
def set_integration_time(self, t):
"""Set the integration time of the sensor"""
if t < 2.4:
t = 2.4
elif t > 614.4:
t = 614.4
steps = int(t / 2.4)
self._integration_time = steps * 2.4
self._write_byte(_ATIME, 256 - steps)
@property
def gain(self):
"""The gain control. Should be 1, 4, 16, or 60.
"""
return _GAINS[self._read_byte(_CONTROL)]
def set_gain(self, gain):
if gain in _GAINS:
self._write_byte(_CONTROL, _GAINS.index(gain))
@property
def raw(self):
"""Read RGBC registers
return 16 bits red, green, blue and clear data
"""
if not self.awake:
self.wakeup()
while not self._valid():
time.sleep(0.0024)
data = tuple(self._read_word(reg) for reg in (_RDATA, _GDATA, _BDATA, _CDATA))
return data
@property
def rgb(self):
"""Read the RGB color detected by the sensor. Returns a 3-tuple of
red, green, blue component values as bytes (0-255).
"""
r, g, b, clear = self.raw
if clear:
r = int(255 * r / clear)
g = int(255 * g / clear)
b = int(255 * b / clear)
else:
r, g, b = 0, 0, 0
return r, g, b
def _valid(self):
"""Check if RGBC is valid"""
return self._read_byte(_STATUS) & 0x01
def _read_byte(self, address):
command = _CMD | address
return self.bus.read_byte_data(self.address, command)
def _read_word(self, address):
command = _CMD | _AUTO | address
return self.bus.read_word_data(self.address, command)
def _write_byte(self, address, data):
command = _CMD | address
self.bus.write_byte_data(self.address, command, data)
def _write_word(self, address, data):
command = _CMD | _AUTO | address
data = [(data >> 8) & 0xFF, data & 0xFF]
self.bus.write_i2c_block_data(self.address, command, data)
Grove = GroveI2cColorSensorV2
def main():
sensor = GroveI2cColorSensorV2()
print('Raw data of red-filtered, green-filtered, blue-filtered and unfiltered photodiodes')
while True:
# r, g, b = sensor.rgb
r, g, b, clear = sensor.raw
print((r, g, b, clear))
time.sleep(1.0)
if __name__ == '__main__':
main()
- Execute este código
python grove_i2c_color_sensor_v2.py
Se tudo correr bem, você verá o seguinte fenômeno.😄

Outras Referências
Este módulo é baseado no sensor de cor TCS3414CS. O sensor de cor digital TCS3414CS retorna dados de quatro canais: vermelho (R), verde (G), azul (B) e claro (C) (não filtrado). A resposta dos canais vermelho, verde e azul (RGB) pode ser usada para determinar as coordenadas de cromaticidade (x, y) de uma determinada fonte. Esses padrões são definidos pela Commission Internationale de l’Eclairage (CIE). A CIE é a principal organização internacional responsável por cor e medição de cor. Para adquirir a cor de um determinado objeto usando o TCS3414CS, devemos primeiro mapear a resposta do sensor (RGB) para os valores tristímulos da CIE (XYZ). Em seguida, é necessário calcular as coordenadas de cromaticidade (x, y).

Visão Geral do Processo de Cálculo de Cromaticidade
As equações para fazer a transformação:

Equações de Transformação
- Quando obtivermos as coordenadas (x, y), consulte a figura abaixo para obter a cor recomendada.

FAQs
P1: Como entender os comandos? Por exemplo, REG_GREEN_LOW = 0xD0
R1: A partir da imagem anexada, você pode ver o que há no comando. Ao usar comando de protocolo de byte, ele deve ser como 0x80+ADDRESS. Por exemplo, REG_TIMING( 01h ) = 0x81 Para leitura de byte e bloco, o comando deve ser 0xC0+ADDRESS, REG_GREEN_LOW( 10h ) = 0xD0.

Grove-I2C Color Sensor Eagle File V1.2
Grove-I2C Color Sensor Eagle File V2.0
Resources
- [Library]Library for Grove - I2C Color Sensor V1.2
- [Library]Library for Grove - I2C Color Sensor V2.0
- [Eagle]Grove-I2C Color Sensor Eagle File V1.2
- [Eagle]Grove-I2C Color Sensor Eagle File V2.0
- [Datasheet]TCS3414-A Datasheet
- [Datasheet]TCS3472 Datasheet
Suporte Técnico & Discussão de Produto
Atualizável para Sensores Industriais
Com o controlador S2110 e o registrador de dados S2100 da SenseCAP, você pode facilmente transformar o Grove em um sensor LoRaWAN®. A Seeed não só ajuda você na prototipagem, mas também oferece a possibilidade de expandir seu projeto com a série SenseCAP de robustos sensores industriais.
O invólucro IP66, a configuração via Bluetooth, a compatibilidade com a rede global LoRaWAN®, a bateria interna de 19 Ah e o forte suporte do APP fazem do SenseCAP S210x a melhor escolha para aplicações industriais. A série inclui sensores para umidade do solo, temperatura e umidade do ar, intensidade de luz, CO2, EC e uma estação meteorológica 8 em 1. Experimente o mais recente SenseCAP S210x em seu próximo projeto industrial de sucesso.






