8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

自作キーボード設計に挑戦した記録(本格的なのはこれから)

Last updated at Posted at 2020-01-12

はじめに

これは初めて自作キーボード設計に挑戦したときの記録です。
初めて自作キーボードを行う方への入門のような記事ではなく、ただの自己満足+記録用のページです。

まず何をしたか

いきなり設計をするのは難しいので、はじめに販売されているキーボードの作成から開始しました。
分離型を作ってみたかったので、色々調べた結果、Irisを作成してみることにしました。

image.png

PCB(基板)はkeebioのページで注文。PCB以外に各種パーツもついてきます。
ネジやPro Microはついていないので、AliExpress等で発注。全部届くまで1~2か月ぐらいかかりました。

勉強

既存の自作キーボードを作成することで、組み立てはできるようになりましたが、設計は当然ながら分からないので、まずは基板の設計等について勉強を始める。
まずはネットで調べてみたが、最終的には以下の3冊を購入して勉強した。

上の2冊で自作キーボードは設計できるようになるはず。ただし、KiCadの操作方法の記載が薄いので、下の1冊も買って勉強すると設計がスムースになるかと思います。

キーボードレイアウト設計

まずは、キーボードレイアウトを決めます。
いきなりフルキーボードを作成するのは難しいので、10cm x 10cmにすると安く作成できるので10キーの小さなキーボードを作成しました。

以下のサイトでキーボードレイアウトを作成します。

3x3の9キーと、右下にレイヤー切り替えのキーを配置しました。

image.png

PCB(基板)設計

KiCadでPCBを設計します。
作成方法等は省略。

image.png

image.png

ケース(プレート)設計

KiCadから基板をエクスポートし、InkScapeに取り込んでケースを設計します。
今回はアクリルプレートで作成し、PCBの上下をサンドイッチするため、ボトムプレートとトッププレートの2つを設計します。

KiCADで「Dwgs.User」、「Edge.Cuts」、「F.CrtYd」と「Eco2.User」の4つをSVGで出力します。
「ファイル」-「プロット」で製造ファイル出力ダイアログを出力し、先ほどのレイヤーを選択し、「製造ファイル出力」を選択します。

image.png

次に出力したSVGファイルをInkScapeで取り込んで編集します。
作成したプレートは以下のようになります。
最終的に発注するためにDXFフォーマットで出力します。

  • トッププレート

image.png

  • ボトムプレート

image.png

Inkscapeの設定

Inkscapeの設定を開き、「使用する境界枠」に「幾何学的境界枠」を設定する。

image.png

「ドキュメントのプロパティ」からグリッドの設定で、グリッドの単位は「mm」に設定し、X/Y方向の間隔を0.1mm程度に設定しておく。

image.png

発注

PCB、ケースともにElecrowに発注しました。
アクリルならファイルを持ち込んでレーザー加工するという方法もあるようですが、近くに手頃なお店がなかったので、時間はかかりますがElecrowを利用。

今回は10cm x 10cm用なので送料は高くなりますがPCB、ケース自体は5ドルぐらいで安かった。
たしか1~2週間で届いたはず。

image.png

最低発注が5個からなので、PCB、ケースともに5枚ずつ届きました。

アクリルの価格は以下のとおり(2019年12月時点)。

  • 10cm x 10cm x 2mm $5.8
  • 20cm x 20cm x 2mm $16.55
  • 30cm x 30cm x 2mm $37.8

ファームウェア作成

発注している間、作成するキーボードのファームウェアをプログラミングします。

QMK Firmwareというフレームワークを利用し雛型を生成できるので、単純なキーボードであればプログラム自体はほとんどなしで作成できます。

MSYS2をインストール

まずはファームウェアを開発するための環境構築です。MSYS2を以下からダウンロードします。

インストールし、「C:\msys64\msys2.exe」をダブルクリックし起動します。

MSYS2のパッケージを最新へ更新するために以下のコマンドを実行(したはず)

pacman -S git
pacman -Syu
pacman -Su
pacman -S avr-gcc

