謎基板をネット情報と目視と真心で動かした話【キーボード改造奮闘記】

**この記事に書いてある内容は、正しいとは限りません。一般に、分解や改造は危険を伴い、保証切れなどの問題を引き起こします。私は完全に自己責任で行いました。この記事が原因で起こった問題について、私は一切責任を負いません。**

# メカニカルキーボードにポインティングスティックがほしい (前置き)
ThinkPadの真ん中についている赤いあれ、マウスとして使えるあのポインティングスティック、非常に便利ですよね。普段使いするメカニカルキーボードにも欲しくなります。

![IMG_7739.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/f6f6e10f-35e2-cf59-0609-ddf1c0728810.jpeg)


そこで見つけて買ったのがARCHISS Quattro TKLでした。これは結構良いですねぇ。

![image9494.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/0b530076-a377-d1e9-1daf-6dbd5b48e9c5.png)


しかし、私のQuattro TKLは、ずっと使っているとついに壊れてしまいました。なんだかキー入力の挙動が変です。

仕方がないのでキーボードを買い替えることにしました。せっかくなのでQuattro TKL以外で、と思いつつ色々なキーボードを眺めて、結局FILCO Majestouch 3 NINJA Tenkeylessを買いました。

Majestouchにはポインティングスティックがありませんでしたので、改造するためにとりあえず分解しました。

![IMG_E4898.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/e683ce9e-837c-d673-e84a-7593fe52f14c.jpeg)

そして、秋葉原で調達した部品を使って、マウス機能を詰め込みました。

![IMG_E4909.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/7c9320fb-4c2c-f3eb-602e-eb3344c61084.jpeg)

カーソル移動はアナログジョイスティックで、クリックなどはタクトスイッチで実装しました。

# キーボード改造第二弾・仕様不明のポインティングスティックの仕様を特定する

実は、この改造済みキーボードは非常に使いにくいものでした。カーソル移動をアナログジョイスティックで行うのには無理がありました。このサイズのアナログジョイスティックでは、小さすぎて細かな操作がうまくできません。

こうしてこのキーボードの改造第二弾が始まりました。ここからが今回のメインです。

そういえば、先代のキーボードのQuattro TKLのポインティングスティックはどうなっているのでしょうか？分解してみると、なんとポインティングスティック単体のモジュールが入っていました。これは好都合です。流用できたら嬉しいですね。

![IMG_7550.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/98179891-eefa-7f79-ade4-3bbe7d0730b1.jpeg)

ここで一つ問題がありました。

**この基板、どうやったら動くんだ？**

仕様不明基板を使うのは往々にして非常に骨の折れる作業です。とりあえずネット上にヒントがないか探しました。

## Twitterでヒントを見つけ、詳細が少しわかる

こんなツイートを見つけました。Quattro TKLの分解ツイートです。

https://twitter.com/systema_/status/1284423280854614016

金井電器産業の制御部内蔵ポインティングデバイスをカスタムしたものかもしれないとのことです。こういう情報は非常に助かりますね…では今度は金井電器産業のページから詳細を調べてみましょう。

https://www.kanai-denki.co.jp/pointing_device.html#pointing_device_02

これですね。なにやらPDFがダウンロードできるそうです。見てみましょう。

ここにPDFのスクリーンショットは貼りませんが、中身は1ページだけの簡易的な仕様書でした。当然ピンアサインなど書いていません。しかし、有用な基礎情報が書いてありました。

* ポインティングスティックとその制御回路がまとまって、USB出力されている
* 外付けでマウスホイールとマウススイッチをつけられる

![IMG_7558.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/6d11b518-1724-4e59-a754-484bf3d499de.jpeg)

上の写真は謎基板の裏です。白く囲ったところは元々コネクタがついていたところ(コネクタを取るときにランドを剥がしてしまいました)で、このコネクタはQuattro TKLを分解したとき、親基板と繋がっていました。つまり、これが出力端子だということです。先程入手したPDFを見ると、この基板はUSB出力をしているとのことですので、この6ピンのうち4ピンが5V、GND、D+、D-だということが推測できます。

![IMG_7550.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/5f31ae9c-b7da-2bd3-31f4-333b2b0dc362.jpeg)

そして2つ目の情報です。この白く囲った2つの端子、USBのMicro-Bに見えるではないですか。これ、それぞれホイールとスイッチのUSB入力ができるような気がしませんか？私はそんな気がしました。ただ、今回の改造ではこの機能を使いませんので、詳細は知りません。

最初、このMicro-Bを適当に繋げばそのままこの基板が動いてくれないかな？などと考えていたのですが、それがどうやら違うような気がしました。ですので、この2つの端子が私にとって関係なさそうだというのは、大切な情報です。

## ICの刻印から型番を特定し、データシートを入手する

この謎基板には2つのICがついていました。先程のPDFを参照するに、多分ポインティングスティックの制御専用と、他の入力も併せてUSB出力する用途の2つに分けてあるのでしょう。

ICには刻印があって、頑張れば読めます。読みました。

![IMG_7556.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/9427d703-f905-6e0d-a8d6-d141129669ad.jpeg)

刻印で検索すると、正式な型番がわかります。小さいICはMSP430F5131、大きいICはMSP430F5501っぽいです。両方ともTexas Instruments製で、データシートが入手できました。嬉しいですね。

余談ですが、上で引用したツイートにも型番は書いてありましたね…

## 目視で電源ピンを探す

これで必要な情報は揃いました。あとは配線を読み、ピンアサインを特定するのみです。

まずは電源から着手すると楽です。GNDはどうせ全体的にロジック周りのベタになっているところです。そして、GNDとの間にいかにも電源っぽいコンデンサが挟まっているのが5Vでしょう。

余談ですが、この基板ではどうやら、ロジック周りのGNDとポインティングスティックのセンサ周りのGNDは一点接続のような方式を取っているようでした。ポインティングスティックは静電容量式らしく、これは平行板コンデンサの容量の変化を見るもの(だと私は認識している)なので、ノイズには弱そうです。ロジックからのノイズを極力減らすためにこのような回路になっているのかと思いました。

## データピンを探す

USBの通信で必要な信号線はこの場合、2本です。6ピンの出力のうち2本は電源なので、残り4本の配線を全て目で追いました。すると全部大きい方のIC(MSP430F5501)につながっていました。つながっている4ピンをデータシートで確認すると、そのうち2ピンにUSB Data Terminal DPとUSB Data Terminal DMという文字列がありました。あまりにも正解っぽいですね。DPがD+ (Data Plus)、DMがD- (Data Minus)でしょうから、この2本をUSBの信号線として使えば良さそうです。

ところで、配線を目で追うのは少し大変でした。私は幸いにも老眼でないので肉眼で追えましたが、ビアを介して裏面に接続されていると配線を見失いがちです。そんなときは、近くのビアをいくつかまとめて見て模様を作って、裏返したらその模様(の反転させたもの)を探すと非常にやりやすかったです。まあ、そもそも写真を撮って適当に合成すれば良かったのですが。

## 結局のところピンアサインは？

私が調べた結果は下の画像の通りです。右側4ピンがUSB出力のようでした。

![image832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/724bf0bf-1223-0a41-6267-0db7bc80e618.png)


# 配線して使ってみる

これで、とりあえずこの基板のUSB出力の正体がなんとなくわかりました。早速ピンを引き出して使ってみましょう。と思ったのですが、コネクタを外すときにランドを剥がしてしまったのでした。仕方がないのでビアをスルーホールとして使うことで、UEWを使って無理やり配線します。

![IMG_7581.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/9cad8610-1483-6a85-298e-5f2aeda64cf5.jpeg)

はい、できました。USBケーブルはその辺に転がっていたものを切って線を引き出しました。

これをパソコンに繋いでみます。このとき、配線を間違えるとパソコンのUSBポートが壊れる可能性があるので、壊れないように気を使いながら、そして信じながら、祈りながら接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/a901fb57-14c1-9820-c5b0-fdb249f3050f.png)

何事もなく動きました。

# 基板の向きという問題を解消するため、一旦出力を受け取りたい

仕様不明基板が動いてこれでめでたしめでたし、かと思いきや、実は違いました。

キーボードの狭いスペースにこの基板を組み込むためには、この謎基板を、設計された正しい向きとは違う向きで取り付けざるを得ません。

