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).
  }

}

Arduinoに測距センサGP2Y0A710K0Fを接続する

測距センサGP2Y0A710K0F

シャープの測距センサGP2Y0A710K0Fは、赤外線等を用いて1m〜5.5mまでの距離の測定を行うことが可能なセンサである。出力電圧は距離に反比例して出力される。

Arduinoに接続する

測距センサGP2Y0A710K0Fは、本体背面に刻印されている文字を読める向きから見て左から、黄(GND), 青(Vcc), 黒(Vcc), 白(Vo), 赤(GND)の順序でピンが配置されている。Vccが青、GNDが赤と通常と逆となっていることに注意が必要である。付属の説明書には、電源ライン安定化のためVcc-GNDライン間に、10μF以上のバイパスコンデンサを付加して使用することを奨励する記述がある。

GP2Y0A710K0Fブレッドボード接続図

上の図では、SE-10のVoutはアナログ入力のA0に入力されている。以下のプログラムは距離センサの出力電圧から距離への変換を行った上で、シリアル通信によりその数値の送信を行っている。

void setup() {
  // シリアル通信速度
  Serial.begin(9600);
}

void loop() {
  int a_in;
  a_in = analogRead(0);
  int dist = (6762/(a_in-9))-4;
  Serial.println(String(dist));

  delay(1000);
}

距離センサの出力電圧から距離への変換は以下の式で行う。

(6762/(a_in-9))-4