概要

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

光を検出できるセンサーは色々な種類がありますが、例えば商品パッケージの色を判別したい時など、光の輝度だけではなく色も判別したい場合は、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

Jetson TX2でスイッチボタンを押さずに電源を入れる
Jetson TX2でスイッチボタンを押さずに電源を入れる
概要 Jetson TX2の開発ボードは電源を入れる際、スイッチを長押ししないと電源がつきません。しかし、ロボットの中に組み込んだり、スイッチを直接押して起動することが難しい場合もあります。本記事では、そのような場合にスイッチを押さず...
Read More
rospyでImageデータを取得してOpenCVの配列として扱う
rospyでImageデータを取得してOpenCVの配列として扱う
概要 PythonでROS開発をする際、sensor_msgs/Image型のトピックを受信して色々な処理をかけたいときには、OpenCVの配列に変換した上で処理を行うと便利です。CvBridgeというsensor_msgs/Imag...
Read More
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
概要 ROSを起動させているロボットに対して、スマートデバイスからROSで通信を行いたい時があるときは、Flutterを用いたネイティブアプリで実装するのがおすすめです。 roslibjsを使ってJavaScriptでROSトピックの...
Read More