自作キーボードっておもしろい!

自作したキーボードについて

QMK firmware 0.34.4 覚書

QMK MSYSをアップデートしたら、QMK firmwareが0.34.4になり、仕様変更で難儀したため覚書を残しておく。

1. .jsonファイルの名前は「keyboard.json」

これまでは「info.json」で良かったが、info.jsonは認識しないようになったようで、コンパイル時にその名前のフォルダがない、とエラーがでてしまう。

これを解決するために数時間掛かった。

 

2. RGB MATRIXのキーコードの変更

キーコードが変更になったようで、従来のままではエラーが出る。

新しいキーコードは以下を参照。

docs.qmk.fm

 

キーコードが変更になったため、REMAPでは「Any 0xXXXX」と表示されてしまう。

 

3. RGB MATRIXのアニメーション制限

QMK firmwareではRGB MATRIXの発光アニメーションがデフォルトで40種程度用意されている。これまでは何も考えずにすべて有効にしていたが、どうやらすべて有効にすると機能しなくなるようだ。

現象としては、デフォルト?のアニメーションパターンから変更しようとするとアニメーションに関わる全てのLEDが消灯してしまう。そこから、アニメーションを変更すると元のパターンの戻る。

10種くらいのアニメーションパターンを無効にしたところ、有効にしたパターンに変更できるようになった。

バグの可能性があるため、そのうち修正されるかも。

 

4. keymap.c内のキーコードを変更してファームウェアをコンパイルしても反映されない

これは、0.34.4での問題ではないけど、これまでに何度か経験したため書いておく。

どうやらVIAの問題らしい。VIA_ENALBE を有効にしたままにするなら、REMAPを使ってキーマップをリセットするのが一番簡単かも。

以下、とても参考になるサイト。

taka8aru.blogspot.com

 

 

『自作キーボードっておもしろい! ー購入から設計へ、オリジナルキーボードカタログー』出版のお知らせ

Amazonにて『自作キーボードっておもしろい! ー購入から設計へ、オリジナルキーボードカタログー』を出版しました!(個人出版)

Kindle Unlimitedに対応してます。

ペーパーバック版も準備中。

ペーパーバック版の発売も開始しました。(5月1日追記)

 

自作キーボードっておもしろい! ー購入から設計へ、オリジナルキーボードカタログー

電気回路やプログラミングについて全くの素人である著者が、自作キーボードにハマり、自分で設計するまでになったきっかけと(第1部)、これまでに設計した18台のオリジナルキーボードのカタログです(第2部)。

キーボードごとに、写真、キーマップ、仕様、名前の由来、設計意図、ケース、使用感を掲載しました。

自作キーボードの設計すること、そしてそれを使用することの楽しさを伝わり、自作キーボードに興味を持っていただければ幸いです。

 

本書より、目次とオリジナルキーボード関係図を公開します。



 

外注3Dプリンタでキーボードケースを作製してみた

 

契機

これまで、設計した自作キーボードでは主にアクリルプレートを使用したサンドイッチケースまたは積層ケースを作製してきた。

が、やはりより複雑かつ一体化したケースを作製するためには、3Dプリンタでの立体成形が必要になる。

JLCPCBのサービスを利用した場合、アクリル積層ケースとコスト面ではそれほど変わらないようなので、挑戦してみることにした。

 

初挑戦のため、なるべく小さなものが良いと思い、ついでにキー数を自分の許容できるまで減らした41キーの一体型キーボードを設計し、そのケースを3Dプリンタで作製することにした。

 

新規キーボードはSazanami Boardをもとに、外側のmodifier keysを削り、親指ゾーンとも厳選した配列で、Libra41と名付けた。

Libra41

データ作成

ケースは、最も簡単な箱型にし、主基盤をネジ止めするマウント方式(PCBマウント)にした。

さて、方針は決まったが、3Dプリンタ用のデータをどのように作成するのかが全くわからない状態からスタートした。

まず、データ作成ソフトを調べてみると、完全フリーで使用できる「FreeCAD」というソフトをインストールした。

FreeCADの使い方は、有り難いことにYouTubeにいくつもシリーズ化された動画があり、その中から「FreeCAD 使い方 CAD講座」を1回目から6回目までを視聴し、基本的な操作方法を確認して、あとは実際にソフトを動かしながらトライ・アンド・エラーでなんとか作成できた。

