[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