始まりは「60%キーボードを触ってみたかった」という単純な興味からでした。いろんなメーカーから60%キーボードが発売されていますが、私がキーボードを選ぶときのこだわりポイント「分割スペースバー」を採用しているモデルはほとんど見かけません。なので、現在使用しているSKYLOONGから発売されているものにしようかと思いましたが、ついつい欲張ってしまい、JIS配列の「無変換」「変換」キー(Macだと「英数」「かな」)が欲しいと思うようになってしまいました。
しかし、こんな条件のキーボードを探してみても、やっぱり見つからなく、たどり着いた結論は「自作するしかない」ということでした。
とはいえ、自作キーボードの世界はまったくの未知。調べてみると、結構ハードルが高そうで「これはちょっと厳しいかも…」と諦めかけていました。そんなときに見つけたのが「ai03さんのJP60」というキーボードです。これが救世主で、GitHubのデータを見ると制作に必要なものが揃っていて、「これを改造したらいけそう!」という気持ちになったので自作することに決めました。
そして2ヵ月後、JP60を参考にしつつ、一部そのまま流用させてもらいながら、無事に完成しました!
やればできるもんです!動いたときは脳汁でました!
そして、JP60のデータがなければ自作なんて到底できなかったと思います。本当に感謝しています。
当初の目的である60%キーボードを使った感想としては、制作前から分かっていたことですが、ファンクションキーが1ボタンで押せないところが少し不便でした。レイヤー切り替えをCaps長押しや分割スペースなどに割り当てて、可能な限り片手でファンクションキーが押せるようにしていますが、慣れていないのでパッと押せないのが辛いところです。普段使いならやっぱりファンクションキーは欲しいと思いました。静音化については製品に負けていないぐらいの静かさなので不満は全くなかったです!満足です!
で、これから自作キーボードを作る人向けに「こんな感じで制作したよ」ぐらいのことを伝えたいと思います。解説しているわけではないのであしからず。
先に伝えたい、いくつかのこと
全くの未経験だと何を言っているのか分からない話をしていますが、頭の片隅にとどめてもらえるだけでも制作時に役に立つと思います。
費用
気になる費用はトータルで3万円ぐらい必要です。ケースをプラスチックにすれば2万円ぐらいだと思います。基盤の製造はJLCPCBで、PCB Assembly(PCBA)という基板製造と同時に部品も実装してくれるサービスを利用しつつ、トッププレートも作成したので1.2万円ぐらいでした。PCBAはやり方次第で費用を削減できる部分なので、このサービスを利用するなら気にしたほうがいいです。
Vialが最高
後述の製作話にも書いていますが、Vialというのはキー設定を即時反映できるツールで、アプリやWebサイトから操作可能です。タップダンスという機能で、ホールド/タップ/ダブルタップなどの複雑な組み合わせなんかも簡単に実現できてしまいます。他にも便利機能が盛りだくさんでやめられません。
キー配置を原寸大で印刷
キー配置を原寸大で印刷して、指の位置を確認したほうが完成時のずれが少ないと思います。私はこれを後半にやってしまって回路を作り直すことになりました。
また、基盤も印刷してケースにはめて、ネジの位置やスタビライザーが干渉しないか確認したので、基盤を発注するときの不安は少なかったです。
KiCadのチェック機能が大事
回路図エディターの「エレクトリカル ルールのチェック」、PCBエディターの「デザインルールチェッカー → 未配線のアイテム」の確認は忘れない方がいいです。特に後者は微々たる変更で配線が切れていることがあったので本当に注意したほうがいいです。基盤発注直前に再確認してミスがあったときはヒヤッとしました。
PCB Assemblyを使うならFabrication Toolkitが便利
先に話したJLCPCBのPCBAを利用する場合に、部品の種類や位置などを別ファイルで用意する必要があるのですが「Fabrication Toolkit」というプラグインだと1発で出力できて便利でした。最初は全然違う方法でやっていたのですが、手間が多くて大変だったので、このプラグインをお勧めします。書き出したファイルをJLCPCBに投げ込んで、実装不要なパーツはチェックを外すだけなので手間が省けます。
最後は勢い
最後まで付きまとった悩みが「この回路は本当に動くのだろうか?」という疑問です。KiCadのエラーチェックでは問題なしと判定されましたが、そもそも回路や部品の知識が乏しく、実際に試すこともできないため、本当に問題がないのか確信が持てず、何度もチェックして不安を払拭するしかありませんでした。
可能であれば誰かに聞いた方がいいですし、SNSとかで聞いても良かったかもしれないですね。私は知らない人に聞くのもねぇ…と躊躇してしまう性格なので、最後まで苦しんで「もう限界!」というころまでチェックや対策をして、勢いで発注しました。
そして、最も大事なのは「諦めない熱意」だと思いました!
ここから先は製作話です。
完成までの製作話
制作当初の私の能力はプログラム以外はほぼ初心者です。
- 電子工作は組み立てキットや解説通りに作ってみたぐらい
- 部品の意味とか電気に関する知識は殆どない
- 基盤の作成はやったことがない。もちろん回路図なんてチンプンカンプン。
- プログラムはある程度書ける!
といった感じです。ラッキーだったのは、少しだけ興味本位で電子工作をしていたので、半田ごてやPro Micro互換機のマイコンボードを持っていたことぐらいです。
制作の手順は大まかに以下です。
- どんなキーボードにするか決める
- 1つのボタンを押したら反応するキーボードの作成
- QMK Firmware
- VIA
- Vial
- KiCadのテスト
- 本読み
- 回路の見直し
- トッププレートの作成
- 基盤発注
- 組み立て
それぞれでどんなことをやったか思い出しながら書いていきます。
どんなキーボードにするか決める
まずはゴールを決めないと進めにくいので、Keyboard Layout Editor (KLE)を使用してキー配列を決めました。プリセットに60%キーボードの設定があったので、それを基に「分割スペース」キーの追加、JIS配列の「無変換」「変換」キーを追加しました。
そして、長いBSキーやJIS配列にしたくなるかもしれないので、レイアウトが切り替えられる仕組みを導入することにしました。
これでイメージができたので、初歩的なところから勉強していくことにしました。
1つのボタンに反応するキーボードの作成
そもそもPro Microを使用したキーボードをどうやって作るのか分からなかったので、基礎を理解するために行った作業です。どこのサンプルを使用したかハッキリと覚えていませんが、Arduino IDEでスケッチを書いて、スイッチを押したら設定したキーが入力されるぐらいの簡単な内容を行いました。以下のような内容だったと思います。
1つのボタンだと面白くないので2つ、3つと増やしていって、沢山のキーを扱うにはマトリックスという仕組みが必要であることが分かり、キーボードのファームウェアはQMK Firmwareが一般的なようなので次はこれ調べることにしました。
QMK Firmware
QMK Firmware(以下 QMK)は、キーボードの動作を自由にカスタマイズできるオープンソースのファームウェアで、様々な機能が実装されているので、必要な設定を書けば “あっ” という間に制御プログラムが作れてしまいます。
最初にファームウェアを作成するための環境を準備する必要があります。インストール方法はさまざまで、Windows環境であればQMK MSYSでインストールするのが簡単です。環境を汚したくないなら別の方法が良いかもしれませんが、調べている時間の方がもったいなかったです。
参考サイトを見ながら設定ファイルの書き方の学習を行い、ブレッドボードに2x2のボタンを用意してマトリックスの理解、そしてダイオードがなぜ必要なのかを理解しました。
次はQMKを調べているとよく目にするキーワード「VIA」に触れていきます。
VIA
VIAは、QMK対応キーボードの設定をリアルタイムで編集できる便利なツールで、専用アプリやWebサイトから、キー配列やレイヤー、RGBライトの設定などを簡単に変更できます。QMKファームウェアにVIAの設定を追加する必要があります。
VIAを使用するには「設定ファイル」を準備する必要があり、VIA公式に登録する方法と、ローカルで個人利用する方法の2つがあります。公式に登録すると、同じキーボードを使う他のユーザーも同じ設定ファイルが使用できるようになります。個人利用の場合は、ツールにこのファイルを登録するだけで使用できます。
使用した感想は、アプリからリアルタイムで設定変更できるのは凄く便利でした!
ただ、個人利用だと設定ファイルをどこかに保管しておく必要があるのが少し不便でした。公式に登録するのも手ですが、個人利用だと気が引けますよね…。それを解消できたのが次の「Vial」です。
Vial
Vialは、VIAと似た機能を持つツールですが、設定ファイルをファームウェアに埋め込むので、設定ファイルを保管しておいたり、公式に登録する手間がなくなります。その代わりにファームウェア容量が大きくなるので、マイコンに入りきらない場合は機能を削ることになります。設定変更は専用アプリやWebサイトから行います。
Vialは凄く便利だったのでこれでファームウェアを作ることにしました。使用するマイコン ATmega32U4 の容量が少ないので機能を制限しましたが私の用途では十分でした。ここまでは確か1週間ぐらいで済ませたと記憶しています。
次は重要な回路設計のKiCadを試してみました。
KiCadのテスト
使用するKiCadのバージョンは7.0にしました。最新は8.0でしたが、新しすぎてプラグインが動作しないとかありえそうだったので1つ前のバージョンを選択しました。
まずは、いくつか参考サイトを見ながら「回路図エディター」と「PCBエディター」の使い方を試してみました。回路図エディターでは、とりあえず2x2の簡単なマトリックス回路を作成。PCBエディターで部品を配置したり、各機能をいろいろ触って、なんとなく使い方を学んでいきました。
そこからJP60の回路を真似して理解度をさらに深めていき、約2週間ぐらいで自分の設計した内容でそれらしい回路が作れるようになりました。
ここではKiCadの使い方や、部品の意味など、多くの参考サイトから知識を得る必要があって学習時間が非常に長かったです。理解できない部分が多くて少し折れそうになりました。(現在でも意味が分からない部分が多いです。特に部品。)
マイコンをATmega32U4にするなら、ほぼ確実に辿り着く以下のリンクは、ai03さんが書かれた技術書で、ATmega32U4を直接基盤に取り付ける方法が丁寧に書かれています。部品の接続方法なども詳しく書かれているので翻訳しながらでも読むことをオススメします。
このほか参考にさせてもらったサイトは以下です。
このまま基盤発注まで行けそうな感じでしたが、部品実装も含めて発注を行うと、料金が1万円近くになることが判明して冷静になりました。可能な限り失敗は避けたいですし、改善できるところは改善したい。というわけで、もっと知識が必要と判断して本を購入することにしました。
本読み
サリチル酸さんの「自作キーボード設計ガイド」を参考書として選びました。回路設計に関して基本的なことから書いてある本で、本の位置づけは以下のようになっています。
自作キーボードの設計を「知識 0 の状態からちょっと本格的に始めてみたい」という人に向けて、「この本を読むことでオリジナルデザインの自作キーボードを設計できるようになる」ことを目標に書いています。
吸収できるところが沢山ありました。もう少し早いタイミングで読んだ方がいい気もしますが、ここまで理解していたからこそ読みやすかった気もします。
回路の見直し
本で得た知識はとても役立ち、問題になりそうな箇所をいくつも見つけることができました。ですが、修正を行ったら配線がぐちゃぐちゃになってしまったので、最初から作り直すことにしました。
数日で作り直して実寸でプリントしてみると、分割スペースキーの長さがイマイチなことに気が付きました。この時点では2.25uだったのですが、2uで十分であることが判明したので再度作り直しました。
その他、部品の配置が気に食わなかったりで、2回ぐらい書き直すことになりましたが、結果的に満足するものができあがりました。こだわったところはマイコンの足付きと足無しの両方に対応したところでしょうか。
回路図の作成で苦戦したところを挙げると、1つはマイコンの置き場です。足付きのマイコンを使用するのでスペースがギリギリで配線の取り回しが難しかったです。配線が適切になるようにマイコンを回転させたり、45度にしたり…。結構楽しかった部分ではありますが、一度配線すると変更が容易ではないため時間がとられる作業でした。
2つ目の苦戦ポイントは、複数レイアウトに対応するフットプリントの配置方法が分からなかったところです。(上図、右上のぐちゃぐちゃしているところ)結局、YMDKやKeeboxから販売されているPCBを見て真似しました。逆向きにしたり、90度回転させるだけですが、たくさんの穴が重なったりして結構混乱しました。
ただ、この90度回転にはデメリットがあって、スイッチの十字部分はサイズが微妙に違うらしく、キーキャップの穴が広がってしまう場合があるらしいです。気になる人はこの90度回転はしないほうがいいですね。
もう1つ上記と関連している作業で、スタビライザーを逆向きにするために、フットプリントの編集が必要になったのですが、編集方法が分かりにくくて苦戦しました。選択中のフットプリントだけ編集する方法や、根幹から編集する方法もあったり、さらに編集したフットプリントを全体に反映させる方法などが微妙に分かりにくくて、ソフトウェアの使い方を学ぶのに時間がかかりました。分かればなんて事ない作業ですが、慣れないうちは結構苦労すると思います。ですが、これだけの機能をフリーソフトで提供できているのはすごいです。本当に良くできていると思います。
トッププレートの作成
トッププレートの作成は、PCBエディターのファイルを複製して、「キー」のフットプリントを「穴」のフットプリントに変更する方法が一番簡単だと思います。
殆どは上記作業で解決できましたが、このキーボードは、BackSpaceキーを分割できたり、ENTERキーがANSIとISOに変更できる仕組みになっています。この内容に対応したフットプリントが見つからなかったので自作しました。既存のフットプリントをいくつか合体させて整形していくだけですが、やはり慣れは必要です。
失敗談もあって、このフットプリント作るのが手間だったので、SVGで外周や穴を作ってEdge.Cutsにする手法を試しました。この方法だとKiCadの3Dビューアーでは正常でも、発注先にアップロードすると穴が変になってしまいました。原因は分かりませんが、SVGの一部が繋がっていなかったのか、パスの書き順が適切でなかったとかでしょうか。解決できなかったのが残念でした。
また、プレートジェネレーターという便利なものがあって、こちらを使用してプレートを作ることができるようです。
基盤発注
基盤の発注先はJLCPCBで、PCB Assembly(PCBA)サービスを利用しました。公式サイトにKiCad 7でデータを出力する場合の設定方法が書かれているのでこのままの内容で作業しました。
PCBAで注意すべきところは、部品ごとにBasicとExtendedという分類があり、Extendedの部品を選ぶと追加料金で$3取られます。なので可能な限りBasicの部品を選ぶようにしないと高額になってしまいます。
詳しくは以下のリンク先から「Extended」で検索してください。
組み立て(ギャラリー)
組み立てはスムーズに進んで大きな問題はなかったです。小さな問題はスタビライザーばかりでした。
- 左シフトのスタビライザーのプラスチックがケースのネジに干渉したので、スタビライザーのプラスチックを少し削りました。
- スタビライザーの中に入れた小さいクッションの粘着力が弱すぎて直ぐに剥がれました。このせいでキーが戻らなくなってENTERキーが入りっぱなしになって焦りました。張り付け方が悪かったのかもしれないです。
おわりに
かなり苦労しましたが無事に完成して本当に良かったです。この達成感はなかなか味わえないと思います。
ちなみに2度達成感を味わってまして、1度目はマイコン取り付け後に、ピンセットでキーの動作チェックをして、画面に文字が入力された瞬間です。「おっ!」って声がでました。
2度目は、このチェックで1列だけ反応しない問題を解決したときです。原因は、ファームウェアに設定する『列のピン番号』が間違っていただけなんですが、一番左から順にキーチェックをして「おっ!、次もオッケー!、、、オッケー!」からの「動かない……、上も…?下もーっ!?」は絶望に落とされた気分でした。そこから解決して動いたので「よっしゃぁぁー!!」って叫んでました。一番脳汁でました。
というわけでこれで締めとなります。これからキーボードを作る人にとって何か得る物があったら嬉しく思います。
使用したパーツ
レモンスイッチはタクタイル感が弱めで、リニアに近いタクタイルという感じで使いやすかったです。
2uと1.25uのキーで使用しました。
個人的メモ
- Android端末にキーボードを接続した瞬間にJISで認識させたい場合は、vidとpidを実際に販売されている製品の値にすると可能だった。手持ちだと以下の製品のコードを入れたらJISで動作した。
マイクロソフト ワイヤレス キーボード All-in-One Media Keyboard N9Z-00023
"vid": "0x045E"
"pid": "0x0801"
ChatGPT曰くusb.idsファイルと照合しているらしい。他のやり方がありそうだけど正規のやり方は不明。Windowsは非対応っぽい。
コメント