Grove - I2C カラーセンサー

このモジュールは、デジタル出力I2Cを備えたカラーセンサーTCS3414CSをベースにしています。フィルター付きフォトダイオードの8×2配列と16ビットアナログ-デジタルコンバーターに基づいて、周囲光の色度や物体の色を測定できます。16個のフォトダイオードのうち、4個は赤フィルター、4個は緑フィルター、4個は青フィルター、4個はフィルターなし(クリア)です。同期入力ピンにより、外部パルス光源が正確な同期変換制御を提供できます。
最新バージョンV2.0ではICがTCS3472に置き換えられ、古いライブラリも更新されていることにご注意ください。V2.0バージョンをお使いの場合は、新しいライブラリをご使用ください。
特徴
- Grove 互換インターフェース
- I2Cによる16ビットデジタル出力
- SYNC入力により変調光源への積分サイクルを同期
- 動作温度範囲 -40°C~85°C
- ユーザー定義の上限・下限しきい値設定によるプログラマブル割り込み機能
- RoHS準拠
Grove モジュールの詳細については、Grove Systemを参照してください
仕様
| パラメータ | 値/範囲 |
|---|---|
| PCB サイズ | 2.0 cm * 4.0 cm |
| インターフェース | 2.0mmピッチピンヘッダー |
| VCC | 3.3 - 6.0 V |
| I2C 速度 | 400 kHz |
対応プラットフォーム
| Arduino | Raspberry Pi | |||
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
上記でサポートされているとして言及されているプラットフォームは、モジュールのソフトウェアまたは理論的な互換性を示すものです。ほとんどの場合、Arduinoプラットフォーム用のソフトウェアライブラリまたはコード例のみを提供しています。すべての可能なMCUプラットフォーム用のソフトウェアライブラリ/デモコードを提供することは不可能です。したがって、ユーザーは独自のソフトウェアライブラリを作成する必要があります。
入門ガイド
以下のドキュメントは、ユーザーがGroveを始めるのに役立ちます。
ハードウェア接続
Grove製品にはエコシステムがあり、すべて同じコネクタを持ち、Grove Base Shieldに接続できます。このモジュールをBase ShieldのI2Cポートに接続してください。ただし、ジャンパーワイヤーを使用してBase ShieldなしでGrove - I2C カラーセンサーをArduinoに接続することもできます。
| Arduino UNO | Grove - I2C カラーセンサー |
|---|---|
| 5V | VCC |
| GND | GND |
| SDA | SDA |
| SCL | SCL |
ソフトウェアインストール
Arduinoをダウンロードし、Arduinoドライバーをインストールしてください
Seeeduino/Arduinoの入門ガイド
デモ
このモジュールは、光源の色や物体の色を検出するために使用できます。光源の色を検出する場合は、LEDスイッチをオフにし、光源がセンサーを直接照らすようにしてください。物体の色を検出する場合は、LEDをオンにし、物体をエンクロージャーの上部に密着させて置いてください。物体の色を感知する理論は反射感知理論です。下の図のようになります。

カラーセンサーライブラリ
Seeeduino/Arduinoで素早く遊び始められるようにライブラリを作成しました。このセクションでは、ライブラリの設定方法を説明します。
セットアップ
- Grove_I2C_Color_Sensor githubページからライブラリコードをzipファイルとしてダウンロードしてください。最新バージョンV2.0(ICはTCS3472)をお使いの場合は、この新しいライブラリをご使用ください
- ダウンロードしたファイルを…/arduino/librariesに解凍してください。
- 解凍したフォルダーを「Color_Sensor」にリネームしてください
- Arduino IDE を起動してください(開いている場合は再起動してください)。
関数の説明
これはライブラリで最も重要/有用な関数です。利用可能なすべての関数を確認するために、.hファイルと.cppファイルを自分で見ることをお勧めします。
ライブラリ関数を通じてRGBデータを読み取る
readRGB(int *red, int *green, int *blue)
- red: Rを保存する変数のアドレス。
- green: Gを保存する変数のアドレス。
- blue: 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();
}
}
カラーセンサーの例/アプリケーション
この例では、Grove - I2C カラーセンサーの機能を使用し、チェーン可能RGB LED Groveで検出された色を表示する方法を示します。
以前にArduino IDEにGrove-チェーン可能RGB LEDライブラリをダウンロードしていない場合は、まずライブラリをダウンロードしてセットアップしてください。
- 完全な例については、File->Examples->Color_Sensor->example->ColorSensorWithRGB-LEDスケッチを開くか、以下のコードを新しいArduinoスケッチにコピー&ペーストしてください。
説明: この例では、周囲光の色度や物体の色を測定し、チェーン可能RGB LED Groveを介して検出された色を表示できます。
Grove - I2C カラーセンサーで検出された色を表示するために、他の表示モジュールを使用することもできます。
#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);
}
}
}
- 開発ボードにコードをアップロードしてください。
- その後、Grove_-_チェーン可能_RGB_LEDが検出された色を表示します。
Raspberry Pi で遊ぶ
ハードウェア
- ステップ 1. このプロジェクトで使用するもの:
| Raspberry pi | Grove Base Hat for RasPi | Grove-I2C_Color_Sensor |
|---|---|---|
|
|
|
| 今すぐ入手 | 今すぐ入手 | 今すぐ入手 |
- ステップ 2. Grove Base HatをRaspberryに接続してください。
- ステップ 3. Grove-I2C_ColorをBase HatのI2Cポートに接続してください。
- ステップ 4. USBケーブルでRaspberry PiをPCに接続してください。

