PS/2 キーボードを接続してみる

Arduino に PS/2 キーボードを接続してみます。



ハードウェア

必要なものは以下の通りです。

基板に取り付けるタイプの Mini DIN 6pin コネクタは以下から購入できます。

配線は以下のようになります。

CLOCK / DATA ピンは 10kΩ抵抗でプルアップしておきます (なくても動きますが)。

ブレッドボードで使えるようにしたモジュールと、シールド化したものです。シールド用の基板には サンハヤト UB-ARD03-P を使ってみました。

eBay にも PS/2 キーボードアダプタが売ってあるようです (200円前後)。

See Also:



ソフトウェア

Arduino で PS/2 キーボードを使うには、PS2Keyboard Libraryを利用します。

Tamakichi さん作の STM32 対応版もあります (ドキュメントをよく読んでください)。

  1. PS2Keyboard Library を DL します。
  2. Arduino IDE メニューの [スケッチ | ライブラリを使用 | Add Library...] にて DL した ZIP を指定。
  3. 念のために Arduino IDE を再起動。
    (ライブラリは "C:\Users\<ユーザ名>\Documents\Arduino\libraries" に格納されます)

Clock をデジタルピン #3 に、Data をデジタルピン #8 に接続し、GND と +5V を GND / Vcc へ接続して以下のスケッチを実行します。

#include <PS2Keyboard.h>

const int DataPin = 8;
const int IRQpin =  3;

PS2Keyboard keyboard;

void setup() {
  keyboard.begin(DataPin, IRQpin);
  Serial.begin(9600);
}

void loop() {
  if (keyboard.available()) {
    char c = keyboard.read();
    Serial.print(c);
  }
}

シリアルモニタを開いてキーボードを叩くと、文字がシリアルモニタに表示されると思います。

See Also:



日本語 (JIS) 配列キーボード対応

キーボードを叩いてみるとキートップの刻印と一致しない文字があるかと思います。日本語 (JIS) 配列キーボードを使っているとそうなってしまいます。

まごころせいじつ堂さんのArduinoにPS/2日本語キーボードをつなぐ(カナ対応) という記事中にある改変版ライブラリを使うのが最も簡単です...が、このライブラリは PS2Keyboard Library の ver2.3 ベースで、かつ実際にはカナ入力にはあまり意味がないのです。

#include <PS2Keyboard.h>

const int DataPin = 8;
const int IRQpin =  3;

PS2Keyboard keyboard;

void setup() {
  keyboard.begin(DataPin, IRQpin, PS2Keymap_Japanese);
  Serial.begin(9600);
}

void loop() {
  if (keyboard.available()) {
    char c = keyboard.read();
    Serial.print(c);
  }
}

改変版ライブラリに差し替えて、先程のスケッチをちょっと書き換えて実行してみましょう。刻印通りに文字が入力されますね。ですが、高速にキーを叩くと入力していない文字が表示されると思います。キーボードの処理が追いついていません。この改変版ライブラリの有用性を否定している訳ではなく、Arduino で使うには少々ヘビーだという事です。

そこで、

これらの条件を満たすものを作ってみました。UNO でも Leonardo でも動作します。

Download: ps2keyboard_240_mod.zip

コンパクト化についてですが、ver2.4 はただでさえライブラリサイズが大きく、日本語配列キーボード対応を追加するとなるとスケッチのサイズはさらに大きくなってしまいます。

#define USE_US_KEYBOARD
#define USE_GR_KEYBOARD
#define USE_FR_KEYBOARD
#define USE_JP_KEYBOARD

利用しないキーボードがあれば、PS2Keyboard.h 内の定義をコメントアウトするなり削除してスケッチのサイズをコンパクトにする事ができます。日本語配列キーボードだけ使うようにすれば、1KB 以上サイズが小さくなります。たかが 1KB でしょうが、Arduino (UNO) にとっては 1/32 ですからね。

キーボードのライブラリは他にもありますが、うまく動かなかったりしたので結局は PS2Keyboard Library ベースのものを使っています。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: