Zuruzuru Blog
🍜< ズルズル

October 17, 2020

Lily58にThinkPadのトラックポイントをつける

#デバイス
#自作キーボード
#トラックポイント
#Lily58

自作キーボードの Lily58 に ThinkPad のトラックポイントをつけました.

デバイス

まずジャンク品の ThinkPad を購入して,トラックポイントの基盤部分を取り出しました.

trackpoint1

ThinkPad のトラックポイントにもいくつか型があるみたいで, このサイトに一覧が載っているので,自分の基盤のピン情報を確認しました.

僕のトラックポイントは T400 という型でした.

今回の方針として,クリックボタン機能をキーに割り当てて,トラックポイントはカーソル機能だけ使おうと思うので,使用するのはクロック,データ,電源(VCC と GND),リセットの 5 つのピンだけになります. 今回は,ProMicro もトラックポイントも 5V 動作であったため,変圧する必要がありませんでした.

先ほどのサイトに,ProMicro で使用する際の回路図をのせてくれているので,それの通りに回路を実装します.

最初はこのくらい大きくなってしまったのですが,

trackpoint2

ここまで小型化できました.

trackpoint0

ソフトウェア

QMK Firmwareを直接編集します. すでにps2 形式のマウスがサポートされているのでドキュメント通りに実装すれば終わりです.

今回は,Lily58 で OLED に使用しているピンを割り当てたいので,公式では非推奨の Busywait バージョンの方法で実装します.

また,トラックポイントは左手につけるので左手の rules.mk と config.h を編集します.

まず,PS2Mouse を有効化して,OLED を無効化します.

rules.mk

PS2_MOUSE_ENABLE = yes
PS2_USE_BUSYWAIT = yes
OLED_DRIVER_ENABLE= no

たまたま使用しているピンが D1 と D2 だったので公式の例通りの実装になります. ここら辺は ProMicro の回路図とキーボードの配線パターンを見ればどのピンが使用されているかわかります.

config.h

#ifdef PS2_USE_BUSYWAIT
#   define PS2_CLOCK_PORT  PORTD
#   define PS2_CLOCK_PIN   PIND
#   define PS2_CLOCK_DDR   DDRD
#   define PS2_CLOCK_BIT   1
#   define PS2_DATA_PORT   PORTD
#   define PS2_DATA_PIN    PIND
#   define PS2_DATA_DDR    DDRD
#   define PS2_DATA_BIT    2
#endif

以下のように角度を指定して,トラックポイントの軸を回転することもできるのでデバイスに好きな向きで取り付けられます.

config.h

#define PS2_MOUSE_ROTATE 270

プログラムがかけたら ProMicro に焼いて完成です.

完成

trackpoint3

自分はまだないですが,Busywait バージョンでは,時々キーの取りこぼしがあるみたいなので 時間があるときに USART か Interrupt バージョンに実装し直したいと思います.

自作キーボード便利アイテム