Skip to main content

Grove - 光・ジェスチャー・カラー・近接センサー (TMG39931)

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Grove - 光・ジェスチャー・カラー・近接センサーは、TMG39931をベースとした製品で、ジェスチャー検出、近接検出、デジタル環境光センサー(ALS)、カラーセンサー(RGBC)、および放送用の光パターン生成/送信を特徴としています。この4-in-1センサーは、周囲環境からデータを収集し、I2Cバスを介して転送します。

産業用センサーへのアップグレード可能

SenseCAP S2110コントローラーおよびS2100データロガーを使用することで、Groveを簡単にLoRaWAN®センサーに変えることができます。Seeedはプロトタイピングを支援するだけでなく、SenseCAPシリーズの堅牢な産業用センサーを使用してプロジェクトを拡張する可能性も提供します。

SenseCAP S210xシリーズの産業用センサーは、環境センシングのための即時使用可能な体験を提供します。光強度検出のための高性能で堅牢なS2102ワイヤレス光強度センサーをご参照ください。このシリーズには、土壌水分、空気温度と湿度、光強度、CO2、EC、そして8-in-1気象ステーション用のセンサーが含まれています。次の成功する産業プロジェクトのために、最新のSenseCAP S210xをお試しください。

SenseCAP 産業用センサー
S2102 Light

特徴

  • 単一デバイスに統合された光学ソリューション
  • 周囲光の検知
  • UVおよびIRブロッキングフィルター
  • 複雑なジェスチャー検知
  • 暗いガラスの背後での動作に理想的 - 高感度
  • 近接検知
  • バーコードパターンの生成と送信
  • 単一の内部LEDの二重使用
  • 一貫した読み取りを提供するように調整済み

仕様

項目
供給電圧3.3V / 5V
動作温度-30~85℃
保存温度-40~85℃
最大ルクス [klx]60
インターフェースI2C
I2Cアドレス0x39

主な用途

  • ジェスチャー検知
  • 色検知
  • 周囲光検知
  • 携帯電話のタッチスクリーン無効化
  • 機械式スイッチの置き換え
  • 印刷バーコードのエミュレーション

動作原理

ジェスチャー検知

ジェスチャー検知は、4方向のフォトダイオードを使用して統合LEDから発せられる反射IRエネルギーを検知し、物理的な動きの情報をデジタル情報に変換します。

近接検知

近接検知機能は、統合LEDから発せられる反射IRエネルギーをフォトダイオードで検知することで物体を検知します。

デジタル周囲光検知および色検知

色およびALS検知機能は、赤、緑、青、およびクリア光の強度データを提供します。R、G、B、C各チャンネルにはUVおよびIRブロッキングフィルターがあり、専用のデータコンバーターが16ビットデータを同時に生成します。このアーキテクチャにより、デバイスは周囲光を正確に測定し、色を検知することが可能となり、照度や色温度の計算、ディスプレイバックライトの制御、色度の調整を実現します。

対応プラットフォーム

ArduinoRaspberry Pi

はじめに

Arduinoで遊ぶ

ハードウェア

必要な材料

Seeeduino V4.2Base ShieldGrove - Light&Gesture&Color&Proximity Sensor(TMG39931)
今すぐ購入今すぐ購入今すぐ購入
note

1 USBケーブルを優しく差し込んでください。そうしないとポートが損傷する可能性があります。内部に4本のワイヤーがあるUSBケーブルを使用してください。2本のワイヤーしかないケーブルではデータを転送できません。使用しているケーブルが不明な場合は、こちらをクリックして購入できます。

2 Groveモジュールを購入すると、Groveケーブルが付属しています。万が一Groveケーブルを紛失した場合は、こちらをクリックして購入できます。

  • ステップ 1. Grove - Light&Gesture&Color&Proximity Sensor(TMG39931)をGrove-Base ShieldのI2Cポートに接続します。

  • ステップ 2. Grove - Base ShieldをSeeeduinoに差し込みます。

  • ステップ 3. USBケーブルを使用してSeeeduinoをPCに接続します。

