Helixキーボードを組み立てた

一番最初のGroup Buyで買ったHelixキーボードを組み立てた。Helixのビルドガイドを読めば出来るけれど、一発では完成しなかったので直したところなどを書いておきたい。
f:id:ultra-genma:20180819214942j:plain


◆キット

遊舎工房Helix アクリル5行版キット バックライトモデル
ロープロファイルスイッチ 赤軸
OLEDモジュール


◆環境

はんだごて(HAKKO FX-600)
Ubuntu
Git


◆組み立てと注意点

手順はこちらに詳細に載っているのでこれに従った。1つも部品を破壊することなくつくることが出来た。
github.com

組立て終わってから知ったけれど、こちらに組み立て動画がある。
www.youtube.com

・チップのダイオードはとても小さいのでハンダづけしたあと壊れていないか確認

向きに注意して測定して、壊れていなければ順方向電圧が700mVくらいになっている
f:id:ultra-genma:20180819215831p:plain

・TRRSジャックはヒートクリップで固定

f:id:ultra-genma:20180819220520j:plain

・OLEDのソケットはPCBにはめてもゆるゆるなのでマスキングテープで固定

f:id:ultra-genma:20180819220529p:plain

・キースイッチを付けたあとダイオードをはんだ付けしなおす

キースイッチをアクリルにバチバチはめるときに結構衝撃があり、ダイオードが剥がれてしまうことがある。そのためキースイッチのはんだ付けしたあとに1秒ずつくらいで良いのでダイオードのはんだを一瞬溶かすと良い。

・バックライトLEDやキースイッチのはんだがしっかり載っていることを確認する

はんだはなるべく少なくしたいので、LEDのランドに完全にははんだで覆わないでいた。しかし、最初組み終えて確認したらバックライトが半分くらいしか点灯せず、しかもまだらに付いていたのでたくさん壊れてしまったのかととても絶望した。
ランドがしっかりかぶるようにはんだづけし直したら綺麗に全部点灯した。キースイッチも同様に目で見て完全に接着できていることがわかる程度にはんだを盛ったほうが良い。

・キースイッチのランドがブリッジしていないことを確認する

LEDがはんだ不足で接触不良だったこととは対象的にキースイッチのランド同士の髪の毛くらいの細さの隙間がショートしてしまっていると、これもキーが反応しない原因になった。初め3か所反応しないキーがあったが、全てこれが原因だった。とくに楕円形のランドははんだのぬれが悪いのでとても苦労した。
くっついてしまってどうしても取れない場合は、隙間が目で見えなくてもカッターでまっすぐひっかくだけでも直るが、フラックスクリーナーを使うと隙間が見えやすくなる。
f:id:ultra-genma:20180819222510p:plain

・バックライトLEDの点灯確認

LEDの確認はテスト用のソースコードがあるのでこちらを使用して確認した。
qmk_firmware/keyboards/helix/rev2/keymaps/led_test at master · qmk/qmk_firmware · GitHub

このテストではバックライトLEDが全て同時にRed→Green→Blueの順に周期的に変化する。
以下のようにビルドして書き込む。手順はdefaultをビルドするときと同じ。

$ make helix:led_test
$ make helix:led_test:avrdude

成功するとこのように光る。
www.youtube.com

・キーキャップを付けたあとに背面のアクリルを付ける

キーキャップは背面のアクリルを付ける前に付けたほうが良い。キーキャップを押し込むときに結構ちからがいるので、背面のアクリルをつけてしまうと手で挟んだ時にアクリルがしなって折れてしまいそうになる。
そのため、背面のアクリルはキーキャップを付けて、スイッチやLEDが動くか確認したあと、本当に最後につければ良い。


◆QMK Firmwareの書き込み

1.ソースコードの取得

以前Let's Splitでqmk_firmwareは使っていたので、今回はそのgitを更新した。fetchしてpullするとHelixのソースコードがダウンロードされる。

~/git/qmk_firmware$ git fetch

