マツド・サイエンス研究所

夏休み工作シリーズ 第2段 Zaurus 用外部キーボード・インターフェース

主要部品代、わずか 300 円で作れるリナザウ用の外部キーボード赤外線インターフェースを紹介する。

キーボードの無い SL-A300 でも、動作確認済みだ!

これが、実際に使って居る写真だ。

(家に転がって居た中で、一番小さいケースを使ったんだけど、大き過ぎた)

私の使って居る Zaurus は、SL-C760 なので、小さいとは言えキーボードが付いて居る。だが、小さすぎて、とてもタッチタイピングできないし、SL-A300 のようにキーボードが付いて居ない機種もある。

公式的には、リナザウ用の外部キーボードは無いようだ。ただし、SL-C1000 や SL-C3x00 以降の新しい Zaurus なら、USB のホストを持って居るので、USB キーボードを接続する方法がある。

しかし、SL-A300 SL-B500 SL-C7xx SL-C860 のようなちょっと旧式の機種には、USB のホスト機能が無いので、USB キーボードは使えない。

このような旧式のリナザウに Palm 用等の外部キーボードを接続する試みは、ネット上で幾つか公開されて居る。

PS/2キーボードはSLザウルスの周辺機器となるか?

Linux ZaurusにPS/2キーボードを繋ぐ

ぱたぱたキーボードを LinuxZaurus に接続する(ハード編)ぱたぱたキーボードを LinuxZaurus に接続する(ソフト編)

IRK(赤外線キーボード)のすすめ

最初のリンクは、PS/2 キーボードを IrDA に変換する IrKB101 を使う話だが、肝心の IrKB101 が生産終了で入手困難だ。

次のリンクは、PS/2 キーボードを、3番目のリンクは Palm 用の外部キーボードを Zaurus のデータ同期用のシリアルインターフェースと接続する話だ。だが、私は、この方法は推薦しない。Zaurus のデータ同期用のシリアルインターフェースのコネクタは、配線が難しいので、余程、ハンダ付に自信がある人以外は、試さない方が良い。下手をすると、Zaurus に永久的な破損を与える可能性がある。

最後のリンクは、Palm 用の IrDA インターフェースの外部キーボードを Zaurus で使う話だ。配線は必要無く、ソフトウエアだけの対応だし、Palm 用の IrDA インターフェースの外部キーボードは入手可能なので、一番実現性が高い。

実は、私も買おうか、どうしようかと、現物を見に行った。価格が高い(税込9,800円)事と、ぱたぱたキーボードと言うには、意外と大きく重いので、買うのを躊躇してしまった。

そうこうして居るうちに、PIC と赤外線 LED だけで、IrDA 通信できることが判った。(詳細は「夏休み工作シリーズ 超低コスト 非接触型電圧プローブ」を参照のこと)

それなら、PIC と赤外線 LED で、PS/2 キーボードから IrDA への変換器が作れるだろうと挑戦したのが、今回の工作だ。PS/2 キーボードなら、色々な形状大きさの物が入手可能だし、わざわざ持ち運ばなくても出先に転がって居る可能性も高い。また、赤外線通信機能を使うので、工作に失敗しても、Zaurus を壊す可能性が少ない。

例によって、例のごとく、私は極端な「シンプル・イズ・ベスト」派なので、徹底的に回路を簡素化した。

部品は以下の通りだ。

・PICF629 (140円@秋月) 1個

・赤外線 LED (30円@秋月) 1個

・miniDIN 6ピン・ソケット (120円@千石) 1個

・470Ω抵抗 (5円@千石) 1個

・33KΩ抵抗 (5円@千石) 1個

このコンバータは、PS/2 キーボードの出力を、そのまま、IrDA の規格(SIR 1.0)の 9600 ボーで送るだけだ。

本来、PS/2 キーボード・インターフェースは、双方向だが、今回は簡略化のためにPS/2 キーボードから Zaurus への一方通行にして居る。このため、キーボードのスキャンコードの変更とか、CAPS LOCK/NUM LOCK ランプの点灯は行えないので、注意してもらいたい。

キーボードの出力コードを IrDA に変換しただけでは、Zaurus で、使うことはできない。

IRKでぱたぱたを使えるようにしよう で、公開して居る irk-zaurus-j_0.11.1f-tp4_arm.ipk のソースコードを改修した。

正直、私の改修した部分は、まだ、十分に熟成したプログラムでは無い。PS/2 キーボードのスキャンコード・テーブルを追加して、なんとか、入力だけはできるようになっただけだ。

それでも、オープンソースとして公開した方が、今後の展開は速いと思うので、公開する。

【作り方】

まず、プログラムを PIC に書き込む。(プログラムは、まとめて此の記事の末に載せた)

PIC への書き込みは、「夏休み工作シリーズ 超低コスト 非接触型電圧プローブ」と同様に、RCDライタの製作と、WinPic日本語版を使った。

配線は、簡単だが、PS/2 用の miniDIN コネクタのピン配置が分りにくいので、図に書いて置いた。