ソフトウェア

caution

Arduinoを初めて使用する場合は、開始する前にArduinoの使い方を参照することを強くお勧めします。

tip

ジェスチャー機能はまだサポートされていません。この機能にはAMSが提供するアルゴリズムが必要です。AMSからのサポートを受け次第、このライブラリを更新します。

例 1

  • ステップ 1. Seeed_TMG3993ライブラリをGithubからダウンロードします。

  • ステップ 2. ライブラリのインストール方法を参照してArduino用のライブラリをインストールします。

  • ステップ 3. Arduino IDEを再起動します。例を開くには、以下の3つの方法があります:

    1. Arduino IDEで直接開く:File --> Examples --> Seeed TMG3993(Grove - Light&Gesture&Color&Proximity Sensor) --> Example1-ProximityPullRawのパスを使用します。

    2. コンピュータで開く:XXXX\Arduino\libraries\Seeed_TMG3993-master⁩\⁨examples⁩\Example1-ProximityPullRaw⁩⁩\Example1-ProximityPullRaw.inoフォルダ内のbasic_demo.inoをクリックします。XXXXはArduino IDEをインストールした場所です。

    3. または、コードブロックの右上隅にあるアイコン をクリックして、以下のコードをArduino IDEの新しいスケッチにコピーします。

#include <Wire.h>

#include "Seeed_TMG3993.h"

TMG3993 tmg3993;

void setup()
{
Serial.begin(9600);
Serial.println("TMG3993 Proximity Example");

Wire.begin();

if (tmg3993.initialize() == false)
{
Serial.println("Device not found. Check wiring.");
while (1);
}
tmg3993.setupRecommendedConfigForProximity();
tmg3993.enableEngines(ENABLE_PON | ENABLE_PEN | ENABLE_PIEN);
}

void loop()
{
if (tmg3993.getSTATUS() & STATUS_PVALID)
{
uint8_t proximity_raw = tmg3993.getProximityRaw(); //近接データを読み取るとステータスビットがクリアされます
Serial.print("Proximity Raw: ");
Serial.println(proximity_raw);
}
delay(1);
}
caution

ライブラリファイルが更新される可能性があります。このコードは更新されたライブラリファイルには適用されない場合がありますので、最初の2つの方法を使用することをお勧めします。

success

すべてが正常に動作すれば、近接センサーの生データ(uint16_t)がシリアルモニターから読み取れるはずです。

他の例を実行したい場合は、同様の手順を行うことができます。

例 2

この例では、近接を検出するために割り込み方式を使用します。

2つの閾値(低い値と高い値)を設定する必要があります。この範囲内の近接値は何もトリガーしませんが、この範囲外の値はイベントをトリガーします。具体的には、近接センサー値が低い閾値を10回以上下回ると、近接が取り除かれたイベントが発生し、近接センサー値が高い閾値を10回以上上回ると、近接が検出されたイベントが発生します。ここでの10回は、setInterruptPersistenceRegを使用して設定できます(setupRecommendedConfigForProximityの例を参照)。

  • ステップ 1. Seeed_TMG3993ライブラリをGithubからダウンロードします。

  • ステップ 2. ライブラリのインストール方法を参照してArduino用のライブラリをインストールします。

  • ステップ 3. Arduino IDEを再起動します。例を開く方法は例1と同じですが、今回は"Example2-ProximityInterrupt"を選択してください。または以下のコードをArduino IDEにコピーしてください:

#include <Wire.h>

#include "Seeed_TMG3993.h"

TMG3993 tmg3993;
int last_interrupt_state = -1;