www.youtube.com

 

データ表

データ裏

JLCPCBへの発注では、SLA(光造形)を選択したが、素材のレジンに色々と種類があってどれを選んでよいか分からなかったため、失敗する可能性が高いことを前提に最も安い9600レジンを選んだ。

発注後にJLCPCBの3Dプリンタサービスで選択できる素材について紹介しているサイトが見つかったので、次回以降はこのサイトの情報を参考にしたい。

green-keys.info

 

JLCPCBの3Dプリンタサービスでは、追加料金が掛かる場合として、250 mm以上の長さがある、とある。今回のケースは最長が264.7 mmだったが追加料金は掛からず、$8.24だった。安い。

jlc3dp.com

 

届いたもの

10日程で、主基盤とともにケースが届いた。裏面にキーボード名を彫り込んでみたところ、うまく行った。

ibra41 ケース表

ibra41 ケース裏

Libra41 ケース ロゴ

余ったスペースに、直接ネジ穴を作製してみたが、キツキツでネジが入って行かなかった。ネジ穴を作るのであれば少し穴を広げるなどの工夫が必要だと思う。

Libra41 ケース ネジ穴

各面3 mm厚で作製したが、押してもたわむことはなく剛性がある。これなら2 mm厚でも問題なさそう。

実際にキーボードを組み上げてみると、主基盤が想定通り収まり、ケースの底と主基盤の間のスペースも問題なかった。裏面の六角ナットの取り付け穴が縮んでしまってナットがハマらなくなる可能性もあったが、杞憂だった。

 

失敗点

データ作成時のミスによるものだが、USBケーブルの差込口が狭すぎて、ケーブルのコネクタ部の大きさによっては刺さらなかった。たまたま手持ちのケーブルでなんとか刺さるものがあったので良かったが、そうでなかったらキーボードとして使用できないところだった。

Libra41 ケース USB差込口

USBケーブルの差込口はコントローラーのコネクタ部を露出させるか、ケースの該当箇所を余裕を持って開口すなければならない(戒め)。

 

また、裏面に穴を開けたのは、コントローラーのリセットボタンにアクセスできるようにするためだったのだが、ちょっとズレてしまった。押せないことは無いが、コレジャナイ。コントローラーのピンの位置を基準にして穴の位置を決めていたのだが、ピンの数を数え間違えていたようだ…

Libra41 ケース リセットボタン

感想

失敗もあったが、初めてにしては上出来だったと思う。

せっかくなので、失敗点を修正して、2 mm厚で再度データを作製する予定。

TRINITY-C+ ビルドガイド

seizan01.booth.pm

remap-keys.app

 

キット内容の確認

メインプボード


(PCB基盤) … 1枚

メインボード表側

メインボード裏側

カバープレート … 1枚

アクリル枠①(3 mm) …1枚

アクリル枠②(2 mm) …1枚

ミドルプレート…1枚

ボトムプレ―ト … 1枚

スペーサー(6 mm) … 7個

黒ネジ (4 mm) … 8本 (予備1本含む)

黒ネジ (5 mm) … 8本 (予備1本含む)

ネジ (8 mm) … 4本 

ナット … 4個

透明ゴム足 … 6個

 

自身で用意して頂くパーツ

RP2040-Zero… 1個

USB type Cケーブル … 1本

Kailh Choc V1 or V2 (low profile key switch) … 70個

Kailh Choc用PCBソケット… 70個

MX互換​キースイッチ用キーキャップ 1U … 66個

MX互換​キースイッチ用キーキャップ 1.25U … 4個

 

自作キーボードのパーツ類は以下で購入可能です。

shop.yushakobo.jp

talpkeyboard.net

shop.dailycraft.jp

 

RP2040-ZeroはAmazonやAliExpressでも購入可能です。

 

 

道具類

はんだごて

はんだ

ピンセット

精密ドライバー

スパナ(またはペンチ)

フラックス (あるとはんだ付けしやすくなります)

はんだ吸い取り線  (はんだ付けに失敗した際のリカバリーに使います)

 

組み立て手順

RP2040-Zeroのはんだ付け

RP2040-ZeroはRESETとBOOTスイッチがある面を裏に向け、メインボードの表側から被せるように取り付けます(写真を参考にしてください)。

RP2040-Zeroの取り付け向き

