手を動かさなきゃ何も語れないというのがこの世界です(どの世界?)。
というわけで自分でも作ってみるかと重い腰を上げました。
ただし、回路図引くのも久々ですし、自作基板なんてのはエッチングしていた時代にオーディオ帯域でちょっとかじった程度。AVR工作はそれなりにやってましたし、ブレッドボードでも動いちゃうたぐいのものなので、ノイズに敏感なオーディオに比べればあまり神経質にならずに済むわけですが、とはいえいきなり大物は怖いし、失敗したときのショックもでかそうなので、とりあえず最小コストでいける範囲にしました。いまは自分でエッチングなんてしなくても(エッチングよりもドリルが面倒なんですけど)、激安基板屋さんがきれいなのを作ってくれるので、そのお試しも兼ねてます。
基板作成ソフトはKiCadです。昔はEagleの無料の範囲でやってましたが、KiCadならデカイ基板でも無料です。
基板設計
さて、中国の基板屋さんの価格表を見ると、いずこも10cm角以内とそれ以上ではかなり価格に開きがあります。なので10cm以内に決定。
その範囲内で最大級のキー数を詰め込むと自ずとサイズは決まってきます。5X5です。
最初なのであまり欲張らずに、仕様を決めました。
- 最大25キー。
- テンキーパッドとして使える。
- ヘックス(16進)パッドとしても使える。
- 普通のテンキーのように2uの「0」、2uの「Enter」、2uの「+」も使える。
- PCBマウントのスタビ装着可。
- Pro Micro使用。でも、Micro USBがもげるのはいやなので、基板上にmini USB端子を設ける。
- 上部の両端のみLED搭載可(ナムロック用)。
- 未使用端子などを引き出し可能にする。
ネーミングは安直にアタック25にしようとシルクに載せました。

10日程度で手元にやってきました。
色は黄色にしてみたんですが、ちょっとオレンジっぽいですね。強制的に白だったシルクが、ちょっと見づらいです。
ベタアースが抜けてますが、これは設計からそうです。というか、この程度でベタアースの有効性はほぼ感じられないかと。ハンドワイヤリングでも動くものですから。
パターンは目視では大丈夫そう。
大丈夫……
ATACK25
……
……
ん??
……
…
おかしい。これは……。Tが足りない……(汗)。
印刷されて初めて気づくのが誤植です。
もうこうなったら開き直るしかありません。
というわけでこれはATACK25になりました。
ダイオードはSMDの大きめのサイズ(3216)です。スルーホールは足を切るのが面倒なので。
Pro Micro用のピンヘッダは秋月のロープロファイルピンヘッダ 7.7mmを使ってみました。短い方をATACK25基板に挿すと、スイッチ取り付け側にほんの少しだけ飛び出す格好になります。Pro Microにメスをはんだ付けして、取り外し可能にしました。
ファームウェアはQMKです。
config.hで設定すべきところは、このあたり。
#define MATRIX_ROWS 5
#define MATRIX_COLS 5
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
#define MATRIX_COL_PINS { F5, F4, F6, B5, B4 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION ROW2COL
あとは適当なレイアウトでビルドして書き込みです。
スイッチ未装着の状態でピンセットでテストした限りでは問題なく入力できました。
今日のはまりポイントは、USBでした。ProMicroに直接繋げば動くのですが、いったん基板上のmini USBを通すと32u4がPCから認識されないのです。
基板上ではmini USBで受けたうち、GNDとVBUSをそれぞれPro MicroのGNDとVCCに接続し、残るD+とD-のみをMicro USBに引き出して接続する形にしてあります。なぜなら、5V版のPro Microの回路図を見ると、VCCの端子とUVCC/VBUSはショートしていたからです。
ところが、32u4が認識されないとなると、手元のPro Micro(互換)のVCCとVBUSがつながっていない可能性が高いだろう、ということでジャンパーしてやるとやはり動きました。回路的にはこれでOKのはずです。
ケース設計
基板むき出しというわけにはいきませんので、次にケースづくりに取り掛かります。自作ケースはアクリルのサンドイッチが一般的かと思いますが、今回はサイズも小さめなので、3Dプリンタでの出力で行きます。
まずはCADで図面を引くことになるのですが、どうやら以前使っていたフリーのCADはサービスが終了したとかで、いまはFusion360を使うのが流行りのようなので、それに乗り換えることにします。
Fusion360は有償ソフトです。ただし、個人利用や商用でも小規模であれば無料というなんとも太っ腹なライセンス形態なので、ありがたく無料で使わせていただきます。これはCAD全般に言えることですが、操作方法や流儀に癖があって、慣れるまではかなり四苦八苦しました。というかチュートリアルも見ずに適当に遊んでみてもなんだかわかりません。本当はきちんと基礎から学ぶべきでしょうが、ともかく目的の形を作ることができればそれでよし!ということで、わからないところだけ検索してしのぎます。
最初に作ったケースは、単純な直方体から付け足すことで変形させていったため、後に造形してみるとその付け足しがどうにも別部品のように造形されてしまい、結局、デザインはほとんど変わらないものを作り直すことになりました。
レンダリング画像はこんな感じになりました。

