APDS-9960を買ったのでRGB(環境光)をとってみた


APDS-9960は「デジタルRGB、照度、近接およびジェスチャ・センサ」とあるとおり、照度だけでなくRGB値を取得したり、XYだけでなくZ値を判定して、前後左右上下のジェスチャーを取得することができるパーツです。

私の小指の爪の5分の1くらいでしょうか…ちっちゃ!

実際に買ったのは、このちっちゃいパーツが載ったSparkFanのモジュール。

ジェスチャーも面白そうだけどデモ動画とか散々ジェスチャーばっかり見せられるので、天邪鬼にカラーセンサーの方を試してみたいと思います。

APDS-9960のライブラリ

まずは、sparkfun/APDS-9960_RGB_and_Gesture_SensorのGitHubページから「DownloadZIP」でライブラリをダウンロードしてきます。

ArduinoIDEで[スケッチ]→[Include Library]→[Add .ZIP Library…]を選択します。

APDS-9960

ダウンロードしたzipの中の「APDS-9960_RGB_and_Gesture_Sensor-10\Libraries\SparkFun_APDS9960」ディレクトリを選択します。

無事完了するとInclude_Libraryの中に「SparkFun_APDS9960」が追加されています。

APDS-9960のサンプルスケッチ

同じくダウンロードしたファイルの中にサンプルファイルがあるので、「APDS-9960_RGB_and_Gesture_Sensor-10\Libraries\SparkFun_APDS9960\examples\ColorSensor」からカラーセンサー用のサンプルファイルを開くか、ArduinoIDEで[ファイル]→[スケッチの例]→[SparkFun_APDS9960]→[ColorSensor]を選択してファイルを開きましょう。

このまま書き込んで動くかな?と思ったのですが、全然ダメでした。
I2Cについてぐぐったりと遠回りしてわかりました。

サンプルスケッチのsetup時に

という感じでSDA、SCLに対応するピン番号を指定してあげないといけませんでした。

APDS-9960のカラーセンサーデモ

できたのがこちら。

動画、すごくわかりにくいんですが、

・NeoPixelのLEDを光らせて環境光を変える
・NeoPielの中央にAPDS-9960を置いておく
・ディスプレイの光が当たると数値が変わるので箱で覆う

という状態です。

NeoPixel側はぐるっと回るアニメーションがあるので常に一定というわけにはいかないし、ディスプレイとか自分の影とかもあるので、RGB値をキメで判定してなにか別の処理をするっていうのは難しいかなぁと思います。ある程度閾値を設けてやらないとダメですね。
特定の場所に設置して、同じく固定された光源があって、その色をとるとかだったら、最初に測定しておいて閾値を決めることはできるかな。

ESP-WROOM-02で使うには

ちょくちょく使っているこちらの開発ボード。

チュートリアルなどを見るとSDAとSCLはArduinoUnoのA4、A5に繋ぐとあったので、ESP-WROOM-02にはアナログ値が取れるピンはTOUTしかないしどうしたらいいの!?と思っていたんですが…

ついったで指摘いただいて、「ArduinoのA4、A5はアナログ専用ではない」ということがわかりました。
さらに自分でもよく調べてみたら「APDS-9960はそもそもデジタル」だし「ESP-WROOM-02はちゃんとI2Cインターフェースを備えている」ということもわかりました。

ということで汎用的に使えそうな12番ピンと13番ピンをそれぞれSDA、SCLに繋いでみたら普通に値が取れました。

これで取った値をMilkcocoaに送信することも可能!

(∩´∀`)∩ワーイ

ジェスチャーも試してみたいけどまた今度!