自作キーボード(ではない何かか)を作る

Project, TechArduino, c, Embedded, HW, Japanese

モチベーション

RaspberryPiとかのセットアップでUSBキーボードが欲しくなる場面が時々あるが、小型のものでも少し大きく感じるので、小さいキーボードに興味があった。
過去にはタクトスイッチとTeensyで、こんなの作ってみたりもした。

My first keyboard
My first keyboard
My first keyboard
My first keyboard wiring

でもまだ大きさには満足できず、もっと小さいスイッチを探したり、PCBを自分で起こしてみたい、などと考えていた。
それと並行して、ワンキーキーボードとか、ネタ的には面白いかも?と考えていた。

RubyKaigi2018のお昼休みに、実際に現物を見て、普段使い用の実用的自作キーボードにも興味が湧いて出てきた。

いずれにせよ自作PCBは何かで挑戦してみたいので、自作キーボードは良いお題に思える。
その前に、キースイッチの取り回しの確認も兼ねて、簡単に作れそうなワンキーキーボードを作ってみることにした。

準備

下記のような部品を準備。

キーキャップはとりあえず耐久性無視して3Dプリンタで自作。

My key cap
My key cap

ロータリエンコーダになんとなくプルアップ抵抗つけているけど、Atmega32U4内部のものを使えば足りると思う。

設計

ロータリエンコーダで文字リストのポインタ位置を制御して、キーを押されたタイミングで、選択中の文字をキー入力としてPCへ送信する。
ProMicroで使えるArduino用のUSBキーボードのライブラリがあるので、とても簡単に実現できる。

配線ではどのピンに何をつなぐか確認。割り込みに使えるPinが限られているので注意(一敗)

Simple Schematics
Simple Schematics

組み立て

まず、秋月の液晶は変換基板にはんだ付けして、ブレッドボードで動作確認。
うまくユニバーサル基板に乗るように配置してはんだ付けして、配線する。

Wiring
Wiring

液晶の基板がProMicroに微妙に干渉するので、ハンドグラインダーの研磨砥石で1mm程度削った。
あと、キースイッチ取付用にユニバーサル基板にドリルで穴を開けた。

ケース

ユニバーサル基板や部品の位置などをデジタルノギスで採寸して、Fusion360でケースをデザインして、3Dプリンターで印刷。

A case for the keyboard
A case for the keyboard

無駄な張り出し残してしまったので、干渉している部分をラジオペンチで剥ぎ取った。
うちのプリンターだとどうしても長方形が微妙に歪むので、上と下の箱を合わせるのが難しい。面倒なので適当に重ねて無理やり瞬間接着剤でつけている。

ソフト

液晶については、こちらの方のライブラリで制御。
https://synapse.kyoto/hard/MGLCD_AQM1248A/page001.html

余裕があれば、フォントを大きく表示できるように改造したい。
加えて、ロータリエンコーダの信号を割り込みで検出して、
ボタンについては、画面更新と合わせて、ポーリングで検出。
ボタンが押されれば、選択中の文字に対応するキーイベントを送信する、という単純なもの。

完成

Parts on the board
Parts on the board
One key Keyboard
One key Keyboard

動画

https://twitter.com/kishima/status/1006909707032805377

とりあえずジョークデバイスとして作ってみましたが、次はちゃんとしたキーボード作ってみたい。
まずは、PCBの練習も兼ねて、テンキーあたりからがよいかな?
結構キースイッチとキャップも値が張るので。

せっかくつくったので、もし真面目に使うなら、1文字入力ではなくて、キーワード入力できるようにするとか、一応拡張用に残したI2CにGPIO拡張ICをつないで、マウス機能も付加するとか、考えられる。
けど、とりあえずは別のやりたいことにシフト。