~/git/qmk_firmware$ git pull

 create mode 100644 keyboards/helix/common/glcdfont.c
 create mode 100644 keyboards/helix/config.h
 create mode 100644 keyboards/helix/helix.c
 create mode 100644 keyboards/helix/helix.h
 create mode 100644 keyboards/helix/i2c.c
 create mode 100644 keyboards/helix/i2c.h
 create mode 100644 keyboards/helix/info.json
 create mode 100644 keyboards/helix/pico/config.h
 create mode 100644 keyboards/helix/pico/info.json
 create mode 100644 keyboards/helix/pico/keymaps/biacco/config.h
 create mode 100644 keyboards/helix/pico/keymaps/biacco/keymap.c
 create mode 100644 keyboards/helix/pico/keymaps/biacco/rules.mk
 create mode 100644 keyboards/helix/pico/keymaps/default/config.h
 create mode 100644 keyboards/helix/pico/keymaps/default/keymap.c
 create mode 100644 keyboards/helix/pico/keymaps/default/readme.md
 create mode 100644 keyboards/helix/pico/keymaps/default/readme_jp.md
 create mode 100644 keyboards/helix/pico/keymaps/default/rules.mk
 create mode 100644 keyboards/helix/pico/matrix.c
 create mode 100644 keyboards/helix/pico/pico.c
 create mode 100644 keyboards/helix/pico/pico.h
 create mode 100644 keyboards/helix/pico/rules.mk
 create mode 100644 keyboards/helix/pico/serial_config.h
 create mode 100644 keyboards/helix/pico/split_util.c
 create mode 100644 keyboards/helix/pico/split_util.h
 create mode 100644 keyboards/helix/pro_micro.h
 create mode 100644 keyboards/helix/readme.md
 create mode 100644 keyboards/helix/rev1/config.h
 create mode 100644 keyboards/helix/rev1/info.json
 create mode 100644 keyboards/helix/rev1/keymaps/OLED_sample/config.h
 create mode 100644 keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
 create mode 100644 keyboards/helix/rev1/keymaps/OLED_sample/readme.md
 create mode 100644 keyboards/helix/rev1/keymaps/OLED_sample/rules.mk
 create mode 100644 keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h
 create mode 100644 keyboards/helix/rev1/keymaps/default/config.h
 create mode 100644 keyboards/helix/rev1/keymaps/default/keymap.c
 create mode 100644 keyboards/helix/rev1/keymaps/default/rules.mk
 create mode 100644 keyboards/helix/rev1/matrix.c
 create mode 100644 keyboards/helix/rev1/rev1.c
 create mode 100644 keyboards/helix/rev1/rev1.h
 create mode 100644 keyboards/helix/rev1/rules.mk
 create mode 100644 keyboards/helix/rev1/serial_config.h
 create mode 100644 keyboards/helix/rev1/split_util.c
 create mode 100644 keyboards/helix/rev1/split_util.h
 create mode 100644 keyboards/helix/rev2/config.h
 create mode 100644 keyboards/helix/rev2/info.json
 create mode 100644 keyboards/helix/rev2/keymaps/default/config.h
 create mode 100644 keyboards/helix/rev2/keymaps/default/keymap.c
 create mode 100644 keyboards/helix/rev2/keymaps/default/readme.md
 create mode 100644 keyboards/helix/rev2/keymaps/default/readme_jp.md
 create mode 100644 keyboards/helix/rev2/keymaps/default/rules.mk
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/config.h
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/keymap.c
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/keymap_xrows.h
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/oled.c
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/oled.h
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/readme.md
 create mode 100644 keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows/README.md
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows/README_jp.md
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows/config.h
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows/keymap.c
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows/rules.mk
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows_jis/config.h
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows_jis/readme.md
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows_jis/readme_jp.md
 create mode 100644 keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
 create mode 100644 keyboards/helix/rev2/keymaps/froggy/config.h
 create mode 100644 keyboards/helix/rev2/keymaps/froggy/helixfont.h
 create mode 100644 keyboards/helix/rev2/keymaps/froggy/keymap.c
 create mode 100644 keyboards/helix/rev2/keymaps/froggy/readme.md
 create mode 100644 keyboards/helix/rev2/keymaps/froggy/rules.mk
 create mode 100644 keyboards/helix/rev2/keymaps/led_test/README.md
 create mode 100644 keyboards/helix/rev2/keymaps/led_test/config.h
 create mode 100644 keyboards/helix/rev2/keymaps/led_test/keymap.c
 create mode 100644 keyboards/helix/rev2/keymaps/led_test/led_test_init.c
 create mode 100644 keyboards/helix/rev2/keymaps/led_test/rules.mk
 create mode 100644 keyboards/helix/rev2/matrix.c
 create mode 100644 keyboards/helix/rev2/rev2.c
 create mode 100644 keyboards/helix/rev2/rev2.h
 create mode 100644 keyboards/helix/rev2/rules.mk
 create mode 100644 keyboards/helix/rev2/serial_config.h
 create mode 100644 keyboards/helix/rev2/serial_config_simpleapi.h
 create mode 100644 keyboards/helix/rev2/split_scomm.c
 create mode 100644 keyboards/helix/rev2/split_scomm.h
 create mode 100644 keyboards/helix/rev2/split_util.c
 create mode 100644 keyboards/helix/rev2/split_util.h
 create mode 100644 keyboards/helix/rules.mk
 create mode 100644 keyboards/helix/serial.c
 create mode 100644 keyboards/helix/serial.h
 create mode 100644 keyboards/helix/ssd1306.c
 create mode 100644 keyboards/helix/ssd1306.h

