Skip to the content
2 layers180.5 × 133.5 mmNrsk right, the printed circuit board in 3D

Nrsk right

0x0c/spltnrskb1

KLE レイアウト(kle/left.json、kle/right.json)から生成した、左右分割・有線接続のキーボード基板です。 KiCad 10 のプロジェクト(回路図と配線済み基板)、製造用ガーバー、BOM、QMK ファームウェア設定を含みます。筐体のデータ(アクリルのレーザーカット用 DXF/SVG と 3D プリント用 STL)も入っています。

Size
180.5 × 133.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
135
Nets
106
Pads
606
Tracks, vias
1,054, 999
Pours
10
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
4 Oct 2026
Updated
27 Oct 2026

Overview

Nrsk right is an open-source printed circuit board by 0x0c, from the 0x0c/spltnrskb repository on GitHub. It is a 2-layer board of 180.5 × 133.5 mm with 135 parts on 106 nets, routed with 1,054 tracks and 999 vias.

It is built around the RP2040, W25Q128JVSIQ and AP2112K-3.3, with the USBLC6-2SC6, 1N4148W and B5819W among its other parts. Its parts include 43 diodes, 42 switches, 18 capacitors, 10 resistors and 4 ICs. It belongs with the RP2040 boards of this library.

Main components

8

README

README.md

nrsk 分割キーボード v2(基板と筐体)

KLE レイアウト(kle/left.json、kle/right.json)から生成した、左右分割・有線接続のキーボード基板です。 KiCad 10 のプロジェクト(回路図と配線済み基板)、製造用ガーバー、BOM、QMK ファームウェア設定を含みます。筐体のデータ(アクリルのレーザーカット用 DXF/SVG と 3D プリント用 STL)も入っています。

v2 では Pro Micro などのマイコンボードをやめ、RP2040 と QSPI Flash、USB-C コネクタなどを基板に直接実装しました。 マイコンボード用に設けていた内側の帯(約 20 mm)がなくなり、基板はキー領域とほぼ同じ大きさになっています。

項目内容
キー数左 38 + 右 42 = 80
マイコンRP2040(QFN-56、12 MHz 水晶、I/O 3.3 V)と 16 MB の QSPI Flash W25Q128JV を左右に 1 組ずつ、裏面に直接実装
USBUSB-C(USB 2.0)を左右それぞれに搭載
左右接続USB-C(片側にもう 1 つ、PC 用と同じレセプタクル)と USB-C ケーブル(C-C、データ通信用)。QMK の PIO シリアル(半二重、D+ の 1 本)と 5 V 給電
スイッチCherry MX 互換、Kailh MX ホットスワップソケット(裏面)
基板2 層、左 161.1 × 126.3 mm、右 180.5 × 126.3 mm(キー配列の外周から 3 mm を基本に、上端を 6 mm、内側を左 17.0 mm・右 12.6 mm 広げて OLED、USB-C 2 つ、マイコンの場所を確保)、四隅は半径 4 mm の角丸、M2 取付穴 × 8(片側あたり)、表裏とも GND のベタ(約 5 mm 間隔のビアで表裏をつなぐ)
筐体左 178.1 × 143.3 mm、右 197.5 × 143.3 mm、高さ 15.6 mm(3D プリント版)/ 16.5 mm(アクリル版)、いずれもプレート上面まで
外観プレートは透明アクリル 1.5 mm、アクリル版の枠と底板はマットクリア 3 mm。プレートは外周の切り欠きなし。USB-C の 2 つの穴はコネクタの外形ぴったりで、高さも形も同じ(基板の舌で差込口を外面の 0.8 mm 内側まで出している)。3D プリントのトレイは外周の角をフィレット加工(B のプレートも上面の外周に半径 1 mm の R)
表示0.91 インチ OLED(128×32)を左右に 1 枚ずつ、プレートと面一のハーフミラーアクリルのカバー付き。高さは増えない
ホイール左上と右上の角にサムホイール(ロータリーエンコーダー Alps EC05E1220401 で読み取り、1 回転 12 クリック)。高さは増えない
ドラム右半分の上段、F12 の右の空きに、手前と奥へ転がすドラム式ダイヤル(ロータリーエンコーダー Alps EC10E1220505 で読み取り、1 回転 24 クリック)。縦スクロールを送る。高さは増えない
3D ビューアhttp://www.0x0c.me/spltnrskb/ 、組み立てガイドは http://www.0x0c.me/spltnrskb/assembly.html 、写実的な 3D 表示は http://www.0x0c.me/spltnrskb/views.html 、エンコーダーの検証基板の 3D 表示は http://www.0x0c.me/spltnrskb/enctest-views.html (GitHub Pages、main への Push で自動更新)

基板の表と裏です(KiCad の 3D 表示)。裏面は裏から見た向きなので、左右が反転して見えます。

左右
表左基板の表右基板の表
裏左基板の裏右基板の裏

完成イメージ(Blender でレンダリング)です。筐体は 2 つの 3D プリント版を採用しています。左が A(3D プリントのトレイ + 透明アクリルのプレート)、右が B(プレートも 3D プリント)です。A はプレートを上からスリムヘッドの小ねじで、B は底からネジで留めます(B の上面にはネジが見えません)。

A と B の比較

A と B は http://www.0x0c.me/spltnrskb/views.html で、3D のまま好きな角度から見られます。ドラッグで回転、ホイールかピンチで拡大します。「自動回転」をオンにすると、ゆっくり回り続けます(触っている間は止まり、手を離して 3 秒ほどで再開します)。形状、材質、照明は Blender のレンダリングと同じです。基板は、KiCad から書き出した実装済みのものです(gen/export_3d.py で build/3d/ に作る)。「パストレース」をオンにすると、手を止めている間、ブラウザでパストレーシング(three-gpu-pathtracer)が進み、写真のような画が得られます。GPU を使い続けるので、最初はオフです。オンのときの自動回転は、選んだサンプル数まで描いてから 30° ずつ回ります。ボケとケーブル、台座(3°、6°、9°)も表示を切り替えられます。手元で開くときは python3 -m http.server -d docs で docs/views.html を配信してください。ページの下には寄りの画像(打鍵する位置から、背面、側面、角、キーキャップ、ホイール、ドラム式ダイヤル、差込口。ケーブルを抜いた全体・背面・差込口も)が並び、クリックすると拡大します。台座に載せた姿も、側面と背面の 2 枚があります。3D 表示のモデル・照明・床の影は gen/export_web3d.sh(4 分ほど)で、寄りの画像は gen/render_details.sh(1 枚 3 分ほど)で作り直せます。

回路

各半分に同じ回路が載っています。Raspberry Pi の RP2040 設計ガイド(Hardware design with RP2040)の最小構成に、保護部品を加えた構成です。

