Takafoi’s blog

文章を書くのが下手なオタクのブログです。

NeoPixelLEDを大量に使うときの注意?

とある目的で、NeoPixelLED(WS2812B)が連結されている4m240LEDと5m300LEDの2種類のテープLEDを使っています。

そこで、いろいろ詰んだ話とその対策をメモ程度に残しておきます。

自分がググって、日本語のサイトには書かれていないようなこともあります。

 

1.使用環境

Arduino

 使用ライブラリはAdafruitのNeoPixelライブラリを初期は使っており、今はFastLEDという様々なLEDに対応したライブラリを使っています。

・大きめの電源

 自分は無線用の直流安定化電源GZV4000を使用。

 

2.物理的?注意

・電源とマイコンのGNDは共有する

 当たり前なんですが、これしないとLEDがわけわからない点灯をしてびっくりします。焦らず、電源とマイコンのGNDを共有してください。

 

・電流流しすぎると壊れるかも...

 4m240LEDが突然壊れたことがありました。結局原因不明なのですが、可能性として過電流が考えられました。

 4m240LEDを明るさMAX(255)の白色で点灯させると10A以上必要になります。しかし、テープLEDの配線は細いです...10A。LEDも発熱しますし、電源接続部はかなり熱くなりました。明るさはせめて半分の128、私はすべてを光らせるときは64で使ってます。

 

・信号線は短く

 開発中などは、すぐそばにマイコンとLEDがあると思いますが、もし何かのイベントなどで光らせることがあればマイコンとLEDが離れてしまうかもしれません。

 しかし、あまりにも信号線が長すぎると信号が減衰し、うまく制御できません。

 私の環境では、2mを超えると怪しい挙動をしました。

 

3.プログラムとしての注意

・プログラム上のLEDの定義数は確認する

 まず、NeoPixelLEDは1つでマイコンSRAMを3Byte消費します。個数が少なければいいのですが、大量に使うときは注意が必要です。

 Arduino UNOはSRAMは2KBしかなく600個程度しか定義できません。しかし、AdafruitのNeoPixelライブラリを使うと、Arduino IDEコンパイル時に表示されるスケッチの使用率?は正しくありません。よって、SRAMに入りきらない数を定義するとLEDは制御できず光らなくなります。しかし、コンパイルエラーは出ないので厄介です。

 ということがあって、私はNeoPixelからFastLEDに使用ライブラリを変えています。スケッチの使用率は正しく出ますし、色の指定をRGBとHSVの2種類でできるので使いやすいと思ってます。

 大量にLEDを使うときはSRAMが8KBのArduino MEGAやTeensyなどといったようなArduinoとしても使えるもっと高性能なマイコンを使う必要があります。

 

・NeoPixelLEDのデータレートは遅い

 このLEDは、データを受け取ったら次のLEDに渡すというバケツリレー方式をとっています。よってLEDが多ければ多いほどすべてのLEDにデータが転送されるまで時間がかかります。この、転送速度が速ければいいのですが、NeoPixelLEDのデータレートは800KHzだったと思います。そんなに速くないです。

 私の環境だと、順番にLEDを点灯させる(for文で回す)としてLED1000個で30秒、2000個で2分ほどかかります。

 一応、非公式ですが友人がラズパイでクロックを速くしていったところ1200KHzぐらいまではLEDが制御できると話していました。私はArduinoで試していないので、クロックを速くできる方法があれば誰か教えて...(自分でプログラム書けって話)。

 

 

今のところこれぐらいです。また何かあったら付け足します。