まだ持っていないけれどfortitude60も入っていた。

 create mode 100644 keyboards/fortitude60/config.h
 create mode 100644 keyboards/fortitude60/fortitude60.c
 create mode 100644 keyboards/fortitude60/fortitude60.h
 create mode 100644 keyboards/fortitude60/info.json
 create mode 100644 keyboards/fortitude60/keymaps/default/config.h
 create mode 100644 keyboards/fortitude60/keymaps/default/keymap.c
 create mode 100644 keyboards/fortitude60/keymaps/default/rules.mk
 create mode 100644 keyboards/fortitude60/matrix.c
 create mode 100644 keyboards/fortitude60/readme.md
 create mode 100644 keyboards/fortitude60/rev1/config.h
 create mode 100644 keyboards/fortitude60/rev1/rev1.c
 create mode 100644 keyboards/fortitude60/rev1/rev1.h
 create mode 100644 keyboards/fortitude60/rev1/rules.mk
 create mode 100644 keyboards/fortitude60/rules.mk
 create mode 100644 keyboards/fortitude60/serial.c
 create mode 100644 keyboards/fortitude60/serial.h
 create mode 100644 keyboards/fortitude60/split_util.c
 create mode 100644 keyboards/fortitude60/split_util.h

2.makeする

defaultのままテストするのでいじらずにmakeする。
defaultのままではOLEDやバックライトのLEDは点灯しない
有効化は下の「4.OLEDとバックライトLED」に記載した。

~/git/qmk_firmware$ make helix:default
QMK Firmware 0.6.96
WARNING:
 Some git sub-modules are out of date or modified, please consider running:
 make git-submodule
 You can ignore this warning if you are not compiling any ChibiOS keyboards,
 or if you have modified the ChibiOS libraries yourself. 

Making helix/rev2 with keymap default

avr-gcc (GCC) 4.9.2
Copyright (C) 2014 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.

