3Dプリンターで出力したK/Bプレートを使った空中配線の自作キーボードを作る(2個目)


3Dプリンターで出力したパーツを使って組み立てた空中配線の自作キーボード 自作キーボードが楽しすぎて、いくつか作ったり空中配線の自作を楽しんだり、あげくに3Dプリンタまで買いました。 2個目の自作キーボードと書いてますが、おそらく夫は壊れるまでこれを使うのではないでしょうか。

では早速、夫のメインキーボードとなった自作キーボード2個目の製作過程を紹介します。

※このページにある写真は、クリックで大きな画像を表示します(別窓)。

1つ目の自作キーボードと今回のKBの違い

私ははんだ付けが楽しくて仕方なく、夫は配線配列を考えたり使いやすさを追求するのが楽しくて仕方なくて、あっという間に夫婦で自作キーボードにどっぷり浸かりました。

はじめは夫も、自分用のPCBやケースを作る方向で考えていました。 ところが、テスト用に空中配線を試している間に、3Dプリンタ+空中配線でも充分ではないかと思い始めたようです。 そして、最初に作った空中配線の自作キーボードで、ふつうにメインで使える代物だと分かってしまったのです。

これまでいくつかの自作キーボードを組み立ててきました。

Blockey←おもちゃ ②miniaxr←個人的に1番良かった ③IRIS←1個目だったら好きになってたかも ④miniaxe LP←夫の外出時に ⑤Endar-3x←まさかこれで自作するとは! ⑥自作1台目←これでイケる!になった(笑) ⑦Mint60←頼まれて組み立てたが、あまり好みではなかった ⑧空中配線の自作キーボード←気に入った

夫が一番お気に召したのは、なんと空中配線の自作キーボードでした。 平たく配置されたタイプより、立体的に配置されたキーボードの方が使いやすいようです。 キーの配置も自分の使いやすいように決めています。

「もう少しキー数を増やせば完璧だ」と言って、2つ目を作ることになりました。

1つ目との違いは、4箇所あります。 1) キーを増やした(44個から52個へ) 2) ブレッドボードでなく、Arduino Leonardoを使った 3) 使用中のレイヤーをOLEDで表示するようにした 4) キートップも3Dプリンタで自作したものに交換した

空中配線の自作キーボードを作るのに必要なもの

Arduino Leonardo Leonardoを使おうと思っていたわけではなく、たまたま夫が知人からArduino Leonardoの設定を頼まれていて、何か使えるなら使ってみても良いと言われたので、自作キーボードに利用しました。

キースイッチ お気に入りのBlue Zilentをメインに。 タッチを軽くしたい親指や小指のスイッチを別のスイッチにして2種類使いました。

キーキャップは1台目の自作キーボードで使っていたものをそのまま転用、その後、3Dプリンタで出力したのに交換しました。

自作キーボードケースを3Dプリンタで出力する

まずは、3Dプリント用のデータをダウンロードしてきます。

dactyl-manuform

空中配線なので、COL/ROWの配線を外へ出す必要があります。 ケーブルの束を出すためにTinkerCADでデータをいじって、本体横に穴を開けます。

雑に作ったものですが、今回使ったのはこれ↓です。 dactyl-manuformの側面に穴を開けたデータ ※右を出す場合はスライサで反転させます。

▼キーボードケースを3Dプリンタで出力 空中配線の自作キーボード用にプリントしたケース

上の画像は、右手です。 立体的で、かなり独特のフォルムですね!

まだバリが付いてる状態です。 内部に見える檻みたいな縞の部分もバリです。 バリを取ったら、ハンダ係の私の出番です。

空中配線ではんだ付けする

最初に作った空中配線の自作キーボードでは、キースイッチがぷかぷかして浮くことがありました。 浮いたら押し込めばいいのですが、何度もスイッチが浮いて直してると裏のハンダ付けが取れてしまうので、今回はキースイッチをホットボンドで固定しました。

▼キーボードケースにキースイッチをはめたところ キーボードケースにキースイッチをはめたところ

キースイッチをはめてホットボンドで固定、キースイッチ用のソケットを被せたら、はんだ付けです。 今回使うソケットは円筒状です。

前回同様、ROWのラインはダイオードで、COLのラインと外へ出す部分はジャンパー線でつなぎます。 前回よりキー数が増えているので、はんだ付けするラインを確認します。

▼はんだ付けのROWのライン 空中配線の自作キーボードROWのハンダ

上の写真は、すでに横のライン(ROW)をダイオードではんだ付け済みです。 6個*4段と最下段は2個ずつです。 分かりやすいですね。

