1から自作キーボードを作ってみた

# 作ったもの
テンキーを作りました。
![DSC_0915.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/3d729545-0e7a-e4fc-508c-93eed7050502.jpeg)

# 自作キーボード

##きっかけ
最近TL上で自作キーボードが賑わっているので、自分でもつくってみたくなりました。
完全オリジナルは難易度が高いと思い、[Mint60](http://eucalyn.hatenadiary.jp/entry/about-mint60-01)という自作キーボードキットを注文したのですが、届く前に完全オリジナルの方が先に完成してしまいました。

私は普段ネットワークとサーバを触る仕事をしており、プログラミングは趣味程度のことしができません。
ましてや電子工作は、回路など自分で設計したことはなく、キットでのはんだ付け経験程度しかありませんでした。
また、設計に利用するCADについても今回初めてです。

「そんな人間でも一応動くキーボードができました」という内容です。
何かの参考・ヒントになれば幸いです。

# 完成までの道のり
## 何を作るか
テンキーを作ることにしました。
いきなりフルキーボード(100キー以上？)を作るのは流石にハードルが高く感じたからです。
テンキーならせいぜい20キー程度です。
また、サイズが小さいため、基板やアクリル板などで失敗しても、財布へのダメージを軽減できると考えていました。
（結果的に失敗しなかったのですが）

## まずは動くものを試作(ソフトウェアと回路の検討)
本当に何から初めて良いかわかりません。
とりあえず、Arduino microにUSBのHIDデバイス機能が載っているらしいという情報を入手しました。
少しサンプルコードをあさって見るとコード自体は非常に簡単そうでした。

回路やプログラムに関しては、[ゆかり](https://twitter.com/eucalyn_)さんの[ブログ](http://eucalyn.hatenadiary.jp/)と[本](https://eucalyn.booth.pm/items/789250)が非常に参考になりました。

手始めに秋葉原でarduino microを購入し、遊んでみることにしました。
最初はもちろんLチカからスタートして、タクトスイッチをつないでキー入力を受け付けられるようにしました。

Arduinoのキーボードのライブラリは非常に簡単に扱うことができ、入力するだけならたったこれだけです。
'A'を定期的に入力し続けるだけのコード

```c++
#include "Keyboard.h"

void setup()
{
    Keyboard.begin();
}

void loop()
{
    Keyboard.press('A');
    Keyboard.releaseAll();
    delay(1000);
}
```

基本はC/C++なのでプログラム自体はなんとかなりそうです。

ピンの数を節約できるキーマトリックスも特に問題なく動作しました。
こんな感じで2 x 2のキーマトリクスをブレッドボード上で作成して確認しました。
![DSC_0909.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/ca9f420e-e1ac-88b8-b0f8-ee8566a8588b.jpeg)

あとはピン数を増やしてくだけなので、この時点で「いける」という気分になってきました。

## 全体設計
やってません（ぇ
CAD触りながら何となく作りました。

そんな中でも決めていたのは以下
1. イメージは[こんな感じ](http://buffalo.jp/product/input/numeric/bstk10/)
2. arduinoは取り外しができるように(今後も再利用したい)
3. スイッチはMX互換スイッチ、固定は基板へのはんだ付けだけでなく、フロントプレートも作成する
4. 見た目にはこだわらず、構造がシンプルで組み立てが簡単なものにする

## スイッチとキーキャップの選定
キースイッチとして最も有名なのはcherryのMXスイッチです。
赤軸や青軸という言葉を聞いたことがあるのではないでしょうか？
それらはすべてこのMXスイッチのシリーズで、軸色によりストロークの重さや、クリック感などに違いがあります。

最近このMXスイッチの[特許が切れた](http://ascii.jp/elem/000/001/609/1609599/index-2.html)ようで、中国のメーカーなどから安価なクローン品？ジェネリック品？が販売されるようになりました。
探せば国内でも販売しているところがちらほら見つかります、
今回は[こちら](https://talpkeyboard.stores.jp/)で販売されていたgateronの黒軸を使用することにしました。

![DSC_0910.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/2116db2b-000c-a6fb-1355-6172d74116b6.jpeg)
![DSC_0911.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/1f333de7-fb57-f9a0-9baa-e7343452adc7.jpeg)

ちなみに黒軸はキーストロークが重たく、クリック感がないことが特徴です。

キーキャップについては後で自由に交換が可能なので、今回は上記のサイトで一緒に適当なものを購入しました。

## フロントプレートの設計と製造
スイッチを固定し、基板の実装面を保護するためにフロントプレートを作る必要があります。
固定に関しては基板へのはんだ付けだけでも問題なさそうですが、強度と安定性も考えて作ることにしました。
素材は加工しやすいアクリルが一般的なようです。

3D CADでこのようなプレートを設計しました。
![front.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/c382e642-ca41-9d5a-919d-1926cc5be721.jpeg)

CADのソフトウェアについては、[Autodesk Fusion 360](https://www.autodesk.co.jp/products/fusion-360/overview)を利用しました。
営利目的でない趣味での使用であれば無料で利用できます。

アクリル板の加工は、自分でやるか業者に依頼するかの二択ですが、
今回は試作品ということで、手軽にできるDMM.makeの3Dプリント(アクリル)で印刷しました。

こちらが届いたものになります。若干反っていますが、この下にプリント基板も取り付けるので許容範囲内です。

![front_3dprint.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/d9897095-be4a-2327-8a18-d1fa24004bc4.jpeg)
![front_key.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/52d09e8e-ba6f-23e7-de1e-42e89b806b0e.jpeg)

3Dプリント自体始めてでちゃんと出来上がるのか不安だったので、背面(はんだ面)を保護するバックプレートはひとまず後回しにしました。

余談ですが、アクリル板の加工を業者に依頼しようと思い、2D CADで設計していました。
ところが、[MXスイッチの寸法](https://www.jw-shop.com/P-keyboard-mswitch10/page45/detail.htm)を見ていると、板厚は1.4mmが最適なようで、そのようなアクリル板は探しても見つかりませんでした。
結果的に3D CADで設計し直して、DMMの3Dプリントを利用して、1.4mmとしました。(もちろん3Dプリントも誤差はあります)
1.5mmのアクリル版は[はざいや](https://www.hazaiya.co.jp/)さんで取扱があり、Adobe Illustratorで引き直した図面を渡して加工を依頼中です。
届いたらまた追記します。**[2018/9/24] ページ下部に追記しました**

事前調査が足りず、3回それぞれ違う形式で設計することになり、かなり時間をロスしました。
今回はいろいろな素材や製造方法を試すため、ということで納得することにしました。。

## PCB(プリント基板)の設計と製造
一番の敵、プリント基板。本当に何もわからない。。。
とりあえず調べてみたところ、PCB設計専用のソフトウェアがあることを初めて知りました。

いろいろなPCB CADがある中で、私は[Autodesk EAGLE](https://www.autodesk.co.jp/products/eagle/overview)を使用しました、
無償ライセンスでは基板の大きさに制限があるので、何となく使い方がわかってきたところでサブスクリプション契約をしました。
[KiCad](http://kicad-pcb.org/)など完全に無料なPCB CADソフトもあるので、お金払うのが嫌ならそれを利用するのも良いと思います。

私はFusion360と連携できることに魅力を感じたのでEAGLEを使用しました。
このような感じで、基板の3Dモデルと、先に設計したフロントプレートの3Dモデルとで組み合わせをシミュレーションできます。
![pcb_front.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/61b2b5ff-0d01-d1b2-17b0-2beadc149c25.jpeg)

EAGLEの使い方は調べれば結構出てきます。（バージョンによって、言葉が変わっていたりしますが）
私は[この動画](https://www.youtube.com/watch?v=vBQLyTUvvMQ)が一番参考になりました。

パーツのライブラリもいろいろな方が公開しているので、ほとんど自分で作成しなくても組みわせて回路が設計できます。
私はライブラリも自分で作ってみたかったので、arduino microとMXスイッチについてはライブラリも自作しました。
作ったライブラリはGitHubで公開しています。

[eagle-library](https://github.com/kamaboko123/eagle-library)

試作した2x2キーマトリクスの回路を拡張して、キー数を増やした回路を作りました。
![kairo.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/c90e96a3-37c7-11e0-3226-1aaaec7dc4a5.jpeg)

ダイオードは、EAGALEにデフォルトで収録されているライブラリを使用したので、実際に使うものとは異なります。
実際に使用したダイオードは[これ](http://akizukidenshi.com/catalog/g/gI-00941/)です。
定格以下であれば何でも大丈夫だと思います。

そして基板の大きさを決めて、パーツの配置を行います。
パーツを配置する際の寸法は、先に設計したフロントプレートに合わせるようにします。
デフォルトではグリッドが2.54mmなので、1mmにして作業するとやりやすいです。
（Ctrlを押しながら部品を移動するとグリッドにスナップしてくれます。）

デザインルール(穴径や配線の間隔の最小値や最大値などを定義したもの、業者によって変わる)を製造業者のHPから入手し、読み込ませます。
配線は自動配線機能があるので、それを使用しました。
場合によっては自動配線では接続しきれない場合があるようですが、今回は回路が簡単なので問題ありませんでした。

![pcb.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/876660b3-3992-7b7f-49b7-640b9cc3c64d.jpeg)

今回は[FusionPCB](https://www.fusionpcb.jp/)に注文することにしました。
ガーバーデータと呼ばれる形式で書き出して、zipに固めて業者に送るとPCBを製造してくれます。
このあたりの手順は先程の動画シリーズで解説されています。

実際に届いた基板がこちら。
![pcb_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/709fc764-bd0b-279e-a8d2-1415d653c34e.jpeg)

反省点が一つ。
デフォルトのライブラリに入っていたダイオード・抵抗を使ったところ、ランドが小さくはんだ付けが難しかったです。
このあたりはちゃんと確認して、必要であればライブラリを自作したほうが良いです。

## 組み立て
フロントプレートは注文から1週間、プリント基板は注文から1.5週間ほどで届きました。
その間に秋葉原で電子パーツなどを調達しておきました。
はんだ付けして、arduinoのソフトウェアを書いて動作確認して完成です！
![DSC_0915.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/3d729545-0e7a-e4fc-508c-93eed7050502.jpeg)

# 感想とか
ここまで約1ヶ月です。
初体験のことがたくさんあって戸惑いながらでしたが、とりあえず動くものができて嬉しいです。
初めてまともな電子工作をしたのですが、とても楽しかったのでまた何か作りたくなりました。
反省点も見つかったので、それらを活かして第二弾の制作に取り掛かりたいと思います。

ちなみにかかった金額はこのくらい。
- フロントプレート(3Dプリント) 3333円
- スイッチ・キーキャップ 2590円
- PCB(5枚) 5467円
- ダイオード(50本入) 100円
- スペーサー(4個) 120円
- ナット(500個入) 500円
- ピンソケット 300円
- 抵抗 0円 (自宅にあったものを使用)
- Arduino micro 2800円
- EAGLE サブスクリプション(1ヶ月) 2000円
合計: 15410円

1.5mm厚のアクリル板も注文しており、これは+4000円(フロントプレート・バックプレート)くらいなります。
3Dプリントの場合、フロントプレートだけで3333円なので、少しお安くなりそうです。
（今後、レーザーカッターでの自作も試してみるつもりです。）

# 追記
## フロントプレートのアクリル化(2018/9/24)
この記事を執筆中に業者に注文していたアクリルプレートが届きました。
今回はフロントプレートだけでなく、背面保護のためのバックプレートも注文しました。
![hazaiya_plate.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/665b9745-e172-1f0d-c68b-c20514f696fe.jpeg)

届いたプレートを使用して組み立てたのがこちら。
透明になってすこしかっこよくなった気がします、LEDとかつけてみたくなりますね。（そういえばNUM LOCKの表示忘れてたことに気づいた）
![new.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/e93bfb82-e102-8c60-e3d3-9760ac72ab19.jpeg)
![DSC_0923.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/5456980e-6fde-39a9-d898-f863844d0630.jpeg)

2台を並べてみる。
新しい方はバックプレート+スペース分、厚みが増しています。(+約6.5mm)
![DSC_0926.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/d9c864a5-8e0c-a630-63ed-9c84770792d0.jpeg)

![DSC_0929.JPG](https://qiita-image-store.s3.amazonaws.com/0/218316/ad928320-97eb-6656-0aef-0457b188ddb4.jpeg)

このアクリルプレートは、2セット注文して、8,216円（1セットあたり4,108円)でした。

今回依頼したのは、[はざいや](https://www.hazaiya.co.jp/)さんです。
見積もり依頼を出して、2週間程度で到着しました。
見積もりをもらって3-4日間くらい、私が忙しくて止めていたので、通常は1週間～1.5週間程度なのだろうと思います。
こんな感じの図面と、Aiファイルを添付して見積もり依頼をしました。
![DlgFn16UUAE4AyX.jpg](https://qiita-image-store.s3.amazonaws.com/0/218316/d52676f6-56cd-34d9-9742-092b7eaf9888.jpeg)

アクリル板に関しては、自作キーボード関連の情報がなくて戸惑いました。
これからキーボードを自作する方へ...

- MXスイッチの場合、板厚は1.5mmで問題ありません
- やりたい加工が業者の価格表に載ってなくても、とりあえず図面書いて業者に送ってみましょう
- DMM.make AKIBAなどでレーザーカッターを借りて、自分でカットする方法もあります