Compiling: keyboards/helix/i2c.c                                                                    [OK]
Compiling: keyboards/helix/serial.c                                                                 [OK]
Compiling: keyboards/helix/ssd1306.c                                                                [OK]
Compiling: keyboards/helix/rev2/matrix.c                                                            [OK]
Compiling: keyboards/helix/rev2/split_util.c                                                        [OK]
Compiling: keyboards/helix/rev2/split_scomm.c                                                       [OK]
Compiling: drivers/avr/ws2812.c                                                                     [OK]
Compiling: keyboards/helix/helix.c                                                                  [OK]
Compiling: keyboards/helix/rev2/rev2.c                                                              [OK]
Compiling: keyboards/helix/rev2/keymaps/default/keymap.c                                            [OK]
Compiling: quantum/quantum.c                                                                        [OK]
Compiling: quantum/keymap_common.c                                                                  [OK]
Compiling: quantum/keycode_config.c                                                                 [OK]
Compiling: quantum/process_keycode/process_leader.c                                                 [OK]
Compiling: tmk_core/common/host.c                                                                   [OK]
Compiling: tmk_core/common/keyboard.c                                                               [OK]
Compiling: tmk_core/common/action.c                                                                 [OK]
Compiling: tmk_core/common/action_tapping.c                                                         [OK]
Compiling: tmk_core/common/action_macro.c                                                           [OK]
Compiling: tmk_core/common/action_layer.c                                                           [OK]
Compiling: tmk_core/common/action_util.c                                                            [OK]
Compiling: tmk_core/common/print.c                                                                  [OK]
Compiling: tmk_core/common/debug.c                                                                  [OK]
Compiling: tmk_core/common/util.c                                                                   [OK]
Compiling: tmk_core/common/eeconfig.c                                                               [OK]
Compiling: tmk_core/common/report.c                                                                 [OK]
Compiling: tmk_core/common/avr/suspend.c                                                            [OK]
Compiling: tmk_core/common/avr/timer.c                                                              [OK]
Compiling: tmk_core/common/avr/bootloader.c                                                         [OK]
Assembling: tmk_core/common/avr/xprintf.S                                                           [OK]
Compiling: tmk_core/common/magic.c                                                                  [OK]
Compiling: tmk_core/protocol/lufa/lufa.c                                                            [OK]
Compiling: tmk_core/protocol/usb_descriptor.c                                                       [OK]
Compiling: tmk_core/protocol/lufa/outputselect.c                                                    [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Class/Common/HIDParser.c                                       [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c                                        [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c                                [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c                                      [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c                                          [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c                                    [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c                                          [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c                                 [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c                                  [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/ConfigDescriptors.c                                       [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/DeviceStandardReq.c                                       [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/Events.c                                                  [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/HostStandardReq.c                                         [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/USBTask.c                                                 [OK]
Linking: .build/helix_rev2_default.elf                                                              [OK]
Creating load file for flashing: .build/helix_rev2_default.hex                                      [OK]
Copying helix_rev2_default.hex to qmk_firmware folder                                               [OK]
Checking file size of helix_rev2_default.hex                                                        [OK]
 * File size is fine - 16490/28672 (12182 free)

3.pro microに焼く

Detecting USB port, reset your controller now........と出てドットが増え続けているリセット待ちの状態でリセットを1回押す。
avrdude done. Thank you.と出たら問題なく完了。

~/git/qmk_firmware$ make helix:default:avrdude
QMK Firmware 0.6.96
WARNING:
 Some git sub-modules are out of date or modified, please consider running:
 make git-submodule
 You can ignore this warning if you are not compiling any ChibiOS keyboards,
 or if you have modified the ChibiOS libraries yourself. 

Making helix/rev2 with keymap default and target avrdude

avr-gcc (GCC) 4.9.2
Copyright (C) 2014 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
      0      16490          0      16490       406a .build/helix_rev2_default.hex

Checking file size of helix_rev2_default.hex                                                        [OK]
 * File size is fine - 16490/28672 (12182 free)
Copying helix_rev2_default.hex to qmk_firmware folder                                               [OK]
Detecting USB port, reset your controller now........
Detected controller on USB port at /dev/ttyACM0

Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
    Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.

Programmer supports the following devices:
    Device code: 0x44

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file ".build/helix_rev2_default.hex"
avrdude: input file .build/helix_rev2_default.hex auto detected as Intel Hex
avrdude: writing flash (16490 bytes):

Writing | ################################################## | 100% 1.22s

avrdude: 16490 bytes of flash written
avrdude: verifying flash memory against .build/helix_rev2_default.hex:
avrdude: load data flash data from input file .build/helix_rev2_default.hex:
avrdude: input file .build/helix_rev2_default.hex auto detected as Intel Hex
avrdude: input file .build/helix_rev2_default.hex contains 16490 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.12s

avrdude: verifying ...
avrdude: 16490 bytes of flash verified

avrdude: safemode: Fuses OK (E:CB, H:D8, L:FF)

avrdude done.  Thank you.

4.OLEDとバックライトLED

OLEDとバックライトLEDはソースコードをなおして有効にする必要がある。
こちらの説明ではrules.mkを編集すると書かれているが、このファイルは複数あるので注意が必要。上のファイルにはLED_BACK_ENABLEなどの文字列がないのですぐに違うファイルだと気づくと思う。
× /qmk_firmware/keyboards/helix/rules.mk
○ /qmk_firmware/keyboards/helix/rev2/keymaps/default/rules.mk

下のrules.mkを開き、LEDとOLEDの設定をyesに変更してビルドする。
LED_BACK_ENABLE = yes
OLED_ENABLE = yes


◆その他

今まで100円ショップで買った400円のはんだごてを使っていたけれど、初めて大人気のFX-600というはんだごてを使用した。意外と持ち手のヒーターとの堺の太い部分がかなり熱くなるので前のほうを持っていたらやけどしそうになった。ぎりぎり持ち手の部分なので鉄板つけないで熱くならないようにしてほしい。それよりもステーション型もほしい。
温まるまでの時間は安いものよりずっと早くて、設定温度になるとLEDが点滅するので良かった。