フューチャー技術ブログ

キーパッドを、基板から自作してみた

こんにちは。CSIGの井上です。この記事は秋のブログ週間2021の4日目です。

本ブログでは何度か自作キーボードの記事を書いていますが、基本的には「誰かが設計したものを組み立てる」物でした。最近まではある程度満足して使っていたのですが、もう少しこうだと(私は)使いやすいかもしれない、という点が色々出てきたので、キーボードを基板から作ろうと思い始めました。

  • 市販の自作キーボードは、キーアサインの変更は可能です
  • しかしながら、物理的な配置等も変えたい場合は、自作するしかないです

ですが、最初からキーボードを作るのは難度が高いので、まずは機能確認のキーパッドを作りました。これについて記事を書きました。

あと、普段はサイバーセキュリティの話をしていますが、今回は一切しません…

概要

この記事について

この記事は、仕組みを知ることの楽しさを知ってもらう、という事を目的に書きました。

今回は、自作の第一歩として以下を含む基板を作ります。
(何かを始めてやるときは、実装テストを小規模で行う、のがセオリーですね。)

  • 4つのキー
  • 1つのロータリーエンコーダー
  • 1つのカラーシリアルLEDテープ
image.png

最終的に作りたいもの

本記事で書いたキーパッド設計により、設計プロセスや注意点を、おおよそ理解しました。
今後は、日本語キーボード(70キー程度)を作るつもりです。機会があればこちらに投稿するかもしれません。

  • 会社支給PCは日本語キーボードのノートパソコンであるが、キータッチは個人的にはあまり好きではない
  • リモートワーク環境であり、自宅では某自作日本語キーボードを利用している
  • 出社または自宅外でリモートワークする時に上記のキーボードを持ち出すと、破損する恐れがある
  • 持ち出しても破損しづらい、好みのキーボードが欲しい!作りたい!

それでは、キーパッドを設計していきます。

キーパッドを作る

構成と利用ソフトウェア

構成

自作キーボードは、一般的に以下の構成となっています。

  • ProMicroと呼ばれるマイコン(Arduino互換機)に、各種スイッチ類やLEDなどを接続する
  • ProMicroのUSBポート経由でPCと接続し、キーボードとして使う
  • ProMicroのファームウェアは、QMK Firmwareというもので作成ができ、それをQMK ToolBoxで書き込むことが可能
    • ファームウェアを書き換えることで、キーアサインなどを変更できる
image.png

利用するソフトウェア

今回は、以下のアプリケーションを使います。

  • KiCAD
    • https://www.kicad.org/
    • A Cross Platform and Open Source Electronics Design Automation Suite
    • 回路の設計と、基板の設計ができるアプリケーションです。Ubuntuだとaptで導入もできました。
    • KiCADには、Eeschema(回路図エディター)/Pcbnew(プリント基板用ソフトウェア)/GrebView(ガーバー/ドリル ファイルビューア)などが含まれています。
  • Freerouting
    • https://freerouting.mihosoft.eu/
    • PCB Autorouter
    • KiCADでは自動で配線はできないようなので、このアプリケーションにより配線をしてもらいます。
  • QMK Firmware
    • https://github.com/qmk/qmk_firmware
    • キーボードの制御でよく使われるProMicroに入れるファームウェアとして使われます。
    • githubプロジェクトに登録済みのキーボードであれば、QMK Configurator という、WEB上でキーアサインを変更してファームウェアを作るものが利用できます。
  • QMK ToolBox

何を作りたいかを決める

自作プロセスの検証作業に近い内容なので、欲しい機能を盛り込みます。

  • キーは必要
    • 最終的にはキーボードを作るつもりなので、複数のキーを扱う練習をしたい
  • ロータリーエンコーダーも使ってみる
    • マウス代わりとして使う可能性もあるので、実装してみたい
  • シリアルカラーLEDテープ
    • 自作キーボード=光る、これは定番

