Koshinoyaのブログ

キーボード関連を中心に

Keychron Q9 Plus (Barebone Knob) 組み立て

Keychron Q9 Plus を組み立てました。
"Plus" なので分割スペースバータイプです。
53キーありますが、メーカーでは40%キーボードに分類しています。

Keychron Q9 Plus

Type : Barebone Knob (Plus Version)
Color : Silver Grey
Keyswitches : Zeal Zilents V2 62g , 78g
Keycaps : Keychron Hacker Mint

本体 $159 + 送料 $16 で合計 $175
6月28日に注文して7月3日に到着。

キーカスタマイズ

ファームウェアは Keychron のページに書いてあるとおりに VIA にてカスタマイズ。

  • VIA ダウンロード場所

https://github.com/the-via/releases/releases
2023年7月10日時点の最新版は 3.0.0 でした。

  • JSONファイルダウンロード場所

VIAに読み込ませるJSONファイルは
https://www.keychron.com/products/keychron-q9-qmk-custom-mechanical-keyboard
の真ん中よりちょっと下にある
Download Q9 Plus ANSI(US) keymap JSON file
をクリック。

q9_plus_ansi_knob_v1.01.json.zip
がダウンロードされるので解凍して
q9_plus_ansi_knob_v1.01.json
を取り出します。

Keychron のページには

ステップ3:「Use V2 definitions (deprecated)」を有効にするか、「Use V3 definitions (via/next)」を無効にします。

と書かれていましたが、「Use V2 definitions (deprecated)」のみ有りました。
また Keychronの指示とは違い、この「Use V2 definitions (deprecated)」を無効にしないと JSON ファイルの読み込み時にエラーとなりました。

分解時の写真

組み立てる前に分解してみましたので、以下に写真を載せておきます。

Keychron Q9 Plus Barebone Sliver Grey
ベアボーン本体

Keychron Q9 Plus bottom
底面

Keychron Q9 Plus right side
右側面

Keychron Q9 Plus bottom plate open
底板取り外し

Keychron Q9 Plus USB connection board connector
USB接続基板コネクター

Keychron Q9 Plus insulation sheet
絶縁シート取り外し

Keychron Q9 Plus USB connection board
USB接続基板取り外し

Keychron Q9 Plus internal parts
分解完了

PCBとスイッチプレートは6本のネジで固定されていましたが、これを分離する前の写真は撮り忘れました。
ロータリーエンコーダーのノブは強く引っ張ると取り外せます。

Keychron Q9 Plus switch plate front side
スイッチプレート 表側

Keychron Q9 Plus switch plate front side (CapsLock side)
スイッチプレート 表側(CapsLock 側)

Keychron Q9 Plus switch plate front side (Enter side)
スイッチプレート 表側(Enter側)

Keychron Q9 Plus switch plate back side
スイッチプレート 裏側

Keychron Q9 Plus switch plate back side (CapsLock side)
スイッチプレート 裏側(CapsLock 側)

Keychron Q9 Plus switch plate back side (Enter side)
スイッチプレート 裏側(Enter 側)

Keychron Q9 Plus PCB front side
PCB 表側

Keychron Q9 Plus PCB front side (CapsLock side)
PCB 表側(CapsLock 側)

Keychron Q9 Plus PCB front side (Center)
PCB 表側(中央)

Keychron Q9 Plus PCB front side (Enter side)
PCB 表側(Enter 側)

Keychron Q9 Plus PCB back side
PCB 裏側

Keychron Q9 Plus PCB back side (CapsLock side)
PCB 裏側(CapsLock 側)

Keychron Q9 Plus PCB back side (Center)
PCB 裏側 中央

Keychron Q9 Plus PCB back side (Enter side)
PCB 裏側(Enter 側)

Keychron Q9 Plus w/switches
スイッチの取り付け

分割スペースバーの部分には Zeal Zilents V2 78g 、それ以外の部分には Zeal Zilents V2 62g を使用。

Keychron Q9 Plus w/keycaps
完成

キーキャップは Keychron Hacker Mint を付けました。

ちなみにMCUは STM32L432KBU6 だと思われます。

MinGW64 を使って Vortex Core で QMK を使えるようにした

注意!)このページに書かれていることと同じことを行う場合には、Vortex Core の基板番号が "CYKB175_V03 20160511" であることを確認してください。。

