テンキーボード (Numpad)

マトリクススイッチを使ったキーパッドについては UNO のチュートリアルでやりました。今回はそれの応用です。



購入

テンキーは Amazon 等で購入できます。

2 種類購入してみました。購入時価格は BSTK100BK が ¥548 (合わせ買い対象製品) で BSTK10BK が ¥731 でした。



各部詳細

テンキーを分解してみた所です。どちらも上部のゴム足に隠れたネジ 2 本を外す事で分解できます。

BSTK100BK はその筐体の中に何かを組み込んで使うのに向いており、BSTK10BK はテンキー部分を何かに組み込んで使うのに向いています。



フレキシブルケーブルとの接続

付属の基板をブッた切って流用してもいいのですが、Amazon に変換基板とコネクタが売ってあります。

変換基板は 1.0mm ピッチのものと 0.5mm ピッチのものが入っているわけではなく、1.0mm ピッチと 0.5mm ピッチでリバーシブルなものが 10 枚連なって入っています。

コネクタとピンヘッダをハンダ付けするとこうなります。紛らわしいですが、ピン番号は裏 (0.5mm コネクタ取り付け面) のシルク印刷を読むのが正解だと思います。

コネクタは 12 ピンですが、BSTK100BK のフレキシブルケーブルは 11 ピンしかないので 1 ピン側 (左) に寄せて使います。11 ピンのコネクタは探せばありますが、どのみち 11 ピン用変換基板がないので 12 ピンのコネクタを使った方がいいと思います。BSTK10BK の場合には基板の表裏が逆になります。

See Also:



動作確認

BSTK100BK 用

接続は以下のようになります。変換基板の 1~11 を Arduino の 2~12 に繋いでください。Arduino 側は全部で 10 ピン必要です。

変換基板 1 2 3 4 5 6 7 8 9 10 11 12
Arduino Uno 2 3 4 5 6
(未接続)
7 8 9 10 11 12 (未接続)
BSTK100BK COL0 COL1 COL2 COL3 ROW0 ROW1 ROW2 ROW3 ROW4 COL4

スケッチは以下のようになります。

#include <Keypad.h>

const byte ROWS = 5;
const byte COLS = 5;
char keys[ROWS][COLS] = {
  {' ','-','*','/',' '},
  {'7','8','9','B',' '},
  {'4','5','6','+',' '},
  {'1','2','3','E','T'},
  {'0','Z',' ','.',' '}
};

byte rowPins[ROWS] = { 7,  8,  91011};
byte colPins[COLS] = { 2,  3,  4,  512};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey();
  if (key != NO_KEY){
    Serial.println(key);
  }
}

TAB キーを使用しないのであれば Arduino 側は 1 ピン節約できます。以下は TAB キーを使用しないスケッチです。

#include <Keypad.h>

const byte ROWS = 5;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {' ','-','*','/'},
  {'7','8','9','B'},
  {'4','5','6','+'},
  {'1','2','3','E'},
  {'0','Z',' ','.'}
};

byte rowPins[ROWS] = { 7,  8,  91011};
byte colPins[COLS] = { 2,  3,  4,  5};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey();
  if (key != NO_KEY){
    Serial.println(key);
  }
}

BSTK10BK 用

接続は以下のようになります。変換基板の 1~11 を Arduino の 2~12 に繋いでください。Arduino 側は全部で 11 ピン必要です。

変換基板 1 2 3 4 5 6 7 8 9 10 11 12
Arduino Uno 2 3 4 5 6 7 8 9 10 11 12 (未接続)
BSTK10BK ROW2 ROW5 ROW0 COL4 COL3 ROW1 COL2 ROW3 COL1 ROW4 COL0

スケッチは以下のようになります。

#include <Keypad.h>

const byte ROWS = 6;
const byte COLS = 5;
char keys[ROWS][COLS] = {
  {'N','/','*',' ',' '}, 
  {'7','8','9','+',' '},
  {'4','5','6','Z','B'},
  {'1','2','3','E',' '},
  {' ','0','.',' ',' '},
  {' ',' ','-',' ',' '} 
};

byte rowPins[ROWS] = { 4,  7,  2,  911,  3};
byte colPins[COLS] = {1210,  8,  6,  5};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey();
  if (key != NO_KEY){
    Serial.println(key);
  }
}

Back Space キーや〔-〕キーを使用しないのであれば Arduino 側はそれぞれ 1 ピン節約できますが...場所が悪いですね。Num Lock と 1 ピン引き換えだったらよかったのですが。

See Also:


その他

キーマトリクスはピンを総当たりで調べようとすると時間が掛かってしょうがないです。かといって現物の接点シートを目で追うのも大変です...間違いもおきますし。ちょっと一手間掛けた方が結果的には早く調べられます。

  1. テンキーボードを分解し、接点シートを取り出す。
  2. 接点シートをスマホ等で撮影。黒いものを下に敷いて撮影する。接点シートを開けない場合には、黒い紙を間に挟んで表裏を撮影する。
  3. 任意のペイントツールで画像を開く。
  4. 配線毎に異なる色で塗りつぶし (フィル) を施す。

しきい値での塗りつぶしが可能なペイントツールを使うといいでしょう (Paint.NET とか)。この方法ならテスターで調べるよりも簡単だと思います。

BSTK100BK と Pro Micro 等を組み合わせてカスタムテンキーボードを作るもよし、BSTK10BK のテンキー部を電子工作のパーツに使うもよし...ですね。

See Also:


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

メニュー: