Ieneko42C ビルドログ

Ieneko42C

Ieneko42Cというトラックパッド付きの自作キーボードを組み立てたので、その記録です。

Ieneko42Cの特徴

  • REVIUNG41に似た配列
  • トラックパッド付き(QMKが標準で対応していないセンサーのカスタムドライバを作成している)
  • 振動モーター付き
  • サンドイッチマウントだが、上からトッププレート(アクリル) - ミドルプレート(アクリル) - PCB - ボトムプレート1(アクリル) - ボトムプレート2(アクリル) と隙間のない積層構造になっており、剛性が高い

キットに含まれる部品

別途購入したもの

ビルドログ

参考

1. キーソケットはんだ付け

ソケットBefore ソケットAfter

2. マイコンはんだ付け

PGA2040をPCBにはんだ付けします。 Pro microなどに比べると足の数が多くて大変ですが、難しくはないと思います。

ビルドガイドでは最初に四隅のみ半田してピンヘッダをカットするとありましたが、それだとピンが抜け落ちてしまうので、一列すべて半田してからニッパでカットしました。
PGA2040 1 PGA20401 2 PGA20401 3 PGA20401 4 PGA20401 5 PGA20401 6

この段階で、キースイッチの動作確認を行います。 ファームウェアを書き込んだ後、金属製のピンセットなどでキースイッチを短絡させてすべてのキーが入力されるか確認します。
動作確認1

3. 振動モーター、トラックパッド組み立て

振動モーターとトラックパッド用のピンヘッダを半田付け
ピンヘッダはんだ ピンヘッダはんだ2

フレキシブルコネクタDIP基板を半田付け
DIP化はんだ

モータードライバ半田付け
モータードライバはんだ

トラックパッド用のフレキシブルコネクタを接続する。 FFC接続

この段階で、トラックパッドの動作確認を行います。 キーボードをPCに接続して、トラックパッドを触るとマウスポインタが動くか確認します。 自分は、最初フレキシブルコネクタがしっかり刺さっておらずトラックパッドが動作しませんでしたが、フレキシブルコネクタを刺し直したら動作しました。

4. アクリルプレート組み立て

M2のネジとスペンサーで、2枚のボトムプレートとPCBをネジ止めする。
ボトムプレート1 ボトムプレート2 ボトムプレート3

トッププレートを取り付ける。 この時に、PGA2040の半田付けした出っ張っている足をある程度短くカットしました(出っ張りすぎているとアクリルを組み立てる時に干渉する)。

トラックパッド高さ調整ブロックを取り付ける。
トラックパッド トラックパッド2 トラックパッド3

5. キースイッチ・キーキャップを取り付ける

キースイッチを取り付ける。今回は、家で余っていたBoba U4tをアルファに、Aqua kingを親指を使った。
キースイッチの取り付け

キーキャップもとりあえず、家に余っていたもので。
キーキャップの取り付け

6. ファーウェアを焼く

GUIでキーマップを変更したい場合は、Vialを利用する。 公式で提供しているファームウェアバイナリはVialに対応しているので、そのままVialを利用することが出来た。

ファームウェアをソースからビルドしたい場合は、Ieneko42C公式のソースコードvial-qmkを使ってビルドできる。

cd qmk-vial
cp -r /path/to/ieneko42c keyboards/
make git-submodule
# make ieneko42c:default # デフォルトのキーマップはビルドできない状態だった
make ieneko42c:vial # vial用のキーマップはビルドできた

注意点としては、ビルドするためのファームウェアとしては、qmk本家ではなく、下流vial-qmkを使う必要がある。 また、QMKファームウェアは頻繁に後方互換性のないアップデートがなされているため、ビルドするIeneko42C公式のソースコードがどのバージョンのvial-qmkで動作するものか気をつける必要がある。 自分は、Ieneko42Cの"56a0eac 2023-09-19"のコミットハッシュと、vial-qmkの”ee7f5acefb 2023-09-17”(QMK 0.22系)の組み合わせで動作することを確認した。

ファームウェアをソースから変更してフラッシュするにはブートモードに入る必要があるが、Ieneko42Cはボトムプレートのネジを外して分解しないとブートの短絡が出来ないようになっている。
ブートモード

キーマップで、QK_BOOTアサインしておくと、物理的に短絡させなくてもブートモードに入れるので、おすすめです。

感想

  • QMKが標準で対応していないトラックパッドセンサーをカスタムドライバを書いて対応しており、すごい
  • ホームポジションからトラックパッドが近いので、簡単なポインタの操作の作業効率がいい
  • トラックパッドの操作感は、Macに比べるとかなり落ちる(センサーサイズも小さいので当然だが)
  • 公式のビルドガイドにある、ジェスチャーとかドラッグ&ドロップモードというのが、どうやったら使えるのかよく分からなかった。
  • サンドイッチマウントだが、よくあるトッププレート+PCB+ボトムプレートという隙間のある構成ではなく、トッププレートとPCB・PCBとボトムプレートの隙間を埋めるアクリルプレートも標準で付属しており、剛性が高い
  • ファームウェアトラックパッドのカスタムドライバを書いてあることもあり、複雑で理解しきれていない