機能部品
QSPI FlashW25Q128JVS(16 MB、SOIC-8 208 mil)、0.1 µF
クロック12 MHz 水晶(3225)、15 pF × 2、XOUT に 1 kΩ 直列
電源VCC(5 V)→ LDO AP2112K-3.3(入出力 1 µF)→ 3V3。コアの 1.1 V は RP2040 内蔵レギュレータ(VREG_VIN/VREG_VOUT に 1 µF)
電源のパスコンIOVDD × 6、DVDD × 2、USB_VDD、ADC_AVDD にそれぞれ 0.1 µF、3V3 に 10 µF
USB27 Ω × 2(D+/D−)、CC 用 5.1 kΩ × 2(USB-C のデバイス認識用)、ESD 保護 USBLC6-2SC6
左右接続の USB-CVBUS = VCC(5 V)、D+(A6、B6)= DATA、GND。D− と CC は未接続
電源経路VBUS → ポリスイッチ 500 mA → ショットキーダイオード B5819W → VCC(5 V、左右接続の USB-C で反対側にも給電)
リセットと書き込みRUN を 10 kΩ でプルアップしたリセットスイッチ(裏面)。BOOTSEL は QSPI_SS から 1 kΩ を通したはんだジャンパー
左右判定GP0 を 10 kΩ で左は 3V3、右は GND に接続
  • ショットキーダイオードは逆流を防ぎます。左右接続のケーブルで給電されている側でも、PC 用の USB-C の VBUS には電圧が出ないので、両方の USB を挿してもホスト側に電流が逆流しません。USB を挿していない側が自分をマスタだと誤判定することもありません。
  • RP2040 はブートローダーを ROM に持っています。Flash が空のときは USB を挿すだけで RPI-RP2 ドライブとして見え、UF2 ファイルをコピーすれば書き込めます。一度 QMK を書き込んだあとは、リセットスイッチを素早く 2 回押すと同じ書き込みモードに入ります。ISP 書き込み器は必要ありません。
  • OLED は 3.3 V で動かします。サムホイールとドラム式ダイヤルのエンコーダーは、A 相と B 相を RP2040 の内蔵プルアップで読み、共通端子を GND につないでいます。

マルチプレクサは不要

片側のマトリックスは 6 行 × 8 列で、使う GPIO は 14 本です。 RP2040 の GPIO は 30 本あるので、シリアル通信 1 本、左右判定 1 本、I2C 2 本、エンコーダー 2 本を足しても十分に足ります。 列 7 を使うのは右の \ キーだけで、左の列 7 は未接続です。QMK の分割キーボードは左右で同じ列数を前提とするため、左右とも 6 × 8 のマトリックスにそろえています。

ピン割り当て(左右共通)

用途GPIO
ROW0〜ROW5GP4〜GP9
COL0〜COL7GP10〜GP14、GP16〜GP18(GP15 は QFN の角で配線しにくいため使わない)
I2C1(OLED)SDA = GP2、SCL = GP3
サムホイールのエンコーダーA 相 = GP19、B 相 = GP20(共通端子は GND)
ドラム式ダイヤルのエンコーダー(右だけ)A 相 = GP22、B 相 = GP23(共通端子は GND)
左右間データGP1、左右接続の USB-C の D+
左右判定GP0
予備GP15、GP21、GP24〜GP29(左は GP22、GP23 も)

左右接続の USB-C は、VBUS に VCC(5 V)、D+ に DATA、GND をつなぎ、D− と CC は未接続です。D+ は表裏の 2 つのピン(A6、B6)をどちらも DATA につないでいるので、ケーブルはどちら向きに挿しても動きます。

  • CC に抵抗(5.1 kΩ)を付けていないので、規格どおりの PC や充電器は、この口につながった相手を受電側と認識せず、VBUS に電圧を出しません。PC のケーブルを誤ってこの口に挿しても、何も起きません。
  • 一方、この口の VBUS には、キーボードに電源が入っている間は VCC がそのまま出ています。キーボードを PC 用の口で PC につないだまま、この口を別の PC や充電器につながないでください。
  • データ線のない充電専用のケーブルでは、左右が通信しません。データ通信に対応した USB 2.0 以上の C-C ケーブルを使ってください。

配置

  • 表面: スイッチ、OLED、右半分のドラム式ダイヤルのエンコーダーです。スイッチプレートより上に出るのは、ドラム式ダイヤルの部品だけです(ベゼルで覆います)。
  • 裏面: ホットスワップソケット、ダイオード、RP2040、Flash、LDO などの周辺部品、リセットスイッチ、BOOTSEL パッド、USB-C × 2、サムホイールのエンコーダー。
  • 部品実装を頼む電子部品は、すべて裏面に載せています。JLCPCB の部品実装が片面で済み、両面より安くなります。部品の配置も、キーキャップや OLED のカバーを避ける制約がなくなり、単純になります。
  • 2 つの USB-C はどちらも奥の辺(上端)に置き、ケーブルを後ろへ出します。左右接続用は内側の角寄り(OLED の上)、PC 用はその 18 mm 外側です。同じ部品なので、2 つの差込口の高さはそろいます。どちらも基板の外形を幅 12 mm の舌として壁の中まで伸ばし、舌の先端へコネクタを載せています。差込口はケースの外面から 0.8 mm 内側です。舌の先端の角は半径 2.5 mm、付け根は半径 1.5 mm の R を付けてあり、基板単体で持っても角が手に刺さりません。
  • 基板と筐体は、左右それぞれのキー配列にぴったり合わせた大きさです(左は OLED の分だけ内側を広げています)。
  • 2 u 以上のキー(左 Shift 2.25 u、右 Backspace 2 u、右 Enter 2.25 u)には PCB マウント型スタビライザの穴があります。
  • 配線ルールは信号線 0.2 mm、電源線 0.4 mm、クリアランス 0.2 mm、ビア 0.6/0.3 mm です。最小配線幅は 0.15 mm で、USB-C の細いピンに入る部分だけで使っています。JLCPCB などの標準仕様(最小 0.127 mm)で製造できます。
  • マイコン周りの部品番号はシルクに収まらないため、Fab 層に入れています。半田付けには fab/<side>/nrsk-<side>-assembly-back.pdf(裏面の実装図、左右反転済み)を使ってください。配線の確認には fab/<side>/nrsk-<side>-copper.pdf を使えます(1 ページ目が表面 F.Cu、2 ページ目が裏面 B.Cu で、どちらも外形付き)。

サムホイール(角のダイヤル)

左半分の左上、右半分の右上の角に、親指でなぞって回すサムホイールを付けています。

左のサムホイール

  • 形: 直径 29.2 mm、厚さ 4.1 mm のホイールで、外周に 32 山の丸い歯(深さ 0.5 mm)があります。歯は指のすべり止めです。角の丸みと同心に置いていて、縁が角から約 3.5 mm、両側面から約 1 mm 出ます。
  • 位置: 基板と底のすき間(7 mm)に水平に寝かせています。壁の下側だけを切り欠くので、プレートと壁の上部は切れ目がありません。キーボードの高さも変わりません。
  • 検出: 基板裏面のホイールの中心の真上に、中空シャフトのロータリーエンコーダー Alps EC05E1220401 を下向きに付けています。ホイール上面の六角ピン(対辺 1.66 mm)が、エンコーダーの六角穴(対辺 1.72 mm)に 2 mm 入って回転部を回します。エンコーダーの下面に当たらないよう、ホイール上面の中心(半径 6 mm)を 0.4 mm 下げています。基板には、回転部の下に 3 mm 角の穴があります。
  • クリック: エンコーダーが内蔵するクリックを使い、1 回転 12 クリック(30° ごと)です。1 クリックで A 相と B 相がちょうど 1 周期進むので、クリックとファームウェアの 1 ステップは部品の中で一致しています。
  • 軸: 3D プリント版はトレイの床から立てた軸(直径 3.6 mm)、アクリル版は底板の下から通す M3 ネジを軸にします。ホイールの下面には軸穴(直径 4 mm × 深さ 2 mm)があります。親指で押す横向きの力はこの軸で受け、エンコーダーには回転だけを伝えます。軸と軸穴の間に半径方向で 0.2 mm 以上のすき間を設けて、基板とケースの位置ずれでホイールがこじれないようにしています。
  • 組み立て: 3D プリント版で基板をトンネルへ滑り込ませるとき、エンコーダーの下面は六角ピンの先端の約 0.3 mm 上を通ります。ホイールのある角を少し持ち上げて滑らせてください。基板を下ろすときは、ホイールの縁を指で少し回すと、ピンがエンコーダーの穴に入ります。
  • 左の Esc キー: エンコーダーと Esc のホットスワップソケットが重ならないよう、基板の上端を 1 mm 余分に延ばしてホイールを上へずらしています。そのため、すべてのスイッチを同じ向きで取り付けます。
  • ファームウェア: QMK のエンコーダー機能で読みます。エンコーダーは基板の裏で下を向いているので、A 相と B 相のピンを入れ替えて設定し、上から見た時計回りを正の向きとして扱います。USB をつないでいない側のホイールも、QMK が左右間の通信で送ります。