キーは内部的にマトリックスとして扱うので、最低限の 2x2 で 4キーとしました。
ロータリーエンコーダーとLEDテープは、実装テストなので数は不要として、1つとしました。

実装するものが決まったので、これ以外に必要なパーツなども含めて配置を考えます。

image.png

回路を設計する

KiCADは設計用の複数の画面を持っていますが、今回はKiCADのEeschemaで部品を配置、配線します。
詳細は割愛しますが、キーボードのコントローラーとなるProMicroを中心に、回路を検討します。

image.png
  • キーはマトリックス配置とします。
    • ProMicroの2Pinを「行」、同2Pinを「列」に割り当て、ダイオードで逆流を防止すると、4キーを認識できる
    • ProMicroは最大18Pinをこの用途で利用できるので、9行x9列=81キーを単体で判別できる。
    • キーのマトリックスを作り、各Pinにアサインします。
  • ロータリーエンコーダーは、2Pinを消費します。
    • 現状のQMK Firmwawreは、ロータリーエンコーダーはマトリックスに組込めない仕様です。
    • そのため、ProMicroに直接Pinアサインします。
  • ファームウェア書き換えの簡略化の為、リセットスイッチも付けます。
    • RST PinをGNDに短絡するように、スイッチを配線します。
  • 分割キーボードとする際に必要なTRRSジャックも一応つけておきます。
    • キーボードを左右に分割した場合、シリアル通信若しくはI2C通信で同期させる必要があります。今回はシリアル通信要として1Pinを設定します。
    • I2Cの場合は GND/VCC/SDA/SCLの4線が必要で、市販のステレオジャック(3極)では無く、TRRSジャック(4極)を使います。
    • シリアル通信だと GND/VCC/Dataで済みますが、汎用化の為にTRRSジャックを使います。
  • シリアルLEDテープは、1Pin消費します。
    • GND/VCC/Din なので、制御用のDinをProMicroに接続します。

この段階で、論理的な部品と配線が完了しました。
次に進む前に、ネットリストの出力や、フットプリントを割り当てておきます。

PCBを設計する

基板自体の設計に進みます。これは、KiCADのpcbnewを使います。

まずは部品の実際の配置を考えて整理します。

  • 使い勝手により位置が決まるもの(TRRSジャックは基板の端オードは同じ向きで固めて配置したい)等で位置決めをします。
  • その後、基板上での配線を書いていくのですが、KiCADでは自動配線をしてくれません。手動で配線する必要があります。
    • そこでFreeRoutingを使い、自動配線します。

配線後は、下図このようになります。

  • 3Dモデルを表示することもできるので、仕上がりを確認することもできます。
image.png

これで基板は完成したので、発注を行います。

PCBを発注する

KiCADで作成したデータを基に、業者に発注します。
各業者により特徴はありますが、基本的には同じです。

  • 個人で利用する場合、条件により費用が変わりやすいです。
    • 最低5枚から、特定のサイズ内であれば安く仕上がる、などの条件があります。
    • これに合わせるように基板を設計したほうが良いかもしれません。
  • 中国の工場で作成され、郵送されることが多いです。
    • 私が頼んだ業者は、深圳から送ってきました。特定のサイズ以下であれば、5枚で2000円以下、程度でした。
    • 納期は3週間で、2週間目まで製造は全くされていませんでした。3周目頭で製造が始まり、DHLを使い、予定通り3週間中に送られてきました。

発注後暫く待つと、基板が届くはずです。

image.png

組み立てる

基板が届いたら、まずは部品を組みつけてみます。

  • パーツ自体は一般的な物なので、関東であれば秋葉原のパーツ屋や台東区にある自作キーボード専門店で入手できます。
image.png
  • 場合により、「取付向きが逆になる(フットプリントを逆に配置してしまった)」とかが発生することがあります。
    • 無理やり空中配線で対応したり、表裏を変えたりして対処できれば良いですが、無理な時はあきらめるしかありません…

