[Arduino]keyboard(PS/2)

シリアルポート経由でキーを押すことができるPS/2キーボードです。

回路図

ArduinoとUSBシリアル変換モジュールを使います。PS/2キーボードに関するプログラム的な処理はDIY Keyboard(Nico Keyboard)をそのまま使っています。なので、DIY Keyboardからキーマトリックスを取り外しただけの回路とも言えます。

↑ 接続例です。

USBシリアル変換モジュールはキー操作側のパソコンに接続します。パソコン側からはCOMポートデバイスとして認識されます。「キー操作側」のデバイスはCOMポートを制御できる必要があります。ここでは、Windowsパソコンに接続して、「TeraTerm」を実行しています。通信設定は115200bps、データビット8、ストップビット1です。

「キーを操作される側」のデバイスにPS/2コネクタを接続します。

最近のパソコンはPS/2ポートを搭載していないため、「USB-PS/2変換アダプタ」を使って接続します。ここではラズパイに接続しています。

キーボードのインターフェースの仕様はPS/2です。DATA、CLK、GNDの3本をPS/2コネクタにつなぐだけです。写真では4本つながってるように見えますが、VCC(赤い線)は接続していません。

PS/2キーボードはホスト側と双方向で通信します。そのため、信号の衝突を避けるための工夫が必要です。Highを出力する場合はポートを入力に設定してハイインピーダンス状態にして、プルアップ抵抗からHighを出力します。Lowの場合は普通に出力します。

プログラム

Arduino IDEで作成しています。

↑ 動作中の様子です。

操作側からTeraTermでキャラクターコードを送信すると、それがキーボードの入力となります。

操作される側はワープロソフトを実行しています。

「!」などのようにSHIFTキーが必要な文字は、「SHIFT」+「1」というキーコードが送られるので「!」が入力されます。

既知の問題

・操作できないキーがあります。

・インターフェースがPS/2なので、古いです。

(関連)

Arduino Leonardoを使ったUSB版もあります

https://sites.google.com/site/yugenkaisyanico/hacking-keyboard2