= WS2822SシリアルLEDの使い方 = == 関連商品 == * [https://www.switch-science.com/catalog/2206/ WS2822SシリアルLEDタイルモジュール(5個入り)] * [https://www.switch-science.com/catalog/2207/ WS2822SシリアルLEDスティックモジュール] == WS2822Sの特徴 == フルカラーシリアルLEDのWS2822SはEEPROMを内蔵していてそこにアドレス情報を保存することができます。[[BR]] それぞれのLEDがアドレスを持つことで、複数のLEDを1本の信号線で制御できます。[[BR]] 信号線は色信号に1本、アドレス信号に1本の合計2本が必要です。[[BR]] WS2822Sの利点、WS2812Sとの比較は[http://mag.switch-science.com/2015/02/04/ws2822s/ こちら] [[Image(s-ws2822s_8.jpg)]]   == 通信方法 == WS2822Sの通信方法にはDMX512という通信規格の拡張方式を用いています。[[BR]] DMX512とは舞台照明や演出機器などのコントロールに使われる規格で、512チャンネルx8bitの情報を扱えます。[[BR]] WS2822Sの通信規格では3072チャンネルx8bitの情報を扱えます。WS2822Sの色情報は赤緑青の3色x8bitなので、1LEDあたりに3チャンネル分の情報が必要です。[[BR]] つまり最大で1024個のLEDが1本の信号線でコントロール可能です。[[BR]] === ・色信号 === 色制御信号のフォーマットは次のようになっています。 [[Image(s-ws2822s_5.jpg)]] [[Image(ws2822s_color2.jpg)]] 色の制御信号は全てのLEDに並列に接続されているので、全てのLEDに同時に届きます。[[BR]] アドレスが1番に設定されたLEDは1、2、3番目の情報を取り込みます。[[BR]] アドレスが4番に設定されたLEDは4、5、6番目の情報を取り込みます。[[BR]] === ・アドレス信号 === アドレス設定信号のフォーマットは次のようになっています。 [[Image(s-ws2822s_6.jpg)]] [[Image(ws2822s_address.jpg)]] アドレスの設定信号は色の信号と違って並列ではなくLED同士が直列に数珠繋ぎになっています。[[BR]] ADRIピンにアドレスの情報が入力され、アドレス情報を受け取ったLEDは次につながっているLEDのためのアドレス情報をADROから出力します。[[BR]] 次の例は先頭のLEDにアドレス4番、その次のLEDに7番を書き込む時の先頭LEDのADRIとADROの波形を表しています。 [[Image(s-ws2822s_7.jpg)]] アドレスの値は3byteの情報で表され、組み合わせは次の表のようになっています。 [[Image(ws2822s_address3.jpg)]] = ライブラリ = [https://github.com/SWITCHSCIENCE/WS2822S Arduino用WS2822Sライブラリ]を作成しました。 === インストール方法 === [https://github.com/SWITCHSCIENCE/WS2822S/archive/master.zip ダウンロード] ←をクリックするとWS2822S-master.zipというZIPファイルをダウンロードします。[[BR]] ZIPファイルを解凍して、フォルダ名をWS2822S-masterからWs2822sに変更します。(しなくても問題はありません。)[[BR]] [[BR]] Ws2822sフォルダの中身は === 使い方 === まず最初にアドレスをLEDに書き込みます。 {{{ //***************************************************************** // WS2822S // // アドレス設定 setAddress(LEDの先頭番号、LEDの末尾番号) //****************************************************************** #include "Ws2822s.h" #define PIXEL_NUM 10 //使用するWS2822Sの数 #define LED_PIN 13 //WS2822SのDAIピンにつなげるArduinoのピン番号 #define ADR_PIN 12 //WS2822SのADRIピンにつなげるArduinoのピン番号 Ws2822s LED(LED_PIN , ADR_PIN, PIXEL_NUM); void setup() { } void loop() { LED.setAddress(0,9); // 先頭から0,1,2... 8,9とアドレスを書き込み // 一度アドレスを書き込んだらLEDの電源をOFFに delay(5000); } }}} このスケッチをArduino Unoで実行しました。WS2822SのDAIピンをArduino Unoの13番ピンに、ADRIピンをArduino Unoの12番ピンに接続してあります。[[BR]] LEDの先頭から順番にアドレスをつけていくと1、4、7…となりますが、ライブラリ上では0、1、2…となるようにしてあります。[[BR]] setAddress(0,9); とすると先頭から0123456789と順番にアドレスを割り振ります。[[BR]] アドレスの書き込みに成功するとLEDが白く光ります。一度アドレス書き込みが成功したら電源を切ります。電源を切ってもアドレス情報は消えません。[[BR]] アドレスの変更予定が無ければアドレスの信号線ははずしてしまってもかまいません。[[BR]] 次にスケッチを変更してLEDを光らせてみます。 {{{ //***************************************************************** // WS2822S // 2015/01/29 // // 色情報の設定 setColor(LEDの番号、赤、緑、青) // 色情報の送信 send() // //****************************************************************** #include #include "Ws2822s.h" #define PIXEL_NUM 10 //使用するWS2822Sの数 #define LED_PIN 13 //WS2822SのDAIピンにつなげるArduinoのピン番号 Ws2822s LED(LED_PIN , PIXEL_NUM); void write_color() { LED.send(); } void setup() { MsTimer2::set(100,write_color); MsTimer2::start(); } void loop() { for(int i=0;i