概要
- 前回に引き続き回路の基礎を学んだ
- ピンとGNDを直接繋ぐやり方だと、使用できるピンの数までしかスイッチを増やせないが、キーマトリクスを使用するとピンの数以上のスイッチを扱うことができる
- 読み取り方の違いにより
col2row
とrow2col
がある
前提
- ISP1807搭載Microボード を使用
- Arduino IDEを使用した開発環境が準備できている
- ブレッドボード等、動作確認に必要なものが揃っている
- ボードにピンヘッダが半田付されている
- 使用するものの一覧についてはこちら
やったこと
前回と大して変わらないが、以下を行った。
- 回路の作成
- スケッチの作成(後述の参考サイトの内容とほぼ同じなので記載は省略)
キーマトリクスについては、いろんなサイトに説明があるし、
以下の参考書籍でも解説されているのでここでは初心者が実際に回路を作成してみた手順を記載する。
自分の場合は資料を読んで完全理解するというよりは、実際に配線してみてやっと実感できたような感じだった。
参考書籍
キーマトリクスについてはネットでも簡単に説明が見つかるが、キーボード制作についてまとめられた本があるので、それを見た方が全体的な流れがイメージしやすかった。
- はじめての自作キーボード
- 自作キーボード設計入門2
https://booth.pm/ja/items/1315935
回路の作成
2 x 2
でcol2row
の回路を作成する。(インプットプルアップ抵抗を使用した、アクティブハイの想定。)
配線をしていく時には基準となる側(今回は列になる側)から線を差していって、後から逆側をつないでいく方が分かりやすかった。
1スイッチ単位で配線を完成させようとするとややこしく感じたので、同じ方向を先に完成させてから次に移った方が個人的にはやりやすかった。
- 1列目(黄色の線)は
2
ピンからスタートして1行目のスイッチと2行目のスイッチへ。
スイッチから出る部分には逆流防止のダイオードを設置。 - 2列目(黒色の線)は
3
ピンからスタートして同じように配線。
- 1行目(青色の線)は1行目のダイオードをつないで、そこから
6
ピンに配線。 - 2行目(白色の線)も同様で、ダイオードをつないで、そこから
8
ピンに配線。
この配線の場合には、列から行に向かって電気が流れる想定となる。
コード実装時は6
,8
ピンをLOW
にして、その時の各列がどうなっているかを読み取ることになる。
row2col
の場合には逆に列側のピンをLOW
にして、行側のピン状態がどうなっているかを読み取る。
配線については行側の配線がダイオードの無い側につながり、列側の配線がダイオード側に繋がるようになる。
実際に試した際の実装については参考サイトのコードを少しいじったものなので省略。
参考サイト
https://okiraku-camera.tokyo/blog/?p=13045
上記ではscan_port
とdata_port
と表記されている部分が列と行のピン指定に当たる。
列側をLOW
にして、行側を読み取っているので、row2col
になる。
これのピン設定や、読み取り部分を変更したら動作確認できた。
参考書籍ではQMKファームウェアの設定で、ROW2COL
やCOL2ROW
により向きを指定している。
その他
これでキーマトリクスを使用してキーボード自体は作れるようになるが、今回作成しようとしているものが左右分割キーボードを完全無線化したものなので、まだ課題がある。
- シフトやコマンドキーみたいに複数同時押しするようなものはどう対応するか
- 使用予定のスイッチ数が少ないので、レイヤー機能が必要
- 左右分割するので、それぞれの通信をどうするか
- 分割した場合にはシフトやレイヤーキーの扱いが大変そう
- ボードへの電力供給をどうするか
今回使用するボードがQMKファームウェアに対応していないため、キーボードの機能面の実装が必要になるのが初心者的にかなり痛い。
楽ができたら嬉しいと思ってBLE Micro Proのファームウェア作成手順も試してみたけど、ブートローダーが異なるからかうまくいかなかった。
Pro Microを使用して、QMKファームウェアで設定できる場合は機能面をあまり気にしなくても良さそうなのかなという印象を持った。
軽い気持ちで始めたけど、なんとか完成まで持っていきたい。