マツドサイエンティスト・研究日誌 保存版
夏休み工作シリーズ 第2段 Zaurus 用外部キーボード・インターフェース

初出:2005年08月12日 元々のブログ・コンテンツへのリンク
カテゴリーのインデックス: 電子工作

主要部品代、わずか 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円だが)
inserted by FC2 system