自作PCを組んだ

1ヶ月くらい前になるが、自作PCを作った。 メインPCとしてラップトップのThinkpad x390を使っていたのだが、以下の理由からデスクトップの自作PCを購入することにした。

  • Thinkpad x390がDockerのBuildなどをするには厳しいことが多々あった
  • 久しぶりにゲーム(そこまでスペックは要求しないもの)をしたかった
  • 趣味としてPC関係の知識のアップデートを兼ねて。たしか2010年くらいに初めて自作PCを組んで、それ以降はラップトップばかりを使っていたので、13年ぶりくらいの自作になる。

全体の予算としては10万円くらいを目安とした。

構成

数年前はIntelがだめで、AMDが主流だったっぽいが、最近はIntelも盛り返しているみたい。 AMDよりもIntelの方がソフトウェアに力を入れており、AI推論もIntelの方が注力しているので、Intelにした。 あと、最近の半導体製造はTSMCの1強すぎるので、TSMC以外を応援するという意味でも。 最初は最新の13世代(Core i5 13400Fあたり)を狙っていたが、予算の都合上、1つ古い12世代にした。 内蔵GPUは普段は使わないのだが、GPUを使ったアプリ開発Intel GPUもあったらデバッグに役立つが、ラップトップのIntel内蔵GPU使えばいいしと思って無し(F版)を選択した。

機械学習のためにNVIDIA一択(といっても学習をがっつり回したりする予定はない)。 機械学習用途を意識して、GTXシリーズよりメモリが多いRTXシリーズにした。 自分が想定していたより、GPUの値段はかなり高く、最新のRTX40ではなく、1世代前のRTX30の中で一番ローエンドのRTX3050を選択。 玄人志向のものを購入したが、今回作ったPCで唯一光ってしまうのが残念だった。 最近、IntelIntel Arcというグラフィックカードを出していることを知ってびっくりした。

なるべくサイズを抑えたかったのと、マザーボードやケースの値段的にもATXよりmicroATXの方が抑えられそうだったので、microATXを選択。 チップセットはZ690は自分にはオーバースペックなので、B660にした。 あとは、一体型のバックパネル かつ M.2スロットにヒートシンクがある という条件で値段の安いマザーボードを探した。 MSI MAG B660M MORTAR DDR4 と ASUS TUF GAMING B660M-PLUS D4 の2択で悩んだが、前者は2つあるM.2スロット両方にヒートシンクがあるが、後者は片方だけだったので前者にした。 MSIマザーボードを使うのは初めてだが、BIOSの使い勝手は特に問題無さそうだった。

  • メモリ: CFD W4U3200CS-16G 16GB * 2枚 = 32GB (7,640円)

計16GBでも十分そうだったが、値段が安かったので計32GBにした。 マザーボードがDDR4なので、PC4-25600(DDR4-3200)で値段が安いものを適当に選択。 メモリのメーカーはどこがいいとかよく分からない。

  • SSD: ADATA LEGEND 800 ALEG-800-1000GCS-DP (M.2 2280 1TB) (5,680円)

13年前に組んだ時はHDDが主流だったのが、SSD(SATA接続)になり、さらにPCIe接続のSSDが主流になっているらしい。 ここ10年で恐らく一番進化しているパーツですね。 SSDはここ半年くらい値下がりしていて安かった。 M.2、PCIe gen4、1TBでなるべく値段が安いものを適当に選択(ここのところニュースになっているWestern Digitalは避ける)。 付属の薄いヒートシンクがついていたが、マザーボード付属のものの方が冷えそうでサイズもピッタリなので、マザーボード付属のヒートシンクを使った。

構成的に600Wあれば十分そうだったが、余裕を見て750WのBronzeを選択。

  • ケース: Thermaltake Versa H18 CA-1J4-00S1WN-00 (4,369円)

MicroATX対応のミニタワー型ケース。 裏面配線可能・電源が下側で別吸気・上部/底面にも穴があるか・フロントパネルがメッシュで吸気しやすい あたりの条件を満たすものから選択。 小さめのケースなので、大きいCPUファンとか大きいGPUは入らない。

  • CPUクーラー: DEEPCOOL AK400 R-AK400-BKNNMN-G-1 (3,290円)

最初はIntel純正のCPUクーラーで運用しようとしていたが、ベンチマークソフトを回すと90度くらいになったので、追加でCPUクーラーも購入。 安めのCPUクーラーの中で評判のいいAK400を選択した。 ケースThermaltake Versa H18は背が高いCPUクーラーは入らず、AK400はちょうど収まる。 AK400導入後で、ベンチマークソフトを回すと68度くらいだったので、かなり効果はあった。

  • ケースファン: 2 x KAZE FLEX 140 SQUARE PWM 1200rpm KF1425FD12S-P (2 x 1,320円)

