キーボード作りました

DIYキーボード完成品
DIYキーボード完成品

こんな感じの物を作りました。

今まで使っていたキーボードはFILCOのMajestouch テンキーレス(FKBN87M/EB)という物で恐らく10年ぐらい使っていました。まだまだ使えそうですが、ホームポジションとトラックボール間が遠く左寄りになってしまう事やカチャカチャと言う打鍵音等それなりに不満も募ってきたのでそろそろ頃合いかなと。

色々調べてみるとコンパクトキーボードはDIYが多く、キットや各パーツも手に入りやすくオープンソースのファームウェアもあったりと手軽になりつつある印象。特にキー配列を自由に作れキースイッチも気に入った物を使えるとあればやるしかないですよね。

ベースはどうしよう?

コンパクトキーボードのDIYでよく見る作例は60%でこれが主流のようです。

ファイラーやエクスプローラーの操作を考えるとキーボード端にアローキーとPageUp PageDownが無いと不安です。かと言って3列も右に追加するとテンキーレスとほぼ同じなわけで、1列追加が精々だろうと探して見つけたのがTada68と言うキーボード。コントローラーがAVR ATmega32U4でオープンソースのファームウェアであるQMKが使えます。価格もそれほど高くなく入手も容易である事からこれに決めました。

KBDfans Tada68
KBDfans Tada68

KBDfans TADA68 MECHANICAL KEYBOARD

Cherry MXか中華スイッチか

現在メカニカルキーボードで主流なキースイッチはドイツCherry社のCherry MXとそのパクリの中華スイッチといった感じです。アルプス電気はもうキースイッチを作ってません。アルプス電気はもう…

Cherry MXは軸の色によって特性が違い中華スイッチもそれに倣っています。またキーキャップもCherry MX(と中華スイッチ)用の物が多いのでこの中から選択するのが無難です。中華スイッチで採用例が多いのは本家よりも安い*1GateronとKailhでどちらも悪くないようです。

他の中華スイッチも調べていてOutemuと言うメーカーかブランドか商品名かわかりません*2が、そのスイッチの押下圧62gのタクタイルが気になり候補に入れました。現在使用中のMajestouchがCherry MXの茶軸(押下圧50gのタクタイル)で、もう少し重くても良いかなと思っていたので。キーをそれほど速く打てないので高速性より感触重視です。

候補としてはOutemu 62gかCherry MX クリア軸(押下圧55gのタクタイル)が有力で、この機会にその他のスイッチも一通り試してみたくなりCherry MXが9種類試せるテスターとOutemu 62gをサンプルとして2個注文しました。

キースイッチを試してみた

注文したサンプルとテスターが届いたので感想です。

青軸 50g (60g Peak Force)

  • 引っかかりの強いクリック感と大きめのクリック音。
  • 引っかかるので勢い余って底打ちしやすく、キーの戻りもワンテンポ遅れる。
  • 単に不良品?

白軸 55g (80g Peak Force)

  • やや重め。
  • クリック感は弱く小さめのクリック音。

緑軸 80g (105g Peak Force)

  • 重い。
  • クリック感はしっかりしていて大きめのクリック音。

茶軸 45g (55g Peak Force)

  • 軽い。
  • タクタイル感は弱めで音も小さい。

クリア軸 55g (95g Peak Force)

  • やや重め。
  • タクタイル感は茶軸より強く音も茶軸よりやや大きい。

灰軸タクタイル 80g

  • かなり重い。
  • タクタイル感は茶軸とクリア軸の間。
  • 音はクリア軸よりも大きくばねの音らしき金属音もする。

赤軸 45g

  • 軽い。
  • やや摩擦音があり指でもざらつきを感じ取れる。

黒軸 60g

  • 軽からず重からず。
  • 摩擦音も小さく静かで動作も滑らか。

灰軸リニア 80g

  • 重い。
  • 摩擦音が大きくざらついた感じがはっきり指に伝わる。