左ホイール右ホイール
回す(レイヤー 0)音量ページ上下
回す(レイヤー 1)画面の明るさカーソル左右

割り当ては keymap.c の encoder_update_user() で変更できます。

検討段階の記録として、側面ダイヤルの 2 タイプ(サムホイール型と横向きノブ型)を比べたレンダリングは docs/img/dial-study/dial-grid.jpg にあります。サムホイール型を採用し、角に置きました。

読み取りの方式は、当初の磁気角度センサー AS5600 と磁石、ボールプランジャーの組み合わせから、市販のロータリーエンコーダーに変えました。理由と検討した代替案は docs/specs/thumbwheel-encoder.md に、両者の断面の比較は docs/img/encoder-study/sheet.jpg にあります。

ドラム式ダイヤル(右上)

右半分の上段で、F12 の右に空いている 2 u の場所に、手前と奥へ転がすドラム式のダイヤルを付けています。奥へ転がすと上へ、手前へ転がすと下へスクロールします(レイヤー 1 では左右へスクロール)。

ドラム式ダイヤル

  • 形: 直径 13 mm、幅 21.6 mm のドラムで、表面に斜めのローレット(ねじれ角 30°、溝 36 本、深さ 0.4 mm)があります。細かいローレットを出すため、光造形の樹脂で作ります(case/print/right-drum.stl)。
  • 高さ: 軸は基板の上面から 7 mm です。ドラムの上端はプレートから 8.5 mm 出て、キーキャップの上面より 4.5 mm 低くなります。キーボードの高さは変わりません。
  • 位置: ドラムを囲むベゼルは、左右のフードが同じ大きさの対称な形で、2 u の空きをほぼ埋めています。左は F12 との間のプレートの帯、右は筐体の壁で端が決まるので、ベゼルとドラムの中心は下の段の Backspace(2 u)の中心より約 0.7 mm 右に来ます。
  • 検出: 軸が基板と平行な横型のロータリーエンコーダー Alps EC10E1220505(1 回転 24 クリック、12 パルス)を、ドラムの左に表面から差し込みます。ドラムの左端の六角ピン(対辺 1.66 mm)が、エンコーダーの六角穴(対辺 1.73 mm)に 1.6 mm 入って回します。
  • 軸受け: ドラムの右端の丸ピン(直径 2 mm)を、基板の穴 2 つに差し込んだ 3D プリントの軸受けブロックが受けます。ブロックの位置決めピンは基板の下へ出ないので、基板の下のサムホイールとは当たりません。ブロックの溝は上が開いた U 字で、入口を 1.8 mm に絞ってあるので、ピンを上から押し込むとはまって抜けません。指で押し下げる力は、エンコーダーとブロックの両方で受けます。
  • ベゼル: 3D プリントのベゼル(case/print/right-drum-bezel.stl)の枠を、プレートの穴に収めます。枠の上面はプレートと面一で、段差はありません。プレートを載せる前にベゼルを基板の上に置き、上からプレートをかぶせます。枠の下のつばがプレートの下面に当たってベゼルが抜けるのを止め、軸受けブロックの上面とエンコーダー側の脚が下から支えます。ベゼルのフードがエンコーダーを覆い、もう一方のフードの天井が軸受けブロックを押さえます。A、B、アクリル版で同じ部品を使います。
  • ファームウェア: QMK のエンコーダー機能で読みます(右半分の 2 個目のエンコーダー)。1 クリックで A 相と B 相が半周期だけ進むので、分解能(resolution)を 2 にしています。マウスのホイールのキーコードを送るため、QMK のマウスキー機能を有効にしています。実機で向きが逆なら、gen/make_qmk.py の pin_a と pin_b を入れ替えます。

設計の経緯と、検討した代替案は docs/specs/drum-dial.md にあります。

OLED

左右に 0.91 インチの OLED モジュール(128×32、SSD1306、I2C)を 1 枚ずつ付けています。

  • 配線: RP2040 の GP3(SCL)と GP2(SDA)に接続し、4.7 kΩ でプルアップしています。モジュールのピン順は GND / VCC / SCL / SDA です。VCC と GND が逆のモジュールもあるので、購入前に確認してください。
  • 配置: 左右とも内側の端、1〜2 段目の高さに縦向きで置き、上端からの位置をそろえています。モジュールは左右とも同じ向き(ピンヘッダが下)なので、ファームウェアの表示の向きは 1 つで済みます。右は 3 段目のキーの上の切り欠きに収まり、左は基板の内側を広げて、カバーの周りに 5.5 mm の帯を取っています(次の「筐体」)。
  • 取り付け: ピンヘッダの黒い樹脂スペーサーを外し、OLED のガラス上面が基板の上面から 2.5 mm の高さになるように、モジュールを基板に近づけて半田付けします。
  • 筐体: ハーフミラーのアクリルのカバー(case/laser/<side>-oled-cover)を、プレートの切り欠きにはめ込みます。カバーの周りに残るプレートの帯は、筐体の外周(上辺と内側の辺)までも、横のキーキャップまでも 5.5 mm です。カバーの 4 つの角はすべて R7 です。筐体の角に面する角は筐体の角(R12.5)と同心なので、帯の幅は角でも変わりません。帯の近くの外周のネジは省いています。カバーの下端は OLED モジュールの端から 1.5 mm 下で、OLED の表示(ガラス)がカバーの中央に来るように置いています。そのため、右のカバーの下の Y キーとの帯だけは 2.7 mm です。ハーフミラーのアクリルは 2 mm 厚からしか市販されていません。そこで 3D プリント版は壁の上面をカバーの下だけ 0.5 mm 下げて、上面をプレートと面一にしています(アクリル版は 0.5 mm 高くなります)。カバーは OLED のガラス面と壁の上面に透明両面テープで貼り、ネジは使いません。消灯中は鏡のように見え、点灯すると表示が透けて見えます。カバーの周りに余白を取るため、基板の上端を 5 mm 延ばし(ホイールのためにさらに 1 mm 延ばして計 6 mm)、内側を広げています。
  • 表示: QMK の oled_task_user で、USB をつないだ側にレイヤーと Caps Lock、もう一方に WPM を表示します。処理は firmware/qmk/keyboards/nrsk/keymaps/default/keymap.c にあります。

OLED の高さ・角度の比較

検討段階の記録です(採用したのは、上に書いたプレートと面一のハーフミラーのカバーです)。画像は今の基板・筐体の形で描き直しています。台座の位置は外形から計算し、壁の上に収まるように置いています。 キーキャップに隠れにくい OLED の付け方を、高さ 0〜13 mm の 4 案(A〜D)と傾斜 2 案(E・F)で比べました。 座った目線と寄りのレンダリングを、取り付け方式ごとに docs/img/render-grid.jpg にまとめています。 台座の形状は gen/oled_variants.py、レンダリングは gen/render_all.sh で作り直せます。デフォルトは確認用のプレビュー(長辺 1200 px、数分)で、FINAL=1 ./gen/render_all.sh とすると高画質(長辺 2400 px)で出力します。 B〜F は OLED を基板の外側(壁の上)へ移すため、基板のコネクタから配線でつなぐ前提です。

筐体