QMK Firmwareをダウンロード

git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
util/qmk_install.sh

Which USB drivers do you want to install?
(A)all - All supported drivers will be installed
(C)onnected - Only drivers for connected keyboards (in bootloader/flashing mode)
              will be installed
(F)force - Like all, but will also override existing drivers for connected
           keyboards
(N)one - No drivers will be installed,
         flashing your keyboard will most likely not work
(A/C/F/N)? F

最後にmsysを再起動する。

テンプレートを生成

$ cd qmk_firmware
$ util/new_keyboard.sh
Generating a new QMK keyboard directory
Keyboard Name: emkee10m
Keyboard Type [avr]:
Your Name: mkyz08

以下のディレクトリが作成される。
keyboards/emkee10m/

ファイルの修正

主に修正するファイルは以下の4つ。

  • keyboard_name.h
  • rules.mk
  • config.h
  • keymaps/default/keymap.c
keyboard_name.h
# define LAYOUT( \
    k00, k01, k02, \
    k10, k11, k12, \
    k20, k21, k22, k23 \
) \
{ \
    { k00, k01, k02, KC_NO }, \
    { k10, k11, k12, KC_NO }, \
    { k20, k21, k22, k23 } \
}
rules.mk
RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
config.h
/* key matrix size */
# define MATRIX_ROWS 3
# define MATRIX_COLS 4

# define MATRIX_ROW_PINS { E6, B4, B5 }
# define MATRIX_COL_PINS { B3, B2, B6, B1 }

# ifdef RGB_DI_PIN
   #define RGBLED_NUM 16
   #define RGBLIGHT_HUE_STEP 8
   #define RGBLIGHT_SAT_STEP 8
   #define RGBLIGHT_VAL_STEP 8
   #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
   #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
// /*== all animations enable ==*/
//   #define RGBLIGHT_ANIMATIONS
// /*== or choose animations ==*/
//   #define RGBLIGHT_EFFECT_BREATHING
   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//   #define RGBLIGHT_EFFECT_SNAKE
//   #define RGBLIGHT_EFFECT_KNIGHT
   #define RGBLIGHT_EFFECT_CHRISTMAS
//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
//   #define RGBLIGHT_EFFECT_RGB_TEST
//   #define RGBLIGHT_EFFECT_ALTERNATING
// /*== customize breathing effect ==*/
//   /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
//   #define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
//   /*==== use exp() and sin() ====*/
//   #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
//   #define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
# endif

keymap.c
// Defines names for use in layer keycodes and the keymap
enum layer_names {
    _BASE,
    _FN
};

// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
    QMKBEST = SAFE_RANGE,
    QMKURL
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* Base */
    [_BASE] = LAYOUT(
        KC_LCTL, KC_DEL, KC_BSPC,
        KC_LSHIFT, KC_UP, KC_ENT,
        KC_LEFT, KC_DOWN, KC_RIGHT, MO(_FN)
    ),
    [_FN] = LAYOUT(
        KC_LCTL, KC_C, KC_V,
        KC_SPC, KC_APPLICATION, KC_RALT,
        RGB_TOG, RGB_MOD, RGB_HUI, KC_TRNS
    )
};

ビルドと書き込み

組み立て後になりますが、自作キーボードを接続し、以下のコマンドでファームウェアのビルドと書き込みが実行されます。

cd ~/firmware/qmk_firmware
make emkee10m:default:avrdude

以下のファイルができる。

.build/emkee10m_default.hex

組み立て

PCBとプレートが届いたら、あとは頑張って組み立てる。
はんだごてなど買わなきゃいけないものが多く、部品もねじとかあらかじめ購入しておく。

image.png

ソース

ソースはGitHubに公開しています。ライセンスはMITです。

最後に

最後に現在設計しているキーボード(未完成)です。
分割JISキーボードという既存ではほとんどないので自作中です。

image.png

今回使用したソフトウェアとバージョン

  • KiCad 5.1.4
  • Inkscape 0.92.4
  • MSYS
  • QMK Firmware
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?