ライン

フルカラーバーLEDを用いたバーサライタの製作

ライン

2012年11月19日

2015年6月6日 プリント基板化追加

 フルカラーLEDが10個並んだ画期的なバーLEDが発売され、価格も手ごろなことから衝動買いしてしまいましたが、なかなかよい使い道が思いつかず、しばらく眠らせてしまいました。Webなどで検索しても、これといっておもしろい使い方をしている作例が見当たりません。そんな折、あるイベントで縦に並んだLED列を回転させて、残像で文字や画像を表示させる装置を見かけました。一般的にバーサライタ(versa-writer)とかPOVと呼ぶそうです。バーLEDはLEDが1列に並んでいるので、バーサライタの製作にはうってつけに思われ、さっそく作ってみることにしました。

動作写真

設計

 使用したフルカラーバーLEDはOptoSupply社のOSX10201-LRPB2という型番のもので、秋月電子で1つ250円で販売されています。1つのセグメントにR、G、Bの3つのLEDがアノードコモンで入っており、それが10セグメント分カソードコモンで接続されています。ダイナミック点灯に特化したアレイ型LEDとみなすことが出来るでしょう。今回はこのフルカラーバーLEDを2個縦に並べ、計20個のフルカラーLEDを制御することにしました。
 回路をできるだけ簡易なものにしたいので、外付けのトランジスタ等は使わずに、制御用のマイコンの出力端子から直接LEDに電流を流し、直接吸い込むことにしました。青色と緑色のLEDは電圧降下が3.1〜3.2Vあり、電源電圧3.3Vの16ビット以上のPICマイコンでは無理があると思われます。そのため、制御には電源電圧5V対応の8ビットのPICを使うこととしました。
 実際に使用したのはPIC16F1938という28ピンで拡張ミッドレンジコアに対応したチップです。内蔵オシレータで最大32MHz動作が可能、プログラムエリア16Kワード、SRAM1Kバイトと一昔前の8ビットPICに比べるとずいぶん機能、性能が向上しています。また出力は1ピンあたりソース、シンクとも最大25mAとれるので、アノードコモン接続された3個のLEDに8mA程度ずつ出力することができます。ダイナミック点灯でしかも回転させるとなると、本当はもっと流したいところですが、回路の簡略化を優先しました。
 回転の動力としては、DCモーターの軸を単純に基板に取り付けることにしました。こちらも簡単にしたいので、回転速度の制御はせずに、回転速度を読み取り、速度に応じて表示制御を行うことにしました。

概観写真

回路

 OSX10201-LRPB2の11番から20番ピンが、10個の各セグメントのアノード側となっており、PICの汎用出力ポートに1対1で接続します。合計20個の汎用出力ポートをシフトレジスタ的にどれか1つだけHとし、残りはLとすることで目的のセグメントのLEDを点灯させようとします。
 1番、2番、3番ピンはそれぞれR、B、G各LEDのカソード側になっていて、こちらは点灯したい色に対応したポートをLとすることで、目的の色を点灯させます。
 そして、回転速度読み取りのために、フォトリフレクタRPR-220の出力を入力ポートに接続しています。これで、PIC16F1938の汎用入出力ポート24本を全て使いきりました。本当はフォトリフレクタの赤外線LEDもPICの出力ポートに接続して、読み取り時だけ電流を流すようにしたほうが電池の消耗が少なくてよいのですが、ピンが足りないのであきらめました。
 GとBのLEDの電流制限抵抗には手元にあった240Ωを用いましたが、白がやや赤っぽくなってしまいました。200Ωのほうが適切だと思います。
 (2015.6.6追記)実は入力専用のRE3を見逃していて、ポートは25本あることがわかりました。しかしその後の実験でRPR-220では意味がないことがわかりました

回路図

製作

 表示部分の回路は細長く切ったユニバーサル基板上で作成しました。モーターの回転軸を中心にし、左右にバーLEDとPICマイコンを配置し、電源はLR44ボタン電池3個を重いのでなるべく中心に近い辺りに配置しました。(写真では電池4個を使っていますが、消耗して電圧が下がってしまったためです。)
 フォトリフレクタは基板背面の端に配置しています。1回転する中で、1箇所だけ反射するように、割り箸をモータに貼り付け、先端に画鋲を刺して反射板としました。単純ですが、精度はかなり高く、確実に1周を読み取ってくれます。フォトリフレクタと画鋲の距離は1センチ弱程度がよいようです。
 今回、配線には全て0.2mm径のポリウレタン銅線を使いました。ハンダ付けの熱で被服が溶けるのでいちいち剥かなくてもいいことと、径が細くかさばらないという利点があります。バーLEDからPICに23本もの線がつながれており、ビニル被服の電線などを用いると、中央辺りでかさばって大変なことになりそうです。
 モーターは子供の理科教材から取り出したFA-130タイプのものを使用しました。電源は単三乾電池2本としましたが、1本でも回転速度は十分でした。最後に、実際に製作してみるとバーLED側が軽く、PIC側が重くなったので、バランスをとるために、ボルトに針金を巻いておもりとしました。これでモーターへの負担を軽減することができます。

正面写真

背面写真

