編集履歴一覧に戻る
tnksoftのアイコン画像

tnksoft が 2021年01月16日19時04分06秒 に編集

PNG画像の透過を修正しました

本文の変更

# プログラマブルテンキーを作ろう 電子工作で「自作キーボード」といえば、メカニカルキースイッチを完成済み基板にはんだ付けするのが定番ですが、構造がほぼ同じであるマトリクススイッチ(マトリクスキーパッド)を使ってもオリジナルキーボードを制作することができます。 今回はそのマトリクススイッチを使って、キーに自由な処理を割り当てることのできる、プログラマブルテンキーを自作する手法を紹介します。 ## 部品の用意 まずはハードウェアを作成しましょう。必要な部品は下記のとおりです。 | 部品名|個数 | |:---|:---| |マトリクススイッチ[1]|1個| |Arduino Leonard[2]|1個| |ダイオード(1N4148など)|4個~| |LED|2個| |10kΩ抵抗|4個~| |330Ω抵抗|2個| |タクトスイッチ|1個| 用意する抵抗とダイオードの数は、(マトリクススイッチから出ている端子の数÷2)個が目安になります。 ++[1]「4x4キーパッド」などの名称でも販売されています。 [2]Pro MicroなどのArduino Leonard互換マイコンボードでも可。++ ## 回路の作成 マトリクススイッチでは、縦軸の線から入った電気が、どの横軸の線へと流れているかで、押されているスイッチを判別します。

-