RP2040-Zeroの外側にある接点とメインボードのランドをはんだ付けします。

RP2040-Zeroにピンが付属する場合は、それを利用してRP2040-Zeroの位置を固定してください。

こちらを参考にしてください。

seizan01.hatenablog.com

 

Firmwareのフラッシュ

REMAPからFirmware(uf2ファイル)をダウンロードします。

RP2040-ZeroをストレージとしてPCに認識させて、そのストレージ内にFirmwareをコピペします。

こちらを参考にしてください。

seizan01.hatenablog.com

 

 

PCBソケットのはんだ付けとキースイッチの取り付け

メインボードの裏側から、2つの穴にハマるようにソケット置き、左右に箇所をはんだ付けします。

片方または両方に予備はんだをしておくとはんだ付けしやすくなります。

ソケットをハンダ付けし終わったら、メインボードの表側からキースイッチを取り付けます。

 

アクリル積層ケースの組み立て1-スペーサーの取り付け

アクリルは図のように積層されています。ボトム側から順番に積み上げていきます。



アクリルパーツの保護紙を取り除きます。ガムテープを貼って剥がすなどの方法が良いと思います。

yushakobo.zendesk.com

写真の赤丸部分にスペーサーを取り付けます。スペーサーは裏側から4 mmネジで固定します。

スペーサーの取り付け(写真ではゴム脚が付いています)

 

アクリル積層ケースの組み立て2-アクリル枠①の取り付け

アクリル枠①(3 mm)を穴がスペーサーに入るように設置します。

 

アクリル積層ケースの組み立て3-メインボードの取り付け

メインボードの向きに注意してアクリル枠①の上に設置し、写真のオレンジ丸4箇所に裏側から8 mmネジを差し込み、表側でナットを利用して仮固定します。

 

アクリル積層ケースの組み立て4-アクリル枠②の取り付け

アクリル枠②(2 mm)を穴がスペーサーに入るように設置します。

 

アクリル積層ケースの組み立て5-ミドルプレートの取り付け

ミドルプレートの穴にスペーサーとナットが入るように設置します。

 

アクリル積層ケースの組み立て6-カバープレートの取り付け

カバープレートをスペーサーの穴にあわせて設置し、5 mm黒ネジで固定します。

 

アクリル積層ケースの組み立て7-ゴム足の取り付け

ボトムプレートの裏側に奥側に3つ、手前側に3つゴム足を貼り付けます。

完成

お好きなキーキャップを装着して完成です。

1.25Uのキーキャップは写真の黄色丸のキーに使用します。

1.25Uキーキャップを使用するキー

LEDインジケーターの光り方

デフォルトレイヤー時は消灯していますが、2番目のレイヤー時にマゼンタ、3番目のレイヤー時にイエロー、4番目のレイヤー時にグリーン、5番目のレイヤー時にマゼンタに光ります。

RP2040-Zeroを使用した左右分離型キーボード用QMK firmwareについての覚書

 

RP2040-Zeroを使用した左右分離型キーボードでQMK firmwareを使用した際に困った点とその解決策のメモ。

 

困った点
  1. Windowsが休止状態から復帰した時にキーボードを認識しない。
  2. RGB matrixのタイムアウトが左右で同期しない。
解決策

1については、ネットで調べてみると色々情報が出てくるが、どうやらQMK firmwareの仕様らしい。詳しいことは以下を参照。

www.eisbahn.jp

解決方法として2つあるようだ。

  1. USB_VBUS_PINを指定する。
  2. SPLIT_USB_TIMEOUTを延ばす。

USB_VBUS_PINを指定するためには、どうやら基板上に何らかの設定(抵抗?)が必要らしい。詳しいことが分からないため試すことはできず。

SPLIT_USB_TIMEOUTは、左右のキーボードの通信を検知するまでの最大時間で、デフォルトでは2秒になっているらしい。この時間を延長することで、PC起動時に左右のキーボードの通信を検知する時間的猶予を与えることができるようだ。詳しいことは以下を参照。

note.com

 

config.hに以下を挿入する。

#define SPLIT_USB_TIMEOUT 10000  //数字はmsでこの場合は10秒
#define SPLIT_USB_TIMEOUT_POLL 10 //通信検知の間隔ms

SPLIT_USB_TIMEOUTの時間はPC環境によるようで、当初5000としたが、認識されなかった。その後、10000としてところ、認識されるようになった。短くするよりは、少し長めに設定した方が良いかもしれない。

 