3D プリントとアクリルのレーザーカットのどちらでも作れるよう、同じ寸法のサンドイッチ構造にしています。3D プリントのトレイを使う版は 2 種類あり、どちらも正式な仕様です。

  • A:トレイ + 透明アクリルのプレート — トレイは 3D プリント、スイッチプレートは透明アクリル 1.5 mm(case/laser/<side>-plate)。プレート越しに基板が見えます。
  • B:全部 3D プリント — プレートも 3D プリント(case/print/<side>-plate.stl)。スイッチの爪が掛かる周りだけ 1.5 mm で、ほかは裏に 2 mm の補強があり、上下を逆にして印刷します。中は見えません。
  • アクリル版 — 底板・枠・プレートをすべてアクリルのレーザーカットで積み重ねます。

トレイは A と B で共通です。壁の中を縦にネジ穴が通り、上面には丸いくぼみ、その下に六角のナット受けがあります。A は透明アクリルのプレートを、ナット受けに入れた M2 ナットへスリムヘッド小ねじ M2 × 6 mm(頭 φ4 × 0.5 mm)で上から留めます。B は、プレート裏のボスに入れたヒートセットインサートへ、トレイの底の座ぐりから M2 × 12 mm のなべネジで留めるので、上面にネジは見えません。アクリル版は上から M2 × 20 mm で底板の下のナットまで共締めします。 基板は 8 か所の取り付け穴で筐体の底に固定し、スイッチプレートは外周のネジで留めます。 寸法の基準は MX の規格(プレート上面から基板上面まで 5.0 mm)です。

断面図 左の筐体と基板の重ね合わせ

部分A / B(3D プリントのトレイ、case/print/)アクリル版(case/laser/)
底トレイの床 2 mm、外周の下端 R2・上端 R0.6 のフィレット底板 3 mm(<side>-bottom)
壁トレイと一体、幅 8 mm、高さ 14.1 mm。ホイールの上は外せる角キャップ(<side>-wheel-cap.stl)枠 3 mm × 4 枚(差込口のある枠には切り欠き、frame4 は切り欠きなし)
基板の支持床から高さ 7 mm のボス(φ4.6、下穴 φ1.6)に M2 × 6 mm タッピングネジM2 × 7 mm スペーサーに、上から M2 × 4 mm、下から M2 × 5 mm のネジ
プレートA:透明アクリル 1.5 mm、上からスリムヘッド M2 × 6 mm でナット受けのナットへ/B:3D プリント(補強付き、裏のボスに M2 インサート)、底の座ぐりから M2 × 12 mm透明アクリル 1.5 mm、上から M2 × 20 mm とナットで底板まで共締め
ネジ本数外周 左 10・右 11、基板 左右 8 ずつ同じ

設計上の注意点です。

  • 取り付け穴は、スペーサーやボスが裏面のパッドや配線に触れない位置へ置きました(穴の中心から銅箔まで 2.75 mm 以上)。穴の周りには配線禁止の領域を設けています。
  • 2 つの USB-C は、基板の舌に載せて壁の中まで出しています。壁の外面にはコネクタの外形に 0.2 mm を足した角丸の長穴だけが開き、プラグの根元はすべてケースの外に出るので、ほとんどのケーブルが使えます。アクリル版は、舌とコネクタの高さの枠に切り欠きがあります。プレートと最上段の枠は切れ目のない輪のままです。

2 つの USB-C の差込口

  • 3D プリント版のトレイは、差込口のまわりも分割しない一体の部品です。舌とコネクタは、奥の壁の中の上が閉じたトンネルに収まります。トンネルの高さは、舌の上に 2.3 mm の余裕があります。この余裕の分だけ基板を浮かせれば、裏面の部品がボスの上を通り抜けられます(実装済みの基板の 3D モデルで確かめた最小値は 1.5 mm)。トンネルの上には厚さ 1.2 mm の天井が残ります(OLED カバーの下のくぼみに掛かる、左右接続用の USB-C 側の一部は 0.7 mm)。
  • 基板は、手前の縁を約 2° 持ち上げて手前の壁の上端を越えさせ、ボスより 2 mm 浮かせて奥の壁に近づけます。舌を 2 つのトンネルに差し込みながら奥へ 8 mm 滑らせ、手前を下ろしてボスに載せます。下の図は、左の USB-C の中心を通る断面で、左側がケース全体、右側が差込口まわりの拡大です。

基板をトンネルへ差し込む手順

  • 基板を床から 7 mm 浮かせているのは、ホイールとエンコーダー、裏面の部品のためです。
  • 底面には、リセットスイッチをピンで押すための φ3 mm の穴があります。
  • トレイの幅は左 178.1 mm、右 197.5 mm です。どちらも 220 mm 角の造形範囲(Ender-3、Bambu Lab A1/P1/X1、Prusa MK4 など)に入ります。180 mm 角の機種(A1 mini など)では入りません。
  • B のプレートは PETG など粘りのある材料が向いています。A のプレートと同じ DXF から、アクリルのほか FR4 1.6 mm やアルミ 1.5 mm で外注できます。
  • アクリル版の枠 4 枚の合計は 12.0 mm です。設計上の理想値 12.1 mm より 0.1 mm 薄く、その分プレートがスイッチを押し下げますが、アクリル板自体の厚み公差(±0.2 mm 程度)の範囲内です。気になる場合は、スペーサーの下に薄いワッシャーを挟んでください。
  • レーザーカットを外注するときは、DXF(単位 mm、全線カット)をそのまま入稿できます。スイッチ穴 14.0 mm はカット幅の補正が前提なので、補正の有無を業者に確認してください。

case/preview/viewer.html は組み立て状態を回して見られる 3D ビューアです。http://www.0x0c.me/spltnrskb/ で公開しています(.github/workflows/pages.yml)。 基板は KiCad の 3D プレビューと同じ部品実装済みの姿で表示します(gen/export_3d.py で KiCad から書き出し、gen/glb_mesh.py でブラウザ向けに軽量化)。 「分解表示」をオンにすると、スライダーでレイヤーどうしの間隔を 0〜40 mm で変えられます。 「台座」で角度(なし、3°、6°、9°)を選ぶと、台座に載せて傾けた姿になります。ケース、プレート、基板、スイッチ、ダイヤル、ゴム足、台座は、チェックボックスでそれぞれ表示と非表示を切り替えられます。

