Helixの親指拡張を作った
Thumbhelix Rev1
PCBとケースデータを置いていますが、いくつか不具合があります。Rev1を実際に作るのはおすすめしません。参考程度でお願いします。
先行例
既にHelixにトラックポイントを実装されている方がいます。使用感が気になります。
デモ動画
左側の隅に左ボタン、右側の隅に右ボタン、拡張キーにスクロールボタンを割り当てています。
このトラックポイントを使って細かい作業は難しいです。
不具合
凡ミスのまとめです。
PCBの裏表が逆になった
上記写真の左が表で、右が裏になるように設計していたんですが、アクリルプレートとPCBの隙間が無くてマイコンと抵抗がつけられませんでした。
それじゃあ裏表逆にして使おう。ジョイスティックとスイッチはリバーシブルで使えるパターンにしたし、と思ったのですが、スイッチは表面で使う用の配線しかしていませんでした。
さらに、キーのパターンがHelixと逆になってました。使用上は問題ないですが気持ち悪い。
スイッチが入りずらい、行が揃ってない、バックライトLEDがない
KailhロープロファイルスイッチのPCBマウントの足が入らないです(無理に押し込めば入る)。どうやらもう少し穴を大きくすべきだったらしい。
Helixのキーと行を揃えるつもりで設計したのですが、ちょっとだけ下にずれてしまいました。 バックライトLEDはもともとつける予定がなかったのですが、実物を見てみるとそこだけLEDが無いのはやっぱりかっこ悪いですね。
トラックポイントの操作感が悪い
ThinkPadのトラックポイントに比べて動かすときに力が要ります。 これはジョイスティックのデバイス自身の問題なのでどうしようもないですが、 カーソルの速度制御などはソフトで改善できる気がするので頑張りたいです。
実装について
ハードウェア構成
HelixのProMicroがI2Cマスタ、Attiny85がI2Cスレーブです。
スレーブはJoystickの状態をanalogRead()
、スイッチの状態をdigitalRead()
で読み取り、マスタからリクエストがあったら、それぞれの状態をI2Cで返します。
Attiny85にはICSPでプログラムをアップロードします。
パーツリスト
部品 | メーカー名 | 定数・型番 | 個数 | 備考 |
---|---|---|---|---|
抵抗 | - | 4.7k | 2 | リード付き・1/6W。I2Cプルアップ用 |
抵抗 | - | 10k | 1 | 3216チップサイズ抵抗。SWプルアップ用 |
マイコン | Atmel | ATtiny85-20SUR | 1 | Atmel ATtiny25, ATtiny45, ATtiny85 Datasheet |
ジョイスティック | Top-Up Industry Corporation | JT8P-3.2T-B10K-1-16Y | 1 | TOP-UP INDUSTRY CORP. -- JT8P-3.2T 秋月電子:JT8P-3.2T- -1-16Y Model (1) |
ジョイスティック用キャップ | - | - | 1 | 今回はWholesale Product Snapshot Product name is for 3D analog joystick cap for PSP 2000 PSP 3000 thumbsticks thumb sticks capを加工して使用 |
スイッチ | Kailh | PG1350-* | 1 | CherryMX互換スイッチも可 |
PCB | - | - | 1 | thumbhelix_device/rev1/pcb at master · yskoht/thumbhelix_device |
アクリルプレート | - | - | ボトム・トップ各1 | thumbhelix_device/rev1/case at master · yskoht/thumbhelix_device Kailh Low Profileの場合、厚さは1.5mm~2.0mmが適 |
ネジ・ナット・ワッシャー | - | M2 | - | Kailh Low Profileの場合は10mmネジが適 |
ゴム足 | - | - | - | - |
マイコン、ジョイスティックは秋月電子通商で購入しました。 ジョイスティック用のキャップはAliExpress.comで"PSP joystick cap"等で検索すると見つかります。ただし、少し削らないとはまりません。
PCBの作成
以下のページと書籍を参考にKicadで作ってALLPCB.comに発注しました。
- KiCadの回路記号&フットプリントを作る方法|一日体験!プロの基板作り|記事サポート | トランジスタ技術
- KiCADーライブラリへの部品の追加
- 【KiCAD】回路図における新規部品の作り方 - KiCADで基板設計
- ATtiny85を利用したLEDランプ基板の作製(6)〜回路図作成4(フットプリントの割り当て)〜 : KiCadで基板を作る
- KiCadでのフットプリントライブラリ新規作成方法 : KiCadで基板を作る
- KiCad Pcbnew 各レイヤの役割 - uchan note
Order Timeが2018/4/8 23:42:50でFlow Progressが以下でした。
おおー pic.twitter.com/plo1SFFbpr
— yskoht (@_yskoht) 2018年4月16日
アクリルケースの作成
大量ならオンラインで発注、少量・短TATならコワーキングスペーススペースに材料を持ち込み、と使い分けられるようにいろいろ経験したかったので、今回はPonokoとcoromozaの2か所にお願いすることにしました。
加工のためのデータはPonokoとcoromozaで異なるので2種類のデータを作る必要があります。
Ponoko用.svgの作成
GUIでポチポチやるのは面倒だと思ったので、Pythonのsvgwriteライブラリで作りました。
- svgwrite.Drawing Python Example
- Setting default units in svg (Python svgwrite) - Stack Overflow
- svgwrite Documentation
スクリプトはこんな感じになりました。生成されたSVGをInkscapeのテンプレートに張り付けてアップロードしました。
stroke
, stroke_width
, stroke_opacity
, fill
あたりは当然として、stroke_miterlimit
, stroke_dasharray
も適切に設定しないとPonokoにアップロードできないっぽいです。
coromoza用.aiの作成
coromozaのデータ形式はIllustraor形式なので.svg
を.ai
に変換します。
Illustratorは持っていなかったので、Illustratorが使えるPCをkinko'sでレンタルすることにしました。
店頭のPCでゼロからデータを作るのは大変だと思いますが、.svg
を.ai
に変換して線の色を変える程度であれば20分で十分でした。
どちらの加工も思った通りにできてよかったです。
スレーブ側ソフトウェア
ATtiny85のソフト作成にはATTinyCoreを使用しました。Arduino IDEと既存のライブラリを利用できるので簡単でした。
送信データはアライン詰めれば3Byteで十分ですが、シンプルにしたかったので5Byte送っています。
マスター側ソフトウェア
I2Cマスタ
マスター側は LUFAのTWIライブラリを使っています。
スレーブにリクエストを送り、データを読みだすところはこんな感じになっています。サンプルのまんまですね。
void th_read(Thumbhelix *th) { if(TWI_StartTransmission((THUMBHELIX_ADDR << 1) | TWI_ADDRESS_READ, 20) == TWI_ERROR_NoError) { uint8_t byte1, byte2, byte3, byte4, byte5; TWI_ReceiveByte(&byte1, false); TWI_ReceiveByte(&byte2, false); TWI_ReceiveByte(&byte3, false); TWI_ReceiveByte(&byte4, false); TWI_ReceiveByte(&byte5, true); TWI_StopTransmission(); ...
Pointing Device
読みだした値からQMK FirmwareのPointing Deviceを使ってカーソル移動、スクロール、クリックを行っています。
‘mouseReport.buttons‘は3bitから5bitを使うと書いてありますが、MSBが0bitです。
当初、マウスボタンのエミュレートにはQmkFirmwareのMouse Keysを使おうと思ったのですが、
Pointing DeviceとMouse Keysを両方有効にするとそれぞれでhost_mouse_send()
が呼ばれてしまい、
Mouse Keysでのドラッグが出来ませんでした1。
結局はプログラムをシンプルにしたかったのと、バイナリサイズがきつかったので結局Pointing Deviceのみを使うようにしています。
Makefileについて
qmk_firmware/users
以下にThumbhelixのファームを置くようにしました。使い方あってるのか謎です。
rules.mk
のinclude
をコメントアウトすれば無効にできます。
写真