2については、ネットで探してみたが全く解決策が分からなかった。

一応、config.hには以下の記載があるが、同期はできない。

#define SPLIT_ACTIVITY_ENABLE
#define SPLIT_LED_STATE_ENABLE
#define SPLIT_ACTIVITY_ENABLE

そんな時はChatGPTさんにお願いするしか無い。

Keymap.cに以下を挿入する。

#include "rgb_matrix.h"

static uint32_t last_activity_time = 0;  // 最後にアクティビティがあった時間を保持

// キー入力があったときに呼び出される関数
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (record->event.pressed) {
        last_activity_time = timer_read32();  // アクティビティ時間を更新
    }
    return true;
}

// タイムアウト処理を行う関数
void matrix_scan_user(void) {
    uint32_t current_time = timer_read32();  // 現在の時間を取得
    if (current_time - last_activity_time > RGB_MATRIX_TIMEOUT) {
        // タイムアウトした場合、RGBをオフにする
        rgb_matrix_set_suspend_state(true);  // RGB matrixを消灯
    } else {
        // アクティビティがある場合、RGBを再度オンにする
        rgb_matrix_set_suspend_state(false); // RGB matrixを再点灯
    }
}

これでRGB matrixのタイムアウトが左右で同期されるようになった。

 

 

OZ -THE THIN- ビルドガイド

seizan01.booth.pm

remap-keys.app

 

キット内容の確認

メインボード(PCB基盤) … 1枚

メインボード表側

メインボード裏側

カバープレート(半透明茶色) … 1枚

カバープレート

アクリル枠(2 mm) … 大2枚、小4枚 (大1枚と小2枚で1セット)

アクリル枠

ボトムプレ―ト … 1枚

ボトムプレート

スペーサー(4 mm) … 9個

スペーサー

ネジ (4 mm) … 19本 (予備1本含む)

4 mm ネジ

ネジ (5 mm) … 4本

5 mm ネジ

ナット … 4個

ナット

インジケーター用LED(SK6812MINI-E) … 2個 (予備1個含む)

インジケーター用LED

透明ゴム足 … 6個

透明ゴム足

 

自身で用意して頂くパーツ

RP2040-Zero… 1個

USB type Cケーブル … 1本

Gateron low profile 2.0キースイッチ(KS-33) … 55個

MX互換​キースイッチ用キーキャップ 1U … 54個

MX互換​キースイッチ用キーキャップ 1.5U … 1個

 

オプション

LED(SK6812MINI-E) … 55個

 

自作キーボードのパーツ類は以下で購入可能です。

shop.yushakobo.jp

talpkeyboard.net

shop.dailycraft.jp

 

RP2040-Zeroは以下でも取り扱っています。

www.sengoku.co.jp

 

Gateron low profile 2.0キースイッチは国内では入手が難しいです。

AliExpressでも購入可能です。実際に私が購入したショップは以下になります。

メカニカルキーボードGateronスイッチ、ロープロファイル、air75、nuphy、超薄型、air究極60、k1、k3、k7、ks27、ks33、赤、青、茶色

 

道具類

はんだごて

はんだ

ピンセット

ニッパー

精密ドライバー

スパナ(またはペンチ)

フラックス (あるとはんだ付けしやすくなります)

はんだ吸い取り線  (はんだ付けに失敗した際のリカバリーに使います)

マスキングテープ類 (バーツの仮止めに役立ちます)

 

組み立て手順

RP2040-Zeroのはんだ付け

RP2040-ZeroはRESETとBOOTSスイッチがある面を裏に向け、メインボードの表側から被せるように取り付けます(写真を参考にしてください)。

RP2040-Zeroのはんだ付け

写真の赤枠で示したRP2040-Zeroの外側にある接点とメインボードのランドをはんだ付けします。

RP2040-Zeroにピンが付属する場合は、それを利用してRP2040-Zeroの位置を固定してください。写真のように、マスキングテープを利用しても良いです。

マスキングテープによる固定
Firmwareのフラッシュ

REMAPからFirmware(uf2ファイル)をダウンロードします。

RP2040-ZeroをストレージとしてPCに認識させて、そのストレージ内にFirmwareをコピペします。

こちらを参考にしてください。

seizan01.hatenablog.com

 

