ブレッドボード上で2x2キーのキーボードを作った

キーボードの仕組みを理解するために、ブレッドボードで2x2キーの小さいキーボードを作ってみた。 マイコンでキーを読み取る仕組みについては、「キーマトリックス」で検索すると、分かりやすい解説がたくさん見つかるので、それを参考に理解した。 ファームウェアはQMK firmwareを利用した。

利用したパーツ

配線

Pro microのVCCやGPIOの電圧の仕様は5Vで、テスターで測定したところ実際には4.7V程度だった。 Pro microの端子はプルアップされているので、何もしなければHIGH(5V)になっている。 リセット(RST)も何もしない状態ではHIGHで、GNDと短絡されるとLOWになり、ブートローダーモードになる。

今回作成するキーボードの回路図は以下のようなもの。 キーマトリックスのCOLとROWはどの端子を用いてもいいので、適当に選んだ。

Kicad配線図

上図の回路図を実際のブレッドボード上で再現したものが、以下の写真。

ブレッドボード上で配線した様子

ファームウェアの作成・書き込み

ファームウェアはQMK firmwareを利用した。
新規キーボードの作成は以下のコマンドで出来る(2023-09-14現在。QMK firmwareは頻繁にアップデートされるので、アップデートで変わるかも)。

qmk new-keyboard
# 指示にしたがって適当に選択していく
#   layout: 52 (none of the above)
#   MCU: 12 (promicro)

自分のキーボードの物理配線(キーマトリックス)に合わせて、以下のファイルを修正する。

  • info.json
{
    "matrix_pins": {
        "cols": ["F6", "F7"],
        "rows": ["B5", "B4"]
    },
    "layouts": {
        "LAYOUT_2x2": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
                {"matrix": [0, 1], "x": 1, "y": 0},
                {"matrix": [1, 0], "x": 0, "y": 1},
                {"matrix": [1, 1], "x": 1, "y": 1}
            ]
        }
    }
}
  • keymap.c
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT_2x2(
        KC_1,   KC_2,
        KC_3,   KC_4
    )
};

キーマトリックスのPin配置やキーマップの修正が出来たら、ファームウェアコンパイル・書き込みする。

qmk compile -kb keyboard_name -km default
sudo qmk flash -kb keyboard_name -km default
# リセットボタンを押すと、ブートローダーモードになって書き込みが行われる

参考文献