Squarepusherの例のLED Matrix Helmetみたいなヤツを作りましたが過電圧でぶっ壊しました.
 


こんなんです.

フルカラーLEDテープ、WS2812B

まず周囲で「WS2812B」というマイコン内蔵フルカラーLEDが流行ってました.5V駆動,電源・GND・入出力データ線だけで,大量のコイツを数珠つなぎのように繋いで,Arduinoとかみたいなチャラチャラしたマイコンボードから1個1個RGB制御できるっていう便利くんです.

リンクで貼った奴はちっこいのが2個入ってるやつですが,世間にはコレのLEDテープとか丸く並べた奴とかが売ってます.日本だとスイ◯チサイエンスとかで売ってるみたいですが,Aliexpressで中国から輸入したほうが多分安いです.

1138_MED

私は1mに30個入ってるやつを5mと,1mに60個入ってるやつを4m買いました.Aliexpressでどっちも2000〜3000円ぐらいの値段でした.中国ですので,届くまで2週間ぐらいはかかると考えたほうが良いでしょう.あと信頼できそうなショップ(ポジティブフィードバックが多いショップ)を選んで買いましょう.

WS2812Bを動かすための準備

さて,ブツが届きましたね.中華クオリティとでもいいましょうか,若干妙なベタつきがあったりとか,妙な臭いがしたりとかありますが,気にしない方がいいです.以下は必要なものです.

  • マイコン(今回はmbedを使用)
  • コイツを動かすには,コイツを制御する信号を送るマイコンが必要です.うちは配属されてる大学の研究室がmbed厨なので,mbedを使いました.Arduinoでもいいです.世間はArduinoのほうが流行ってるようなので,Arduino向けのサンプルコードがようけあります.mbedでも,偉い人が既に簡単に制御できるライブラリを公開してます.コレとか.

  • レベルコンバータ
  • ちなみに上のサンプルコードではNOTゲートが使われています.LEDテープは信号線も5Vなんですが,mbedは出力3.3Vなわけで,レベルコンバータが要るわけです.レベルコンバータとして使うのに都合いいのが多分そのNOTゲートだったんでしょうね.RS485のドライバICでもいいそうなのでSN75176BPを買いました.大量に持っておくと便利っぽいですよ.

  • 抵抗(300Ω)
  • 上のサンプルコードで書いてたので入れます.多分保護抵抗です.間違ってたらすみません.上のサンプルコードを使わなくても入れとくべきでしょう.

  • 5V電源(10Aはほしい)
  • このLEDはフルパワーで光らすと1個につき50mA消費します.今回お面を作るのに使ったLED個数は165個です.ごく単純な計算だと8.25Aは使うことになります.強い奴が必要です.私は学校に5V10Aのスイッチング電源があったのでそれを使いました.現場で使うなら防滴タイプのが安心かもしれません.

光らせてみよう

どのような方式で制御されているのか知っておくのは重要です.データシートをくまなく見ましょう.ですが,プログラムに関しては先人が便利なライブラリやサンプルコードを作ってくれてます.ありがたく使いましょう.この辺はまだ日本語でも参考になるサイトがようけあるのでそっち見てください.

LEDマトリクス制御ソフト

1個1個RGBをそれぞれ制御できるもんだから,LEDマトリクスを作りたくなってくると思います.いろんな人がWS2812BでLEDマトリクスをやろうとするもんだから,WS2812Bに対応したLEDマトリクス制御ソフトがあります.以下はソレです.

  • Jinx!(Windowsオンリー)
  • Glediator(Javaで書かれとる)
  • minotor(オープンソース,Qtが使われとる)

好きなのを使ってください.私は音と同期させたかったんですが,minotorがMIDI対応してたのでminotorを使っております.オープンソースなので自分のいいように改造もできるので都合がいいです.Glediatorも使ってみました.音と同期が必要ないならこれでもいいと思います.Jinx!は,マカーなので試してないです.

mbedと制御ソフトとのシリアル通信について

今回はmbedーminotor間はシリアル通信でやります.さて,Arduinoならこういったソフト達と通信できるサンプルコードがあるんですが,mbedにはありませんでした.仕方ないので自分で書きました.

Glediatorでは,1バイト目に0x01が送られてきます.その後,GRBの順番で合計3byteの色情報がLEDの個数分送られます.送り終わったらまた1バイト目に0x01を送って,その後GRB...の繰り返しです.minotorでは色の順番がRGBになるだけで,他は同じです.これを処理するプログラムを,ライブラリ使いながらでいいので書けばいいです.コードを公開しようと思いましたが,汚いのでそのうち載せます.

ボーレートにも気をつけてください.mbedは921600baudまでいけるそうです.大量のLEDを制御するのでボーレートは高いほうがいいですが,OSXでは921600baudあたりはいろいろとメンドクサイようです.調べていろいろ試してますが,未だうまくいってません.230400baudでわりと十分です.それ以下はちょっと微妙です.

もう一つ考えないといけないのが,マッピングです.今回私が作ったLEDマトリクスはこんな感じです.

蛇のようにLEDテープを繋いでいます.ですが,ソフト側はこの繋ぎ方に対応した順番でピクセルごとの色情報を送ってくるとは限りません.繋ぎ方に合わせたマッピングをしてやらな崩れます.Glediatorではそういうのを設定する項目がありますが,minotorにはないので自分で書きました.

電圧降下の事など

制御するLEDの個数が多くなってくると,電圧降下という問題と戦うことになります.LEDテープは長いと末端になるにつれてのLEDにかかる電圧が低くなってきます.すると何が起こるかというと,色にムラができます.例えば全部のLEDをフルパワーで白く光らせようとします.そうすると,後ろの方になるにつれて黄色くなってきます.こういう時は,末端からも電源供給をしてやるといいそうです.私は試してませんが様々な人がそうやってたので多分大丈夫でしょう.

許容電流には注意してください.上で書いたように,10Aの電源が必要なぐらい電流が流れます.ブレッドボードはそんなに許容電流高くないので気をつけましょう.線材もあんまり細いとヤバそう.

で,スケアプッシャさんをやりたい


この防災面を買って,LEDテープをペタペタ貼りました.1m60個のLEDテープだと,横は15pxいけます.縦は,前が見えるようにしたかったので若干間隔をあけながら貼りました.11pxになりました.当たり前ですが,装着しながら動きまくっても大丈夫なように,線を半田付けした部分には熱収縮チューブですとかグルーガンですとかでヤバくならないようにしておくべきです.

こんな感じになりました.

死亡

うちの学校には5Vのスイッチング電源の他に24Vのスイッチング電源とかもあるのですが,大きさが違うとかなくて,パッと見じゃ分かりません.おかげで,うっかり24Vの電源に繋いでしまい死にました.

IMG_3817

データシートによれば,電源逆接しちゃってもICを保護してくれるお偉いさんだそうですが,24Vには当然ながら勝てません.LEDがどんどん熱くなっていき,若干変な臭いがし始めたのに気づいた頃には時既に遅しっていうか,繋いだ時点であぼーんです.本当にアホです.LED以外は生きてただけありがたいと思います.たかだか2000円ぐらいですが,数日後に控えていたライブで使おうと思ってただけに,相当辛いです.

その他

この記事は書き足したいことが増えたら更新します.あと2代目LEDマトリクスを作ります.次は堅牢性を高めたいと思います.あと,若干値段が高くなりますが,最初からマトリクスになっとるやつもあるみたいです.金が入ったら試そうと思います.