概要
物体の光の反射率を測定するフォトリフレクタは、発光素子と受光素子が配置されていて光を物体に反射させてその強度を測定することで、物体の存在確認や白黒パターンの検出などをすることができます。
光を検出できるセンサーは色々な種類がありますが、例えば商品パッケージの色を判別したい時など、光の輝度だけではなく色も判別したい場合は、3色に分解して輝度を計測できるカラーセンサーを用いることをおすすめします。
Arduinoでカラーセンサーを使用
本記事では、スイッチサイエンス社のBH1745NUC搭載のカラーセンサーを使用してみました。Arduinoで動作させるために必要なライブラリやサンプルコードが提供されており、一瞬で動作確認まで行うことができたのでとてもおすすめです。
基盤のColor Sensorと記載されている部分が実際のセンサー部分となります。
Arduinoとの配線
配線は非常に容易で、SCL / SDA / 3.3V / GNDをそれぞれ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それぞれの敏感度が異なっていて、緑→赤→青→透明という順に敏感度が高い(数字が大きくなりやすい)ので、これを考慮した上で、閾値などを設定していくと良いでしょう。