Outemu 62g

  • クリア軸より茶軸寄りの重さ。
  • タクタイル感は茶軸よりやや強めでこちらも茶軸に近い。
  • 若干の金属音がする。

音に関してはなるべくスイッチ単体の音に注目して書いています。加えてスイッチの戻り時にも音が出ます。カチャカチャと所謂煩いキーボードの音は軽いスイッチの方が出やすいです。弱いばねの方が軸がグラつきやすいと推測できます。

タクタイル音は打鍵音に消されてしまいますがタクタイルの引っかかりでキーが音を立てます。金属音はあまり気にならないと思いますが灰軸リニアの摩擦音に至っては実用上も気になる大きさです。

青軸と緑軸はクリック音が大きすぎ灰軸は重すぎるため、実用的なのは白軸・茶軸・クリア軸・赤軸・黒軸・Outemuぐらいでしょうか。そこから更に音の気になる白軸と軽めの茶軸と赤軸を除外。リニアの黒軸も良さそうだけど、こればっかりは実際にキーボードにして入力してみないとと言う感じで決め手に欠け除外。

クリア軸とOutemuで考えるとクリア軸の重さは疲れそうで気になります。ピークの重さが結構影響してますね。一方のOutemuも音に若干の不安はあるものの感触は悪くないためこれを使う事にします。

Cherry MX テスター
Cherry MX テスター

キーキャップを探す

キーキャップの素材は主にPBTかABSの2種類です。耐久性のあるPBTか二色成型や多彩な色のABSとで分かれます。Majestouchがカチャカチャ煩かったのはABSのせいなのかもと思うとABSは選びにくいです。いくつか表面がテカテカになっていたりと耐久性もあんまりですし。

Tada68を扱っているKBDfansでもキーキャップを扱っているものの選択肢が少ないのでAliExpressで探します。ここで問題になるのはキーキャップのセットだとフルサイズやテンキーレスが主流で、コンパクトキーボードで使う通常とは違ったサイズのキーキャップが入っていなかったりする事です。また、段によって厚みや表面の角度が違ったりする物だと段を変えての使用が難しくなります。キーキャップの形にはいくつか種類がありますが段による違いのない物はDSAぐらい*3でしょうか。

今回は色々ある中からYMDK Dolch 96を選びました。DSAじゃなくてOEM profileとなっていますが概ね同じ配列なので大丈夫なのかなと。最下段の1uのAlt Fn Ctrlがありアローキーの位置も同じですし。KBDfansにも同じデザインでDSAのキーキャップがありますが、組み合わせが帯に短し襷に長しで値段もちょっと高めなのでパスしました。

パーツの注文

パーツ 購入先 価格
Outemu 62g Tactile Switch 80pcs AliExpress*4 $21.31
YMDK Dolch 96 Keycap set AliExpress*5 $22.95
Tada68 pcb PLATE+STABILIZER PLASTIC CASE KBDfans*6 $55.00
Cherry Mx Switch Clear 10pcs KBDfans*7 $6.80
Gateron switch 3pin red 20pcs KBDfans*8 $4.00

以上のパーツを注文しました。

表記価格は送料込みです。円にすると合計12,000円強ですね。キーボード単体でこの値段だと高価な部類でしょうがDIYとしては安上がりな方です。

Outemu以外のスイッチを購入したのは一部で違うスイッチを使うためです。スペースバーはより重いクリア軸、小指で押すモディファイアキーは赤軸と言った具合です。Outemuは予備も含めて多めに注文しました。他はセットなので1セットでこれだけ入ってます。

ファームウェアの準備

各パーツが届く前にファームウェアを作成しておきます。作って直ぐに試したいですからね。

ビルドの環境構築

まずはファームウェアであるQMKをビルドできる環境構築からです。Windows10を使っているのでWSLでUbuntuを利用しその中に構築します。

標準的なC/C++開発用パッケージのbuild-essential、AVRの開発用パッケージのgcc-avr binutils-avr avr-libc avrdudeをインストールします。