データについて

 バーサライタの製作例は、だいたいが文字の表示となっています。縦方向に切ったフォントデータを順に出力していくだけで、結構きれいに読め、作成も簡単です。しかし、今回はせっかくのフルカラーLEDです。円形の平面上にカラーイラストを描いてみることにしました。ただし、フルカラーLEDといっても、実際に表現できるのは黒を含め8色です。PWM処理をすれば濃淡表現もできますが、今回のハードウェアではとてもそこまで対応できません。

 PICでの処理をできるだけ簡単にしたいので、LEDの回転に合わせて順次出力するとイラストになるようなデータ形式で、フラッシュにデータを持つことにしました。数学的に言うと極座標系のデータです。1周を何等分するかですが、半径20ドットなので、円周は約125ドットになります。そこで分かり易くデータは、1周を128等分することにしました。データの作成にはEXCELを使いました。EXCELは何かと使えるツールです。最初にLEDの表示円内にセルの塗りつぶしで絵を描いて、各セルの色に相当する色番号を入力すると、右のほうにプログラム用のデータ形式で極座標データが表示される仕組みを作りました。これを使えば、簡単にイラストデータが作成できます。

EXCEL画面

データはEXCELを使って作成

プログラム製作

 今回製作したプログラムは大した処理を必要としません。LED縦一列20個分のカラーデータの配列を用意し、そこを回転の速さに合わせて、フラッシュから順次データを読み出して書き換えていきます。あとはダイナミック点灯するため、タイマー0による40kHz周期の割り込みで、ひたすらLEDを順に指定のカラーで点灯(または消灯)させていきます。
 回転の速さ検出は、先述の通りフォトリフレクタを使いました。40kHz周期の割り込みルーチンで読み取りを行い、画鋲からの反射を検出すると、カウンターをリセットします。そして1周してまた反射を検出するまでに、何回40kHzの割り込みがあったかを数えて、その回数をデータ分割数である128で割った数を、今後のデータの切り替えタイミングとします。その数だけ40kHz割り込みが発生するとカラーデータ配列の更新を行うのです。ただし、実際には割り算の余りの部分の調整もしないとイラストがどんどん回転してしまいます。
 ところで、今回のプログラミングは、8ビットPICを使うのが久し振りということもあって、ゼロからアセンブラーで書く気力がなく、フリーのHI-TECH Cコンパイラを使ってみました。8ビットマイコンでC言語が使えるというのは驚きですが、出力されたコードの効率が悪く、モーターの回転速度に合わせて割り込み周期を短くすると、最大の32MHz動作をさせても、まともに処理が着いて来ません。そこで、リピート処理など重い部分から、インラインアセンブラーを使って書き直していくうちに、大半がアセンブラーとなってしまいました。全体構造はCで記述し、処理の中身はアセンブラーで記述するという、一見奇妙なソースプログラムになりましたが、私にとっては生産効率と処理の効率の両方を上げられる大変有効な方法のようです。ただし、変数やFSRを参照する際にはバンクの切り替えに要注意です。

動作

 本体の電源を入れた後、モーター側の電源も入れて、動作開始です。工作を簡易にしたので、モーターは手に持ったままで動作させます。あまり明るくないですが、暗い場所で見ると予想以上にイラストがはっきりと映し出されました。フォトリフレクタも正確に反応しているようで、ぴたりとイラストは止まって見えます。YouTubeに動画をアップしましたので、ご覧ください。今回使用した10ポイントのバーLEDは、フルカラーLEDマトリクスとしては格安だと思います。ほかにも何か楽しい使い道を探してみてはいかがでしょうか。

ダウンロード (2015.1.4追記)

 参考までにソースプログラムを公開します。HI-TECH C用のメインプログラムとデータファイルに分かれていますので、両方をプロジェクトに追加してコンパイルすることで、HEXファイルが生成できます。コメントが少なく、また、インラインアセンブラーを使用して読みにくいのですが、ご容赦願います。また、データ作成用のExcelファイルも併せて公開します。

ソースプログラムのダウンロード


プリント基板化 (2015.6.6追記)

 実験機はできたので、あと何台か同じものを作ろうと思ったとき、ポリウレタン銅線の手配線ではあまりに製作が大変で、また不安定なため、プリント基板を作成しました。
 基本的な回路は同じですが、乾電池2本でも動作させられるよう昇圧回路を追加したり、輝度調整のための半固定抵抗を追加したりしています。また、大きな違いとして、RE3という入力専用ポートがまだ残っていることに気付いたため、フォトリフレクタのセンサ読み込みはRE3に、フォトリフレクタの赤外線LEDはRC4に接続しました。これで必要なタイミングだけ赤外線LEDを発光し、省電力化を図るつもりだったのですが、結論を言うと、フォトトランジスタのレスポンスが全く追い着いて来ないことが判明し、RC4は常時オンとせざるを得ず、全く意味がありませんでした。
 それでも、プログラムの変更が必要となるため、新たな機能として、2つの絵柄データを選択できるようにしました。本当はDIPスイッチを付ける等したかったのですが、今回RC4とRE3を使ってしまったため、今度こそ空きポートがなくなりました。そこで思いついたのが、電源オン時にRE3のセンサーを読み取り、その状態の違いでデータを選択する方法です。つまりセンサー読み取り部がちょうど反射板の場所にあるかないかで絵柄を選択できるようにしました。
 また、新たな試みとしてバーサライタの回転をモーターではなく、手回し式のものを作ってみました。なかなか珍しいのではないかと思います。タミヤのギアボックスを無理やり改造して作ったのですが、キュルキュルと音を鳴らしながら光るバーサライタもまたいい感じです。ぜひ下記の動画で見てください。


プログラムのダウンロード

回路図

EXCEL画面

プリント基板1

プリント基板2

Copyright (C) KenKen All Rights Reserved.