インジケーター用LEDのはんだ付け

LED1(写真参照)がインジケーター用になっていますので、ここにハンダ付けします。

インジケーターの位置

LEDはメインボードの裏側から光源が表側に見えるように取り付けます。

写真を参考に、LED端子の欠けを縦線のあるランドに合わせて置き、はんだ付けします。

LED取り付け向き

はんだ付け後はUSBケーブルでPCと接続し点灯することを確認します。

 

(オプション) キーバックライト用LEDのはんだ付け

各キーに対応したLEDを取り付けることができます。LEDの向きは行によって変わりますので注意して下さい。また、LEDは写真のように一列に並んでいますので、途中で接続不良などがあると、それ以降のLEDが光らなくなります。

LEDの並び順

 

ダイオードのはんだ付け

ダイオードはリードタイプまたはSMDタイプをメインボードの裏側から向きに気をつけて取り付けます。

向きや取り付け方については以下を参照してください。

seizan01.hatenablog.com

 

キースイッチのはんだ付け

メインボードの表側にキースイッチを置き、裏側からはんだ付けを行います。キースイッチとメインボードの接点は緩いため、写真のようにキースイッチが傾いたりしないようにマスキングテープなどで固定してから、はんだ付けを行うことをお勧めします。

マスキングテープにようキースイッチの固定
アクリル積層ケースの組み立て1

アクリルは図のように積層されています。ボトム側から順番に積み上げていきます。

アクリル積層ケースの構造

アクリルパーツの保護紙を取り除きます。ガムテープを貼って剥がすなどの方法が良いと思います。

参考 アクリルプレートの保護紙が剥がれません

 

ボトムプレートの向きに注意して、メインボードを設置し、写真の4箇所に裏側から5 mmネジを差し込み、表側でナットを利用して固定します。

メインボードの設置
スペーサーの取り付け

写真の赤丸部分にスペーサーを取り付けます。スペーサーは裏側から4 mmネジで固定します。

スペーサー取り付け位置
アクリル積層ケースの組み立て2

アクリル枠(2 mm)を穴がスペーサーに入るように設置します。アクリル枠(2 mm)は2層になるようにします。

アクリル枠の設置
アクリル積層ケースの組み立て3

向きに注意してカバープレートを被せ、9か所を4 mmのネジで止めます。

カバープレートの設置
ゴム足の取り付け

ボトムプレートの裏側に奥側に3つ、手前側に3つゴム足を貼り付けます。

 

LEDインジケーターの光り方

デフォルトレイヤー時は消灯していますが、2番目のレイヤー時にブルー、3番目のレイヤー時にイエロー、4番目のレイヤー時にグリーンに光ります。

*注意*

カバープレートが茶色のため、2番目のレイヤー時にターコイズ、3番目のレイヤー時オレンジ、4番目のレイヤー時にイエローグリーンに光っているように見えます。

 

完成

お好きなキーキャップを装着して完成です。

 

RP2040-ZeroにQMKのファームウェアを書き込む方法

結論

結論から言えば、RP2040-ZeroをPCにストレージとして認識させ、uf2ファイルをストレージ内にコピペするだけです。

 

方法

RP2040-ZeroをPCにストレージとして認識させる方法は、QMKファームウェアのドキュメントに書いてあります。

 

Enter the bootloader using any of the following methods:
・Tap the QK_BOOT keycode
・Hold the BOOTSEL button on the PCB while plugin in the usb cable.
・Double-tap the RESET button on the PCB*

* This works only if QMK was compiled with RP2040_BOOTLOADER_DOUBLE_TAP_RESET defined.

https://docs.qmk.fm/#/flashing?id=raspberry-pi-rp2040-uf2

 

新品の場合は、PCに接続するとストレージとして認識されると思います。

そうでない場合は上記のドキュメントに従って、以下のどれか操作を行います。

・キーボードとして認識されている状態でQK_BOOTキーを押す。(QK_BOOTキーはREMAPではBootloaderキーにあたります)

・RP2040-ZeroのBOOTボタンを押しながらUSBケーブルを接続する。

・PCに接続された状態で、RP2040-ZeroのRESETボタンをダブルタップする。(この方法は、予め書き込まれているファームウェアが対応している必要があります)

 

uf2ファイルをコピペしたら、PCとの接続を解除して、再度接続し直すとキーボードとして認識されます。