概要

物体の光の反射率を測定するフォトリフレクタは、発光素子と受光素子が配置されていて光を物体に反射させてその強度を測定することで、物体の存在確認や白黒パターンの検出などをすることができます。

光を検出できるセンサーは色々な種類がありますが、例えば商品パッケージの色を判別したい時など、光の輝度だけではなく色も判別したい場合は、3色に分解して輝度を計測できるカラーセンサーを用いることをおすすめします。

Arduinoでカラーセンサーを使用

 

本記事では、スイッチサイエンス社のBH1745NUC搭載のカラーセンサーを使用してみました。Arduinoで動作させるために必要なライブラリやサンプルコードが提供されており、一瞬で動作確認まで行うことができたのでとてもおすすめです。

基盤のColor Sensorと記載されている部分が実際のセンサー部分となります。

カラーセンサー

Arduinoとの配線

配線は非常に容易で、SCL / SDA / 3.3V / GNDをそれぞれArduino、カラーセンサーに接続するだけで大丈夫です。

Arduino接続

ライブラリのダウンロード

Arduinoでセンサー情報を読み取るためにスイッチサイエンス社が提供している下記ライブラリを使用しましょう。

Arduino IDEの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」を選択後、ダウンロードしたzipファイルを選んでインストールをしましょう。

サンプルコードの実行

続いてArduinoのコードを書いていきますが、サンプルコードが用意されているので、これを用いましょう。

 

#include 
#include 

/* #define BH1745NUC_DEVICE_ADDRESS_38            (0x38)    // 7bit Addrss */
/* #define BH1745NUC_DEVICE_ADDRESS_39            (0x39)    // 7bit Addrss */

BH1745NUC bh1745nuc(BH1745NUC_DEVICE_ADDRESS_39);

void setup() {
  byte rc;

  Serial.begin(115200);		/*  Modify : set the serial speed to 11500 kbps  */
  while (!Serial);
  
  Wire.begin();
  
  rc = bh1745nuc.init();
}

void loop() {
  byte rc;
  unsigned short rgbc[4];
  
  rc = bh1745nuc.get_val(rgbc);
  if (rc == 0) {
    Serial.write("BH1745NUC (RED)   = ");
    Serial.println(rgbc[0]);
    Serial.write("BH1745NUC (GREEN) = ");
    Serial.println(rgbc[1]);
    Serial.write("BH1745NUC (BLUE)  = ");
    Serial.println(rgbc[2]);
    Serial.write("BH1745NUC (CLEAR) = ");
    Serial.println(rgbc[3]);    
    Serial.println();
  }
 
  delay(500);

}
 

 

0.5秒おきにRGBごとの計測された輝度値が表示されるようになっています。それぞれ、最大65,536の数値が返却されるようになっています。 

シリアルモニタ

チップとしてはROAM社のBH1745NUCというチップを使っており、データシートは下記になります。

データシートによると、RGBそれぞれの敏感度が異なっていて、緑→赤→青→透明という順に敏感度が高い(数字が大きくなりやすい)ので、これを考慮した上で、閾値などを設定していくと良いでしょう。

色敏感度

ArduinoI2cセンサー

Related Posts

L293Dモータシールドを用いて4つのDCモータを1つの基盤で制御
L293Dモータシールドを用いて4つのDCモータを1つの基盤で制御
概要 DCモータを制御する際にモータコントローラを使用すると思いますが、複数のモータを制御する際は配線が複雑になってしまいがちです。   RoboStation https://rb-station.com/blogs/arti...
Read More
Arduinoのrosserialで「Unable to sync with device」というエラーが出た場合の対処
Arduinoのrosserialで「Unable to sync with device」というエラーが出た場合の対処
概要 ArduinoでROSのトピックを受信して動作をさせたいときに、使うのがrosserialです。 rosserial_arduino このrosserial_arduinoを用いてArduinoと繋げてROSトピックを投げ...
Read More
Arduinoのコードでキュー(Queue)を使う
Arduinoのコードでキュー(Queue)を使う
概要 Arduinoのコードを書く際に、処理をキューイングして順番に処理をしていきたい時がありました。Arduinoにはarrayはありますが、FIFO(後述)型のキューはデフォルトでは無いため、外部ライブラリをインクルードする必要が...
Read More