ワイヤレスな分割キーボードComet46をつくったおはなし

「自作キーボード Advent Calendar 2018 その2」17日目の記事です。

adventar.org

今年の春頃に初めてキーボードの設計を体験したので、そのとき考えたことをまとめてみました。
気がついたらわりとボリュームが大きくなってしまったので、時間があるときに読んでいただければ幸いです。

そもそもComet46とは?

Comet46は今年の2月~6月にかけて設計したワイヤレスな分割キーボードです。MiniDoxをベースに内側と外側を1列ずつ足した配列をしています。(ErgoDoxにやや先祖返りしている感じ?)

いわゆるMitosis系のキーボード*1で、左右2つの片割れ(子機)がレシーバー(親機)と無線通信することでワイヤレスかつスプリットを実現しています*2

f:id:SatT99:20181216174349j:plain
Comet46 全体図(自分の技量不足が原因で写真はすべてpotato qualityです)

f:id:SatT99:20181216174341j:plain
Comet46 レシーバー*3

きっかけとコンセプト

自作キーボードに入門したのは去年のHelixのGBがきっかけです。「肩こりをなんとかしたい」と思い新しいキーボードを探していたところ、ちょうどHelixのGBが実施中だったので参加しました。 結果として、

  • 分割キーボードなので楽な姿勢で作業ができ、肩こりが解消された
  • 通常のキーボードと違いOrtholinearな配列なので、指の移動が楽
  • かっこいい

と大満足で、自宅と職場の両方で使っていました。ただしばらく使っていると、毎日自宅と職場の間を持ち運ぶのが面倒、新しいキーボードも試してみたい、という気持ちが湧いてきたので、もうひとつキーボードをつくることにしました。

新しいキーボードをつくる上で、ほしい機能を考えたところ、以下の3つが上がりました。

1. ワイヤレスな分割キーボード
自分の職場の机はとても狭い上、ちらかっていることもあり、Helixを使っているとUSBケーブルとTRRSケーブルの取り回しに困ることが多く、ケーブルがないワイヤレスなキーボードがほしいと考えました。無線キーボードに関して調査した結果、

  • 分割キーボード対応
  • 安定している
  • HoldとかTapとかの機能が使える
  • 電池持ちが良い

といった要求を満たすものが2018年2月当時Mitosisしかなかった(見つからなかった)ため、最初はMitosisをつくろうかと思いました。

(今はahtn/spindleさんのkeyplusjpconstantineauさんのBlueMicrosekigon/gonnocさんのBLE Micro Proといった豊富な選択肢があるので、今現在キーボードをいちから設計するとしたらそれらのいずれかを使用して設計していたかと思います。)

2. 配列はMiniDoxベース
しかしMitosisに関して調べてみると、PCBの製造コストを抑えるためキーボードが10cm四方に収まるキー配置になっており、キーが非常に押しづらいとの評判がもっぱらでした。 https://i.imgur.com/gApMkzz.jpg

Mitosis (作者のReddit投稿記事より引用)かなり特殊な配置の親指キー・column staggered度合いをしています。

そこでMitosisの無線モジュールをベースに、自分が使いやすいキー配置のキーボードをつくることを決意しました。Helix(5行版)のキー配置を毎日使用した感想として、

  • 数字キーは遠くて届かないのでなくていいかも
  • 最下段外側4つのキー(右手側のデフォルトだと矢印がアサインされているキー)も押しづらいのでなくていいかも
  • 最下段内側3つのキー(親指で押すキー)がもう少し手前にあると押しやすいかも
  • Row staggeredからortholinearにしたところすごくキー押しやすくなったので、column staggeredにするともっと押しやすいかも

が挙がったので、それらを実現するキー配置のキーボードを探したところ、MiniDoxがいいのではないかとなりました。 http://i.imgur.com/iWb3yO0.jpg

3. コンパクトで持ち運びやすい
自宅+職場(2拠点あります)の間を持ち運ぶ機会が多いだろうということである程度コンパクトで持ち運びやすいサイズにすると便利だろうと考えました。また、パームレストを持ち運ぶのは面倒なので、できる限り厚みを抑えた筐体にすることも目標としました。

配列を試行錯誤

MiniDoxベースのキー配置にすることに決定しましたが、はたしてMiniDoxの少ないキー数(左右合計36)で足りるか不安だったため、HelixのキーマップをMiniDox風に書き換えて試し打ちを何日かしてみました。結果として、英語入力は問題ないものの、EnterとIMEON/OFFを多用する日本語入力ではキーが足りないと判明したので、小指側に一列足すことを決定しました。さらにちょうどこの時期、Tokyo Mechanical Keyboard Meetup vol.3でのBiacco42さんの発表を聞き、かっこ入力のために人差し指側にも一列足すことにしました。

キー配置の概要が決まったところで、次は実際にキーキャップを並べてキー配置を試行錯誤しました。

f:id:SatT99:20181216225835j:plain
初期のキー配置構想のひとつ

レイアウトを含めた最終的なキー配置は以下の通りです。

f:id:SatT99:20181216230340p:plain
キー配置/レイアウト

