フルカラーテープLEDをArduinoにつないでコントロールできるようになりました。
ArduinoにフルカラーテープLEDをつないでみる

また,PICAXEではI2CでつながるRGBバックライトLEDはカラーセンサの色を反映することができました。
PICAXEでカラーセンサーから取り込んだ色をバックライトのRGB・LEDに反映させてみる

しかしPICAXEでNeoPixel系のフルカラーLEDを駆動させるプログラムは私では書けないので,専用のライブラリのあるArduinoにおまかせし,また今回はArduinoにI2C接続のカラーセンサを追加して,フルカラーテープLEDと連動させてみました。


カラーセンサとフルカラーテープLEDをArduinoに接続したところです。


・Arduino:ATmega328P 3.3V 8MHz
・カラーセンサ:浜松ホトニクスS11059-02DT,3.3V,I2C接続
・LED:Grove フルカラーテープLED 30個/1m,5V,NeoPixel

Arduinoとカラーセンサは3.3V電源,5VのテープLEDは容量の大きい別電源としてコントロール線だけレベル変換を通しています。



試しに折り紙の色をカラーセンサで読み込んで,LEDに反映させてみました。


プログラムがまだ未完成であまり派手には光りませんが,折り紙の色は出ていますかね。

ま,紙でなくてもリンゴをセンサに近づければLEDは赤くなり,ミカンにすれば黄色になるので,いろいろ遊べそうです (^^)



今回使ったカラーセンサはI2C接続なので,ArduinoではWireライブラリを使います。

このWireライブラリは私にはかなりのクセもので,サンプルを見ながらたどたどしく書いてみました。ま,I2Cを直接触るというより,通信部門(バッファ)を介して操作するという基本的なイメージを持っていないとつまづくようです。


まだ良く分からないのが,同一のコントロールレジスタに複数回書き込む方法です。

連続して書き込むとレジスタアドレスが自動的に増えそうなので,2回に分けて書き込んで動いていますが,,もっと良い方法がありそうな,,。現在のsetup の一部です。

//Color Sensor Initialize

Wire.begin();
Wire.beginTransmission(Ox2A); // I2Cスレイブ指定
Wire.write(0x00); // コントロールレジスタ指定
Wire.write(0x8A); // 書き込みデータ,ADCリセット
Wire.endTransmission(); // バッファから出力

Wire.beginTransmission(0x2A); // I2Cスレイブ指定
Wire.write(0x00); // 再度コントロールレジスタ指定
Wire.write(0x0A); // 書き込みデータ,計測開始
Wire.endTransmission(); // バッファから出力



データの読み込みは,連続で読み込むと自動的にアドレスが増加してくれるのはウエルカムです (^^)

Wire.beginTransmission(0x2A); // I2Cスレイブ指定
Wire.write(0x03); //最初のデータレジスタ指定
Wire.endTransmission(false); // バッファから出力(リスタート)

Wire.requestFrom(0x2A, 6); //バッファに6byte連続入力
int SensorRH=Wire.read(); //変数に代入
int SensorRL=Wire.read();
int SensorGH=Wire.read();
int SensorGL=Wire.read();
int SensorBH=Wire.read();
int SensorBL=Wire.read();


後,今回は特に問題ないですが,このWire
ライブラリはバッファを設定しているのでその容量の32byteというのを意識していないといけないようですね。


うむ,Arduinoはなかなか長いプログラムが書けそうにありません,,。もう少し小さいボードにしてLEDコントロール専用に組み込み,普通のシリアル通信ででも動かすようにすると便利かもしれませんね。