creation/cr_ledtape

Full color LED tape


ledtape05.jpg

フルカラーLEDテープの使用

 Hybrid作品の中で、フルカラーのLEDテープを使いましたので紹介しようと思います。
 電源のON/OFFを表示するために、単体のLEDを使用する事はあるのですが、多くのLEDを使おうとした時には、LEDテープが便利であろうと考えて使用しました。

ledtape01.jpg  今回使ったLEDは、SWITCH SCIENCEが販売している、AdafruitのNeoPixelと言う、フルカラーシリアルLEDテープですが、240個のLEDがテープ状に繋がっているもので、それぞれのLEDの色を独立して変えられるものです。
 Arduino用に専用のライブラリィもあるので、私達のような表現者にとって大変有難い製品です。

 これを音楽や映像を上演するために組んだMaxMSPのPatch上からコントロールする方法で使用します。使用した8本のアクリルパイプに合わせて、LEDが240個繋がっている物を30個づつに切ってテープを8本にし、その間は7m程度の電線で繋いで使う事にしました。
 それぞれのLEDを、8都市の気温データ(最高気温、最低気温)に従ってオンオフしたり、色を変えて使用します。

Arduino側のプログラム

 LEDテープのコントロールは、Arduinoを通して行います。
 Arduino側で基本的なコードを書いておいて、MaxMSPからシリアル通信でテータを送ります。
 Adafruit_NeoPixel用のライブラリィをインストールし、Arduinoのスケッチの最初でincludeしておく事でライブラリィが使えるようになります。

    #include <Adafruit_NeoPixel.h>

 その後で、使用するLEDの数を指定しますが、ここではLEDを240個を使うので、次の様になります。 (注:次の2行は、コードの1行分です)

    Adafruit_NeoPixel strip
      = Adafruit_NeoPixel(240, 6, NEO_GRB + NEO_KHZ800);

 LEDにデータを送る場合は、LEDの番号と色をRGBで設定します。

    strip.setPixelColor(LEDの番号, red, green, blue);

 その後、次のコードを送る事でセットした色が反映されます。

    strip.show();

 Arduino上でシリアル通信を扱うためのコードを、スケッチのloop()内に、一般的な方法で書いてあります。
 シリアルポートから一文字づつ読み込み、数字であれば数値に変換して、文字であれば分岐して処理すると言う簡単なものです。上記のMaxMSPのPatchからも分かるように、データが992以上の場合にはクワイエット・モードで、それ以外は気温データに従った処理をするようにしてあります。

void loop() {
  int c;
  int day;

  while(Serial.available()>0){
  c = Serial.read();
  if ((c>='0') && (c<='9')) {
      value = 10*value + c - '0';
      led13();
  }
  else{
      if (c=='d'){day = value;}
      else if (c=='e'){
        if(day>=992 && day<=999){
          ledidle(day);
        }
        else{
          ledplay(day);
        }
      }
      value = 0;
    }
  }
}

 MaxMSP側の処理を軽減するために、気象データは全てArduino側に記憶させて使用しました。
 Arduinoの場合、Flashメモリーにはプログラムが書き込まれ、SRAM(パソコンでは、一般的にメモリーと呼ばれる)には変数が書き込まれるようですが、ArduinoのSRAMはサイズが小さいために、今回の様に大きいデータは記録させる事が出来ませんので、Flashメモリー側に格納しました。
 データは配列変数として次の様にメモリーに格納しています。

const PROGMEM byte dt[8][2][365] = {
  {
  {151,153,151,151,151,
  -- 中略 --
  124,123}
  }
};

 メモリーに格納したデータは、番地を指定して読み込めます。この場合、一般的なC言語と同様に、変数名の前に「&」を付ける事で、変数が格納されている番地の指定が出来ますし、配列変数でも可能でした。

for(i=0;i<8;i++){
    byte mx = pgm_read_byte(&dt[i][0][day]);
    byte mi = pgm_read_byte(&dt[i][1][day]);
    -- 中略 --
}

MaxMSP側のPatch

 MaxMSP側からシリアル通信をするためには[serial]オブジェクトを使用し、気象データを読み込む「日にち」と「データ番号」の数値を送っています。
 下記のイメージは、音楽や映像等をコントロールするメインのPatchから呼び出す、LED用のサブPatchです。このPatchの終端にある[serial]オブジェクトでは、Arduinoにシリアル通信でデータを送っていますが、文字列に変換して送る一般的な方法でデータを送っています。
 [pack 0 d 0 e]オブジェクトでは、それぞれのデータの後に、タグ用の「d」と「e」を付けて送り、Arduino側で読み込む時に使用しています。

cr_LEDPlay.jpg

ハードウェア

ledtape02.jpg

 LEDテープをArduinoから使う場合、電源(5V)、GND、制御信号の3本の線を ledtape04.jpg それぞれArduinoの端子に繋げば、一番近いLEDから番号が振られるので、スケッチ上で、色を変えたい番号のLEDに、RGBにより色を指定をするだけでフルカラーが実現出来ます。

 今回の場合、LEDテープを8本に切り、それらの間を長いケーブルで繋いでいくため、切った部分の端子と電線とをハンダ付けする必要がありますが、新しくハンダを継ぎ足さなくても、テープを切った部分にあるハンダ部分にコテで熱を加える事で、簡単に電線を接続する事が出来ました。

ledtape03.jpg  各LEDに接続した電線には長巻(100m)の物を購入し、電線どうしの結線にはコネクタを利用しました。
 電線にコネクタを取り付ける場合には、専用のかしめ工具を使用する事を強くお勧めします。大抵のかしめ工具はとても高価ですが、専用の物を使用して、使い方に慣れれば、確実に結線出来ますので、断線してLEDが点かないような事態は避ける事が出来ます。勿論、かしめ工具がコネクタに対応しているどうかを確認して購入して下さい。

Return to top of this page.