ケースThermaltake Versa H18には、リア側に120mmのファンが標準でついているが、フロント側に140mmファンを2つ追加した。 必要だったかとか、効果があったかとかは不明。 マザーボードにケースファンの電源が2つしかなかったので、分岐ケーブルを購入して、フロントの2機に分岐して電源供給した。

  • OS: Ubuntu22.04

これまでのメインPC Thinkpad x390でもUbuntu22.04を入れて使っていた。 同じUbuntu22.04なのに、x390だとWaylandがデフォルトになっていたが、今回自作したPCだとX windowがデフォルトになっていた(謎)。

ベンチマーク

Phoronix Test Suiteを利用してベンチマークを取ってみた。 様々なベンチマークを共通のプラットフォームに入れたもので、結果を共有などもお手軽に出来るようになっている。

# 導入
sudo apt install ./phoronix-test-suite_10.8.4_all.deb
phoronix-test-suite version

# CPU/GPUのベンチマーク
phoronix-test-suite benchmark blender

# ディスクのベンチマーク
phoronix-test-suite benchmark sqlite

ベンチマーク結果

温度

psensorというツールでCPU・GPUSSDの温度を確認した。

sudo apt install psensor
psensor
アイドル時 ベンチマーク ゲーム時
CPU(リテールCPUクーラー) 38度 90度 60度
CPU(CPUクーラー AK400) 35度 68度 45度
GPU 38度 〜 50度 63度 50 〜 60度
SSD 47度 55度 55度
  • CPUクーラーの効果がすごい。
  • GPUBlenderベンチマークを回しても短時間しかフルで動かないので、温度は上がりきって無さそう。
  • SSDはアイドル時でも結構熱いが、負荷をかけても温度はそこまで上がらないみたい。

感想

  • 組み立て・OSインストールは特にトラブルなく、半日ほどで出来た。マザーボードの配線がややこしかったくらい。
  • 現状の使用用途だと、CPU・GPU・メモリいずれもオーバースペックっぽい。
  • BIOSで特に設定などいじってないが、シャットダウンした状態からOSが起動するまでの時間が短い。スペックのおかげ?
  • ミニタワー型でも机の上に置くには大きすぎるので、IKEAでラックを購入して机の横に設置した

ブレッドボード上で2x2キーのキーボードを作った

キーボードの仕組みを理解するために、ブレッドボードで2x2キーの小さいキーボードを作ってみた。 マイコンでキーを読み取る仕組みについては、「キーマトリックス」で検索すると、分かりやすい解説がたくさん見つかるので、それを参考に理解した。 ファームウェアはQMK firmwareを利用した。

利用したパーツ

配線

Pro microのVCCやGPIOの電圧の仕様は5Vで、テスターで測定したところ実際には4.7V程度だった。 Pro microの端子はプルアップされているので、何もしなければHIGH(5V)になっている。 リセット(RST)も何もしない状態ではHIGHで、GNDと短絡されるとLOWになり、ブートローダーモードになる。

今回作成するキーボードの回路図は以下のようなもの。 キーマトリックスのCOLとROWはどの端子を用いてもいいので、適当に選んだ。

Kicad配線図

上図の回路図を実際のブレッドボード上で再現したものが、以下の写真。

ブレッドボード上で配線した様子

ファームウェアの作成・書き込み

ファームウェアはQMK firmwareを利用した。
新規キーボードの作成は以下のコマンドで出来る(2023-09-14現在。QMK firmwareは頻繁にアップデートされるので、アップデートで変わるかも)。

qmk new-keyboard
# 指示にしたがって適当に選択していく
#   layout: 52 (none of the above)
#   MCU: 12 (promicro)

自分のキーボードの物理配線(キーマトリックス)に合わせて、以下のファイルを修正する。

  • info.json
{
    "matrix_pins": {
        "cols": ["F6", "F7"],
        "rows": ["B5", "B4"]
    },
    "layouts": {
        "LAYOUT_2x2": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
                {"matrix": [0, 1], "x": 1, "y": 0},
                {"matrix": [1, 0], "x": 0, "y": 1},
                {"matrix": [1, 1], "x": 1, "y": 1}
            ]
        }
    }
}
  • keymap.c
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT_2x2(
        KC_1,   KC_2,
        KC_3,   KC_4
    )
};

キーマトリックスのPin配置やキーマップの修正が出来たら、ファームウェアコンパイル・書き込みする。

qmk compile -kb keyboard_name -km default
sudo qmk flash -kb keyboard_name -km default
# リセットボタンを押すと、ブートローダーモードになって書き込みが行われる

参考文献