ぽんず製造所

御アクセスありがとうございます。当ブログの閲覧にあたりまして「当ブログについて」の内容に同意したものとします。

WS2812B

WS2812Bを使った3*3*3フルカラーLEDキューブ

LEDキューブを作るとなると、単色ならまだしも、通常の4端子RGB LEDだと配線が面倒なことになってしまいます。
そこで登場するのがWS2812Bです。WS2812Bはデータを送って点灯できるマイコン内蔵型のフルカラーLEDです。デイジーチェーンで接続できるので複数のLEDを1本の信号線で制御することができます。つまりこいつを使うと配線が非常に楽にできるわけです。(WS2812Bの使い方や詳細は他所をご覧ください...)
今回はそのWS2812Bを使ってLEDキューブを作ってみました。
WS2812Bをキューブに使ったらどんな感じになるのか、表面実装タイプのLEDでもいい感じに見えるのかなど、試験的に作ってみた側面が大きいです。

DSC_3699

USB電源で駆動でき小型で手軽に動かせます。


回路自体はこんなに簡単です。
マイコンにWS2812を繋げてるだけです。あと電源とか。
Untitled

マイコンはPIC16F1705です。WS2812B系のLEDはデータ波形生成がチョット大変ですが、PIC16F1705のペリフェラルを使うことで簡単に生成できます。詳細はこちらをご覧ください。
表示させたいデータを適当に作ってSPIにぶん投げたら点灯できます。


特に書くこともないので制作風景を載せておきます。

スズメッキ線にLEDを直接はんだ付けしていきます。
DSC_3671

3枚(?)作ったら試験点灯をさせてみます。
DSC_3672

点かなくて草
どうにもWS2812B系はハンダの熱に弱いらしく壊れてしまうようです。熱でパッケージが膨張して中のボンディングワイヤが切れるらしい。まぁ今回はずいぶん前に買った在庫品や中古品を使ったというのもありそうです。
DSC_3673

壊れているLEDを交換し全点灯したら
DSC_3678

立体的に組み上げていきます。ちなみにここでもハンダするのでLED壊れました ブチギレ
DSC_3679

点いた。
DSC_3680

ちなみにここまでで10個くらいLED壊しました。半田鏝の温度低めに設定してたのに。クソLEDだな
なおめんどくさかったのでLEDにパスコンは付けてないです、皆さんは付けましょうね(

マイコンを載せたりする基板は目立たないようにマジックで黒く塗りました。
DSC_3689

LEDと各部品をはんだ付けしました。あとケースと合体用のアクリル部品とかも付けた。
DSC_3691

ケースは黒のスモークアクリルを切り出し、アクリル用の接着剤を使って箱状にしました。
接着下手クソなのでズレました。下手クソ具合は完成写真でもよくわかります、接着面が汚いです。
DSC_3681

USBコネクタ用の切り欠きとか。
DSC_3687

ケースと基板を合体して完成。黒スモークアクリルのおかげで、点灯してないときは黒い謎の箱、点灯するとLEDが浮き出てきていい感じです。
あっあとアクリルに反射してLEDの数が少ない割にいっぱい点灯してるように見えていいね(?)


良いインテリアが出来て良かったです。

PIC16F1705でWS2812Bを動かす

WS2812Bはシリアル通信で制御できるRGB LEDです。WS2812Bについての概要は他のサイト等でググってみてください
今回はPICマイコンでWS2812Bを動かす方法(?)を紹介しようと思います。

WS2812B系のLEDの何がめんどくさいって通信波形の生成ですよね。
少しググって調べた人ならわかると思うんですけど、信号の1パルスが1ビットの情報になっていて、このパルスの長さによって0か1かを表すというものです。
しかしこのパルスが1周期1~2us程度と、そのへんの8bitマイコンだと処理がギリギリです。C言語で書くと処理速度が遅くなってしまうのでアセンブラで書いてる人が多いみたいです。

自分がWS2812Bについて調べてる時、次のようなアプリケーションノートを見つけました。
PIC16F1509 の構成可能なロジックセル (CLC) を使った WS2811 LED ドライバ インターフェイスの作成(AN1606)(PDF)
PICマイコンは処理速度は速くないですが、周辺モジュールが豊富にあるので、これを使って信号を生成してみようというもの。
タイマー、SPI、PWM、CLCを使いLEDドライバを構成しています。CLCと言うのはロジック回路をマイコン内部に生成できるというものです。CPLDやFPGAの超小規模版といったところ。
このLEDドライバはSPIに表示させたいデータを入れるだけで信号を生成してくれるというすぐれものです。
SPIのSCK信号を長いパルスとして使用し、PWMで短いパルスを生成しています。これをCLCでSPIのSDOと合成して信号波形を生成しています。
SPIとPWMは同じタイマーを使っているので完全に同期させることができるようです。考えた人ホント頭いいですよね

もうほぼこれを参考にして(いやパクリ)作ってみました。
PICはアプリケーションノートのマイコンではなくPIC16F1705を使用しました。WS2812はとりあえず4つです。



使ってみた感想としては、モジュールの設定を済ませれば、あとはSPIにデータを入れるだけでいいので簡単に制御することができました。ただデータを送ったら次のデータを即座に用意しないと表示がおかしく(チカチカする)なってしまうので結局工夫してプログラム書かないとダメみたいですね。



ていうかこれやったのもう半年以上前だからよく覚えてないんだよなぁ...
本当はもうちょっとLEDドライバについて書く予定だったんだけどね、しょうがないね
Twitter
大体Twitterいます。
Youtube
Youtubeチャンネルです。実験動画等上げています。よろしければチャンネル登録お願いします。