キーボードを自作してます(1)

ひょんな事から自作キーボードの世界を知り、自分も作りたくなってしまいました。しばらくはキーボードネタが続くかもしれません。


作りたいもの

“左右分割型でキー全てにフルカラーLEDを搭載したもの”
これを基本として検討を始めました。

構成部品

キースイッチはALPSというイメージがありましたが、調べてみると、Cherry MXもしくはその互換スイッチが自作ではよく使われるようです。
軸の色によってクリック感や押下圧の違いが分かるようになっています。個人的にはカチャカチャと音のする青軸が好みです。

フルカラーLEDを使いたいのでCherry MX RGBを使うことにしました。


Cherry MX RGBはSMDタイプのフルカラーLEDを使用しますが、穴が小さいので使用できるLEDが限定されます。秋月で購入できる一番小さいサイズのものが入りそうでした。

LEDドライバはNXP社のPCA9956Bを使うことにしました。
これはI2Cで扱える24chのドライバになります。ポート毎に電流コントロールが出来るので使い勝手が良さそうでした。

マイコンはAtmel社のAtmega32u4を乗せたPro Micro等のマイコンボードが使われることが多いようです。
ファームウェアはオープンソースの既存の物をつかうか自作することになります。

マイコンは左手側に乗せて、右手側にはI/OエクスパンダのMCP32017を使っています。こちらもI2Cを使ったものになりますので、左右の接続には電源&GNDとI2Cバスの計4本の線を繋げれば良いことになります。こちらもよく使われているTRRSを使用することにしました。

レイアウト

自作キーボードで一番こだわりが出るのはレイアウトになるかと思います。押したキーがどのキーに対応するか決めるキーマップは後からでも変えられますが、物理的なものはどうしようもありません。
いくつか考えて3Dプリンタで出力してみました。


格子配列にするか指の形に合わせて位置をずらしたものにするか、また親指キーの数と位置を検討しました。
最終的に6×4プラス親指2キーの格子配列としました。

下の画像はイメージCGと3Dプリンタによるモックです。

PCB設計

レイアウトは左右同形状になりますので、うまく作れば1種類で左右に使えるのでは無いかと思いました。これはうまいこと考えたと思いましたが、割とよくあるみたいです…

キーマトリックスは入力端子のプルアップを使用したアクティブローになります。そのためダイオードは入力から出力に向けます。ですが、完全に勘違いしていまい逆にしてしまいました…

2017.6.30 追記

Twitterで、ダイオードの向きの間違いは、読み込む方向を変えれば良いのでは無いかという指摘をいただきました。

全くその通りで、それで対応可能です。

つまり 、行(ROWn)を出力にして列(COLn)で読み込むという形から、列(COLn)を出力にして行(ROWn)で読み込むという形に変更すればOKです。

で、それの何が良くなかったかというと、LEDのダイナミック点灯の行選択とスキャンの行選択を同時にしたいという理由もありますが、問題としてはスキャン時間が多少長くなってしまうのです。

MCP23017はAとBの2ポートあり、A0 – A5 を COL0 – COL5 に、A6 A7 B0 B1 B2 を ROW0 – ROW4 にしています。

行と列を入れ替えることで、キー入力を読み込むときにAポートのみを読めばよかったものが、AとBを読まなければならなくなってしまいます。

また、行より列の方が1列多いのでスキャン回数が増えてしまいます。

I2Cの通信は結構遅いので、LEDのダイナミック点灯のチラツキを抑えたいのと、デバウンスのための読み込み回数を確保したいという理由によりなるべく通信コストを抑える必要があったのです。

説明不足で失礼しました。

なので下の回路図は信用しないように…

途中を省きますが、発注、実装、プログラムを経てこのようになりました。
ファームはArduinoを使った自作になります。


使ってみて

しばらく使ってみましたが、親指のキーは2つもいらないなという結論に至りました。位置もあまり良くなかったのもありますが、一つしか使いませんでした。

また、ダイナミック点灯なこともあり、LEDが思ったより暗くてキースイッチがほとんど光りませんでした。同条件であればスルーホールタイプの方が明るくて良さそうです。(これはLEDドライバの電流リファレンス抵抗サイズを間違えたからというのを後で気がつきましたが…)

試作2号はこの辺りを改善したものにします。

投稿者:

ないん

30半ば過ぎで突然電子工作にはまりました。

「キーボードを自作してます(1)」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です