메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

5x5 매크로 키보드 만들기

데브카페
Devcafe (토론 | 기여)님의 2026년 7월 6일 (월) 15:44 판 (새 문서: # SuperMini NRF52840 × 5×5 매크로 키보드 ## 핀 할당 (5 Row + 5 Col = 10핀) SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다. --- ### 납땜 핀 번호 (보드 실크스크린 기준) | 용도 | 보드 라벨 | nRF52840 핀 | |------|---------|------------| | Row 0 | **011** | P0.11 | | Row 1 | **013** | P0.13 | | Row 2 | **015** | P0.15 | | Row 3 | **017** | P0.17 | | Row 4 | **020** | P0.20 | | Col 0 | **022** | P0.22 | | Col 1 | **0...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
  1. SuperMini NRF52840 × 5×5 매크로 키보드
    1. 핀 할당 (5 Row + 5 Col = 10핀)

SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.

---

      1. 납땜 핀 번호 (보드 실크스크린 기준)

| 용도 | 보드 라벨 | nRF52840 핀 | |------|---------|------------| | Row 0 | **011** | P0.11 | | Row 1 | **013** | P0.13 | | Row 2 | **015** | P0.15 | | Row 3 | **017** | P0.17 | | Row 4 | **020** | P0.20 | | Col 0 | **022** | P0.22 | | Col 1 | **024** | P0.24 | | Col 2 | **100** | P1.00 | | Col 3 | **011** | P1.11 | | Col 4 | **113** | P1.13 |

> ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고

---

      1. 보드 핀 다이어그램

```

        USB-C
   ┌─────────────┐

B- │ o o │ B+ 006 │ o o │ RAW 008 │ o o │ GND GND │ o o │ RST 020 │ o [Row 4] o │ VCC 022 │ o [Col 0] o │ 031 024 │ o [Col 1] o │ 029 100 │ o [Col 2] o │ 002 011 │ o [Row 0] o │ 115 104 │ o o │ 113 [Col 4] 106 │ o o │ 111 [Col 3] 009 │ o o │ 010 008 │ o o │ 106

   └─────────────┘

※ Row 1~3 핀: 별도 연결 필요 Row 1 → 013 (P0.13) Row 2 → 015 (P0.15) Row 3 → 017 (P0.17) ```

---

      1. ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준)

| 용도 | 보드 라벨 | GPIO | |------|---------|------| | **Row 0** | 006 | P0.06 | | **Row 1** | 008 | P0.08 | | **Row 2** | 009 | P0.09 | | **Row 3** | 010 | P0.10 | | **Row 4** | 017 | P0.17 | | **Col 0** | 020 | P0.20 | | **Col 1** | 022 | P0.22 | | **Col 2** | 024 | P0.24 | | **Col 3** | 100 | P1.00 | | **Col 4** | 011 | P0.11 |

---

    1. 배선도

``` 스위치 매트릭스 (다이오드 col2row 방향)

       Col0  Col1  Col2  Col3  Col4
       (020) (022) (024) (100) (011)
         │     │     │     │     │

Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]

         │     │     │     │     │

Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]

         │     │     │     │     │

Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]

         │     │     │     │     │

Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]

         │     │     │     │     │

Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]

각 스위치에 다이오드(1N4148) 직렬 연결 캐소드(띠) → Col 방향 ```

---

    1. ZMK 펌웨어 파일 구성
      1. 📁 폴더 구조

``` zmk-config/ ├── config/ │ ├── macro25.conf │ ├── macro25.keymap │ └── boards/shields/macro25/ │ ├── macro25.overlay │ ├── macro25.conf │ └── Kconfig.shield ├── build.yaml └── .github/workflows/build.yml ```

---

      1. 1️⃣ `macro25.overlay`

```c / {

   chosen {
       zmk,kscan = &kscan0;
   };
   kscan0: kscan_0 {
       compatible = "zmk,kscan-gpio-matrix";
       label = "KSCAN";
       diode-direction = "col2row";
       row-gpios
           = <&gpio0  6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>  // Row0 - 라벨:006
           , <&gpio0  8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>  // Row1 - 라벨:008
           , <&gpio0  9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>  // Row2 - 라벨:009
           , <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>  // Row3 - 라벨:010
           , <&gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>  // Row4 - 라벨:017
           ;
       col-gpios
           = <&gpio0 20 GPIO_ACTIVE_HIGH>   // Col0 - 라벨:020
           , <&gpio0 22 GPIO_ACTIVE_HIGH>   // Col1 - 라벨:022
           , <&gpio0 24 GPIO_ACTIVE_HIGH>   // Col2 - 라벨:024
           , <&gpio1  0 GPIO_ACTIVE_HIGH>   // Col3 - 라벨:100
           , <&gpio0 11 GPIO_ACTIVE_HIGH>   // Col4 - 라벨:011
           ;
   };

}; ```

---

      1. 2️⃣ `macro25.keymap`

