ハードウェアからサーバ・アプリまでワンストップで開発

NeoPixelの配線

  未分類

ogochan

NeoPixel楽しいですよね。

近頃はNeoPixel LEDが安いからか、「ゲーミング○○」が流行りのせいか、結構あちこちで使われています。

回路を作る時も、RGB(W)のLEDを用意するよりも、回路が少なくピン数も節約できるので、結構重宝します。RGBでフルカラー作ろうと思えば、3個のPWMと3組のドライバ回路が必要ですけど、NeoPixelを使えば電源を用意したら後は制御線を1本用意するだけですからね。回路はぐんと簡単になります。おまけに数が増えても平気。とても楽です。

そんなこともあって、よく使うわけですが、ちゃんと使うのは結構大変だよってお話です。

これは私(生越)の教会のアドベントクランツ。ろうそくをよく見ると、こんなところにNexPixelです。

これには「ろうそく」が4本あって、1本には3つのLEDが使われています。「ろうそく」本体は多分コピー用紙を巻いたもの。元々はLEDではなくて

こんなネオン管が使われていました。本物の「ろうそく」を使うと危ないですから。

ただ、いろんな事情から、このネオン管では良くないということで、新に「ろうそく」を作ることにしました。何が「良くない」かと言えば、このネオン管の点灯は外乱の影響を受けやすいのです。電灯線の電圧、気温、太陽活動... いい感じの時ももちろんあるのですが、そうでない時の方が多くなってしまいました。多分経年劣化のせいでしょうが、このネオン管はもう国内では作られていないらしいです。微妙なバランスの上で点滅をするものなので職人芸が必要で、その職人が... ということらしいです。

こんなものにそんなに手間をかけたくもないので、サクっとNeoPixelにしたわけです。

アドベントクランツで点灯するろうそくの本数には一定のルールがあります。これは、ごく雑に言えばクリスマスの前4週から毎週1本づつ... ということになっていて、元々はこれに合わせて手動でやっていたのですが、「どうせルールがあるなら自動化できないかな」と考えて、「今日点灯する本数を計算で求めて、それに従い点灯する」という装置を作ることを考えました。これ自体は特別に難しいものではないので、これも合わせて片手間に作れるだろうと(甘く)考えていました。

ろうそくをLEDで代替する場合、たいてい「風で揺れる炎」を演出します。小さいものだと、これは「ランダムな点灯」で表現します。これ用のLEDは、例えば秋月電子あたりで入手可能です。今回はもうちょっと大き目なので、NeoPixelで作ることにしました。プログラムでもっと「らしい」感じにしたかったわけです。

コントロールは以前試作の時に使った基板が余っていたので、それを流用しました。リンク先の基板のもう1つ前に作っていたものです。

ここから電源と制御を引っぱり出してやってLEDにつなぐと動くはずです。ちなみに、NeoPixelのコントロールには、拙作の

NeoPixel driver for ESP-IDF

を使っています。

引き回す線は、LANケーブルをほぐしたツイスト線を使います。こういった用途には使い良いです。

配線が各1mくらいあります。ちょっと長めですが、後でつなぐハメになるのも嫌ですし、ある程度自由が欲しかったので。

これで動かそうとするのですが、うまく点灯されません。

よく見ると、「通称NeoPixel」にはいくつか種類があって、それ毎に少しづつタイミングが異なります。これを合わせてやらないと、うまく制御ができません。今回使ったのは、PL9823というものです。データシートを見ると、そのままでは使えませんので、その分はドライバプログラムを調整してやる必要があります。もちろん元のコードはこういったことに簡単に対応ができるようになっています。

ところが、これでもうまく行きません。何がどう悪いかと言えば、静的に点灯しているはずなのに、勝手にチカチカしてしまうのです。まぁ、「ろうそく」としてはこれでも「それっぽい」のですが、思うように制御できないのは良くありません。

当初はドライバが悪いのかと思ってタイミングを微調整したりしていたのですが、いっこうに良くなりません。

そこで「夜も遅いしそろそろ片付けて帰ろう」と思ってケーブルを束ねて持とうとしたら、「チカチカ」が止まるではありませんか。結局、長いケーブルにいろんなノイズの類が乗ってしまって、動作を不安定にしていたのですね。

翌日、電源にパスコンを入れたり、信号線の片側(ツイストしてる)をGNDに落としたり、あるいは信号線をpull downしたりしたら安定してくれました。まぁ冷静に考えれば、NeoPixelの信号線は結構高速の信号ですし、LEDは結構電力を食うものですから、こういった

あたりまえのこと

をちゃんとしてやらないとうまく動いてくれないという、極めて「あたりまえのこと」だったというわけです。

NeoPixel LEDはその辺でもテープで売ってたりしますし引き回す線が少ないということで案外雑に使われていたりするのですが、ちょっと引き回すようなことがあればこういった「あたりまえの対策」をしてやらないと、安定して動かせないわけです。

この辺のことはデータシートにもちゃんと書かれてなかったりしますが、

  • 電源にはパスコン(10uFくらい)をちゃんと入れてやる
    自分のためと言うより、他のLEDのためです。しないとLEDそのものがノイズ源となります
  • 信号線は適当な場所でpull downしてやる
    意外にインピーダンスが高いせいか、しないと信号線が安定しません
  • 信号線のノイズ対策をする
    インピーダンスと信号速度のせいでしょう。しないと外部のノイズの影響を受けやすくなります

ということが、安定に動かすには必要なようです。比較的高速のシリアル通信装置だと思えば当たり前のことですね。いずれも、オンボードくらいの距離だと問題にはならないのですが、1m程度でも外に出すと意識してやる必要があります。けっして「線をつなぐだけで動く」ようなものではないのです。

まぁ、せっかくこうやって作ってやった「ろうそく」も、結局のところ「自動点滅LED」の方が「らしい感じ」になっていたのは残念でしたけどね。

最近のエントリー

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル

LED行燈の試作(1)

エントリを書くこと

お手軽ポップコーン

VR徘徊(5) StereoPi V1でROSを動かす

VR徘徊(4) StereoPi Ver 1でUbuntu 22.04を動かす

新しいおもちゃ

執筆進捗