私が40%キーボードにはまるきっかけとなった Vortex Core。最近では使う機会も減ってきていましたが、改めて見ると良いキーボードだなと思います。自分で設計した Rect44 も多くの点をパクらせてもらいました。アーキサイトさんが扱っていた国内販売は終了していますが、mechanicalkeyboards.com ではまだ販売しているようです。

このキーボードは、キーカスタマイズが可能(マクロ機能もあり)ですが QMK 程の自由度はなく、特に1キーで Tap と Hold の使い分けができないところが難点でした。この欠点をなくすために、Vortex Core の QMK 化を行いました。

参考にしたのはこれらのページ。

上記ページは Linux でのインストールを想定していますが、私は QMK firmware ビルド用に構築してあった Windows10 上の MinGW64 で作業しました。

お約束

以下の作業は Vortex Core を使用不能にし、高価な文鎮とする可能性がありますが、当方はその責任を負いかねます。下記作業は、たまたまうまくいった可能性があります。記述には間違いや抜けがあるかもしれません。各自の責任において作業してください。

また、この作業を行うと少なくとも下記の不具合が発生します。

  • CapsLock を含む全ての LED が使えなくなります。
  • QMK に入れ替えても Mouse Key は使えません。
  • ファームウェアが十分に安定していない可能性があり、PCの再起動時にキーボードがロックされることもあります。また、pok3rtool は新しいファームウェアのフラッシュに失敗することが度々あります。

必要なツール

Vortex core を QMK化しようとしている方なら Windows に MSYS2(MinGW64) と git のセットアップは済んでいて、QMK ファームウェアのビルドができる環境は揃っているものとします。

