自作キーボード(1)

Date: 2020/01/03 (initial publish), 2022/02/18 (last update)

Source: jp/note-00013.md

Previous Post Top Next Post

TOC

以下は基本的に備忘録です。

2016-2017年頃の自作キーボードのハード作成

Arduinoは素人ででもシステム細部まで理解して プログラム出きるので、それなりに面白いんですが、LEDのチカチカやbeep音出し だけではすぐに飽きてしまいました。

そこでキーボードの自作を思いたち、2016年の年末から海外サイトを色々見ました。

昔から気になっていたことを根本的に解決してくれる ortholinear系のデザインのキーボードがとっても気になり 欲しくなりました。ただPCBからすべて買って組み立てるだけでは面白くない ので、キースイッチの位置精度が要るケース部品のネタ部分だけを3mm MDF板の レーザー加工で2017年2月に発注し入手しました。

作ろうとしたキーボードのデザインは、14C * 4R のortholinear タイプで、 右端のキーを真ん中に移動し、左右の手を通常より2キー離れて置くことを特徴とし ていました。planck等で採用されている片側6列ではなく片側7列とし、左右の手 の間隔を通常より取ったので窮屈でない姿勢で使えるキーボードのデザインにでき たと一人悦に入っていました。

MDFを木工ボンドで接着し組み立て、角をヤスリで落し、段差を紙粘土で埋めて スムーズな形にして、仕上げに塗装したあと、キーを置いてみて気分を楽しんで いました。

まあ、MDFは木材感覚なので、塗装が出来るのと、角を削って落とせるのは メリットでした。キーはプレートマウント状態ですがMDF板は3mm あり1.0-1,5 mm 厚であるべきマウントプレートとして引っかかりある取り付けができませんでした。 それに関してはキースイッチをホットメルト接着剤で裏から留めることで安定させ たので、むしろカンカンという金属板の共鳴音もしなくていい感じでした。

ただその後、他の事に忙しくなり、電子回路を組み上げずに中断していました。 (ケースの高さを抑えかつ強度を確保しようとし過ぎため、ケース内のスペース が少なく配線の作業性が極端に悪かったのも挫けた一因です。)

キーボード関連MCU・ソフト状況

このころいろいろ読んでの、私なりのキーボード関連でのソフトに関する結論を 備忘録で記します。

(昔、この辺は英語でhttps://github.com/osamuaoki/avrdude-friend/wiki に纏めていました。ちょっと加筆して整理しなおしました。今見直すとかなり 参考になります)

まず、USBキーボードに使うMCUはやはりサポートソフト基盤のARDUINOやQMKがあり とっつきが良いATmega32u4に絞りました。読み込んだ資料は以下です。

いくつか気づいたポイントを以下に箇条書きにします。

ATmega32u4関連で使えそうなdevelopment boardは以下:

メモリーとPINが強化されたAT90USB1286 関連で使えそうなdevelopment boardは以下:

大きさと使えるピン数と価格のバランスで、Teensy 2.0互換品が良さそうです。 でも、あまり安くなったので、Teensy 2.0++互換品に目移りもしています。

(将来ATmega32u4の計算パワーやメモリー量に不足を感じたら、その際には Arm系のSTM32F401を使う500円程度で買えるdevelopment boardを考えます。)

ATmega32u4の代表的なブートローダーのUSBデバイスタイプ、サイズ状況は以下:

LUFAには各種USBデバイスタイプ(HID, CID, DFU, …)のブートローダーがあるが、 どうもいずれも4KBのメモリーを占有する(要確認)。

Atmelのチップには製造時、1KBメモリーを占有する(要確認)、DFUブートローダー が書き込まれている。ソースは無いがBINARYは megaAVR DFU USB Bootloaders で入手可能。LUFAのDFUブートローダーよりは小さい模様。

Arduino Leonardoのブートローダーは、CIDブートローダーで、これは中身はどうもLUFAの CIDブートローダーそのもので、大きさは変わらない模様。

Teensy 2.0というATmega32u4を使う純正development boardにはプロプライエタリーの 512Bに収まったHIDブートローダーが書き込まれている。LUFA版のHIDブートローダー より小さい。使用するUSB VID等が違う以外はLUFAのHIDブートローダーとまったく 同じプロトコルを使っている。ホストコンピューター側のソフトはフリーソフトで 同じもの。 Teensy2.0互換として売られているUSB AVR開発ボードにはTeensyの HIDブートローダーが当たり前ですが書き込まれていません。AtmelのDFU ブートローダーが書き込まれているようです。

OSによるデバイス認識対応の手間や問題が発生しないのはHIDブートローダー。

幸い、LUFAのHIDブートローダーをアッセンブリーで512Bに収めた nanoBoot がMITライセンスで提供されている。 総合的にはこれをISPでブートローダーとしてATmega32u4の高位アドレスに 組上げ前に書き込むのが、OS対応も楽でメモリーも有効利用でき一番良い模様。

2022年追記:nanoBootには最近私のパッチもマージされ、かなり強化されています。さらに各種のパッチをくみあわせたりも私自身しました。

AVRチップ関連のFirmware関連をキーボードで使うUSBとArduino Uno等のシリアル タイプの両方について纏めました。

ホスト側のプログラマーの状況は以下:

avrdudeはISPによる直接プログラム更新とDFU・CIDのブートローダー利用の プログラム更新に対応。ArduinoのGUIアプリもバックエンドでこれを 利用しています。

dfu-programmerはDFUブートローダー利用のプログラム更新のみに対応。 (Windows用にはFLIPを使うそうです。)

LUFAのhid_bootloader_cliは、nanoBootも含めたHIDブートローダー利用のプログラム 更新に対応している。

2019-2021 年頃の自作キーボードのハード作成

配線スペース確保のために、兎に角荒技ですがMDFをDremelに似た小型手動ルーターで 見えない部分で削りました。

現在配線作業が進行中!それに付けても気を付け無いとよく断線や接触不良が起こりま した。

組み立て時のテストの件:

結線確認はまずテスターでしました。それなりの性能のテスターは結線確認を0.5V以下 でするので、ダイオードの順方向でも「導通ビー」とならないので注意が必要でした。 まあ、低圧での検査はデバイスを壊す心配は無くいいのですが、キーボードのマトリクス 確認には、3Vで検査する安いテスターの方が便利でした。

この次のレベルの結線確認には各種「LED Blink」他のアプリを準備するのが便利そう。 このアプリの準備はArduino環境であれ何であれどんなプラットフォームで作ろうと 良いはず。アプリのバイナリーサイズが許容範囲内で全て低位アドレスに書き込めさえ すれば動くはず。

実際にキーボードが動いたのは2022年の2月でした、

Previous Post Top Next Post