▼ダイオードのはんだ付け準備 ダイオードのはんだ付け準備

前回はロープロファイル用のキースイッチソケットを使いましたが、今回は円筒状のソケットなのでダイオードの片側を曲げてソケットに引っ掛けるような感じではんだ付けしました。

ダイオードの反対側(真っ直ぐの方)を次のソケットに付いてるダイオードに引っ掛けてはんだ付けします。 ダイオードには向きがあるので注意。

▼はんだ付けのCOLのライン 空中配線の自作キーボードCOLのハンダ

縦のライン(COL)は分かりにくい上に、角度も難しかったです。 数字はつなぐスイッチの数です。 かなり強引なラインですね。

COLの方はジャンパー線ではんだ付けしました。 ソケットが円筒状になったとは言え、親指側(深い方)は本当にはんだ付けが大変でした!

▼ジャンパー線のはんだ付け準備 ジャンパー線のはんだ付け準備

ジャンパー線は1本のラインに1本で、途中の皮膜をカットしてはんだ付けしました。 ジャンパー線を中へ入れて、キースイッチのソケット位置に合わせ印を付けてからカットしました。

▼COLのジャンパー線をはんだ付けしたところ COLのジャンパー線をはんだ付けしたところ

ROWとCOLのラインをはんだ付けしたら、外へ出すためのジャンパー線もはんだ付けします。 前回は長さが足りなくて、ジャンパー線をつないで伸ばしたので、今回はあらかじめ長さに余裕を持ちます。

▼COLを外へ出すためのジャンパー線をはんだ付け COLを外へ出すためのジャンパー線をはんだ付け

外へ出すためのジャンパー線はライン上のどこでもはんだ付けしやすいところでOK!

▼更にROWも外へ出せるようジャンパー線をはんだ付け ROWも外へ出せるようジャンパー線をはんだ付け

ROWのラインもジャンパー線ではんだ付けました。 ここまでで、はんだ付け担当の仕事はおしまいです。

外へ出す分のジャンパー線は出口の穴でひとまとめにしてホットボンドで固めてます。 汚いですが、夫いわく「外からは見えないから気にしない」そうです。

この後、テスターで導通テストをしました。 よりによって、最奥部の深いところがはんだ付けのやり直しになり、非常に苦労しましたが、何とか私の仕事は完了できました。

ここから先は、夫にもらった説明書きです。

Arduino LeonardoにCOL/ROWを接続する

空中配線で外へ出したCOLとROWをArduinoにつなげます

▼Arduino LeonardoにCOL/ROWを接続 Arduino LeonardoにCOL/ROWを接続する

▼PIN配置参考(外部サイト) Arduino LeonardoのPIN配置参考予備画像

ROW1 ↔ PF7(A0) ROW2 ↔ PF6(A1) ROW3 ↔ PF5(A2) ROW4 ↔ PF4(A3) ROW5 ↔ PD6(13)

COL1 ↔ PD2(0) COL2 ↔ PD3(1) COL3 ↔ PD1(2) COL4 ↔ PD0(3) COL5 ↔ PD4(4) COL6 ↔ PC6(5) COL7 ↔ PD7(6) COL8 ↔ PE6(7) COL9 ↔ PB4(8) COL10 ↔ PB5(9) COL11 ↔ PB6(10) COL12 ↔ PB7(11)

▼空中配線の自作キーボード2号機 空中配線の自作キーボード2号機

※ ROWのジャンパー線は最初ブレッドボードで一つにまとめていたけど、その後、左右のROWのジャンパー線をハンダで一つにして直接配線するようにした。

上の画像では1号機に載せていたキーキャップをそのまま使っていますが、3Dプリンターで出力した臭くキーキャップに変更しました。

Thingiverseで「cherry mix」のキーキャップを選んで出します。 アルファベットの配置は分かるので、記号をプリントしています。 TinkerCADでキーボードの記号が凹むようデータを変更します。 バックスラッシュ(\)とシングルクォート(‘)はFとJの位置なので、出っ張るようにプリントしています。 3Dプリンターでキーキャップを出力したら、バリを取って、表面に軽くヤスリをかけます。

OLEDの取り付け

レイヤーの現在地がひと目で分かるよう、OLEDで表示させることにしました。

《OLED》 ↔ 《Leonardo》 GND ↔ GND VCC ↔ 5V SCL ↔ PD0(SCL) SDA ↔ PD1(SDA)

ファームウェアを準備する

QMKの環境構築については、空中配線の自作キーボード1号機の記事を参照して下さい。