謎基板側でこの座標変換ができないかと思って様々なピンの配線を辿ったり、GNDに落としてみたり、色々試したのですが、座標の変換は無理そうでした。そもそもこの基板はQuattro TKL向けに作られた基板でしょうから、そんな(無駄な)拡張性が残されている可能性は低いでしょう…

こうなると、この謎基板をそのまま使うのではだめそうです。適当なマイコンでデータを受け取って、座標を変換しなければなりません。さて、これが面倒です。

方針としてはとりあえず2つありました。

* 謎基板のUSB出力をArduino Pro Microで受け取って、座標を変換して出力する
* 謎基板のポインティングスティックの出力を引っ張り出してArduino Pro Microで処理する

後者は多分尋常でなく面倒なので、前者の道を考えます。

そもそも、私が行ったキーボード改造(第一弾)は、USBハブを使って、キーボードの既存のUSB出力とArduino Pro Microの出力を統合するものでした。Arduino Pro Microではマウスのスイッチやカーソルの情報を出力していました。ですので、改造第二弾でもArduino Pro Microはキーボードに組み込むことになる可能性が非常に高かったのです。それであれば、これをうまく使ってしまいたいという気持ちになります。

調べてみると、ArduinoにはUSBホストシールドなるものがあって、これを使うとUSB出力を受け取れるようでした。さらに詳しく調べると、このシールドの非常に小さいものが売っているとのことでした。

https://ht-deko.com/arduino/shield_usbhost_mini.html

配線なども詳しく書いてあって、この記事は非常に有用でした。とてもありがたいです。

この記事を読むと、ミニUSBホストシールドと3.3V版のArduino Pro Microを使えばうまくいきそうだとわかります。早速購入し、この記事の通りに雑に配線して、ライブラリのサンプルコードを動かしてみました。

![IMG_7652.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/578d47cf-191b-0eb3-fbf9-a776871f8fa2.jpeg)

![IMG_7654.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/3a530880-742a-7cc7-fff5-d62f1be9a26b.jpeg)

ライブラリのサンプルにマウスの出力を見るものがあったのでポインティングスティックをつなげて実行してみたら、うまく動きませんでした。市販の普通のマウスをつなげると動いたので、なにかデータの仕様が違うのでしょう。

色々と試してみると、それっぽく変化する連続したビットを発見しました。その範囲は16bitで、8bitの符号付き整数2つとして見ると辻褄が合うような値でした。これをx座標、y座標のそれぞれの変化量として見れば良さそうです。それがわかれば、あとは値を受け取って、変換して、Arduino Pro Microをマウスとして見られるようにすれば大丈夫そうです。ここで、ついでにマウススイッチなどの機能も統合します。

余談ですがこのポインティングスティックは、Windowsにつないでデバイスマネージャを見ると普通のマウスとして認識されていました。でもUSB出力されているデータの仕様は普通のマウスとは違うようなので、なんだか不思議です。

# 全部まとめて配線し、キーボードの狭いスペースに詰め込む

これで、とりあえず全体的な動作確認はできました。あとはこれらのモジュールを全部筐体に詰め込むのみです。

テンキーレスキーボードは十字キーの上に若干のスペースがあるので、そこにボタンとポインティングスティックを配置します。

![IMG_7676.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/775cf19b-9f12-2983-eac1-a53b5e61bcda.jpeg)

![IMG_7677.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/b693339c-8d06-8634-72d1-e8c6630c138c.jpeg)

Arduino Pro MicroとミニUSBホストシールドとUSBハブ基板は、キーボードの最下層の若干空洞があるところに配置します。

![IMG_7680.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/61ba97b6-0aaf-7ceb-6dcf-c76af4b26908.jpeg)


接着剤やグルーガンで固めて、絶縁テープなどで絶縁して、蓋を閉めたら完成です。

![IMG_7684.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494375/a03155d5-734d-9db7-e921-195ece70578f.jpeg)

無事動きました。めでたしめでたし。

ハードウェアをいじるとすぐに家が汚くなりますね。家を掃除していたら、床に絶縁テープが張り付いていて萎えました。

# コードなど

コードはGitHubで公開していますが、完全に自分向けに「動けばいいや」で作ったので、見やすいものではありません。

また、ポインティングスティックのノイズやオフセットずれに対処するためのアルゴリズムは、この記事に執筆時点で色々な手法を試して模索中です。

https://github.com/Nyanyan/Mouse_on_Keyboard