この記事は rogy Advent Calendar 2019 の2日目の記事です。
こんにちは。ふらいです。
ちょっと変わったキーボードを作ったお話です。
実はこのキーボードは先日行われた展示会で展示してました。
こんなやつです!
特徴としては
- キーが左右に5個ずつしかない
- 左右完全セパレートで完全無線化
- キーボードだけでなくマウス操作も可能
- PC側に特殊なドライバ不要
などです。
皆さんタイプミスってしますよね? その主な原因は指の移動によるものだと思うんです。そこで指の移動が生じないキーボードを考えてみました!
でもキーが全部で10個しかないからテンキーなの?と思うかもしれませんが違います。普通のキーボードで入力できるものはこのキーボードでも入力できます。
理由は簡単で、キーが10個あれば 2^10 -1 = 1023 通りの入力が可能だからです。
セパレートキーボードって市販されているんですけど、
ケーブルで繋がってるじゃん!こんなのセパレートじゃない!
ということで今回は完全無線化を目指しました。
また、キーボードから手を離さずにマウスも操作したい!という夢も叶えました。
それではハードウェアとソフトウェアを紹介しようと思います。
ハードウェア
秋葉原にある遊舎工房でキースイッチとキーキャップを買ってきます。
無料で使える3D CAD Autodesk Fusion360 を使って設計してみました。
設計したデータを3Dプリンタで印刷してキースイッチとキーキャップをつけます。
次に基板側も見ていきます。
秋月でも売られている ESP32開発ボード を使用します。
1480円という値段でWi-Fi、Bluetooth対応でデュアルコアという優れものです。今回はこのマイコンボードを使用します。
ますこのボードに合うようにユニバーサル基板を破壊します。
そして単4の電池ボックスも破壊します。
こうなります
そしてハンダづけします
単4電池がぴったりです。
ちなみに裏側はこんな感じです。
単4電池から3.3Vを生成するための基板が載っています。
TPS63000 昇降圧DC-DCコンバータモジュール(3.3V/5V)
カバーを付けて完成!
ちなみに右手側にはジョイスティックがついていて、ちょっと使いにくいですが、マウスカーソル操作もできます。
ソフトウェア
システム構成はこの図のようになっています。
PCとの通信はBLE (Bluetooth Low Energy) を用いています。一般的な無線キーボード、マウスと同様のHIDデバイスとして認識されるので、特別なドライバ等は必要ありません。
左手側はキーボードデバイスとして、右手側はマウスデバイスとしてPCとペアリングされます。
また左右の同時押しがあるので、左手側と右手側も現在の押下状況を共有する必要があります。そこでWi-Fiを使ったESP32独自の通信規格であるESP-NOWを使用しました。
ESP-NOW はEspressif社が開発した、短いパケットを特徴とする高速でコネクションレスな無線通信技術です。左右での同時押しを判断するためには高速な通信が不可欠ですが、ESP-NOWを使うことによって1 byteのみを高速で送受信するということが実現できました。
次にキーマップについてです。
冒頭で1023通りの入力が可能と言いましたが、shift, ctrl, alt, gui(windows) キーについては他のキーと同時に押すことが想定されているので、これらは独立にしました。上図のように外側にこれらのキーを割り当てました。従って残りの内側の6個のキーのみを使って他の入力は構成しなければなりません。6個でも2^6 -1 = 63 通りあり、だいたいのキーは網羅できるのですが、普通のキーボードは100~110程度のキーがあり、このままでは足りません!そこでalt+gui をファンクションキーとして機能させることにします。そうすると 63×2 = 126 通りになるので、普通のキーボードのキーは網羅できることになります。
マウスの左、ミドル、右クリックもキーマップの中に含まれているので、マウスクリックもできます。
あと展示会では同時押し判定について聞かれることが何回かあったのですが、あまり難しいことはしていません。2ms周期でサンプリングして、30ms連続で同じキーが押され続けたら押されたと判断しています。
ソースコードはgithubで公開してます。
以上、ふらいでした。
明日の記事は誰が書いてくれるのかなー