組み立て手順は、同じデータを使ったインタラクティブな組み立てガイド(case/preview/assembly.html、公開版は http://www.0x0c.me/spltnrskb/assembly.html)で確認できます。手順ごとに部品が所定の位置に入るアニメーションと説明が出て、A・B・アクリル版と左右を切り替えられます。

三面図

case/print/ の STL は、部品ごとに三面図(第三角法:平面図・正面図・右側面図)を case/drawings/<部品名>.pdf に用意しています。A3 横の用紙に、収まる最大の標準尺度(10:1〜1:2)で描き、全体の寸法(幅・奥行き・高さ)と表題欄を入れています。見える稜線と輪郭は実線、隠れる部分は破線(かくれ線)です。部品は STL の向きのまま描くので、台座は印刷するときの姿勢、B のプレートは上面が上です。

例:左のトレイ、右のプレート(B)、9° の台座(左)

線は拡大しても粗くならないベクトルです。日本語の文字には PDF 標準の日本語フォント(平成角ゴシック)を指定し、埋め込んでいません。表示するときは閲覧ソフトの日本語ゴシック体で置き換わります(macOS のプレビュー、Acrobat、Chrome、Firefox で表示できます)。

STL を書き出すスクリプト(make_case.py、foot_coupon.py、pin_coupon.py、make_enctest.py)は、print/ に STL を書くたびに、同じ階層の drawings/ の三面図を作り直します(検証基板の筐体は enctest/case/drawings/)。各 PDF には、元の STL、gen/case_drawings.py、オプションのハッシュを記録しています。どれも変わっていなければ描き直しを省くので、STL の中身が同じなら時間はかかりません。描くのは gen/case_drawings.py です(numpy だけで動きます)。メッシュの稜線(面どうしが 35° より大きく折れる辺)と輪郭を拾い、深度バッファで見える部分と隠れる部分に分けます。フィレットは薄い段を積み重ねた形なので、段の辺は描かず、フィレットの両端の線だけを残します。STL を指定すると、その部品だけを描きます(python3 gen/case_drawings.py case/print/left-tray.stl、かくれ線なしは --no-hidden、変更がなくても描き直すときは --force)。

ゴム足と台座

3D プリント版のトレイの底には、ゴム足(3M CS-02、直径 9.5 mm)を貼る位置を決めるくぼみ(直径 10 mm、深さ 1 mm)が 5 か所あります。くぼみはプレートのネジの座ぐりを避けているので、プレートを外すときにゴム足を剥がす必要はありません。サムホイールのある角だけは、ホイールを挟んで 2 個です。この配置で、すべてのキーがゴム足で囲まれた範囲の内側に入ります。

奥を持ち上げたいときは、3D プリントの台座(case/print/<side>-stand-3.stl、-6、-9)に載せます。台座は奥の辺と両側の辺に沿った U 字で、上面のくぼみに奥の 3 つのゴム足が収まり、手前の 2 つのゴム足は机に載ります。ネジは使わず、角度を変えるときは台座を取り替えます。9° の台座の高さは 22.9 mm です。

台座に載せた左半分(9°)

傾け方は、トレイに付ける脚 3 案(磁石式、折りたたみ式、ねじ込み式)と台座 2 案(全周、奥の U 字)をモデルにして比べ、U 字の台座に決めました。比較の画像は docs/img/tilt-study/sheet.jpg、表は docs/img/tilt-study/table.md、経緯は docs/specs/case-feet-tilt.md にあります。くぼみのはめあいは印刷機によって変わるので、トレイの前に case/print/foot-coupon.stl を印刷して確かめてください(手順は docs/ordering.md の 7 章)。

部品表(BOM)

左右合計の部品表を bom/nrsk-bom.csv(Excel で開ける UTF-8)と bom/nrsk-bom.md にまとめました。 基板の電子部品、キースイッチとキーキャップ、筐体のネジ類と材料、ケーブルまで含みます。 数量は回路図と筐体のデータから自動で数えているので、レイアウトを変えても ./build.sh で更新されます。 片側ごとの KiCad の部品表は fab/<side>/nrsk-<side>-bom.csv にあります。

各行には、実際に買える部品のメーカー型番・購入先・参考単価・商品ページの URL を付けています。商品ページはすべて開いて型番と仕様を確認しました(LCSC の品は 2026-10-10、ほかは 2026-10-04 時点)。 LCSC で買えるものは、すべて LCSC を最初の購入先にしています。

  • LCSC:基板の電子部品とエンコーダー、キースイッチ、ホットスワップソケット、OLED、USB ケーブル、M2 スペーサー、一部のネジ、ヒートセットインサート。電子部品は JLCPCB の実装サービスでもそのまま使える部品番号です。ネジ類は 100 本単位などのまとめ売りです
  • LCSC にないもの:スタビライザー、キーキャップ、左右接続用の C-C ケーブル(遊舎工房など)、残りのネジとナット、ゴム足(MonotaRO)、アクリル加工(はざいや、菅原工芸)。BOM の備考に理由を書いています
  • 基板:JLCPCB

購入先は gen/bom_sources.json にまとめてあり、価格や在庫は変わるので発注前に確認してください。

注文先ごとの手順と数量(筐体の版ごとのネジやアクリルを含む)は docs/ordering.md にまとめています。注文の前に確かめることは docs/pre-order-checklist.md にあります。

次の部品は、発注前に特に確認してください。

  • 水晶振動子:Raspberry Pi のリファレンスと同じ Abracon ABM8-272-T3(12 MHz、負荷容量 10 pF)を 15 pF のコンデンサと組み合わせます。安価な YXC X322512MSB4SI は負荷容量 20 pF なので、そのままでは合いません。
  • QSPI Flash:W25Q128JVSIQ は LCSC に 2 つの部品番号があり、よく使われる C97521 は確認時に在庫切れでした。BOM には在庫のある C113767 を載せています。
  • ロータリーエンコーダー:Alps EC05E1220401 は LCSC(C116648)で 1 個から買えます。ホイールの六角ピンのはめあいは印刷機によって変わるので、対辺を変えた 7 本のピンを並べた case/print/pin-coupon.stl を印刷して確かめてください(手順は docs/thumbwheel-check.md)。ピンの対辺は gen/make_case.py の PIN_AF で変えられます。
  • ドラム式ダイヤルのエンコーダー:Alps EC10E1220505 は LCSC(C160888)で 5 個単位です。基板の表に挿入実装する部品なので、JLCPCB の部品実装には含めず、手で半田付けします。ドラムの六角ピンのはめあいは、サムホイールと同じく試し印刷で確かめてください。2 つのエンコーダーの機構と信号は、キーボードを作る前に 検証基板 で確かめられます。
  • OLED:LCSC の HS91L02W2C01 は、写真ではピン順が GND/VCC/SCL/SDA ですが、3.3 V で動くかとピンヘッダが付くかはページに書かれていません。遊舎工房の品も代替として BOM に載せています。どちらもピン順を現物で確認してください。

主な部品(左右合計)は次のとおりです。

部品数量
マイコン RP2040(QFN-56)2
QSPI Flash W25Q128JVSIQ(16 MB)2
水晶振動子 12 MHz Abracon ABM8-272-T32
LDO AP2112K-3.32
USB-C レセプタクル HRO TYPE-C-31-M-124
USB ESD 保護 USBLC6-2SC62
OLED モジュール 0.91 インチ(128×32)2
ロータリーエンコーダー Alps EC05E1220401(サムホイール用)2
ロータリーエンコーダー Alps EC10E1220505(ドラム式ダイヤル用、右だけ)1
ダイオード 1N4148W80
MX 互換スイッチ/Kailh ホットスワップソケット各 80
2 u スタビライザー3
0805 の抵抗とコンデンサ抵抗 20、コンデンサ 36
M2 ネジ類外周 21 本、基板固定 16 か所

JLCPCB での基板製造と部品実装

基板の電子部品は、すべて裏面に載っています。JLCPCB の部品実装サービスに、左右を別々の注文として出します。実装用のファイルは gen/make_jlc.py が作ります。

  • fab/<side>/nrsk-<side>-jlc-bom.csv:JLCPCB の形式の部品表(Comment、Designator、Footprint、LCSC Part #)
  • fab/<side>/nrsk-<side>-jlc-cpl.csv:部品の位置と回転(Designator、Mid X、Mid Y、Layer、Rotation)

実装を頼むのは 20 種類(左 77 個、右 81 個)です。OLED、ドラム式ダイヤルのエンコーダー、ホットスワップソケット、キースイッチは手で付けます。OLED はガラスの高さを合わせて半田付けする必要があり、ドラム式ダイヤルのエンコーダーは表面の挿入部品で、ソケットは表面のフットプリントに属しているので、実装ファイルから外しています。

注文の手順は次のとおりです。

  1. JLCPCB の基板の注文画面で fab/<side>/nrsk-<side>-gerber.zip をアップロードします(2 層、厚さ 1.6 mm)。
  2. 部品実装(PCB Assembly)を選び、実装面を裏面(Bottom)にします。JLCPCB の部品実装は 1 つの設計につき 2 枚からです。
  3. 部品表に nrsk-<side>-jlc-bom.csv、配置に nrsk-<side>-jlc-cpl.csv を渡します。
  4. 配置のプレビューで、RP2040 と Flash の 1 番ピン、ダイオードの向き、2 つの USB-C の向き(差込口が基板の端を向く)、エンコーダーの位置を確かめます。

JLCPCB は、部品ごとに自社の部品ライブラリ(EasyEDA)のフットプリントで配置します。KiCad のフットプリントと回転や原点が違う部品は、make_jlc.py で補正しています。補正の値は、EasyEDA のフットプリントを基板のパッドに重ね合わせて求めました。CPL どおりに置いた EasyEDA のフットプリントでは、どの部品もすべてのパッドが同じ名前の基板のパッドに載ります(中心のずれは最大 0.46 mm で、水晶の手半田用のパッドが長いため)。USB-C だけは、実績を集めた補正表(JLCKicadTools)が 180° の補正を指定しています。しかし今の EasyEDA のフットプリントは KiCad と同じ向きなので、補正を入れていません。プレビューで差込口が基板の内側を向いていたら、make_jlc.py の JLC_FIX で USB-C の回転を 180 にしてください。

JLCPCB の部品の在庫は 2026-10-10 に確かめました(JLCPCB の部品一覧を写した非公式の検索サービス jlcsearch による)。拡張部品(Extended)は 9 種類で、種類ごとに追加料金がかかります。エンコーダー EC05E1220401 は在庫が 41 個と少ないので、注文前に確認してください。USB の 27 Ω 抵抗は、在庫が 5 個しかなかった YAGEO の品から、推奨部品の UNI-ROYAL 0805W8F270JT5E(C17594)に替えています。

ファイル構成

入力は kle/ のキー配列だけで、ほかのデータはすべて gen/ のスクリプトで生成します。 <side> は left または right です。

text
spltnrskb/
├── kle/                         入力:キー配列(Keyboard Layout Editor の JSON、左右 1 つずつ)
│   ├── left.json
│   └── right.json
├── left/, right/                KiCad プロジェクト(左右で同じ構成)
│   ├── nrsk-<side>.kicad_pro    プロジェクト設定(基板ルールとネットクラス)
│   ├── nrsk-<side>.kicad_sch    回路図
│   ├── nrsk-<side>.kicad_pcb    配線済みの基板
│   ├── erc.rpt, drc.rpt         ERC(回路図の検査)と DRC(基板の検査)の結果
│   ├── case_data.json           筐体の生成に渡す基板の寸法(外形、取付穴、コネクタの位置)
│   └── fp-lib-table, sym-lib-table  ライブラリの参照設定
├── lib/                         左右共通の自作ライブラリ
│   ├── nrsk.kicad_sym           回路図シンボル
│   ├── nrsk.pretty/             フットプリント(MX ホットスワップ 1u〜2.25u、OLED、エンコーダー、ドラムの軸受け)
│   └── nrsk.3dshapes/           OLED モジュールとドラム式ダイヤルのエンコーダーの 3D モデル
├── fab/<side>/                  基板の発注用データ
│   ├── nrsk-<side>-gerber.zip   ガーバーとドリル
│   ├── nrsk-<side>-bom.csv      片側の部品表
│   ├── nrsk-<side>-jlc-bom.csv  JLCPCB の部品実装用の部品表
│   ├── nrsk-<side>-jlc-cpl.csv  JLCPCB の部品実装用の配置(位置と回転)
│   ├── nrsk-<side>-schematic.pdf     回路図
│   ├── nrsk-<side>-copper.pdf        配線図(1 ページ目が表、2 ページ目が裏)
│   └── nrsk-<side>-assembly-back.pdf 裏面の実装図
├── case/                        筐体

gen/ のスクリプトは、build.sh が次の順に呼び出します。

段階スクリプト生成するもの
部品ライブラリfetch_3d.sh、models3d.py、footprints.py3D モデルの取得、OLED の 3D モデル、lib/nrsk.pretty
回路図layout.py、make_sch.py、make_pro.pyKLE の解析とピン割り当て、回路図、プロジェクト設定
基板make_pcb.py、route.py、sexpr.py部品の配置、Freerouting による自動配線、KiCad ファイルの読み書き
3D 出力export_3d.py、glb_mesh.pyビューア用の基板メッシュ(build/3d/、Git の管理対象外)
ファームウェアmake_qmk.pyfirmware/qmk/keyboards/nrsk/
筐体make_case.py、case_preview.py、case_section.py、case_viewer.py、assembly_guide.py、case_drawings.py(make_case.py から呼ばれる)case/ 以下のすべて
部品表make_bom.py、bom_sources.jsonbom/(購入先の情報は bom_sources.json に手で記入)
JLCPCB の実装データmake_jlc.pyfab/<side>/nrsk-<side>-jlc-bom.csv、fab/<side>/nrsk-<side>-jlc-cpl.csv
README の画像doc_images.shdocs/img/left-*.png、docs/img/right-*.png、断面図

次のスクリプトは build.sh に含まれず、必要なときに手で実行します。

  • 完成イメージのレンダリング:render_blender.py、render_all.sh、render_grid.py
  • 3D の確認ページ:export_web3d.sh、render_details.sh、views_page.py
  • A と B の比較画像、差込口、基板の差し込み手順の断面図:render_compare.sh、compare_ab.py、port_slide.py
  • OLED と開口の比較検討:oled_variants.py、oled_study.sh、oled_sheet.py、port_variants.py
  • 六角ピンの試し印刷:pin_coupon.py(case/print/pin-coupon.stl。使い方は docs/thumbwheel-check.md)
  • ゴム足のくぼみの試し印刷:foot_coupon.py(case/print/foot-coupon.stl。使い方は docs/ordering.md の 7 章)
  • チルト脚と台座の比較検討:tilt_variants.py、tilt_stands.py、render_tilt.py、tilt_sheet.py、tilt_study.sh。台座そのものは make_case.py が作ります
  • エンコーダーの検証基板:build_enctest.sh、make_enctest.py、render_enctest.py(使い方は docs/encoder-test-board.md)

KLE を編集した場合は ./build.sh を実行すると、回路図、基板、配線、ERC/DRC、製造データ、筐体、BOM、QMK 定義をすべて作り直します。 行の配線とダイオード周りはスクリプトで規則的に引き、残りを Freerouting(tools/freerouting-2.4.1.jar)に任せています。 Freerouting の結果には乱数によるばらつきがあるため、未配線と DRC の違反がどちらも 0 になるまで最大 25 回やり直します。 配線のあと、表裏に GND のベタを敷き、約 5 mm 間隔のビアで表裏をつなぎます(route.py の pour())。配線で囲まれた細い部分にもビアを足し、それでもつながらない銅は取り除きます。SMD のパッドはベタにそのままつなぎ、手で半田付けするスルーホールのパッドだけ、熱が逃げにくいよう細い線でつなぎます。

環境の準備

./build.sh で全データを作り直すには、次のツールが必要です(macOS で確認)。

  • KiCad 10(~/Applications/KiCad または /Applications/KiCad)
  • OpenJDK と Freerouting 2.4.1
  • 筐体の生成用に Python 3 の仮想環境と manifold3d
  • 完成イメージのレンダリング用に Blender(任意)
bash
brew install openjdk
bash
mkdir -p tools && curl -L -o tools/freerouting-2.4.1.jar https://github.com/freerouting/freerouting/releases/download/v2.4.1/freerouting-2.4.1.jar
bash
python3 -m venv .venv && .venv/bin/pip install manifold3d numpy matplotlib

KiCad の標準ライブラリにない 3D モデルは、./build.sh の冒頭で gen/fetch_3d.sh が tools/ へ取ってきます(Git の管理対象外です)。

  • MX スイッチ、Kailh ホットスワップソケット、スタビライザー:kiswitch(CC-BY-SA 4.0、設計データへの利用は例外規定あり)
  • USB-C(C165948):LCSC/EasyEDA のモデルを easyeda2kicad で取得
  • OLED モジュールとドラム式ダイヤルのエンコーダー(EC10E):gen/models3d.py で作る簡易モデル(lib/nrsk.3dshapes/)
  • サムホイールのエンコーダー(EC05E1220401):Alps Alpine の製品ページの STEP(tools/alps/)

これがあれば KiCad の 3D ビューアでも、すべての部品が実装された状態で表示されます。

bash
blender -b -P gen/render_blender.py -- --samples 192 --res 1800

ファームウェア

ファームウェアは QMK で作ります。キーボード定義は firmware/qmk/keyboards/nrsk にあります。 左右とも同じファームウェアを書き込みます。左右の判定は基板の配線(GP0)で決まるので、左用・右用を分ける必要はありません。

1. QMK の準備(初回のみ)

bash
brew install qmk/qmk/qmk
bash
qmk setup

qmk setup は ~/qmk_firmware に QMK を取得し、ビルドに使う ARM のコンパイラなどもまとめて入れます。 Windows では QMK MSYS を使ってください。 Homebrew の arm-none-eabi-gcc は標準 C ライブラリ(newlib)を含まないためビルドできません。その場合は Arm 公式の Arm GNU Toolchain(arm-none-eabi)を ~/.local/opt に展開します(sudo は不要です)。

bash
mkdir -p ~/.local/opt && curl -L https://developer.arm.com/-/media/Files/downloads/gnu/15.2.rel1/binrel/arm-gnu-toolchain-15.2.rel1-darwin-arm64-arm-none-eabi.tar.xz | tar -xJ -C ~/.local/opt

次の手順のスクリプトは、コンパイラを自動で探して使います。探す場所は ~/.local/opt/arm-gnu-toolchain-*-arm-none-eabi と /Applications/ArmGNUToolchain です。別の場所に置いた場合は、環境変数 ARM_TOOLCHAIN にそのディレクトリを指定してください。

2. ビルドする

bash
firmware/qmk/compile.sh

キーボード定義を ~/qmk_firmware/keyboards/nrsk に同期してから qmk compile -kb nrsk -km default を実行します。ビルドが通ると firmware/qmk/build/nrsk_default.uf2 ができます(~/qmk_firmware/nrsk_default.uf2 にも残ります)。別のキーマップは firmware/qmk/compile.sh mine のように名前を渡します。

3. 書き込む(左右それぞれ 1 回ずつ)

RP2040 は ROM に USB ブートローダーを持っています。専用の書き込み器やドライバは要りません。

  1. 左右接続のケーブルを外し、書き込む側の半分だけを、PC 用の口(外側の USB-C)で PC につなぎます。

  2. その半分を書き込みモードにします。PCに RPI-RP2 という USB ドライブが現れれば成功です。

    • 初めて書き込むとき(Flash が空)は、USB を挿すだけで書き込みモードになります。
    • 2 回目以降は、底面の穴からリセットスイッチをピンで素早く 2 回押します。
    • 一番左上のキーを押したまま USB ケーブルを挿しても入れます(Bootmagic)。左半分は Esc、右半分は F7 の左にある刻印なしのキーです。
    • どれも効かないときは、裏面の BOOTSEL パッド(JP1)をピンセットで短絡したまま USB を挿します。
  3. nrsk_default.uf2 を RPI-RP2 ドライブにコピーします。コピーが終わると自動で再起動し、キーボードとして認識されます。コマンドで書き込む場合は次のとおりです(書き込みモードになるのを待ってから書き込みます)。

    bash
    qmk flash -kb nrsk -km default
  4. もう片方も同じ手順で書き込みます。

  5. 最後に左右の内側の USB-C どうしを C-C ケーブルでつなぎ、どちらか片方の外側の USB-C を PC につなぎます。USB をつないだ側がマスタになり、その側の OLED にレイヤーと Caps Lock、もう一方に WPM が表示されます。

うまくいかないとき

  • RPI-RP2 ドライブが出ない場合は、USB ケーブルが充電専用でないか確認し、BOOTSEL パッドを短絡したまま挿し直してください。それでも出ない場合は、水晶、Flash、3.3 V LDO の半田付けを確認してください。
  • 左右が通信しない場合は、左右接続のケーブルがデータ通信に対応しているか(充電専用でないか)と、両側とも内側の USB-C に挿さっているかを確認してください。

キーマップ

デフォルトのキーマップは KLE の刻印どおりで、fn を押している間はレイヤー 1 になります(矢印キーが Home/End/PgUp/PgDn、Backspace が Delete)。 キーマップを変えるには、firmware/qmk/keyboards/nrsk/keymaps/default/keymap.c を編集します。自分用のフォルダ(例: keymaps/mine/)を作り、firmware/qmk/compile.sh mine でビルドしてもかまいません。

発注・組み立て前の確認事項

  • DRC と ERC の結果です(2026-10-12、KiCad 10.0.6、GND のベタを表裏に敷いた後の基板)。左右とも、DRC の違反と警告、未接続のパッド、回路図との不一致、ERC の違反はすべて 0 件です。USB-C の外形線は舌の角に掛かるため、シルクではなく Fab 層に描いています(lib/nrsk.pretty の USB-C のフットプリント)。
  • RP2040 は 0.4 mm ピッチの QFN で、裏面のサーマルパッドも GND に半田付けする必要があります。手半田はホットエアかリフローが前提なので、JLCPCB の部品実装サービスを使います。USB-C(0.5 mm ピッチ)も同様です。注文に使うファイルと手順は docs/ordering.md にあります。
  • JLCPCB の配置のプレビューでは、2 つの USB-C(J1、J2)の差込口が基板の外側を向いているかを必ず確かめてください。USB-C の回転の補正値は、実際の実装でまだ確かめていません。エンコーダー EC05E1220401 は JLCPCB の在庫が少ないので、在庫も注文の直前に確かめます。
  • ホットスワップソケットのフットプリントは、一般的な Kailh CPG151101S11 の寸法で作った自作品です。1 枚目は実物のソケットと照合してください。
  • QMK のファームウェアは、firmware/qmk/compile.sh(qmk compile -kb nrsk -km default)が警告なしで通ることを確認しています。使ったのは、現行の qmk_firmware(2026-10 時点)と Arm GNU Toolchain 15.2.rel1 です。確認は 2026-10-12 に、ドラム式ダイヤルを足した後の設定で行いました。出力は nrsk_default.uf2(約 87 KB)です。実機での動作(キー入力、左右通信、OLED、ホイール)はまだ確認していません。

Parts

135
QtyValueFootprintReferences
421N4148WDiode_SMD:D_SOD-123D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +26
110.1uFCapacitor_SMD:C_0805_2012MetricC5, C6, C7, C8, C11, C12, C13, C14, C15, C18, C20
8M2MountingHole:MountingHole_2.2mm_M2H1, H2, H3, H4, H5, H6, H7, H8
41uFCapacitor_SMD:C_0805_2012MetricC3, C4, C16, C17
210kResistor_SMD:R_0805_2012MetricR1, R6
215pFCapacitor_SMD:C_0805_2012MetricC1, C2
21kResistor_SMD:R_0805_2012MetricR7, R10
227Resistor_SMD:R_0805_2012MetricR2, R3
24.7kResistor_SMD:R_0805_2012MetricR8, R9
25.1kResistor_SMD:R_0805_2012MetricR4, R5
2Spacenrsk:SW_MX_Hotswap_1.00uSW36, SW37
2USB-Cnrsk:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1, J2
1'nrsk:SW_MX_Hotswap_1.00uSW27
1,nrsk:SW_MX_Hotswap_1.00uSW31
1-nrsk:SW_MX_Hotswap_1.00uSW11
1.nrsk:SW_MX_Hotswap_1.00uSW32
1/nrsk:SW_MX_Hotswap_1.00uSW33
10nrsk:SW_MX_Hotswap_1.00uSW10
110uFCapacitor_SMD:C_0805_2012MetricC19
112MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSolderingY1
1500mAFuse:Fuse_1206_3216MetricF1
17nrsk:SW_MX_Hotswap_1.00uSW7
18nrsk:SW_MX_Hotswap_1.00uSW8
19nrsk:SW_MX_Hotswap_1.00uSW9
1;nrsk:SW_MX_Hotswap_1.00uSW26
1=nrsk:SW_MX_Hotswap_1.00uSW12
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U4
1B5819WDiode_SMD:D_SOD-123D99
1BOOTSELJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1
1Backspacenrsk:SW_MX_Hotswap_2.00uSW13
1Cmdnrsk:SW_MX_Hotswap_1.25uSW38
1Drum_Dial_Bearingnrsk:Drum_Dial_BearingDRUM1
1EC05E1220401nrsk:Alps_EC05E1220401ENC1
1EC10E1220505nrsk:Alps_EC10EENC2
1Enternrsk:SW_MX_Hotswap_2.25uSW28
1F10nrsk:SW_MX_Hotswap_1.00uSW4
1F11nrsk:SW_MX_Hotswap_1.00uSW5
1F12nrsk:SW_MX_Hotswap_1.00uSW6
1F7nrsk:SW_MX_Hotswap_1.00uSW1
1F8nrsk:SW_MX_Hotswap_1.00uSW2
1F9nrsk:SW_MX_Hotswap_1.00uSW3
1Hnrsk:SW_MX_Hotswap_1.00uSW22
1Inrsk:SW_MX_Hotswap_1.00uSW16
1Jnrsk:SW_MX_Hotswap_1.00uSW23
1Knrsk:SW_MX_Hotswap_1.00uSW24
1Lnrsk:SW_MX_Hotswap_1.00uSW25
1Mnrsk:SW_MX_Hotswap_1.00uSW30
1Nnrsk:SW_MX_Hotswap_1.00uSW29
1Onrsk:SW_MX_Hotswap_1.00uSW17
1OLED 128x32nrsk:OLED_0.91in_128x32_I2CJ3
1Optnrsk:SW_MX_Hotswap_1.25uSW39
1Pnrsk:SW_MX_Hotswap_1.00uSW18
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1
1ResetButton_Switch_SMD:SW_SPST_PTS810RSW1
1Unrsk:SW_MX_Hotswap_1.00uSW15
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U2
1W25Q128JVSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU5
1Ynrsk:SW_MX_Hotswap_1.00uSW14
1[nrsk:SW_MX_Hotswap_1.00uSW19
1\nrsk:SW_MX_Hotswap_1.50uSW21
1]nrsk:SW_MX_Hotswap_1.00uSW20
1fnnrsk:SW_MX_Hotswap_1.00uSW35
1←nrsk:SW_MX_Hotswap_1.00uSW40
1↑nrsk:SW_MX_Hotswap_1.00uSW34
1→nrsk:SW_MX_Hotswap_1.00uSW42
1↓nrsk:SW_MX_Hotswap_1.00uSW41

More from 0x0c/spltnrskb

2
  • 2 layers161.1 × 133.5 mmNrsk left, the printed circuit board in 3D

    Nrsk left

    0x0c/spltnrskb

    KLE レイアウト(kle/left.json、kle/right.json)から生成した、左右分割・有線接続のキーボード基板です。 KiCad 10 のプロジェクト(回路図と配線済み基板)、製造用ガーバー、BOM、QMK ファームウェア設定を含みます。筐体のデータ(アクリルのレーザーカット用 DXF/SVG と 3D プリント用 STL)も入っています。

    125 parts1
  • 2 layers69.6 × 32.1 mmNrsk enctest, the printed circuit board in 3D

    Nrsk enctest

    0x0c/spltnrskb

    KLE レイアウト(kle/left.json、kle/right.json)から生成した、左右分割・有線接続のキーボード基板です。 KiCad 10 のプロジェクト(回路図と配線済み基板)、製造用ガーバー、BOM、QMK ファームウェア設定を含みます。筐体のデータ(アクリルのレーザーカット用 DXF/SVG と 3D プリント用 STL)も入っています。

    10 parts1

Similar boards

  • 2 layers42 × 42 mmSportsWatch, the printed circuit board in 3D

    SportsWatch

    HaydenGillen/SportsWatch

    This GPS watch project began from my interest in building a custom fitness device that records accurate run and cycle data and allows users to create and implement their own features.

    49 parts
  • 4 layers338.8 × 170.4 mmSlack, the printed circuit board in 3D

    Slack

    Dreamy-Jy/slack

    An ergonomic relaxing keyboard.

    392 parts
  • 4 layers120 × 89.3 mmSMK macro pad, the printed circuit board in 3D

    SMK macro pad

    mburger89/SMK_macro_pad

    4x4 wireless macro pad — RP2040 + Raspberry Pi RM2. KiCad project generated from Python; includes a 42%-smaller 'mini' variant with back-mounted electronics.

    89 partsMIT
  • 4 layers100 × 100 mmPower feed, the printed circuit board in 3D

    Power feed

    liorknafo/power-feed-manual-mill

    DIY stepper power feed for a SIEG X3.5D mill: electromagnetic clutch, RP2040 controller PCB, Rust firmware, build123d CAD

    195 parts
  • 4 layers81 × 113.2 mmAuralab Workstation Vishal, the printed circuit board in 3D

    Auralab Workstation Vishal

    Vishalbabu-09/Auralab_Workstation

    Advanced 4-layer PCB design featuring split-plane noise isolation (AGND/DGND) and asynchronous dual-core processing. Implements a handheld multi-tool oscilloscope, current tracker, and symmetrical DC power supply.

    81 parts1
  • 4 layers76 × 50 mmWigglecam, the printed circuit board in 3D

    Wigglecam

    jadenrhee/wigglecam-controller

    RP2040 co-processor board for a 4-lens wigglegram camera: constant-current flash, controls, battery telemetry, Pi 5 I2C interface. 4-layer, DRC-clean, fab-ready.

    105 parts
  • 2 layers70 × 72 mmSupply ui, the printed circuit board in 3D

    Supply ui

    GarryBGoode/VibeSupply

    USB PD based powersupply developed on vibes (claude)

    56 parts
  • 2 layers80 × 40 mmCryptick token pcb, the printed circuit board in 3D

    Cryptick token pcb

    alphaseneca/cryptick-token-pcb

    Hardware schematics, 2-layer PCB layout, and manufacturing files for Cryptick Token — the 100% open-source biometric hardware security key and cryptographic hardware enclave.

    56 partsMIT

Questions

How big is the Nrsk right PCB?

It measures 180.5 × 133.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Nrsk right use?

135 parts, built around the RP2040, W25Q128JVSIQ, AP2112K-3.3 and USBLC6-2SC6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Nrsk right KiCad files?

From the 0x0c/spltnrskb repository on GitHub, at the commit this page was made from: the board is right/nrsk-right.kicad_pcb and its schematic enctest/nrsk-enctest.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Nrsk right design in my own project?

Its repository states no licence, so its author keeps all rights: ask 0x0c before reusing the design.