void setup()
{
Serial.begin(9600);
Serial.println("TMG3993 Proximity Example");

Wire.begin();

if (tmg3993.initialize() == false)
{
Serial.println("Device not found. Check wiring.");
while (1);
}
tmg3993.setupRecommendedConfigForProximity();
tmg3993.setProximityInterruptThreshold(25, 150); //5cm未満で近接イベントがトリガーされます
tmg3993.enableEngines(ENABLE_PON | ENABLE_PEN | ENABLE_PIEN);
}

void loop()
{
if (tmg3993.getSTATUS() & STATUS_PINT)
{
uint8_t proximity_raw = tmg3993.getProximityRaw(); //近接データを読み取るとステータスビットがクリアされます

if (proximity_raw >= 150 && last_interrupt_state != 1) {
Serial.println("Proximity detected!!!");
Serial.print("Proximity Raw: ");
Serial.println(proximity_raw);
last_interrupt_state = 1;
} else if (proximity_raw <= 25 && last_interrupt_state != 0) {
Serial.println("Proximity removed!!!");
Serial.print("Proximity Raw: ");
Serial.println(proximity_raw);
last_interrupt_state = 0;
}

// 割り込みビットをクリアすることを忘れないでください
tmg3993.clearProximityInterrupts();
}
delay(10);
}

caution

ライブラリファイルが更新される可能性があります。このコードは更新されたライブラリファイルには適用されない場合がありますので、最初の2つの方法を使用することをお勧めします。

コードをSeeeduinoにアップロードした後、シリアルモニタで以下のような出力が表示されるはずです。

例3

この例では、R、G、B、Cセンサーの値を読み取ります。Cは、チップのデータシートで非色フィルタクリアチャネルとして定義されています。この例では、センサーのアプリケーションノートに記載されている式に基づいて、周囲光のLux値も計算します。

  • ステップ1. Seeed_TMG3993 ライブラリをGithubからダウンロードします。

  • ステップ2. ライブラリのインストール方法 を参照して、Arduino用のライブラリをインストールします。

  • ステップ3. Arduino IDEを再起動します。例1と同じ方法で例を開きますが、今回は「Example1」ではなく「Example3-Color-Light」を選択します。または、以下のコードをArduino IDEにコピーしてください:



#include <Wire.h>

#include "Seeed_TMG3993.h"

TMG3993 tmg3993;

void setup()
{
Serial.begin(9600);
Serial.println("TMG3993 Color Example");

Wire.begin();

if (tmg3993.initialize() == false)
{
Serial.println("Device not found. Check wiring.");
while (1);
}
tmg3993.setADCIntegrationTime(0xdb); // 統合時間: 103ms
tmg3993.enableEngines(ENABLE_PON | ENABLE_AEN | ENABLE_AIEN);
}

void loop()
{
if (tmg3993.getSTATUS() & STATUS_AVALID)
{
uint16_t r,g,b,c;
int32_t lux, cct;
tmg3993.getRGBCRaw(&r, &g, &b, &c);
lux = tmg3993.getLux(r, g, b, c);
// CCTの計算は`アプリケーションノート`に基づいています。
// テスト結果から、誤差がある可能性があります。
cct = tmg3993.getCCT(r, g, b, c);

Serial.print("RGBC データ: ");
Serial.print(r);
Serial.print("\t");
Serial.print(g);
Serial.print("\t");
Serial.print(b);
Serial.println("\t");
Serial.println(c);

Serial.print("Lux: ");
Serial.print(lux);
Serial.print("\tCCT: ");
Serial.println(cct);
Serial.println("----");

// 割り込みビットをクリアするのを忘れないでください
tmg3993.clearALSInterrupts();
}
delay(100);
}

caution

ライブラリファイルが更新される可能性があります。このコードは更新されたライブラリファイルには適用されない場合がありますので、最初の2つの方法を使用することをお勧めします。

コードをSeeeduinoにアップロードした後、シリアルモニタで以下のような出力が表示されるはずです。

回路図オンラインビューア

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。

Loading Comments...