現在の QMK ビルド推奨環境は QMK_MSYS なので PATH 等がこの手順とは違ったもになりますが、その場合は適宜読み替えてください。手順は似たものになると思います。(丸投げ

それ以外に必要と思われるものは、

などです。

ハードウェアデバッガの Windows用ドライバーのインストール

私は ST-Link/v2 を使用したので、https://www.st.com/content/st_com/ja/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html から入手したドライバーをインストールしました。
ここは各自が実際に使用するハードウェアデバッガのドライバーをインストールしてください。

Zadig が必要という情報もありましたが、そのまま行けました。環境によっては Zadig によるデバイスドライバの書き換えが必要かもしれません。

MinGW64 での openocd-ht32 インストール

Vortex Core に使用されているHOLTEK製 HT32シリーズMCUデバッグするために openocd-ht32 をインストールする。

まずはシステムのアップデートと必要ツールのインストール。

下記コマンドをアップデートが無くなるまで実行。

$ pacman -Syuu

この後必要になるパッケージのインストール。

$ pacman -S --needed base-devel mingw-w64-x86_64-gcc mingw-w64-x86_64-toolchain

openocd-ht32 のインストール開始。

$ cd ~
$ mkdir src
$ cd src
$ git clone https://github.com/ChaoticEnigma/openocd-ht32.git
$ cd openocd-ht32
$ ./bootstrap
$ ./configure --host=x86_64-w64-mingw32 --disable-werror
$ make
$ make install

--disable-werror は忘れないように。これが無いと make が途中で止まる。

MinGW64 での pok3rtool のビルド

CMake のインストール

https://github.com/pok3r-custom/pok3rtool の README.md を見るとビルドのやり方が

git clone --recursive https://gitlab.com/pok3r-custom/pok3rtool.git
mkdir pok3rtool-build
cd pok3rtool-build
cmake ../pok3rtool
make

とあるので pok3rtool のビルドには cmake が必要らしい。

なのでまずは Kitware/CMake から cmake をインストール。

$ cd ~/src
$ git clone https://github.com/Kitware/CMake.git
$ cd CMake
$ ./bootstrap --prefix=/mingw64
$ make
$ make inatall

--prefix=/mingw64 を付けると PATH が通っている /mingw64/bin に出来上がったバイナリーを置いてくれる。これを付けないと C:/Program Files/CMake 以下に配置される。

pok3rtool のビルド

準備ができたので pok3rtool のビルド

$ cd ~/src
$ git clone --recursive https://gitlab.com/pok3r-custom/pok3rtool.git
$ mkdir pok3rtool-build
$ cd pok3rtool-build
$ cmake -Wno-dev -G"Unix Makefiles" ../pok3rtool

-Wno-dev は余計な警告を表示させないため。
-G"Unix Makefiles" は出力されるファイルを UnixMakefile 形式にしてくれる。これを付けないと Projectファイルが生成される。

make をする前に以下の3つのファイルを C:/msys64/mingw64/bin から C:/msys64/mingw64/x86_64-w64-mingw32/lib にコピーする。これをしておかないと最後でエラーになる。

  • libgcc_s_seh-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll

ファイルをコピーした後

$ make

初期ファームウェアのクローン

ファームウェア書き換え時の初期ファームウェアをクローンしておく。

$ cd ~/src
$ git clone https://github.com/pok3r-custom/pok3r_re_firmware.git

カスタムファームウェアのビルド

ファームウェアビルド用の qmk_pok3r.git をクローン。

$ cd ~/src
$ git clone --recursive https://github.com/pok3r-custom/qmk_pok3r.git

~\src\qmk_pok3r\keyboards\vortex\keymaps\default にある keymap.c#elif defined(KEYMAP_VORTEX_CORE) 以下を編集して好みのキーマップにする。

私は下記のようにしました。

#elif defined(KEYMAP_VORTEX_CORE)
    [0] = LAYOUT_core(
        KC_ESC,   KC_Q,    KC_W,    KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,    KC_I,    KC_O, KC_P, KC_MINS, KC_BSPC,
        LCTL_T(KC_TAB),    KC_A,    KC_S,  KC_D,  KC_F,  KC_G,  KC_H,    KC_J,    KC_K, KC_L, KC_SCLN,  KC_ENT,
        KC_LSFT,  KC_Z,    KC_X,    KC_C,  KC_V,  KC_B,  KC_N,  KC_M, KC_COMM,  KC_DOT, RSFT_T(KC_UP), KC_SLSH,
        LCTL_T(KC_DEL), KC_LGUI, KC_LALT, MO(2), LT(1,KC_SPC), RSFT_T(KC_SPC), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [1] = LAYOUT_core(
        KC_GRV,    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11, KC_F12,
        KC_TRNS,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_EQL,
        KC_TRNS,  KC_APP, _______, _______, _______, KC_LBRC, KC_RBRC, KC_QUOT, KC_TRNS, KC_TRNS, KC_PGUP, KC_BSLS,
        KC_INS,  KC_TRNS, KC_TRNS, _______, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN,  KC_END
    ),
    [2] = LAYOUT_core(
        KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
        KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        KC_LCTL, _______, _______, KC_TRNS, _______, KC_TRNS, KC_TRNS, _______, _______, _______
    ),
#else

編集が終わったら下記コマンドでファームウェアを作成。

$ cd ~/src/qmk_pok3r
$ make vortex/core:default

エラー無く、下記のように終了したらOK。

QMK Firmware 0.1.3
Making vortex/core with keymap default

make[1]: Entering directory '/home/hoge/src/qmk_pok3r'
arm-none-eabi-gcc.exe (GNU Tools for Arm Embedded Processors 8-2019-q3-update) 8.3.1 20190703 
(release) [gcc-8-branch revision 273027]
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
   text    data     bss     dec     hex filename
  27028    3120   13620   43768    aaf8 ./.build/vortex_core_default.elf

Compiling: keyboards/vortex/vortex.c                                      [OK]
Compiling: keyboards/vortex/keymaps/default/keymap.c                      [OK]
Compiling: ./tmk_core/common/command.c                                    [OK]
Linking: .build/vortex_core_default.elf                                   [OK]
Creating binary load file for flashing: .build/vortex_core_default.bin    [OK]
Creating load file for flashing: .build/vortex_core_default.hex           [OK]

Size after:
   text    data     bss     dec     hex filename
  27046    3120   13620   43786    ab0a ./.build/vortex_core_default.elf

Copying vortex_core_default.bin to qmk_firmware folder                    [OK]
31204 vortex_core_default.bin
make[1]: Leaving directory '/home/hoge/src/qmk_pok3r'

これでファームウェア書き換えの準備は完了です。

ファームウェアの書き換え

ハードウエアデバッガの接続

ハードウエアデバッガを接続する前に、基板番号が "CYKB175_V03 20160511" であることをもう一度確認。

この番号のすぐ下にハードウエアデバッガを接続する部分(CN2)がある。上から PIN 1、PIN 2、…、PIN 5 とすると

  • PIN1 - MCU VDD
  • PIN2 - SWDIO
  • PIN3 - SWCLK
  • PIN4 - nRST
  • PIN5 - GND

になるよう接続。

基板番号とデバッガ接続部

St-Link/v2 SWD接続表

よって、次の写真のようにハンダ付けして接続。

配線(PCBパッド部)

配線(St-Link/v2 コネクタ部)

OpenOCD の立ち上げ

キーボードとPCをUSBケーブルで繋いで電源を供給し、そのあとデバッガをPCに接続。

下記コマンドで OpenOCD を立ち上げ。

$ openocd -c 'set HT32_SRAM_SIZE 0x4000' -c 'set HT32_FLASH_SIZE 0x10000' -f /mingw64/share/openocd/scripts/interface/stlink-v2.cfg -f /mingw64/share/openocd/scripts/target/ht32f165x.cfg

実行結果

Open On-Chip Debugger 0.10.0-rc1-dev-00005-ge3fa2ecb (2022-04-24-20:56)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
0x4000
0x10000
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 12 kHz
trst_only separate trst_push_pull
Info : Unable to match requested speed 12 kHz, using 5 kHz
Info : Unable to match requested speed 12 kHz, using 5 kHz
Info : clock speed 5 kHz
Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.247431
Info : ht32f165x.cpu: hardware has 6 breakpoints, 4 watchpoints

OpenOCD の立ち上げを確認。

"別の MinGW64 ターミナル" を立ち上げて 127.0.0.1:4444 に Telnet 接続。

$ telnet 127.0.0.1 4444

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Open On-Chip Debugger
>

OpenOCD を立ち上げているターミナルにも接続されたことが表示される。

Info : accepting 'telnet' connection on tcp/4444

オリジナルファームウェアの消去と新しい初期ファームウェアの導入

最初に mass_erase を実行。

これを実行するとオリジナルのファームウェアが消えるので、もう元には戻れなくなります。

Telnet 接続をしたターミナルで下記コマンドを実行。

> ht32f165x mass_erase 0

ht32f165x probe: 64 pages, 0x400 bytes, 0x10000 total
Target not halted
ht32f165x mass erase failed

"Target not halted" と言われて消去できなかったので、halt コマンド後に ht32f165x mass_erase 0 を実行する。そのあと新しい初期ファームの書き込み。

$ telnet 127.0.0.1 4444

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Open On-Chip Debugger

> halt

target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x01000003 pc: 0x00000124 msp: 0x20000710

> ht32f165x mass_erase 0

ht32f165x probe: 64 pages, 0x400 bytes, 0x10000 total
ht32f165x mass erase complete

次の書き込みコマンドは実行してからしばらく待たされます。プログレスバーも出ないのでプロンプトが戻るまで待ちましょう。私の場合は8分弱かかりました。

> flash write_image ./src/pok3r_re_firmware/disassemble/core/builtin_core/firmware_builtin_core.bin 0

ht32f165x probe: 64 pages, 0x400 bytes, 0x10000 total
wrote 8856 bytes from file 
./src/pok3r_re_firmware/disassemble/core/builtin_core/firmware_builtin_core.bin in 456.586639s (0.019 KiB/s)

exitTelnet を抜ける。

> exit

Connection closed by foreign host.

これで元のファームウェアの消去と新しい初期ファームの書き込みが終了して Unlock された Vortex Core を手に入れました。

OpenOCD が起動しているターミナルは下記のような表示になっているはずです。このまま ctrl+c で OpenOCD を終了します。

$ openocd -c 'set HT32_SRAM_SIZE 0x4000' -c 'set HT32_FLASH_SIZE 0x10000' -f /mingw64/share/openocd/scripts/interface/stlink-v2.cfg -f /mingw64/share/openocd/scripts/target/ht32f165x.cfg
Open On-Chip Debugger 0.10.0-rc1-dev-00005-ge3fa2ecb (2022-04-24-20:56)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
0x4000
0x10000
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 12 kHz
trst_only separate trst_push_pull
Info : Unable to match requested speed 12 kHz, using 5 kHz
Info : Unable to match requested speed 12 kHz, using 5 kHz
Info : clock speed 5 kHz
Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.247431
Info : ht32f165x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'telnet' connection on tcp/4444
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x01000003 pc: 0x00000124 msp: 0x20000710
Info : ht32f165x probe: 64 pages, 0x400 bytes, 0x10000 total
ht32f165x mass erase complete
Info : ht32f165x probe: 64 pages, 0x400 bytes, 0x10000 total
wrote 8856 bytes from file 
./src/pok3r_re_firmware/disassemble/core/builtin_core/firmware_builtin_core.bin in 456.586639s (0.019 KiB/s)
Info : dropped 'telnet' connection

ここで一度、電源を供給しているUSBケーブルとデバッガのUSBケーブルをPCから外し、デバッガとキーボードをつないでいる20PINコネクタも外します。

キーボード上にハンダ付けしている部分はまだ外さないでください。この後の作業でキーボードが反応しなくなり、再度ファームウェアの消去と初期化を行うかもしれないからです。

カスタムファームウェア書き込み

再びキーボードとPCをUSBケーブルで接続し、予め作成しておいたカスタムファームウェアを書き込みます。

$ cd ~/src/pok3rtool-build
$ ./pok3rtool -t vortex-core flash QMK_CORE ~/src/qmk_pok3r/vortex_core_default.bin

下記のように表示されますが、OK をタイプして続行、OK は大文字にしなければダメでした。

WARNING: THIS TOOL IS RELATIVELY UNTESTED, AND HAS A VERY REAL RISK OF CORRUPTING YOUR 
KEYBOARD, MAKING IT UNUSABLE WITHOUT EXPENSIVE DEVELOPMENT TOOLS. PROCEED AT YOUR OWN RISK.
Type "OK" to continue:

OK

Proceeding...
Opened Vortex Core (bootloader)
Update Firmware: C:\msys64\home\hoge\src\qmk_pok3r\vortex_core_default.bin
Current Version: CLEARED
Firmware CRC D: 7b359562
Firmware CRC E: 45c12403
crc 0
sum 0
Current CRC: 00000000
Erase...
Write...
crc 45c12403
sum 45e6cc48
New CRC: 45c12403
Writing Version: QMK_CORE
Reset to Firmware
true

キーボードが意図した通りにカスタマイズされていることを確認したら、デバッグ用にハンダ付けした部分を取り外し基板を元のケースに戻してください。

これで QMK化された Vortex Core を手に入れました。

Keyboard:Vortex Core, Keycap:DSA MILKSHAKE

書き込みに失敗する場合

書き込みに失敗した例

下記のように書き込みに失敗する場合が度々あります。

$ ./pok3rtool -t vortex-core flash QMK_CORE ~/src/qmk_pok3r/vortex_core_default.bin

WARNING: THIS TOOL IS RELATIVELY UNTESTED, AND HAS A VERY REAL RISK OF CORRUPTING YOUR 
KEYBOARD, MAKING IT UNUSABLE WITHOUT EXPENSIVE DEVELOPMENT TOOLS. PROCEED AT YOUR OWN RISK.
Type "OK" to continue:
OK
Proceeding...
Opened Vortex Core [QMK]
Update Firmware: C:\msys64\home\hoge\src\qmk_pok3r\vortex_core_default.bin
Reset to Bootloader
false

リセット&再書き込み

bootloader コマンドの実行。

$ ./pok3rtool -t vortex-core bootloader
Opened Vortex Core [QMK]
Reset to Bootloader
true

再書き込み。

$ ./pok3rtool -t vortex-core flash QMK_CORE ~/src/qmk_pok3r/vortex_core_default.bin

WARNING: THIS TOOL IS RELATIVELY UNTESTED, AND HAS A VERY REAL RISK OF CORRUPTING YOUR 
KEYBOARD, MAKING IT UNUSABLE WITHOUT EXPENSIVE DEVELOPMENT TOOLS. PROCEED AT YOUR OWN RISK.
Type "OK" to continue:
OK
Proceeding...
Opened Vortex Core [QMK]
Update Firmware: C:\msys64\home\moto-\src\qmk_pok3r\vortex_core_default.bin
Reset to Bootloader
false

また失敗なので、bootloader コマンドの実行からやり直し。

$ ./pok3rtool -t vortex-core bootloader
Opened Vortex Core [QMK]
Reset to Bootloader
true

$ ./pok3rtool -t vortex-core flash QMK_CORE ~/src/qmk_pok3r/vortex_core_default.bin
WARNING: THIS TOOL IS RELATIVELY UNTESTED, AND HAS A VERY REAL RISK OF CORRUPTING YOUR 
KEYBOARD, MAKING IT UNUSABLE WITHOUT EXPENSIVE DEVELOPMENT TOOLS. PROCEED AT YOUR OWN RISK.
Type "OK" to continue:
OK
Proceeding...
Opened Vortex Core (bootloader)
Update Firmware: C:\msys64\home\moto-\src\qmk_pok3r\vortex_core_default.bin
Current Version: QMK_CORE
Firmware CRC D: 0199cb8f
Firmware CRC E: 3f6d7aee
crc fe209faa
sum e8559d3b
Current CRC: fe209faa
Erase...
Write...
crc a01092b8
sum 7bc2ac6f
New CRC: a01092b8
CRCs do not match, firmware write failed
false

また失敗。めげずにやり続ける。

$ ./pok3rtool -t vortex-core bootloader
Opened Vortex Core (bootloader)
true

$ ./pok3rtool -t vortex-core flash QMK_CORE ~/src/qmk_pok3r/vortex_core_default.bin
WARNING: THIS TOOL IS RELATIVELY UNTESTED, AND HAS A VERY REAL RISK OF CORRUPTING YOUR 
KEYBOARD, MAKING IT UNUSABLE WITHOUT EXPENSIVE DEVELOPMENT TOOLS. PROCEED AT YOUR OWN RISK.
Type "OK" to continue:
OK
Proceeding...
Opened Vortex Core (bootloader)
Update Firmware: C:\msys64\home\moto-\src\qmk_pok3r\vortex_core_default.bin
Current Version: CLEARED
Firmware CRC D: 0199cb8f
Firmware CRC E: 3f6d7aee
crc a01092b8
sum 7bc2ac6f
Current CRC: a01092b8
Erase...
Write...
crc 3f6d7aee
sum 5088c541
New CRC: 3f6d7aee
Writing Version: QMK_CORE
Reset to Firmware
true

成功!このように連続して書き込みに失敗することがありますが、何度か繰り返せば書き込めるようです。

KBDFANS D45 組み立て

KBDFANS で購入した D45 を組み立てました。

KBDFANS D45
KBDFANS D45

D45 Parts
主なパーツ
CASE: Aluminum Anodized Grey
PLATE: Aluminum
を選んで $199 。

3月1日に注文して6月10日に到着。

ケースと基板の間に敷くボトムフォームと基板とスイッチプレートの間に挟むミドルフォームがある。ボトムフォームにはMCUの放熱を邪魔しないように穴が空いている。

D45 MCU Hole
MCU用の穴

D45 PCB
基板には部品が半田付け済み

D45 Gaskets
ガスケット
D45 Stabs
ネジ固定式のスタビライザ

説明書はありませんでしたが以下のように組み立て。

1.ボトムケースの周囲(6カ所)にガスケットを貼り付けボトムフォームを敷いておく。PCBにスタビライザを取り付け、ミドルフォームをPCBとスイッチプレートで挟む。

D45 Assembling 1
組み立て1

2.スイッチを取り付け。ソケット式なのでハンダ不要。

D45 Assembling 2
組み立て2

3.上側ケース周囲(6カ所)にもガスケットを貼り付け。

D45 Assembling 3
組み立て3

4.ケース付属のトルクスネジ8本を締めて上側ケースを取り付け。トルクスネジを締めるための工具は付属している。ネジも予備として2本付属していた。

D45 Assembling 4
組み立て4

5.キーキャップを付けて完成

D45 Finish
完成
Keyswitches: Halo Clear
Keycaps: Mito DCS Sleeper

ファームウェアは KBDFANS のページに書いてあるとおりに VIA を導入してカスタマイズしました。

やっぱり4行のキーボードは良いなあと思う。重さもこの状態で1340gとかなりしっかりしています。名前は D45 ですがキー数は56あり、40%に慣れた身には十分すぎる数です。

この記事は D45 で書きました。

自作したキーボードケースについて

自作キーボードを作るにあたりケースの選択は使用感に直結するので最初に決めたものの一つでした。選択肢は、

  • アクリルのサンドイッチ構造
  • ガラスエポキシ板のサンドイッチ構造
  • アクリル積層
  • 金属削り出し

などがありますが、私は以下の理由から自作キーボードのケースにステンレスの板金曲げを選択しました。

  • 固いタッチの重ためのキーボードが好きなのでボディーは金属製にしたい
  • だが金属削り出しは高価なため板金曲げ加工にする
  • 材質は見た目がきれいで指紋も目立ちにくく、塗装剥離の心配も無いヘアライン仕上げのステンレスにする

仕上がり外形寸法とスイッチの取り付け穴の詳細が分かる図面を描いて個人向けの加工を請け負ってくれる何社かに問い合わせと見積をお願いしました。業者さんによりかなりの値段差がありましたが、最終的に遠松製作所(http://www.tomatsu-ss.co.jp/)さんというところで製作してもらいました。 WEBページ上のお問い合わせフォームでは「送信できるファイル形式はdxf、pdf、jpeg、jpg、txt、xls、xlsx、doc、aiです。」と書いてありますが、STEPファイルでもOKだそうです。

製作をお願いしたときの図面(DXFファイル)はここに上げてあります。材質は1.5mm厚の SUS304 HL(ヘアライン仕上げ)、ヘアライン方向は長手。試作で作るなら安い2B(No.2B)仕上げでも良いですが、曲げ加工時の跡が目立ちやすいです。板金曲げは加工時に金属が多少延びるので、仕上がり寸法だけ指示して切り出し寸法は業者さん任せ。スイッチが嵌まる部分の寸法は図面データをそのままレーザー加工機の加工データに流用するようなので1/100mmの精度で作図して渡しました。

板金曲げには様々な加工上の制限があるので、とりあえず欲しい形状の図面を書いて製作可否は業者さんとの相談になります。今回の場合も最初に設計した寸法では加工できないとのことで、寸法を変更した箇所がありました。また、コストダウンのために比較的単純な形状としてあります。

厚さ 1.5mm のステンレスでしかも折り曲げていることもあり打鍵感はカチンコチンのしなりが全く無いものになっていますが、これは好みに合っているので気に入っています。

打鍵時にしなりを求める方は、スイッチを取り付けるプレートを別材質にしてガスケットマウントにするなどの変更が必要かと思います。

Gitのブランチで作成したフォルダが見当たらない

自作キーボードにまつわるいろいろを書いてみようとブログを作ってみました。

まずは、一昨年から昨年にかけてなんやかんやいじり倒して自分で設計したキーボードを作りましたが分からない点も多く、そんなところから書いてみようと思います。

まずはまったのはGit。このようなシステム、サービスがあることは自作キーボードをやり始めるまで知りませんでしたが、ファームウェアを作るためには必要だということでいろいろ調べてインストール。QMKをフォークして自分のPCにクローン、add_rect44_keyboardというブランチを作り作業を開始。新たにホルダを作りその中でファームウェアの作成を行うことに。

数回の編集をした後のある日、エクスプローラからファイルを開こうとしましたが作業ホルダが無くなっていました。「あれ、そんなはずはないよな。」と検索しても見つからず、GitHubにpushしたものを取ってこようと操作していたらローカルPCにちゃんとあるじゃないですか。

なんてことはない、編集をする前に git checkout add_rect44_keyboard するのを忘れていただけでした。前日にQMKの qmk_firmware と自分のアカウントの qmk_firmware リポジトリ、ローカルPCの qmk_firmware リポジトリの同期を取る際に git checkout master したままだったためブランチに存在するフォルダが隠れていたのです。

ここで初めてGitが具体的にどんな動作をしているのかを知りました。管理しているフォルダ全体をその都度コミットした時点の状態に復元していたのですね。おそらくソフトウェア開発に携わる人には常識だったでしょうが私にはこのレベルのことさえ分かっていませんでした。

「ではどんな方法で管理していると思っていたんだ?」と言われればそれまでですが、これはとても便利な管理方法ですね。過去のある時点と自由に行ききでき、並行作業のマージにも役立つとなればプログラミング以外にも活用されているのも分かります。