JavaScriptを有効にしてください

[自作キーボード]キーマトリクスの基本(主に配線)

 ·  ☕ 4 分で読めます

概要

  • 前回に引き続き回路の基礎を学んだ
  • ピンとGNDを直接繋ぐやり方だと、使用できるピンの数までしかスイッチを増やせないが、キーマトリクスを使用するとピンの数以上のスイッチを扱うことができる
  • 読み取り方の違いによりcol2rowrow2colがある

前提

やったこと

前回と大して変わらないが、以下を行った。

  • 回路の作成
  • スケッチの作成(後述の参考サイトの内容とほぼ同じなので記載は省略)

 
キーマトリクスについては、いろんなサイトに説明があるし、
以下の参考書籍でも解説されているのでここでは初心者が実際に回路を作成してみた手順を記載する。
自分の場合は資料を読んで完全理解するというよりは、実際に配線してみてやっと実感できたような感じだった。

参考書籍

キーマトリクスについてはネットでも簡単に説明が見つかるが、キーボード制作についてまとめられた本があるので、それを見た方が全体的な流れがイメージしやすかった。

  • はじめての自作キーボード

回路の作成

2 x 2col2rowの回路を作成する。(インプットプルアップ抵抗を使用した、アクティブハイの想定。)
配線をしていく時には基準となる側(今回は列になる側)から線を差していって、後から逆側をつないでいく方が分かりやすかった。
1スイッチ単位で配線を完成させようとするとややこしく感じたので、同じ方向を先に完成させてから次に移った方が個人的にはやりやすかった。

  1. 1列目(黄色の線)は2ピンからスタートして1行目のスイッチと2行目のスイッチへ。
    スイッチから出る部分には逆流防止のダイオードを設置。
  2. 2列目(黒色の線)は3ピンからスタートして同じように配線。
回路
回路: 列の配線が終わったところ
  1. 1行目(青色の線)は1行目のダイオードをつないで、そこから6ピンに配線。
  2. 2行目(白色の線)も同様で、ダイオードをつないで、そこから8ピンに配線。
回路
回路: 行の配線が終わったところ

この配線の場合には、列から行に向かって電気が流れる想定となる。
コード実装時は6,8ピンをLOWにして、その時の各列がどうなっているかを読み取ることになる。

row2colの場合には逆に列側のピンをLOWにして、行側のピン状態がどうなっているかを読み取る。
配線については行側の配線がダイオードの無い側につながり、列側の配線がダイオード側に繋がるようになる。

回路
回路: 行の配線が終わったところ
回路
回路: 列の配線が終わったところ

実際に試した際の実装については参考サイトのコードを少しいじったものなので省略。

参考サイト
https://okiraku-camera.tokyo/blog/?p=13045
上記ではscan_portdata_portと表記されている部分が列と行のピン指定に当たる。
列側をLOWにして、行側を読み取っているので、row2colになる。
これのピン設定や、読み取り部分を変更したら動作確認できた。

参考書籍ではQMKファームウェアの設定で、ROW2COLCOL2ROWにより向きを指定している。

その他

これでキーマトリクスを使用してキーボード自体は作れるようになるが、今回作成しようとしているものが左右分割キーボードを完全無線化したものなので、まだ課題がある。

  • シフトやコマンドキーみたいに複数同時押しするようなものはどう対応するか
  • 使用予定のスイッチ数が少ないので、レイヤー機能が必要
  • 左右分割するので、それぞれの通信をどうするか
    • 分割した場合にはシフトやレイヤーキーの扱いが大変そう
  • ボードへの電力供給をどうするか

今回使用するボードがQMKファームウェアに対応していないため、キーボードの機能面の実装が必要になるのが初心者的にかなり痛い。
楽ができたら嬉しいと思ってBLE Micro Proのファームウェア作成手順も試してみたけど、ブートローダーが異なるからかうまくいかなかった。
Pro Microを使用して、QMKファームウェアで設定できる場合は機能面をあまり気にしなくても良さそうなのかなという印象を持った。
軽い気持ちで始めたけど、なんとか完成まで持っていきたい。


書いた人
keee
Webエンジニア

目次