部品が付いたことで、「見た目」は完成品になりました。
まだファームウェアを書いていないので、PCに接続しても何も起きません。
ファームウェアを用意します。

image.png

ファームウェアを作成する

QMK Firmwareを利用して作成します。

Ubuntuのパッケージを利用して導入しましたが、GitHubのものよりバージョンが古いかもしれません。しかしながら、特段問題は出ないのでそのまま使いました。
QMK Firmwareは開発が頻繁に行われており、1週間程度ごとにはバージョンが上がっているようです。

  • KiCADも含めて、PCにそのまま入れると環境が汚れるので、仮想マシン上で動かすのが良いかもしれません。
    • 今回はKiCAD, QMK FirmwareのビルドなどはUbuntuで行っています。
  • 開発の速さに伴いインターネット上の情報が古くなりやすいです。やはり公式のドキュメントを参照するのが一番良いようですが、なかなか複雑です。
  • Ubuntuでapt導入した場合は、~/qmk_firmware/以下に環境が用意されます。

詳細は省略しますが、新規でゼロから作る場合は以下のようにします。

  • テンプレートを作る
    • $ ./util/new_keyboard.sh
      • キーボード名や作成者名を入れると、テンプレートが ./keyboards/<キーボード名>に作られる
  • 編集を行う
    • キーの数やアサイン、LEDシートやロータリーエンコーダーなどの設定をする
      • config.h, <キーボード名>.h, keymap.c等を書き換える
      • 何を書き換えるかは…ネットで調べる方が良いかもしれない
        • 機能をenable = tureにする、ProMicroの割当Pin番号を記載していく、等
  • コンパイルする
    • $ qmk compile --keyboard <キーボード名> --keymap default

ファームウェアをビルドすると~/.build以下に*.hexファイルとして配置されるので、これをQMK ToolBoxでProMicroに書き込みます。

先人のキーボード設計を流用する場合は、keymapだけ書き換えることになると思います。
新規の場合、流用をすると色々エラーが起こったりすることが多いので、new_keyboard.shした方が早いように感じました。

ファームウェアを適用する

ProMicroへの書き込みですが、WindowsだとQMK Toolbox.exeで、GUIで操作ができます。

  • (VM上のファームウェアを、ホストのWindowsから見えるところに移動させる)
  • QMK Toolbox.exeを起動し、準備をする
    • ファームウェアファイルを指定、Auto-Flashの有効化のチェックボックスを有効化
  • キーボードをUSBで接続する
    • リセットスイッチを押すと自動でファームウェアが書き込まれる
image.png

これでキーボードとして動作が可能な状態になりました。完成です。

ここまでできれば、一通りの機能実装ができたことになります。おそらく、ロータリーエンコーダーやLEDテープなどが無ければ、簡単に実装できます。
最初の実装としては問題なくできたので、次は日本語キーボードを作ろうと思います。

(大半をWEBで済ます方法もある)

最近は、各種WEBサービスを駆使することで、ほぼWEB上でキーボードが作れそうです。

  • キーボードをデザインする
  • KiCADで基板を作る
    • ここは流石にWEBではできないか。
  • PCB発注
    • WEBで事業者に発注。一応、WEBサービスですね。
  • ファームウェアの作成
    • Keyboard Firmware Builderでファームウェアを作る
    • keyboard-layout-editorのJSONを張り付けることで、オリジナルのキーボードでも作れる
    • 但し、ロータリーエンコーダーは書けない
      • ファームウェアをダウンロードしてみるとQMK Firmwareのようだけれども、それを改造してcompileするのは難しいみたい。
  • ファームウェアの書き込み
    • QMK Tool boxを使うので、WEBサービスじゃないですね…
image.png

まとめ

キーボード自作のおおよそのフローは理解いただけたと思います。
自作キーボードに興味のない方には雑学としての知識を、興味のある方には自作の後押しをできていれば幸いです。

秋のブログ週間2021の4日目でした。