ソフトウェア
Raspberry Pi with Raspberrypi OS >= Bullseye を使用している場合は、このコマンドラインを Python3 でのみ 使用する必要があります。
- ステップ 1. Setting Software に従って開発環境を設定します。
- ステップ 2. 関連する仮想環境に入ります。
source ~/grove_env/env/bin/activate
cd ~/grove_env/grove.py/grove
-
ステップ 3. 以下のコマンドを実行してコードを実行します。
-
以下は grove_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()
- このコードを実行します
python grove_i2c_color_sensor_v2.py
すべてがスムーズに進めば、以下の現象が見られます。😄

その他の参考資料
このモジュールは、カラーセンサー TCS3414CS をベースにしています。TCS3414CS デジタルカラーセンサーは、赤(R)、緑(G)、青(B)、クリア(C)(フィルターなし)の4つのチャンネルからデータを返します。赤、緑、青チャンネル(RGB)からの応答は、特定の光源の色度座標(x、y)を決定するために使用できます。これらの標準は、国際照明委員会(CIE)によって設定されています。CIE は、色と色測定に関する主要な国際組織です。TCS3414CS を使用して特定のオブジェクトの色を取得するには、まずセンサー応答(RGB)を CIE 三刺激値(XYZ)にマッピングする必要があります。その後、色度座標(x、y)を計算する必要があります。

色度計算プロセスの概要
変換を行うための方程式:

変換方程式
- 座標(x、y)を取得したら、推奨される色を取得するために以下の図を参照してください。

よくある質問
Q1: コマンドの理解方法は?例えば、REG_GREEN_LOW = 0xD0
A1: 添付の画像から、コマンドに何が含まれているかを確認できます。バイトプロトコルコマンドを使用する場合、0x80+ADDRESS のようにする必要があります。例えば、REG_TIMING(01h)= 0x81 バイトおよびブロック読み取りの場合、コマンドは 0xC0+ADDRESS にする必要があります。REG_GREEN_LOW(10h)= 0xD0。

Grove-I2C Color Sensor Eagle File V1.2
Grove-I2C Color Sensor Eagle File V2.0
リソース
- [ライブラリ]Library for Grove - I2C Color Sensor V1.2
- [ライブラリ]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
- [データシート]TCS3414-A Datasheet
- [データシート]TCS3472 Datasheet
技術サポートと製品ディスカッション
産業用センサーへのアップグレード
SenseCAP S2110 コントローラー と S2100 データロガー を使用することで、Grove を LoRaWAN® センサーに簡単に変換できます。Seeed は、プロトタイピングをサポートするだけでなく、堅牢な 産業用センサー の SenseCAP シリーズでプロジェクトを拡張する可能性も提供します。
IP66 筐体、Bluetooth 設定、グローバル LoRaWAN® ネットワークとの互換性、内蔵 19 Ah バッテリー、APP からの強力なサポートにより、SenseCAP S210x は産業用アプリケーションに最適な選択肢です。このシリーズには、土壌水分、気温と湿度、光強度、CO2、EC、および 8-in-1 気象ステーションのセンサーが含まれています。次の成功する産業プロジェクトには、最新の SenseCAP S210x をお試しください。