```c

  1. include <behaviors.dtsi>
  2. include <dt-bindings/zmk/keys.h>
  3. include <dt-bindings/zmk/bt.h>
  4. include <dt-bindings/zmk/outputs.h>

/ {

   /*
    * 매크로 정의
    * 자주 쓰는 Oracle / Python / AutoIt 작업에 맞게 커스터마이징
    */
   macros {
       // Oracle 관련 매크로
       mac_sel_all: mac_sel_all {
           compatible = "zmk,behavior-macro";
           label = "SELECT_ALL";
           #binding-cells = <0>;
           bindings = <&kp S &kp E &kp L &kp E &kp C &kp T
                       &kp SPACE &kp STAR &kp SPACE
                       &kp F &kp R &kp O &kp M &kp SPACE>;
       };
       mac_commit: mac_commit {
           compatible = "zmk,behavior-macro";
           label = "COMMIT";
           #binding-cells = <0>;
           bindings = <&kp C &kp O &kp M &kp M &kp I &kp T &kp SEMI>;
       };
       mac_rollback: mac_rollback {
           compatible = "zmk,behavior-macro";
           label = "ROLLBACK";
           #binding-cells = <0>;
           bindings = <&kp R &kp O &kp L &kp L &kp B
                       &kp A &kp C &kp K &kp SEMI>;
       };
       mac_expl: mac_expl {
           compatible = "zmk,behavior-macro";
           label = "EXPLAIN_PLAN";
           #binding-cells = <0>;
           bindings = <&kp E &kp X &kp P &kp L &kp A &kp I &kp N
                       &kp SPACE &kp P &kp L &kp A &kp N
                       &kp SPACE &kp F &kp O &kp R &kp SPACE>;
       };
       // Python 관련 매크로
       mac_print: mac_print {
           compatible = "zmk,behavior-macro";
           label = "PRINT";
           #binding-cells = <0>;
           bindings = <&kp P &kp R &kp I &kp N &kp T
                       &kp LPAR &kp RPAR &kp LEFT>;
       };
       mac_def: mac_def {
           compatible = "zmk,behavior-macro";
           label = "DEF_FUNC";
           #binding-cells = <0>;
           bindings = <&kp D &kp E &kp F &kp SPACE>;
       };
   };
   keymap {
       compatible = "zmk,keymap";
       // Layer 0: 기본 매크로 레이어
       default_layer {
           bindings = <

// Row 0: Oracle DBA 작업 &mac_sel_all &mac_commit &mac_rollback &mac_expl &kp LC(C) // Row 1: Python / 편집 &mac_print &mac_def &kp LC(Z) &kp LC(Y) &kp LC(S) // Row 2: 시스템 / 창 전환 &kp LC(A) &kp LC(X) &kp LC(V) &kp LA(TAB) &kp LC(W) // Row 3: 미디어 / 볼륨 &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &kp C_PP &kp C_NEXT // Row 4: BT / 레이어 전환 &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_CLR &mo 1 &mo 2

           >;
       };
       // Layer 1: Oracle 심화 레이어 (mo 1 홀드)
       oracle_layer {
           bindings = <

&kp LC(F) &kp LC(H) &kp F5 &kp F8 &kp F9 &kp LC(N) &kp LC(O) &kp LC(P) &kp LC(G) &kp LC(L) &kp LC(LS(P)) &kp LC(LS(N)) &kp LC(LS(F)) &none &none &none &none &none &none &none &trans &trans &trans &trans &trans

           >;
       };
       // Layer 2: BT / 시스템 레이어 (mo 2 홀드)
       sys_layer {
           bindings = <

&bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_CLR &out OUT_USB &out OUT_BLE &none &none &none &none &none &none &none &none &none &none &none &none &none &trans &trans &trans &trans &trans

           >;
       };
   };

}; ```

---

      1. 3️⃣ `macro25.conf`

```ini

  1. 블루투스

CONFIG_ZMK_BLE=y CONFIG_BT_DEVICE_NAME="Macro25-NRF52840"

  1. USB 동시 지원

CONFIG_ZMK_USB=y

  1. 배터리

CONFIG_ZMK_BATTERY_REPORTING=y

  1. 절전

CONFIG_ZMK_SLEEP=y CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=600000

  1. 디바운스

CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5 CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5 ```

---

      1. 4️⃣ `Kconfig.shield`

```kconfig config SHIELD_MACRO25

   def_bool $(shields_list_contains,macro25)

if SHIELD_MACRO25

config ZMK_KEYBOARD_NAME

   default "Macro25"

endif ```

---

      1. 5️⃣ `build.yaml`

```yaml --- include:

 - board: supermini_nrf52840
   shield: macro25

```

---

      1. 6️⃣ `.github/workflows/build.yml`

```yaml name: Build ZMK Firmware

on:

 push:
 pull_request:
 workflow_dispatch:

jobs:

 build:
   uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main

```

---

    1. 납땜 순서 요약

``` 1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜

  캐소드(띠쪽) → Col 방향

2. 스위치 25개 → PCB 또는 수납땜

3. Row 배선 (수평)

  Row0: 006핀 → 1행 스위치 5개 연결
  Row1: 008핀 → 2행 스위치 5개 연결
  Row2: 009핀 → 3행 스위치 5개 연결
  Row3: 010핀 → 4행 스위치 5개 연결
  Row4: 017핀 → 5행 스위치 5개 연결

4. Col 배선 (수직)

  Col0: 020핀 → 1열 스위치 5개 연결
  Col1: 022핀 → 2열 스위치 5개 연결
  Col2: 024핀 → 3열 스위치 5개 연결
  Col3: 100핀 → 4열 스위치 5개 연결
  Col4: 011핀 → 5열 스위치 5개 연결

5. SuperMini USB-C → PC 연결 후 펌웨어 플래시 ```

---

    1. 키 배치 커스터마이징 팁

Oracle DBA / Python / AutoIt 작업에 맞게 매크로 추가 가능합니다.

| 위치 | 추천 매크로 | |------|-----------| | R0C0 | `SELECT * FROM` | | R0C1 | `COMMIT` | | R0C2 | `ROLLBACK` | | R0C3 | `EXPLAIN PLAN FOR` | | R0C4 | `ALTER SESSION SET` | | R1C0 | `print()` | | R1C1 | `def func():` | | R1C2 | `import cx_Oracle` | | R4C3 | Layer 1 (Oracle 심화) | | R4C4 | Layer 2 (BT/시스템) |

Comments