6点点字の電光掲示板--PICの入門にいかが?
2003年9月23日
PICマイコンの入門によく出てくるLED点滅装置
PICマイコンではじめて何かを作る場合、まずはLEDを点滅させる機械を作りたくなる場合が多いようです。回路は簡単ですし、動作の様子がはっきりと目で分かるからです。
というわけで、今回は直径10ミリの大型LEDを6つ使った「6点点字の電光掲示板」を作ってみました。
この装置では、こんなことができます。
- 電池を入れると、日本語の6点点字を直径10ミリのLED6本に、次々と表示します。
- 点字の凸になっている場所に対応したLEDが、オレンジ色に光ります。
- 「あ」から「ん」までの五十音や、「がぎぐげご」などの濁点のついた文字、「きゃきゅきょ」のような文字、「1234567890」のような数字などを、順次表示します。
- 1文字あたりの表示時間は、1秒程度です。
- 単3形ニッケルカドミウム電池または単3形ニッケル水素電池2本で動作します。
点字をLEDで表示することの意味
本来、点字は目が見えない人が文字を読むために作られた文字です。なので、厚い紙などに凸凹をつけて、手でなぞって読むように印刷されています。
点字と同じ形をした文字をLEDで表示して、何の意味があるのだろうと思われるかもしれません。なにしろ、目が見えない人には読めないわけですから。
この作品は、こんな思いをこめて作られています。
- 点字は、デジタルな感じで文字を表現する手段としては、たいへん先進的なものです。6つの場所のオンとオフを組み合わせることで、(1文字あたり)最大63通りの表現ができます。少ない発光素子で文字を表示できるため、目が見えない人のみならず、目が見える人が使っても、とても便利な文字なのではないかと考えました。
- 街の中でときどき点字をみかけるのですが、なかなか読むことができません。何か書いてあるのに読めないというのは、たいへん気になりますので、点字の勉強をしようと思いました。電光表示できる装置があれば、覚えるのも早まりそうな気がします。
- 単にLEDを点滅させる装置だけでは、あまり面白味がありませんので、点字という文字として表示させることで、より楽しく工作ができるのではないかと考えました。
- 点字を光で表示する装置は、普通に考えて街で売られているとは思えません。アイデアとしてはありうるけれど、普通には売っていない品物を作ることが、私の電子工作のテーマですので、個人的には面白い物ができたと満足しています。
回路の仕組み
まずは、回路図をご覧ください。
マイコンのプログラムに従ってLEDをオン・オフするだけのシステムですので、回路はとても簡単です。
- PICマイコンには、8本足のPIC12F675を採用しました。クロックを内蔵しているため、電源さえつなげばおよそ4MHz(100万命令/s)で動作してくれます。
- PIC12F675には、I/Oピンが6本あり、一見するとそれぞれに1本ずつLEDを付けられそうですが、残念ながらGP3が入力ピンとしてしか使えないため、そうはいきません。そこで、LEDを3本ずつ交互に点灯させるダイナミック点灯を行っています。
- GP0,GP1,GP2は、それぞれ2つずつのLEDにつながっています。具体的には、こうなっています。
| GP0 | GP1 | GP2 |
GP5=0 | 1の点 | 2の点 | 3の点 |
GP5=1 | 4の点 | 5の点 | 6の点 |
GP5によって制御するLEDを切り替えています。GP0,GP1,GP2は、「1」を出力した場合に対象となるLEDが点灯します。
- 電源には、ニッケルカドミウム電池またはニッケル水素電池を使うようにしました。2本直列で2.4ボルトの電圧となり、LEDの順電圧2.1ボルトよりも、少し高くなっています。充電できない乾電池を使う場合は、2本直列にすると3.0V以上になるので、この回路図ではLEDに過剰な電流が流れる可能性があります。
- GP3とGP4は未使用です。外部から表示内容を制御するために使えそうです。たったの8本足のマイコンを使っていますが、まだ拡張性があります。
- そして、これが光源のLEDです。直径が10ミリあり、けっこう大きな感じがします。3つで200円と、この手の品物としてはけっこう高価でしたが、正面から見ると、直視できないほどのまぶしい光を放ちます。写真のように、ななめから見ればまぶしくありません。
がんばって組み立てれば、このような形に完成します。
ソフトウエアの仕組み
この装置は、一見すると6つのLEDが別々に光っているように見えますが、実際にはLEDを3つずつ切り替えて点灯させています。連続して光っているように見えるLEDは、実は高速に点滅しています。点滅させているのは、マイコンに内蔵されたプログラムです。
まずは、ソースリストを以下に示します。このソースファイルは、マイクロチップ社の開発環境MPLABのバージョン6系で使えます。
プログラムは、このような要素からできています。
I/Oなどを初期化する部分。
ひたすら、全てのI/Oをデジタル扱いにしています。変数も初期化します。
次に表示する文字を準備する部分
512番地から広がるretlwの嵐が、表示する文字列本体になっています。
767番地まで表示内容を列挙できるので、理屈上は252文字まで並べられます。このような文字選択ルーチンを複数組めば、最大で750文字くらいは記録できそうな気がします。
プログラムカウンタPCLに直接値を加える場合は、行き先の番地が次の256の倍数に達してしまうと正しく動かなくなるので要注意です。そのため、並べられる文字の数には252個までという制限があるのです。
表示する文字のとおりに、LEDに電圧を送出する部分。
およそ1.6kHzの周波数で、1の点から3の点にあるLEDと、4の点から6の点にあるLEDを切り替え続けます。切り替えの順序を誤ると、点灯させるべきではないLEDが一瞬点灯してしまうことがあります。
具体的には、次のように制御すれば大丈夫です。
- GP0,GP1,GP2を下げる
- GP5を下げる
- GP0,GP1,GP2に1,2,3の点のデータをセットする。
- しばらく待つ
- GP0,GP1,GP2を下げる
- GP5を上げる
- GP0,GP1,GP2に4,5,6の点のデータをセットする。
- しばらく待つ
- 最初に戻って繰り返す。表示時間が終われば、次へ進む
- GP0,GP1,GP2を下げる
- GPIOを全て下げて表示を終わる
次の文字を表示する前に、ひと休みする部分。
およそ200ms、何も表示せずに休みます。これがないと、同じ文字が続く場合に文字の区切りが分からなくなってしまいます。
おおむね、1秒に1文字を表示します。内訳は、800ms程度文字を表示して、その後200ms休んでいます。
全ての文字を表示し終えると、0番地に戻って最初から処理を繰り返します。つまり、最初の文字に戻ります。
やってみましょう
- 点字について、調べてみましょう。おすすめできるサイトを、下のほうにある参考資料のリンクで紹介しています。
- 表示内容を変えてみましょう。単なる50音ではなく、文章を表示するようにしてみてはいかがでしょうか。プログラムを工夫すれば、もっとたくさの文字を表示することもできます。
- あいているマイコンのI/Oピンを使って、表示される内容を制御してみてはいかがでしょうか。現在の温度を点字で表示する温度計とかがあったら、面白そうです。
- LEDのかわりに、電気的に凸凹を制御できる素子を使えば、目が見えない人にも表示内容が読めるようになります。そうなるように改造してみませんか。
参考資料
杉原俊雄のホームページ ->
PICマイコンを楽しむ電子工作 ->
6点点字の電光掲示板--PICの入門にいかが?
製作・著作:杉原俊雄(すぎはら としお)
(c)2003 Sugihara Toshio. All rights reserved.