carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

フルカラーシリアルLED簡単に制御できるコントローラ開発

フルカラーシリアルLED(WS2812系)の表示をUARTのコマンドで制御できるコントローラを開発しました。
※最後に記述しましたが、実際はまだ開発途中ですけど・・・

超小型のパッケージ(DIP8)にフルカラーシリアルLED制御するためのコマンドを多数実装しました。
有名な音声合成モジュールや、LCDモジュールと同じような感覚で、簡単にWS2812系のフルカラーシリアルLEDを制御し光の演出を作ることができます。

イメージ 8

使い方も簡単!ホストから8バイト固定長コマンドを、シリアル(UART)インタフェースを介して送るだけ。
コマンドを解釈して動きのある光の演出を行います。

イメージ 1

■開発の背景
フルカラーLEDを使っていくつかの電子工作作品を作ってきましたが、1本の信号線だけでフルカラー表示できるこのLED(WS2812)は非常に便利です。しかし、信号線の周期が800kHzと低速のマイコンにはちょっと辛い速度なので、動きのあるLED表現を行うと他の仕事がおろそかになり不便に感じるがあります。そこで、低速なマイコンでも簡単に扱えるようなコントローラがあったらみんな幸せになると思い、このLED制御に特化したファームウェアを開発することにしました。このコントローラがLED制御してくれることで、親となるマイコンは、自分の作業に集中することができます。

イメージ 7

さらに、動きのあるLED表現やフルカラーの色を自分で考えるのは骨の折れる作業です。そんな作業を楽にしたいと考え専用のWindowsGUIアプリケーションも開発しました。このアプリで色の演出を作成することで思いのままのLED演出を考えることができます。

イメージ 6

■特徴
・8バイト固定長のコマンドを送るだけのシンプルインタフェース
・UARTの速度は19200bps/57600bpsの2種類を選択可能
・実装に便利な8pin DIP(NXP LPC810利用)
・外付け部品無しでも利用可能
・LEDのシリアル接続数は最大32個
・LED演出中のステータス端子あり
・LED演出用のコマンドは5種類あり、組み合わせは無限大
 (色指定/左右シフト動作/虹色動作/棒の伸長動作/シーソー表示(ナイトライダー風))
・制御用のコマンドは4種類あり、Waitやループ再生可能
 (システム設定/Delay/ループ/スクリプト制御)
・コマンドをまとめて送っておき、トリガーで順番にコマンド再生可能
・トリガーは、端子変化もしくはコマンドで可能
・コマンドを作成するための専用Windowsアプリケーションも提供
※Arudino用のプログラムを自動生成

イメージ 2

・制御できるWS2812系はスイッチサイエンスさんが扱っている製品だと以下が制御できるはずです。

#製品名
1フルカラーシリアルLEDテープ(1m)
2フルカラーシリアルLEDテープ(17cm)
3フルカラーシリアルLEDモジュール
4NeoPixel Ring - 16連フルカラーシリアルLED
5NeoPixel Ring - 12連フルカラーシリアルLED
※全てを動作を保障する訳ではありません。

■製品仕様
動作電圧3.3V~3.6V
ベースチップLPC810(ARM Cortex-M0+)
通信方式UART 19200bps/57600bps
LED通信方式WS2812/WS2812Bの2種類
LED制御可能数1~32
入力コマンド9種(演出用5種+制御用4種)の8バイト固定長
出力コマンド2種(ACK:0x06、NAK:0x15)の1バイト固定長
動作クロック内蔵

■制御するマイコンは?
開発したコントローラは、フルカラーシリアルLED(以降シリアルLED)を制御するサブマイコンとしての位置づけになり、主となるメインマイコンが別途必要になります。メインマイコンになれる条件は、シリアル通信(UART)が19200bpsまたは57600bpsでできることです。Arduino系のマイコンを想定しています。コントローラで利用しているマイコンLPC810は、3.3Vで動作するマイコンですが、ポートは5Vトランスペアレントな耐圧端子であるため、5Vもしくは3.3Vのマイコンと直結して利用できます。

■シリアルLEDを利用する上での注意点
接続するシリアルLEDは、WS2812WS2812Bを制御する(※)ことができます。データシートを確認すると、WS2812は6~7V駆動で、WS2812Bは3.5~5.3V駆動です。HIレベルのスレッショルドが0.7VDDなので、5Vそのままだとちょっと足りません。5V電源をダイオード一つで少し降下させて利用するのが良いと思います。推奨はしませんが、私の手持ちのシリアルLEDは3.3Vでも動作しています。
※コマンドで2種類のタイミングを選択できます。

■簡単接続例
・19200bps固定で通信するのであれば、UARTだけ接続すればOK。

イメージ 3

★LED接続の注意点
・シリアルフルカラーLEDの通信線HIのスレッショルドは0.7であり5Vの電圧だと
少し足りません。そこで、ダイオードで0.3V程度電圧を降下させることをお勧めします。
・利用しているLPC810は、3.3Vで動作しますが5Vトランスペアレントであるため直結が可能です。

■パソコンとの接続例(動作確認含む)
・USBシリアル変換モジュールを利用する。
・リセットやステータスの確認も行えるように全機能確認可能。
・本構成の場合、先のWindowsソフトより制御し即座に演出確認可能

イメージ 4

Arduino Uno R3接続
・基本的にダイレクト接続する。
・先のWindowsソフトでArduino用の演出プログラム自動生成が可能。(コピペで動作可能)
※評価用シールド開発中
イメージ 5

■現在の状況と今後について

アウトプット状況
制御ファーム実装完了(3/15)
Windowsソフト実装完了(3/15)
Arduinoシールド基板設計中(3/15)
ドキュメントこのブログだけ。(10%ぐらい?)
動画

Windowsソフトは、近いうちに公開します。(シミュレーションで演出確認しかできませんけど。)
興味を持っていただけた方に触ってもらえると嬉しいです。

※今後、ドキュメント等を整備し配布を計画しています。ターゲットをどこにするか決めかねているのでどうしようかな?