工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

概要

このArduinoチュートリアルでは、TCS230 / TCS3200カラーセンサを使用してArduinoで色を検出する方法を学びます。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。

TCS230/TCS3200カラーセンサの仕組み

TCS230は8×8のフォトダイオードアレイで色光を検知します。電流-周波数変換器により、フォトダイオードからの読み取り値が、光強度に比例した周波数の矩形波に変換されます。Arduinoでこの矩形波出力を読み取ることで色情報を得られます。

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

色フィルタの仕組み

64個のフォトダイオードには3種類のカラーフィルタがあります:

  • 16個: 赤フィルタ
  • 16個: 緑フィルタ
  • 16個: 青フィルタ
  • 16個: フィルタなし(クリア)
ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

各16個のフォトダイオードは並列接続されており、2つの制御ピンS2, S3でどのグループを読み取るか選択します(下表参照)。例えば赤を検出したい場合はS2, S3を両方Lowに設定します。

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

さらにS0, S1ピンで出力周波数のスケーリング(100%, 20%, 2%)が可能です。これにより様々な周波数カウンタやマイクロコントローラに最適化できます。

Arduinoへの接続

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

必要なコンポーネント

  • TCS230 / TCS3200 カラーセンサ
  • Arduinoボード
  • ブレッドボードとジャンパワイヤ

TCS230カラーセンサ ソースコード

基本版: 周波数値の取得

説明: 4つの制御ピンを出力、センサ出力を入力に設定。周波数スケーリングを20%に設定(S0=High, S1=Low)。ループ内でS2, S3を切り替えてR, G, B各フィルタ群の周波数をpulseIn()で測定し、シリアルモニタに出力します。

/* Arduino Color Sensing Tutorial
 * by Dejan Nedelkovski, www.HowToMechatronics.com */
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

int frequency = 0;

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
  // 周波数スケーリング 20%
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
  Serial.begin(9600);
}

void loop() {
  // 赤フィルタ選択
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  frequency = pulseIn(sensorOut, LOW);
  Serial.print("R= ");
  Serial.print(frequency);
  Serial.print(" ");
  delay(100);

  // 緑フィルタ選択
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);
  Serial.print("G= ");
  Serial.print(frequency);
  Serial.print(" ");
  delay(100);

  // 青フィルタ選択
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);
  Serial.print("B= ");
  Serial.print(frequency);
  Serial.println(" ");
  delay(100);
}

シリアルモニタを実行すると周波数値が表示されます。値は周波数スケーリング設定と周囲光に依存します。各色の感度差により3値は異なります(データシートのスペクトル応答特性参照)。

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

色のついた物体をセンサにかざすと値が変化します。例えば赤い物体を近づけると、赤チャンネルの値が(私の環境では)70前後から25前後に低下します。

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

RGBモデル(0-255)への変換

検出値を一般的なRGBモデル(0-255)に変換するにはmap()関数を使用します。環境に合わせてキャリブレーションが必要です。

// 周波数値をRGB 0-255にマッピング
// 例: 赤の場合、周波数70→0, 25→255 にマッピング
frequency = map(frequency, 25, 70, 255, 0);

緑と青についても同様に、各色の最小・最大値を測定してマッピング範囲を決定します。

最終版: RGB値出力コード

/* Arduino Color Sensing Tutorial
 * by Dejan Nedelkovski, www.HowToMechatronics.com */
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

int frequency = 0;

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
  Serial.begin(9600);
}

void loop() {
  // 赤
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  frequency = pulseIn(sensorOut, LOW);
  frequency = map(frequency, 25, 72, 255, 0);
  Serial.print("R= ");
  Serial.print(frequency);
  Serial.print(" ");
  delay(100);

  // 緑
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);
  frequency = map(frequency, 30, 90, 255, 0);
  Serial.print("G= ");
  Serial.print(frequency);
  Serial.print(" ");
  delay(100);

  // 青
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  frequency = pulseIn(sensorOut, LOW);
  frequency = map(frequency, 25, 70, 255, 0);
  Serial.print("B= ");
  Serial.print(frequency);
  Serial.println(" ");
  delay(100);
}

色精度は簡易的なプロジェクト向けですが十分実用的です。次の応用例として、Arduino自動色選別機の作成チュートリアルも公開予定です。

ArduinoでTCS230/TCS3200カラーセンサを使った色検出 - 完全ガイド

ご質問はコメント欄でお気軽にどうぞ。私のArduinoプロジェクトコレクションもぜひチェックしてください。

製造プロセス

  1. Raspberry Pi光センサーチュートリアル - LDRを配線してPythonで光量を読み取る
  2. Arduinoで作るセキュアなRFIDロック – ステップバイステップガイド
  3. K30 CO2センサで室内空気質をリアルタイム監視する
  4. デジタル身長計の自作:Arduino Nanoとレーザー距離センサーで成長記録
  5. DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
  6. ESP32で作るIoT環境モニター:温湿度・気圧・CO2をWebダッシュボードで可視化
  7. Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
  8. Arduino RGBカラーミキサーの製作 - ステップバイステップチュートリアル
  9. 音楽同期LEDイルミネーションで新年を盛り上げよう – Arduino Nano + NeoPixel
  10. Arduino Nanoと指紋センサーで作るバイオメトリクス認証システム – 完全チュートリアル
  11. Arduino初心者チュートリアル01: 最初のプロジェクトを始めよう