説明文中に出てくる「akibaneo」ファイルはダウンロードして使えます。 dactyl-akibaneo52.zip

QMKのディレクトリに入って

util/new_project.sh akibaneo52 avr

を実行します。

keyboards/akiba-neo52/config.h を編集します。

#define MATRIX_ROWS 2 ⇒ #define MATRIX_ROWS 5 #define MATRIX_COLS 3 ⇒ #define MATRIX_COLS 12 #define MATRIX_ROW_PINS { D0, D5 } ⇒ #define MATRIX_ROW_PINS { F7, F6, F5, F4, D6 } #define MATRIX_COL_PINS { F1, F0, B0 } ⇒ #define MATRIX_COL_PINS { D2, D3, D1, D0, D4, C6, D7, E6, B4, B5, B6, B7 }

keyboards/akibaneo52/akibaneo52.h を編集します。

#define LAYOUT( \ k00, k01, k02, \ k10, k11 \ ) \ { \ { k00, k01, k02 }, \ { k10, KC_NO, k11 }, \ }

⇓ ⇓ ⇓

#define LAYOUT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ k44, k45, k46, k47 \ ) { \ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \ { KC_NO, KC_NO, KC_NO, KC_NO, k44, k45, k46, k47, KC_NO, KC_NO, KC_NO, KC_NO } \ }

keyboards/akibaneo52/rules.mk を編集します。

BOOTLOADER = atmel-dfu ⇒ BOOTLOADER = caterina EXTRAKEY_ENABLE = yes ⇒ EXTRAKEY_ENABLE = no CONSOLE_ENABLE = yes ⇒ CONSOLE_ENABLE = no COMMAND_ENABLE = yes ⇒ COMMAND_ENABLE = no 追記 ⇒ SRC = i2c.c 追記 ⇒ SRC += ssd1306.c

keyboards/crkbd から以下のファイルをコピーしてkeyboards/akiba-neo52 に置きます。 i2c.c i2c.h ssd1306.c ssd1306.h libフォルダ

keyboards/akibaneo52/lib フォルダ内にある host_led_state_reader.c keylogger.c layer_state_reader.c logo_reader.c mode_icon_reader.c timelogger.c の以下をすべて書き換えます。 #include “crkbd.h” ⇒ #include “akibaneo52.h”

keyboards/akibaneo52/keymaps/default/config.h に追記します。

#define TAPPING_TERM 200 #define TAPPING_TOGGLE 2 #define RETRO_TAPPING

#define MOUSEKEY_DELAY 300 #define MOUSEKEY_INTERVAL 50 #define MOUSEKEY_MAX_SPEED 10 #define MOUSEKEY_TIME_TO_MAX 20 #define MOUSEKEY_WHEEL_MAX_SPEED 8 #define MOUSEKEY_WHEEL_TIME_TO_MAX 40

#define USE_I2C #define SSD1306OLED

keyboards/akiba-eo52/keymaps/default/rules.mk を作成し以下の内容をコピペします。

MOUSEKEY_ENABLE = yes TAP_DANCE_ENABLE = yes

SRC += ./lib/layer_state_reader.c \ ./lib/keylogger.c \ ./lib/glcdfont.c \ #./lib/rgb_state_reader.c \ #./lib/logo_reader.c \ # ./lib/mode_icon_reader.c \ # ./lib/host_led_state_reader.c \ # ./lib/timelogger.c \

keyboards/akiba-neo52/keymaps/keymap.c とkeyboards/akiba-neo52/lib/layer_state_reader.c を好みで編集して下さい。

以上です。 これで空中配線の自作キーボードが出来上がりました!

▼空中配線の自作キーボード2号機完成版 空中配線の自作キーボード2号機完成版

写真を見ればわかりますが、OLEDはキーボードの側面にテープで貼ってるだけです。

4月の半ばに出来上がった空中配線の自作キーボード2号機は、完全に夫のメインキーボードになりました。 前回のようにキーキャップがはずれてハンダが取れるなどの問題もなく、長持ちしてくれそうです。

今回、手元にArduino Leonardoがあったので使いましたが、当初はProMicroとブレッドボードで作るつもりでした。 ProMicroでのやり方は、1号機の記事(空中配線の自作キーボード)を参照して下さい。

はじめに思い描いてた自作キーボードとはいささか違う方向に来たような気がしますが、夫がすごく気に入って使ってるので良かったです♪

空中配線の自作キーボードを作るのに役立つ工具類

自作キーボードの組み立てで役立つのは以下の道具です。