Atmel AVR ATmega32U4 で Matias Half Keyboard っぽいのを作った
背景
タブレットの裏にキーボード貼ったら iikanji に使えるんじゃねと思い、部品集めて作ってみました。
Matias Half Keyboard ってのが過去に出てたことはあるけど、すでに本家サイトでしか買えるところがなく、値段がかなり跳ね上がっておりました。
Matias Half Keyboard は左手で使う用に作られています。普通に文字を打つと、左手でタイプした文字が入力されます。 一方で、スペースキーを押している間だけ、右手領域の文字をタイプしたことにできるキーボードです。 詳しくは 半分サイズのキーボード「Matias Half-Keyboard」を読むと書いてあります。
それを作りたかったので、それっぽいものを作ってみました。
部品
使った部品は以下の通り。
- BUFFALO の セパレート折りたたみキーボード (BSKBB14) の左半分
- Strawberry Linux の ダ・ヴィンチ32U (ATmega32U4)
- aitendo の FFC 基板付きコネクタ
- 秋月電子の ブレッドボード用マイクロBメスUSBコネクタDIP化キット
ハードウェアとソフトウェア
ソフトウエアは以下の通り。
tmk_keyboard が、既存のキーボードの基板を AVR で置き換えてキーバインドをこねくりまわすことに特化したソフトウェアで、データの取り方とかマトリックスの配列書くだけで、Fn とかの処理まで全部やってくれて、とても素敵でした。
ハードウェア的には、AVR 内蔵のプルアップ抵抗使ったので、がんばって電線を半田付けしただけのカンタン工作です。
キーボードマトリクスの ROW として PD0-1,PD4-7、COL として PB0-5 にキーボードの左半分を繋ぎました。 PD2-3 は、RXD TXD なので、デバッグ用として残してあります。
ROW は行の選択、COL は選択された行で押されているボタンの検出に使います。
まず、COL をプルアップ付き入力にしておきます。 つぎに、ROW を全部ハイインピーダンスにして切り離しておきます。
読み取りたい ROW だけを L にするループを回します。 それぞれの ROW に対して COL の状態を読み取りマトリックスに反映します。 COL は、プルアップされているので、1 になってるビットは押されてない、0 になってるビットは押されてるという風な流れです。
このような感じでマトリックスを作っておけば、あとは tmk_keyboard が色々面倒いところをやってくれるのです。
使い心地
タブレットの裏にキーボード貼って頑張って使おうとすると、腕がつりそうになることがわかりました。
Enter キーの割り当てがよくないところにあるなーとか思っておりますが、完成初日以来二度と使っておりません。。。
最後に
満足感は半端ないので、ヨカッタ。