![マトリクススイッチの仕組み](https://camo.elchika.com/e2d224c681586210056f54498468aad8305cc4bf/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f37383339366238652d343132662d343434662d383739392d326432633235303633353366/)

+

![マトリクススイッチの仕組み](https://camo.elchika.com/85d3617be199c415acc8882651f94928edc8d6b9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f64383233626261362d333563642d343639312d396235642d353030666532663364383631/)

例えば、上記の配線であれば、2番線へ電気を流したときに6番線に出力されているのが確認できたのであれば、押されているスイッチは「6」であることがわかります。 今回のサンプルで使ったマトリクススイッチは縦3本、横4本の組み合わせのため、電気の流れを一方通行にするダイオードを3本、プルアップ抵抗のための10kΩ抵抗を4本組み込んでいます。16個のスイッチから構成されているなら、ダイオードは4本必要となります。 以上を踏まえた回路の例がこちらです。LEDは後述のキーレイヤーの状態を示すのに使います。

-

![回路図](https://camo.elchika.com/ab3498aed2d41982cabbd7c66e153f0fe5724274/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f65666562323839332d306335392d343463342d626363332d646533616362643437333735/)

+

![回路図](https://camo.elchika.com/25c9212dda583b24702ad9cf97812b5fea7ddd03/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f33343432333135622d616165362d343164652d396133362d613565623831356335306639/)

## 機器の制作 回路図にしたがって、電子部品をユニバーサル基板へはんだ付けしていきます。 ![配線1](https://camo.elchika.com/76d77188959282bbeee31361a8cc18cd12557c0d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f61663466366332332d653833622d346266372d626466622d373166346161643961313233/) ![配線2](https://camo.elchika.com/3abc42de734266349511dd09cf6e4b71b8079f36/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f62616261643962332d356637372d346530332d393830382d336364613330393831643235/) 適当なケースに収納すれば、ハードウェアの完成です。 ![ケースへの収納](https://camo.elchika.com/0bd6d88abfdcdae409aebbe616c7937d325be0a4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f33626664366361382d353839312d343737382d623339382d366165323163663135393233/) ## ソフトウェアの作成 続いて、キーボード操作を担うソフトウェアを作りましょう。USBに対応しているマイコンでのHIDキーボードの制御に特化した、「[QMK](https://qmk.fm/)」と呼ばれるオープンソースプロジェクトがあり、このプログラムを利用すると、高度な操作ができるキーボードを簡単に制作することができます。 さらに、QMKから派生した「[VIA](https://caniusevia.com/)」を組み込むことで、パソコン上の専用アプリから、キー配置の変更がいつでもできるようになります。キー配置を変更するたびにプログラムを書き込む手間が省けるので、今回はこちらのプログラムを基礎にしてソフトウェアを制作することにします。 デモンストレーションプログラムを[GitHub](https://github.com/TNKSoftware/DigitPad)で公開してます。こちらダウンロードしてプログラムを手持ちのキーパッドで動作するように、適時修正します。 主に修正が必要な個所は以下の通りです。 **config.h** `#define VENDOR_ID` `#define PRODUCT_ID` キー配置変更アプリが対象のキーボードを識別するのに必要です。VENDOR_IDの値で、特に候補がなければ、名前のイニシャル2文字をASCIIコードにしたものを割り当てるのがよいでしょう。 `#define MATRIX_ROWS` `#define MATRIX_COLS` 縦の線数と横の線数。4x4キーパッドなら値は両方とも4になります。 `#define MATRIX_ROW_PINS` `#define MATRIX_COL_PINS` キーパッドの配線につながっているマイコンボードのピン番号。 **digitpad.h** `#define LAYOUT` これは、見た目におけるキー配置を、電子回路上のキー配置に変換するためのテーブルです。今回用いているスイッチでは、「1」キー(K00)は、内部では上から1、左から2番目に位置しているので、それに対応するように記述しています。 **keymaps/via/keymap.c** `const uint16_t PROGMEM keymaps` これらのキー配置は後でアプリから変更できるので、キーの個数さえ合っていれば、適当な値で構いません。 **via.json** VIAが参照するキー配置を定義します。keymapの値は`#define LAYOUT`で割り当てた配置と一致させます。 ソースコードの修正が終わったら、マイコンで動作するデータを出力させます。開発環境の構築などは本筋からやや外れてしまうので、詳細につきましては、デモンストレーションプログラムのREADME.mdを参照してください。 ## キーマップの変更 プログラムをマイコンに書き込んだら、オリジナルのキーを割り当てましょう。[VIAのアプリ配布サイト](https://github.com/the-via/releases/releases/)より、OSに合ったインストーラーをダウンロードして、パソコンで起動させます。 ![VIAの起動画面](https://camo.elchika.com/545e7147b52a028cae1a86cb9fb2b606e424291b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f66393537376135302d616332322d343736662d383232322d313735313731376637373332/) 上部タブより「Design」を選択し、「Load Draft Definition」より「via.json」ファイルを読み込ませます。 ![キーマップの読み込み](https://camo.elchika.com/ad3da16f68595cc19e39a31bdb7af86f5e277a01/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f65383165663063622d386466342d343437342d393438382d626164383130363930346239/) 「Configure」タブに戻り、オリジナルテンキーをパソコンにつなげます。VenderIDとProductIDの組み合わせが一致していれば、キーの割り当て画面が表示されます。あとは、ウィンドウ下部から割り当てたいキーを選んでいくだけです。 ![キーの割り当て](https://camo.elchika.com/b89cbc2eefe1e51f5158c811df4fa40497cf63ca/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f66646338333437392d363232372d343039352d383237382d363438376665336261323833/) VIAでは4つのキーグループ(QMKではこのグループをレイヤーと呼んでいます)が用意されており、「Layers」キーを割り当てることで、レイヤーの切り替えができるようになります。「MO」なら対象のキーを押している間だけ、「TO」なら一度押すだけで、レイヤーが切り替わります。 ![特殊なキーの割り当て](https://camo.elchika.com/af8263d7b67e0bb9d88a663e1b252e6b5a75e18c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f37623466393331322d316435652d343566642d613364652d3734653734373866326638372f34613438633362662d613763612d343334302d623132332d663562306263363734393838/) 「Special」の「Any」を活用すれば、複雑な組み合わせのキーも割り当てることができるようになります。例えば、「C(KC_X)」なら「Ctrl+X」が、「C(S(KC_F5))」なら「Ctrl+Shift+F5」のキーが押されます。 完全なキーの一覧は[QMKの公式ドキュメント](https://docs.qmk.fm/#/keycodes)が詳しいので、こちらもお読みください。