電源は、PS/2 キーボードが、5Vを必要とするので、必然的に5Vになる。私は、#2ソケットを付けて、Zaurus 用の AC 電源から供給できるようにしている。なお、新型乾電池オキシライド(単三型)×3本でも、動作を確認して居る。オキシライドは、電圧が高く約 1.7V なので、3直列で5V用のPS/2 キーボードが動くかと試したのだが、見事に動いた。

なお、回路図中では、GP4 は空いて居るが、実はここに、スキャンコードをシリアルで出力して居る。MAX232 のようなレベルコンバータを通したら、通常の COM ポートでも受信できる。形式は、9600 ボー 8N1 だ。なお、論理反転させて、電圧を 3.3V にすれば、 Zaurus のデータ同期用のシリアルインターフェースと接続する事も可能かもしれない。だが、既に述べたように、Zaurus のコネクタは、配線が難しいので、この方法は推薦しない。

【irk-zaurus-j_0.11.1f-mad0_arm.ipk】

Zaurus 側のプログラムは、ipk になって居るので、普通にインストールする。ただし、インストール中に、リセットがかかるので、注意されたい。

PS/2 キーボードから入力する時は、インプットメソッドの選択(▲マークをタップ)で、irk(デフォルトのままだと、JP106となって居る筈)を選ぶ。

irk のコントロールバー(表示されてなけば、左下のアイコンをタップ)のONを選ぶ。

この状態で、赤外線 LED を IrDA ポートに近付けると、PS/2 キーボードから入力できるはずだ。

また、英数字と日本語の切り替えは、『全/半』キーで行う。(ALT +『全/半』ではないので、注意!)

PS/2 キーボードからの入力をやめる時は、OFFにした後、インプットメソッドの選択で、irk 以外を選ぶ。

「Setting」ボタンで、設定画面が表示される。

PS/2 キーボードが、日本語キーボードなら「JP106」を、英語キーボードなら「US102」を選ぶ。

(私は、英語キーボードを持って居ないので、スキャンコードが正しいか、確認して居ない)

設定が反映されなかったり、調子が悪い時は、一度、インプットメソッドの選択で、irk 以外を選んだ後、もう一度、irk を選ぶと良いようだ。

それでも駄目なら、リセットしてみる。

既知のバグとして、

・「_」(半角下線)が入力できない。

・「・」(全角の中央点)が入力できない。

・シフト+カーソルキーが使えない。

・テンキーが使えない。

 (写真でも分かるが、私のキーボードは小型でテンキーが無い。このため、スキャンコードの確認ができないため)

等がある。

Zaurus に限らず、その他の機器(PDA とか携帯電話)の入力に使えたら教えて下さい。

キーボードの無い Zaurus でも、PS/2 キーボードから入力する方法が分かったから、SL-AXXXX のような縦型 Zaurus シリーズが復活しないかなあ。

ライセンス・プログラム等

本当は、ハードウエアの回路については、著作権を放棄したい(余りにも簡単すぎるから)ところだが、日本の法律上、著作権の放棄はできんらしいので、著作権は野田篤司に帰属するが、誰でも自由に使って良いものと宣言する。

PIC 側のプログラムは、BSD ライセンスとする。

インプット・メソッド irk は、GPL。

なお、既に述べているが、インプット・メソッド irk の内、私の改修した部分は、まだまだ成熟の足りないプログラムだ。使用に関しては、くれぐれも自己責任でお願いしたい。

【PIC側プログラム】

pickeyir.lzh

 ソースファイルとアセブリ済みの HEX ファイル、ソースは、MPLAB でアセンブルできる。

 何を書き込むかについては、含まれる readme を参照のこと。

【Zaurus 用 インプット・メソッド】

irk-zaurus-j_0.11.1f-mad0_arm.ipk

 ipk になっているので、簡単にインストールできる。

 SL-A300 とSL-C700 で、動作確認。

【Zaurus 用 インプット・メソッド プログラム・ソースコード】

source-mad0.tar.gz

 ソースコード。

【追記】

前回の工作も同じなのだが、上記の部品のままだと、赤外線 LED と Zaurus の IrDA ポートを 5cm 位まで近付ける必要がある。

調べてみたら、「IrDA で使う赤外線の波長は、850-900nm 、リモコン用の赤外線の波長は、900-950nm 」だ。

秋月で、30円で売って居る赤外線 LED の波長は、940nm で、リモコン用らしい。

ちなみに、千石で、140円で売って居る TLN231 (波長 870nm)を使うと通信可能距離が、一気に 30cm 位になる。

多少、高くなるが・・(差額、110円だが)

注意

ブログのコンテンツの内、「告知」など時期よって情報価値が無くなるのは除いてある。また、コンテンツに付いたコメントは書き込み者に著作権があるものと判断し、ここに持ってきていないので、コメントを見るときは、元々のブログコンテンツを参照してもらいたい。

その他、ブログ発表後、コメントなどの内容を反映するなど、内容を変更しているものもあるので、注意してほしい。