詳細は以下の通り。

  • column staggered度合い:”Y”の列を基準(0)にすると内側から順に0u,+0.125u,+0.375u,+0.25u,+0u,+0uとしました。*4
  • 親指キー:一番内側から順に1.5u(傾斜: 20°),1u(傾斜: 12.5°),1u(傾斜: 5°)としました。MiniDoxとは違い1.75uではなく1.5uを採用したのは、角が飛び出して見た目が悪いからです。ただ、1.5uにしたせいでなかなかキーキャップが手に入らない事態に…*5
  • 最内列(かっこ)キー:3行だと最下行のキーが親指キーと干渉する、人差し指 のホームポジションからキーが近い方が打ちやすい、との理由で2つのキーを画像の位置に配置しました。

基板設計

キー配置が確定したところで、次は基板設計です。Helixがほぼ初めて電子工作の素人で、「パスコンって何?、MOSFETって何?」という状態からのスタートだったので、この段階が一番苦労しました。

1、2ヶ月ほどかけて電子回路の基本を勉強したのちに、KiCadで基板設計を行いました。基本的にはMitosisの回路をベースに配線したのですが、何点か独自の工夫を加えてみました。

  1. Core51822の代わりにMDBT40を使用する
    Mitosisでは無線モジュールにCore51822を使用していますが、技適の関係で日本では使えません。なので、技適に対応している代替品としてMDBT40を採用しました。(フットプリントが小さいおかげでキーボードをコンパクトにできた反面、組み立て段階で悲劇を生むことに…)

  2. 電源スイッチをつける
    大したことではないですが、Mitosisでは持ち運び中にキーが押しっぱになって電池が切れてしまうという報告が多数挙がっていたので、対策として付けました。

  3. 部品をすべて基板上面とプレートの間に実装
    MitosisではCore51822を基板裏面に実装していますが、Comet46では厚みを極限まで薄くするため、基板上面とプレートの間にすべての部品を実装できるようにしました。

f:id:SatT99:20181216233612p:plain
Comet46の回路図(初めて+無理に両面基板にしたため、今見るとなんでこんな配線にしたのだろうという点が多数…)

組み立て

KiCadで設計した基板をElecrowに製造してもらい、いよいよ組み立てです。

f:id:SatT99:20181216235145j:plain
出来上がった基板、トッププレート、ボトムプレート(Elecrowガチャのおかげでトッププレートだけなぜか12枚に…)

Helixで細かい表面実装パーツにはある程度慣れていたので、ほとんどのパーツは苦労せず実装できたのですが、MDBT40だけは別でした。0.7mmの挟ピッチ、データシート通りのパッドにしたところ手はんだにはあまりむかない、という2点が合わさったことが原因で、左右の片割れとレシーバーの計3箇所にMDBT40をつける間に、はんだ付け失敗によるパッド剥離でMDBT40を2個壊す事態に…

f:id:SatT99:20181217000200j:plain
MDBT40実装後
f:id:SatT99:20181217000416j:plain
キー以外のパーツを実装した後の様子(レシーバーは旧タイプのものです)

完成、そして反省

良かった点

設計・組み立てともに四苦八苦しましたが、最初に掲げたコンセプトを満足できるレベルで達成できたと思います。

1. ワイヤレスな分割キーボード
Mitosisという既存のキーボードの無線アーキテクチャを流用したので、フリーズ・無線通信失敗・左右のタイミングずれ等の問題もなく、快適に使用できています。また、レシーバーがQMKの処理をすべて担っている上、左右の片割れはmatrix scanをせず入力時以外はスリープモードに入っているおかげで、電池持ちも良好です。今までの実績として、CR2032一個で約2~3ヶ月ほど使えます(自宅と職場で一日平均8時間使用)。(最近無線モジュールのファームウェアをアップデートしたので、さらに電池持ちが良くなるはずです。(現在試験中))

2. 配列はMiniDoxベース
「押しにくい位置にはキーを配置しない」という考えのもとMiniDoxベースの配置を決定し、キーの細かい位置もキーキャップを実際に配置しながら練ったおかけで、快適にタイピングできています。

3. コンパクトで持ち運びやすい
縦140mm×横80cmというコンパクトなサイズのおかげで持ち運びラクちんです。普段は下記画像のハードケースにいれて持ち運んでいます。

f:id:SatT99:20181217003802j:plain
ハードケース(アマゾンにて購入、左側のクッションの裏に予備バッテリー等を収納できて便利)

また、厚みもトッププレートとボトムプレートの間が7.6mm*6とほぼ限界の薄さにしたおかげでパームレストなしでもある程度快適です。

f:id:SatT99:20181216174332j:plain
Comet46厚み(実際には基板がたわんだりするので部位によっては8mmくらいあります)

反省点

1. メンテナンスがしにくい
MDBT40等のパーツがトッププレートとボトムプレートの間に実装されているせいで、メンテナンスするには一度すべてのスイッチを外す必要があります。一回MDBT40のピンが一箇所接触不良になったため、はんだをし直す必要がありましたが、分解→はんだ付け→組み立てに半日かかりました…次のバージョンでは対策を考えたい。