妙な位置に柱が立っていますが、これは基板設計上の制約からです。2uキーのスタビライザー用穴を複数箇所用意したためとか、理由はあることはありますが、基板設計の最後になって取り付け穴を開けたために、空いていた場所がたまたまこのあたりだったというだけで。ちなみにこれらの4本の柱にはM3のローレットナットをはめてネジ止め可能にします。
また、基板面積をケチったためにPro Micro用の場所を別途確保していないため、スイッチの下部に取り付けることになります。これにより、どうしても厚みが出てしまいますので、手前側を薄く、奥を厚くなるように傾斜を付けています。ちょうどよくある60%キーボードの傾斜に合わせてあります。
3Dプリンタに泣かされる
うちにある3Dプリンタは結構前にkickstarterへのバックアップで入手したRigidbotという機種(キット)になります。当時は、10インチ四方のビルドボリュームを持つ手頃な価格帯のキットとして話題になりましたが、実際に届いてみると、部品にケチったところがあってなかなか満足のいく造形が得られません。しばらく遊んだ後に何年も放置していました。
で、今回これを復活させたわけですが、使いこなしなどをすっかり忘れていたことに加えて、調整不足もあってかなり苦戦しました(いまでもしていますが)。
しかもこれまでのブランクを埋めようとネットの情報を漁っているうちに、オートベッドレベリングを試したくなってセンサーを購入。これに伴ってファームウェアのMarlinのバージョンアップを行ったところ、Rigidbotへは対応しているものの、純正のLCDパネルの操作ボタンをきちんとハンドルしていないようで、操作性が著しく悪くなりました(元のRigidbot用ファームはメーカーが改変したものでしたが、本家Marlinに取り込まれておらず、しかもメーカーは撤退済みなのです)。
ということで、今度はファームの改変を行うことになりました。
しかしまあ、Marlinは開発が進んでいて以前のものからかなり書き換わってます。具体的に言いますと、Marlinの操作は基本的にロータリーエンコーダーで行うということになったらしく、各種設定の調整箇所がロータリーエンコーダーありきで書かれているのです。
さらに様々な機種、様々な条件下でビルドされることを考慮してifdef満載、マクロ満載で読みにくくて辛い。
それでもなんとか無い知恵を絞って最低限の対応ができたところでようやくプリント再開。
と、今度はABSの反り返り問題に悩まされます。ABSは温度低下時に収縮が激しい素材なので、プリントしていく間にも、ヒートベッドから遠くなった上層部がどんどん縮もうとします。その結果、今回のような箱型の造形では、ベッドに張り付いていた下部が箱の内側に向かって引っ張られ、4隅から徐々にめくれていってしまうのです。
反り返りの防止には、ブリムやラフトなどの補助となる造形部を足す方法や、スティックノリなどをベッドに塗る方法があるのですが、どちらもなかなかうまくいきません。
さらに、追い込んでいくと根本的な問題も発見しました。
いくらオートレベリングでノズルの高さを調整できたとしても、ベッドそのものに歪みや凸凹があると、造形した底面が歪んでしまうわけです。今回のように底面が水平であることが求められる造形の場合は、フラットなベッドであることがそもそもの前提条件なのです。その上でのオートレベリングなら意味があるのですが、Rigidbotのベッドはプレスのアルミなので、高低差が結構あるのです。
というわけで、高精度を謳う削りだしのアルミを使ったアップグレードパーツを注文したところです。
さらにいまはPETGがいいらしいという噂もあるので、PETGのフィラメントも数種類発注。
もとはケチった基板発注に始まったキーボード制作なんですが、なんだか出費がすごいです。
とりあえず現状
ケースにはまだまだ納得いっていないですが、とりあえず現状の写真を掲載しておきます。
初期版ケースと基板(Zealスイッチ)。PCBマウントなのでプレートはなしです。
下の写真は、以前にdiscordで晒したヘックスパッドと、レトロなカラーリングがたまらない1976SAのテンキー&アローパッドです。
2uは写真のエンターキーの位置2箇所のほか、その右側2箇所に加えて、「0」と「.」の横位置にも搭載可能です。もちろん、すべて1uで25キーにもできます。
「自作キーボードATACK25」に2件のコメントがあります
Maker Faire Tokyo 2018出展 – techsp
(2018-08-04 - 12:10 PM)[…] 自作キーボードATACK25 […]
キーキャップGBをオーガナイズするまで | 25KEYS
(2019-12-12 - 9:37 AM)[…] まだルブなんてまったく頭になく、スイッチプレートの意味もわからなかったのでプレートレスでそのままPCBにはんだ付け。後になってみればひどい音だし打鍵感もよくなかったが、TKLよりも少ないキー数のキーボードがやけにかわいく見えて、しかも立派にタイプできる(とはいっても60%なので当たり前だがこのときにはまだ50%以下が見えてない)ことにすっかり気をよくした自分は、次のキーキャップ、次のキーボードを求めてずぶずぶと沼の中にはまっていったのである。写真右側のAtack25は後にこのケースに合わせて設計したパッドで、ATTACK25の原型。スペルミスなのは以前にも触れた通りそれでいいのだ。 […]