Arduinoにスイッチサイエンス/フルカラーシリアルLEDテープを接続する

スイッチサイエンス/フルカラーシリアルLEDテープ

スイッチサイエンス社から発売されているフルカラーシリアルLEDテープは、信号線1本でフルカラーを制御できるLEDモジュールである。Adafruit製のArduino用ライブラリを流用可能で、特別なフォーマットのシリアル通信により1本の信号線でRGBを制御可能である。

Arduinoに接続する

フルカラーシリアルLEDテープは、テープの両端にGND, Do, Vcc(+5V)の3つの端子を備えている。各テープの両端同士を接続することでテープを延長した上で発光させることが可能である。GNDとVccはArduinoのGNDとVccに接続し、DoはArduinoのDigital Inputに接続する。今回は測距センサGP2Y0A710K0Fが出力した距離データに連動してLEDを点灯させるという構成とした。

フルカラーシリアルLEDテープ構成図

Adafruit製Arduino用ライブラリの組み込み

Arduinoは外部のライブラリを組み込むことが可能である。外部のライブラリを組み込むためには、「スケッチ」->「ライブラリを使用」から「ライブラリをインストール」を選択する。ライブラリをインストールすると、スケッチなどが保存されるのと同じディレクトリ内にライブラリファイルがコピーされる。

ライブラリをインストール

スケッチ

測距センサGP2Y0A710K0Fからデータを取得する方法はこちら。Adafruitライブラリは、RGBそれぞれ値を指定してLEDの色を決定することができるので、測距センサで計測した値が近い(距離が短い)ほど、LEDが赤く光るという制御している。

// ライブラリの読み込み
#include <Adafruit_NeoPixel.h>
#include <avr/power.h> // 電力制御
// テープLEDの数
#define NUMPIXELS 8
// ピンポート
const int gp2y0a710kPin  = 0; // アナログ
const int neoPixelPin    = 6;// デジタル

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, neoPixelPin, NEO_GRB + NEO_KHZ800);

void setup() {
  // put your setup code here, to run once:

  #if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif

  pixels.begin();
}

void loop() {
  // put your main code here, to run repeatedly:

  // 距離の測定
  int GP2Y0A710K = getGP2Y0A710K(gp2y0a710kPin);

  // LEDの制御
  int green = GP2Y0A710K * 255 / 60;
  if(green < 0 || green > 255) green = 0;
  int red = (255-green)/2;
  ctrlLED(red, green, 0); // 距離が近づくほどより赤く点灯する

  delay(1000);
}

// 距離の測定
int getGP2Y0A710K(int pin){
  int a_in = analogRead(pin);
  return (6762/(a_in-9))-4;
}

// LEDの制御
void ctrlLED(int red, int green, int blue){

  for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(red,green,blue)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(100); // Delay for a period of time (in milliseconds).
  }

}