2.軽すぎてタイピング中に位置がずれやすい
プレートも基板と同じFR4(要するにGFRPです)でつくっているので、キーボードとしてはとても軽く持ち運びが楽ですが、その代わりよく滑る机の上でタイピングする際、キーボードが机の上を滑ってしまうことがたまにあります。持ち運びやすさとのトレードオフなので、ある程度は仕方ないです。

今後やりたいこと

Comet46が完成したころは、「自分にピッタリなキーボードができたし、当分はキーボードをつくらなくていいだろう」という甘い考えをしていましたが、部屋に着々と溜まっていく装着するキーボードがないキーキャップおよびスイッチの山を見るにつれ、新しいキーボードをつくりたい欲望がふつふつと湧いてきました。

とりあえず、次につくるキーボードでやりたいことを列挙してみるとこんな感じです。

BLEなキーボードをつくる

Mitosisを使っていてそこまで不満を感じることはないですが、たまにレシーバーなしでBluetoothでPCやスマホでつなぎたいと思うことがあります(特に外にSurfaceを持ち運ぶときはDocking Stationが使えないので、Comet46だとレシーバーを唯一のUSBポートに刺さないといけないのがつらいです)。Comet46を設計した頃はまだ公開されていませんでしたが、今はQMK+BLEに対応したsekigonさんのBLE Micro Proの素晴らしいファームウェアがあるので、BLE Micro Proや今後登場予定のModulo BT Pendant、あるいは単純にMDBT42あたりをベースにレシーバーが必要ないワイヤレスキーボードを設計するのがいいのかなと個人的には思っています。
(唯一心配なのは親機を担当する片割れの電池持ちですが*7、親機にはある程度大容量の充電池(単4二本とか?)を付けられるようにするか、状況に応じてレシーバーありなしを切り替えられるようにするのがいいのかなと勝手に妄想しています。*8 )

Dactyl Manuformをつくる

一般的なrow staggeredからortholinear、その次にcolumn staggeredと試したところどんどん快適にタイピングできるようになりました。そのような経緯もあり、さらに一歩踏み込んでDactylのような立体的なキー配置にしたらもっと快適にタイピングできるのではないかと気になっています。とりあえずclojureとopenscadをインストールして色々な形状のDactyl ManuformをCAD上で試していますが、平面のときと違ってそのキー配置が本当にいいのか実際に試すことが難しいので、どの配置が最適かとても悩んでいます。(3Dプリンタも持っておらず、本番はDMMさんにお願いしようと考えているので、お試しプリントも気軽にはできない…3Dプリンタ買いたい欲が…

アルミケースをつくる

Dactylとは真逆な方向性ですが、Discordに投稿されるai03さんの投稿やGeekhackの投稿に登場するEndgameなキーボードを見ているうちに、自分もアルミケースキーボードをつくってみたいなと思うようになりました。ただ、アルミケースに関しては設計する上で考えるべきことがかなり多く*9、また個人でアルミの切削加工・アルマイト加工を頼むにはどうすればいいかといった知識がまだほとんどないので、本気で取り組むとしてもかなり時間がかかりそうです*10。(妄想段階としては、最近購入したM0116からパーツをとって、ALPS軸の40%~50%くらいのアルミケースキーボードをつくりたいなと漠然に思っています。)

この記事はHelixとComet46で書きました。

*1:ReversebiasのMitosisをベースに設計されているキーボード。ChimeraとかCentromereとか。Mitosisそのものについては去年のカレンダーのntoofuさんの記事の説明がわかりやすいです。

*2:片割れのひとつを親機にするレシーバーいらずな方式もありますが、それも含めた話はこの記事の最後でします

*3:たまにキーを押しても反応しないことがあり、無線通信に失敗しているのか、PCの処理が間に合ってないかわからないことがあったので、現在の状態を表示するOLEDをレシーバーにつけました。結果、キーを押しても反応しないときは99%会社のPCが原因とわかりました。つらい

*4:小指キーは-0.5uにしたかったのですが、電池を入れるスペースがなくなるのと、見た目がイマイチだったので、断念しました。

*5:最近の新しい型のキーキャップ(MDAとかMT3とか)のOrthoセットに1.5uスペースが入るようになったのがせめてもの救いです。(海外含めCorne等が流行ったおかげですかね??)

*6:トッププレート1.6mm+トッププレート・基板間3.4mm+基板1.6mm+ボトムプレート1.0mm

*7:redditのsouthpawengineerさんによるとBLEキーボード(レシーバーなしの構成)だとMitosis系のキーボード(レシーバーありの構成)と比べて電池持ちは半分以下らしいです。

*8:そもそもCR2032で1ヶ月ほど(実際にBLEを試したことないので正確な数値ではないです)電池が持つなら問題ない?

*9:ai03さんが書いたプレートマウント方法の記事を見てプレートだけでもかなり奥が深いと思い知らされています

*10:幸い学生時代にInventorを使っていたおかげでFusion360がある程度使えるのでモデリングそのものは他ほど苦労しないはず、多分