sudo apt-get install build-essential
sudo apt-get install gcc-avr
sudo apt-get install binutils-avr
sudo apt-get install avr-libc
sudo apt-get install avrdude

うっかりさんなのでsuじゃなくてsudoを使う。とにかくこれでQMKをビルドできるようになります。

ビルドしてみる

QMKを適当な作業ディレクトリに展開し、そのディレクトリに移動してmake tada68:default*9とすればQMKに入っているソースからTada68用のファームウェアがビルドされます。tada68_default.hexというファイルが生成されますが、これはTada68では使えません。hexファイルではなくbinファイルが必要になりますが、その事については後述します。

ビルドの確認が済んだので自分用のキー配列を作ります。

キー配列を作る

./keyboards/tada68/keymaps/defaultディレクトリを別名コピーして、その中のkeymap.cを編集します。私はktnと言うディレクトリにしました。tada68/keymaps下に作ります。

[_BL] = KEYMAP_ANSI(...と[_FL] = KEYMAP_ANSI(...の中身を編集するだけなので簡単です。使えるキーコードはQMK Keycordes Overviewに一覧表があります。

defaultからktnに変更になったのでビルドコマンドはmake tada68:ktnです。

Tada68にはビルドで生成されるhexファイルではなくてbinファイルが必要になるのは前述の通りです。そこでbinファイルの作り方ですが、avr-objcopyと言うコマンドでビルド時の中間ファイルから生成できます。

avr-objcopy -O binary .build/tada68_ktn.elf flash.bin

これでflash.binが生成されファームウェアの準備が完了しました。

組み立て

全て揃ったパーツ
全て揃ったパーツ

材料が全てそろったので組み立てに入ります。KBDfansから注文した物だけがやけに時間がかかりました。国内に入ってから8日ぐらいでしょうか。運悪く通関に時間がかかってしまったようです。まあこの運悪くが割とあるようではありますが。

Tada68は箔押しされた結構豪華な箱に入っています。普通の段ボールで良いから安くして…

スイッチのプレートへの取り付け

基板を見るとmini USBコネクタの取付部分のはんだが盛り上がっていてスイッチに干渉します。なのでコネクタの左右に取り付ける二つのスイッチの端を切り落とす必要があります。プレートに取付ける前に処理しておいたほうが楽です。

プレートへの取り付けはただ嵌め込んでいくだけなので簡単ですが、その前にピンの折れとスイッチの不良*11を確認しておいた方が作業がスムーズです。都度チェックするのは面倒なのである程度束で取ってまとめてチェックしてからが良いでしょう。幸い不良はありませんでしたがピン折れは多発しています。

Outemu Gateron Cherry MXと3種類取り付けて分かったんですが、Outemuはかなりギチギチで場所によっては嵌めるのに苦労します。GateronとCherry MXはゆとりがあるため簡単に嵌ります。こっちはこっちで少し心許ない装着感ではありますが。

一通り嵌め終えたら裏返してピンの最終確認です。後で分かるんですがこの時確認漏れがありました。また、作業手順にも重大なミスがありました。

スイッチ全装着
スイッチ全装着

プレートと基板の合体

スイッチ装着済みのプレートを基板と合わせるんですが、一気に全体を合わせるのではなく片側から徐々に押し込んでいけば各ホールにピンやスイッチ底の出べそがはまっていきます。ピンがしっかり出ているか確認します。*12

全体がはまったらスイッチが浮かないように基板とプレートをクリップ等で挟み固定してはんだ付けをします。はんだ付け自体は1箇所を除けば難しくないと思います。1箇所Enterなんですが大穴の端にはんだ付けするみたいな状態になっていてちょっと気を使います。

基板とプレートをクリップ等で挟み固定
基板とプレートをクリップ等で挟み固定

事前の確認を怠るとはんだを付けようと思ったらピンが出ていなかったりします。その場合はスイッチ単体を表から引き抜く事で修正可能です。爪があるのでそれを挟みこんで引き抜けます。

はんだ付けを終えたらスイッチの動作確認をします。KeyboardTester.comで各スイッチが機能するか試しました。ここで異常が無ければ次のステップです。

スイッチ単体を表から引き抜く
スイッチ単体を表から引き抜く

そう言えばスタビライザーは?

ケースへの取付けなんですが、ここでふとスタビライザーはどのタイミングで取付けるんだろうと。ケース取り付け前か後か。取り付け前の方が作業はしやすそうです。

スタビライザーを見るとパーツが分割されているので組み立てないといけません。KBDfansの画像を見ながら組み立てたところで、これ、どうやって付けるんだろう?

スタビライザーのパーツ
スタビライザーのパーツ
スタビライザー完全体
スタビライザー完全体

スタビライザーと言えばキーキャップを外すと見えるプレートの表側に付いている物と言う印象でしたが、どうもこれはプレートの裏側、つまりはんだ付け前にプレートに装着してないとダメなわけで…はんだ付けは完了しているわけで…

Cherry MXのスタビライザーは以下の3種類のようです。

  • 基板に取り付けるタイプ
  • プレート表側に取り付けるタイプ
  • プレートに取り付けるがバーはプレート裏になるタイプ

今回のは3番目ですね。Majestouchのスタビライザーはプレート表側だそうでキーキャップを外してみると確かにその通り。いや、これ移植できるんじゃない?って思ったものの無理でした。

Majestouchのスタビライザー
Majestouchのスタビライザー

ここで、そもそもスタビライザーが必要なのかと。試しにバーを装着せず土台のみ取り付けてスペースバーを押し下げてみると確かに傾きます。しかしタクタイル感はありスイッチ自体は機能している模様。しかもスイッチの動きもスムーズです。無くてもいけるんじゃない?

こまけぇこたあいいんだよ!!

取り合えず無かった事にして組み立てた基板をケースに取り付けます。ケース取付ネジが非常に小さいので紛失に注意。6個必要なところ8個入っているので安心ですが。

キーキャップを嵌める

キーキャップはただ押し込むだけなので簡単に嵌ります。今回購入したキーキャップはしっかりした作りで、厚みは1.5㎜あります。一方のMajestouchは1㎜と薄型軽量です。こういった違いが打鍵音に影響するようです。Majestouchのキーキャップは何かとカチャカチャ音を立てます。

このキーキャップはOEM profileなので段ごとに角度が違います。なので組みあがってみると微妙に出っ張ているキーが。端っこですし邪魔になるようなら別のキーキャップに換えれば良いだけですが…

微妙に出っ張ているキー
微妙に出っ張ているキー

これで組み立ては完了です…ってゴム足も付けましょうね。こちらも予備として2個多めに入っています。

いよいよ完成

これで準備しておいたファームウェアflash.binを書き込めば完成です。

USBケーブルをつないだ状態でケース裏側からアクセスできる基板上のスイッチを押します。Windowsに記憶デバイスとして認識されるのでドライブを開くとFLASH.BINが存在します。このファイルを削除してから準備しておいたflash.binをコピー。「安全に取り外す」実行後一旦USBケーブルを外してから再接続。KeyboardTester.com等で異常が無ければ使用可能です。

使ってみて

一通り使ってみた感じいくつか問題点が浮上してきました。

キー配列

  • PageDownしようとしてPageUpを押してしまう。→直上は相当意識しないと押せない。1段上の方が自然かも。
  • ↑を押そうとしてEnter誤爆。元々アローキーは隣接キーが無いため意識するようにしないと。
  • JISキーが機能しない。WindowsだとUSキーボードの場合はそういう仕様らしい。

キーキャップ

  • →直上が出っ張ってると結構邪魔。

感触

  • スペースバーの左側を押しても反応しないことがある。スタビライザー…
  • 左Shiftが眠たい。赤軸に対してキーキャップ自体の荷重が大きすぎるのかも。スタビライザー…
  • 左Ctrlも若干眠たい。同じ赤軸、同じ大きさの右Shiftは問題なし。スイッチかキーキャップの個体差だろうけど、そもそも赤軸に対してギリギリのキー荷重なのかも。
  • Backspaceが渋い。Outemuは軸に遊びが少ないと思われる。スタビライザー…
  • Enterもかなり渋い。スタビライザー…

修正

キー配列はPageUp PageDownを一段上げ→直上にFnを配置し、それぞれFunction LayerでHome Endを割り当てていたのでそちらも変更します。JISキーは排除して変換をF13に無変換をF14に変更したうえでIMEのOn/Offキーをそれぞれに割り当てました。DeleteはBackspaceのFunction Layerに移動になりました。

→直上は邪魔にならない別のキーキャップにしました。

一部赤軸のキーが眠たいのは保留しておき、まずスタビライザーの問題を解決します。

改めて考えれば何のことはない。スタビライザーが必要なスイッチを取り外し、組み上げたスタビライザーをプレート裏に滑り込ませるように設置するだけです。プレートを見てもそう言った取り付け方を想定しているようです。

スイッチの取り外しははんだを除去しプレート表側からスイッチの爪を挟みながらひっぱり上げるだけなのですが、これが意外に大変です。と言うのもスルーホールが大きいため結構な量のはんだが入り込んでいて、完全な除去が難しいので多少力業*13も必要になります。

また、Outemuのスイッチはプレートに対してギチギチなので単純に取り外しにくいです。破損覚悟で…と言うか現実に破損させて除去しました。予備なら大量にあります。

スイッチを取り外した状態
スイッチを取り外した状態

スイッチさえ外してしまえば後はスタビライザーを取り付けてスイッチを付け直して組み上げるだけです。

スタビライザーの取り付け
スタビライザーの取り付け

これで今度こそ本当に完成です。スペースバーも傾きません。最終的なkeymap.cは以下のようになりました。

最後に

まだ配列に慣れない部分はありますが、感触等概ね良好です。全体のOutemuは程よいタクタイル感とキーキャップの影響でカタカタと小気味よい音がします。Cherry MX クリア軸のスペースバーも程良い重さです。スタビライザーが無い方が感触は良いですが背に腹は代えられません。Gateron 赤軸も滑らか*14で想定した通りの軽さです。赤軸に大きめのキーの眠たさも慣れつつあります。

キースイッチ

スイッチは今回Outemuを中心に使いましたが、少し扱いにくいスイッチだと思います。Cherry MX等と違いプレートに対して余裕が無いので交換しにくく、軸も遊びが少ないためスタビライザーの無い1.75uのキーだと動きが渋いと思います。

スタビライザー

スイッチを正しく作動させるための必要性が実感できました。また赤軸のような軽いスイッチに大きめのキーキャップを付けるのにも必須です。これが無いとキーの感触がかなりもっさり眠たい感じになります。

プレート

今回ステンレスプレートを使いましたが金属音がすると言った事はありません。強度的には厚手のステンレスなので申し分ないです。特にスイッチの取り外しにこじったりする場合気が楽です。その場合アルミだとちょっと不安です。

使うスイッチがGateronやCherry MXならプラスチックで十分だと思います。PCBプレートなんてのも存在するようですし。

ケース

今回プラスチックを使いましたが、第一に価格的なメリットが大きいです。他はアルミしかなく高価でしたので。

強度はプラスチックで十分ですし、金属だとそれなりに反響するようです。

付属のゴム足は薄くて硬めなので、何かしらのマットを敷く場合は音に対しては殆ど機能しないと思います。

全体として

自画自賛になりますが良く出来たキーボードだと思います。市販品だとここまで満足度の高い物は無いと思います。自分で作ってみたのは失敗も含めて良い経験になりました。

完成したTada68とトラックボール
完成したTada68とトラックボール