自作キーボードキットCaravelle-BLEのビルドガイドです。
組み立ての際は、本ビルドガイドの最後まで目を通した上で作業をはじめることを推奨します。
最初に必要な部品および工具があることを確認します。
部品 | 個数 |
---|---|
ボタン電池(CR2032) | 4個 |
MX互換スイッチ | 48個 |
MX用キーキャップ | 1u 42個、1.25u 4個、1.5u 2個 |
組み立てには電子工作に使用する工具が一通り必要です。下記のページなどを参考に工具を用意しましょう。
- Helix キーボードキットの製作に必要な工具メモ | gist.github.com
- 第8回「自作キーボードのつくりかた #2」組み立てる道具とはんだ付け編 | Youtube
- 自作キーボードを作るために必要なもの | 自作キーボード温泉街の歩き方
- 自作キーボードの組み立てに使っている工具 | yfuku blog
なおインサートをケースに熱圧入する都合上、はんだごては温度調整機能がついているもの(HAKKO FX600等)が必須です。
次の順番でキットを組み立てていきます。
- 電池用基板を組み立てる
- 本体基板を組み立てる
- 本体基板の動作確認
- 本体基板にスイッチを取り付ける
- ケースを組み立てる
はじめに電池用基板を組み立てます。注:基板のバージョン(基板左上に記載)によって部品の配置がやや異なります。
-
ボタン電池ホルダー×2 (BT1, BT2) を取り付ける
ホルダーの片脚をペンチでまっすぐ伸ばします 電池を入れる側(小さいでっぱりと反対側)が基板の角を向くようにホルダーの両脚を基板に挿します まっすぐにした脚を再び折り曲げ、基板と平行にし、ホルダーの両脚を基板にはんだ付けします もう片方のホルダーも同様の手順で取り付けます -
ダイオード×2 (D1, D2) を取り付ける
片側のパッドに予備はんだを盛ります ダイオードの向きに注意しつつ、予備はんだをつけたパッドにダイオードをはんだ付けします(基板の逆 コ
の字型のシルクの縦線とダイオードの印字の縦線の向きを揃えます、シルクがかすれている場合は下の段の写真で向きを確認します)もう片側のパッドもはんだ付けします V1.1基板 V2.0基板以降 -
コンデンサ (C1) を取り付ける
- ダイオードと同様の手順でコンデンサを基板にはんだ付けします
-
(V2.0基板のみ)スライドスイッチ (SW1) を基板裏面に取り付ける
- スライドスイッチの上下に注意します。スイッチの脚が付いている側が基板の下向きになるようにします
- ずれやすいのでマスキングテープ等で固定した上ではんだづけします
- 電源ON・OFFの方向については基板表面のシルクを参照
写真のように基板裏面に実装します -
PHコネクタ付きケーブルを基板の左側のスルーホール (J1) に取り付ける
赤いケーブルの被覆が剥けた先端をVCC、黒いケーブルの被覆が剥けた先端をGNDと書かれた穴に通します。ケーブル先端を両方とも穴に通したら、穴からケーブルが抜けないように軽く曲げ、それぞれをはんだ付けします。注:ケーブルを通す穴が小さめなため、ケーブル先端には予備はんだを行わず、穴に通してからはんだ付けするようにしてください ケーブルがショートしないように必要に応じて余分な配線を切ります -
ボタン電池を入れ、テスターで電圧を確認する
正しく組み立てられていれば、VCCとGNDの間で3Vほどが測定されます。(V2.0基板のみ)なお、V2.0基板ではスライドスイッチを電源ONの方向にスライドしておく必要があります。また、コンデンサに電荷が溜まっている間は電池基板の電源をOFFにしたとしてもVCCとGNDの間の電圧が3Vほどで保たれます。 -
2個目の電池用基板も1個目と同様の手順で部品を取り付ける
2個めの電池基板ではケーブルを1個目と逆の位置 (J2) に取り付けます
次に本体基板を組み立てます。
-
タクトスイッチ (SW3/SW4) を取り付ける
- 電池基板のダイオードと同様の手順でタクトスイッチを基板にはんだ付けします
- 一部個体では取付済の状態で出荷されています。その場合、この手順は不要です。
-
スライドスイッチ (SW1/SW2) を取り付ける
- スライドスイッチの上下に注意します。スイッチの脚が付いている側が基板の下向きになるようにします
- ずれやすいのでマスキングテープ等で固定した上ではんだづけします
スライドスイッチのはんだ付け -
PHコネクタ (J2/J4) を取り付ける
- こちらもマスキングテープ等で固定した上ではんだづけします
-
もう片側の本体基板も同様に組み立てます
本体基板組み立て完了後
スイッチを取り付ける前に本体基板が正しく動作することを確認し、マスタとスレーブ、マスタと端末をそれぞれペアリングします。なおキットでは、事前にデフォルトのファームウェアが書き込まれています。
ペアリング模式図 |
-
スレーブ側(右手側)を起動する
- 電池基板のケーブルをスレーブ側の本体基板のコネクタにはめます
- スライドスイッチの端子をON側(右側)にスライドします
- パソコン等の端末からBluetoothデバイスのスキャンを実行します
- デバイス一覧に
Nordic UART
と表示されることを確認します Nordic UART
の表示が確認できない場合- 端末のBTアダプタによっては接続上の相性問題があるようです。その場合は別の端末でスキャンを実行してみてください。
- マスタ-スレーブのペアリングが確立されていると、スレーブ側が
Nordic UART
としてアドバタイズされなくなります。トラブルシュートを参考に一度スレーブ側のペアリング情報を削除し、再度Bluetoothデバイスのスキャンを実行してください - スレーブ側が正しく起動しているものの、端末によってはスキャン時に
Nordic UART
が表示されない場合があるようです。このような場合はNordic UART
の確認を飛ばし、マスタとスレーブのペアリングを行えばスレーブ側からの入力ができるか確認してみるといいです。 - 電源が正しく供給されていることを確認します。電源ONの状態で基板裏面のプログラミングポートにテスターを当て、VCC-GND間が3V前後となっていれば正常に電源が供給されています。正常に電源が供給されていない場合は電池基板と本体基板のはんだづけが正しく行われていることを再度確認します。
スレーブ側動作確認 -
マスタ側(左手側)を起動する
- スレーブ側と同様の手順でマスタ側を起動します
- マスタとスレーブのペアリングが自動的に実行されます
- 端末からBluetoothデバイスのスキャンを再度実行します
- デバイス一覧から
Nordic UART
という表示が消え、代わりにCaravelle-BLE
が表示されることを確認後、ペアリングを実行します(これ以降、スレーブ側のみを起動したとしてもNordic UART
はデバイス一覧に表示されません) - マスタ側が起動しない場合は、電源が正しく供給されていることを確認します。電源ONの状態で基板裏面のプログラミングポートにテスターを当て、VCC-GND間が3V前後となっていれば正常に電源が供給されています。正常に電源が供給されていない場合は電池基板と本体基板のはんだづけが正しく行われていることを再度確認します。
- 接続時にドライバエラーが発生する、接続済み・ペアリング済みが交互に発生し入力ができない場合は、トラブルシュートを参考に一度ペアリング情報を削除してください
マスタ側動作確認 -
入力テストを行う
- ピンセット等で各キーのスルーホールをショートさせ、文字が入力されることを確認します
- EK Switch HitterやKeyboardTester.comを使用するとどのキーが押されたか簡単に確認できます
- デフォルトのキーマップについてはこちらを確認してください。US配列のキーマップである点や、
LOWER
・ADJUST
のレイヤー変更キー等の単独では入力がされないキーがある点、スマートフォンなどでは正しく入力されないキーコードもある点に注意
-
DFUボタンの動作確認を行う
-
一度マスタ、スレーブの両方の電源を切ります
-
タクトスイッチを押しながらスライドスイッチを操作してマスタ側を起動します
-
端末からBluetoothデバイスのスキャンを実行し、
DFU Targ
(DFUモードで起動したキーボード)が表示されることを確認します -
タクトスイッチを押しながら起動してもDFUモードに突入しない場合は、タクトスイッチのはんだづけが正しく行われていることを再度確認します
-
スレーブ側も同様にDFUボタンの動作確認をします
-
DFU Targ
の表示が確認できない場合- 端末の設定画面からは
DFU Targ
が確認できないものの、nRF Toolbox
ならば確認できる場合があるようです。ファームウェアアップデート
の箇所を参考にnRF Toolbox
し、一度スキャンを行ってみてください
- 端末の設定画面からは
-
動作確認が完了したら本体基板にスイッチを取り付けます。
-
スイッチをプレートにはめる
-
スイッチをはめたプレートを本体基板にはめる
- 本体基板にスイッチをはめる際にピンが折れないように注意します
- スライドスイッチのスライド部分がプレートの切り込みに合っていることを確認します。スライド部分が干渉してプレートが上手くはまらない場合は、スライドスイッチのはんだ付けを修正します
-
スイッチをはんだ付けする
スイッチ取り付け後
最後にケースを組み立てます。
-
ケースにインサートを熱圧入する
- ケースの素材は60度ほどで軟化、200度ほどで融解するため、温度調整が可能なはんだごてを使用して作業する必要があります
- 最初に練習用ブロックを使用してインサートの熱圧入の練習をします
- はんだごての温度を230度ほどに設定します。こて先にはんだが付いている場合はクリーナーで軽く除去します
- ピンセットでインサートを穴の上にのせ、軽い力ではんだごてを当て、インサートの温度上昇に合わせてゆっくりとインサートを穴に押し込みます(注:無理に力を入れて押し込むと、穴が崩れたり、インサートが傾いて挿入されることがあります)
- 一回で最後まで押し込むのではなくインサートの位置を確認しつつ何度かに分けて押し込んでいくと失敗しにくいです(押し込み量が足りない場合は修正が簡単ですが、押し込みすぎた場合は修正が比較的大変なため)
- インサートのフランジと穴周辺との段差がなくなるまで押し込んだら熱圧入完了です
- トップケース(片側8箇所)、ボトムケース(片側1箇所)にインサートを熱圧入します。ケースに熱圧入する際ははんだごてが周囲の部分に誤ってぶつかり溶かさないように注意します
インサート熱圧入 インサート押し込み量の目安 インサートを熱圧入したトップケース インサートを熱圧入したボトムケース -
消音フォームを切り出す
- 出荷時に消音フォームがカット済みの個体ではこの手順は不要です。
- フォームカットヘルパーの外周にそって消音フォームを2枚切り出します
- 柔らかい素材のため、カッターで罫書き線を入れ、ハサミで切り出すという方式が簡単です
切り出した消音フォーム -
トップケースにプレートを取り付ける
- 電池基板のケーブルが本体基板に取り付けられていることを確認します
- プレートをトップケースに載せ、六角レンチを使用してねじでとめます(片側4箇所)(注:無理に力を入れてねじを回すとインサートが外れてしまうことがあるため、軽い抵抗を感じる時点でねじを回すのを止めましょう)
-
ボトムケースに電池基板を取り付ける
- 電池基板をボトムケースに載せ、六角レンチを使用してねじでとめます(片側1箇所)
プレート+電池基板ねじ止め後 -
トップケースにボトムケースを取り付ける
- 溝に沿ってケーブルをはわせた上で、ボトムケースに消音フォームをのせる(注:消音フォームはスイッチピンとボタン電池の絶縁材を兼ねているので、忘れずにいれてください)
- ケーブルと消音フォームの位置がずれないように注意しつつ、ボトムケースにトップケースをはめ、六角レンチを使用してねじでとめます(片側4箇所)
消音フォームを忘れずに挟む -
ボトムケース底面の円形の切り欠きに合わせて滑り止めを貼る
-
キーキャップを取り付ける
組み立て完了です! -
必要に応じてファームウェアを更新し、キーマップの変更や、通信間隔の調整を行う
- 通信環境や入力速度は人によって大きく異なるため、自分に合わせて通信間隔の調整を行うことをおすすめします
BLEに対応するため、ファームウェアにはSekigon氏のnrf52対応のqmk_firmwareを使用します。
-
リポジトリを取得する
nrf52対応のqmk_firmwareはこちら- 既にqmk_firmwareを使っていて別のブランチとして用意したい場合
git remote add sekigon https://github.com/sekigon-gonnoc/qmk_firmware.git git fetch sekigon git checkout -b nrf52 sekigon/nrf52
- 既にqmk_firmwareを使っていて別のフォルダに置きたい場合
git clone -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git ble_micro_pro
- 初めて使う場合
git clone --depth 1 -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git
-
必要なサブモジュールを用意
make git-submodule
-
NRFSDK v12.3.0を取得し、適当なディレクトリに展開する
- 技適の関係上、バージョン番号は厳守してください。
-
展開したディレクトリをmsys2などビルド環境の環境変数に設定する
export NRFSDK12_ROOT=<path to sdk> #例 /c/dev/nRF5_SDK_12.3.0_d7731ad
nrfutil.exeをダウンロードし、適当な場所に保存。パスを通す。
export PATH=${PATH}:~/qmk_utils (~/qmk_utils直下にnrfutil.exeを保存した場合)
pipでnrfutilを入れます。(python2.7)
pip install nrfutil
Caravelle BLEにはブートローダが事前に書き込んであるため、無線通信によるファームウェアアップデートが可能です。
-
スマートフォン・タブレットにnRF Toolboxをインストール
-
マスタ(左手側)、スレーブ(右手側)それぞれのファームウェアをビルドする
make caravelle_ble/master:default:dfu_ble make caravelle_ble/slave:default:dfu_ble
qmk_firmware
直下に、caravelle_ble_master_default.zip
とcaravelle_ble_slave_default.zip
という2つのzipファイルが生成されます
デバッグモードでビルドするため、上記画像のような警告が出ますが問題ありません。(ファームウェア更新時のバージョン番号チェックを避けるためデバッグモードが必要となります。) -
生成された2つのzipファイルを共有フォルダやメールを使用してスマートフォンに移動し、nRF Toolboxにコピーする
- iphoneを使用する自分は、「生成されたzipファイルをdropboxにコピー」→「iphoneのdropboxアプリからzipファイルを選択」→「
エクスポート
を選択」→「nRF Toolboxにコピー
を選択」という手順で行っています - 共有フォルダの代わりに、「自分宛てにzipファイルを添付したメールを送信」→「スマートフォンで受信したメールのzipファイルを選択」という風にメールを使用することもできます
- iphoneを使用する自分は、「生成されたzipファイルをdropboxにコピー」→「iphoneのdropboxアプリからzipファイルを選択」→「
-
nRF Toolboxを起動し、DFUを選択
-
SELECT FILE
から先ほど用意したzipファイルを選択 -
書き込みたい基板の電源をタクトスイッチを押しながら入れ、DFUモードに突入する
-
SELECT DEVICE
でDFU Targ
を選択 -
UPLOAD
を押し、ファームウェアを書き込み- 注:書き込みが完了するまでスマートフォンと基盤の電源はOFFにしないこと
- 書き込み完了後、一旦電源をOFFにし、再度ONにすると、
Caravelle-BLE
あるいはNordic UART
として自動的にアドバタイズがはじまります。(注: 接続済みの端末がある場合はアドバタイズは開始されません。) - まれに書き込み完了も
DFU Targ
と表示されつづけ、キーボードとしてのアプリケーションが起動しない場合があります。その場合、手順6から順に再びファームウェアの書き込みを行ってください。 - 電池残量が少ないと
DEVICE FIRMWARE UPDATE
開始直後にエラーが発生することがあります。その場合、電池を交換し再度ファームウェアの書き込みを行ってください
nRF Toolboxにコピー | SELECT DEVICEでDFU Targ を選択 |
UPLOADを押し、書き込みを開始 |
OpenOCD(0.10.0)とST-Link V2を使用して書き込みます。 (CMSIS-DAPでも可能なようですが、作者は未確認です。)
- ST-Link V2は、aliexpressやamazonで安価なクローン品を購入することができます
- MSYS2でのOpenOCD(0.10.0)のインストールはこちらのサイトが参考になります
- WindowsでST-Link V2を使用するためには、ST-Link V2のファームウェアのアップデートが必要となる場合があります。こちらのサイトが参考になります。
-
本体基板のスライドスイッチを電源OFF側にし、電池基板と本体基板の接続を解除する
-
ST-Linkの
3.3V GND SWDIO SWDCLK
を基板のVCC GND SWDIO SWDCLK
に接続する(基板裏面のシルクを参照) -
MCUを初期化し、ソフトデバイスを書き込む
openocd -s /mingw64/share/openocd/scripts -f interface/stlink.cfg -f target/nrf52.cfg -c init -c "reset init" -c halt -c "nrf5 mass_erase" -c "program s132_nrf52_3.0.0_softdevice.hex verify" -c reset -c exit
- ソフトデバイスはファームウェア書き込みにおいてダウンロードした、
NRFSDK v12.3.0
の中のnRF5_SDK_12.3.0_d7731ad/components/softdevice/s132/hex
に保存されています - CMSIS-DAPを使用する場合は、
interface/stlink.cfg
をinterface/cmsis-dap.cfg
に変更します(次の手順でも同様)
- ソフトデバイスはファームウェア書き込みにおいてダウンロードした、
-
本リポジトリのリリースからブートローダ(
caravelle_ble-bootloader.hex
)をダウンロードし書き込むopenocd -f interface/stlink.cfg -f target/nrf52.cfg -c "program caravelle_ble-bootloader.hex verify" -c "reset" -c exit
-
正しくブートローダが書き込めていれば、キーボードを起動し、端末からBluetoothデバイスのスキャンを実行すると
DFU Targ
と表示されます。この状態ではキーボードとしてのファームウェアが書き込まれていないので、前項を参考に無線通信でファームウェアを書き込みます。
ソフトデバイスを書き込み | ブートローダ書き込み | ST-Linkを正しく接続できていないとこのようなエラーが発生します |
Caravelleのデフォルトのキーマップはリンク先のkeymap.cにて定義されています。以下はそれを画像にしたものです。
デフォルトキーマップ。黒文字:Baseレイヤー、青文字:Lowerレイヤー、赤文字:Raiseレイヤー、緑文字:Adjustレイヤー(次画像参照)。Home、End、PageUp、PageDown、Escは2020/07/27に追加しました。それ以前に出荷したものでは定義されていないので注意。 |
Adjustレイヤー。設定関連のマクロが定義されています。 |
マクロ | 定義 |
---|---|
AD_WO_L | マスタと新たな端末とのペアリングを開始(他の端末の無線を一旦OFFにし接続を解除してから新たなペアリングを開始してください) |
ADV_IDX | マスタをX番目にペアリングした端末と接続(AD_WO_Lでペアリングしたものから順にID1、ID2…となります) |
DELBNDS | マスタに保存されたペアリング情報をすべて削除 |
DEL_IDX | マスタに保存されたX番目のペアリング情報を削除 |
BATT_LV | マスタ側の電池の電圧を表示(例:2998mV ) |
ENT_SLP | スリープモードに突入 |
ENT_DFU | DFUモードに突入 |
RESET | マスタを再起動 |
端末、マスタ、スレーブのペアリング情報を削除してから再ペアリングを実行してみてください。
- マスタに記録されたペアリング情報を削除する
- 最上段の中心3つのキー(デフォルトの配列では
WER
に相当)を押しながら電源をONにすることで端末、スレーブとのすべてのペアリング情報を削除できます DELBNDS
キーコードでも全てのペアリング情報を削除できます- 特定の端末とのペアリング情報を削除するには、
DEL_IDx
(x
はその端末のペアリング番号)をキーマップに割り当てて実行してください
- 最上段の中心3つのキー(デフォルトの配列では
- スレーブに記録されたペアリング情報を削除する
- 最上段の中心3つのキー(デフォルトの配列では
UIO
に相当)を押しながら電源をONにする
- 最上段の中心3つのキー(デフォルトの配列では
- 端末に記録されたペアリング情報を削除する
- Bluetoothの設定画面からCaravelle-BLEのペアリングを解除してください(例: Windows10なら「Bluetoothとその他デバイス」から「Caravelle-BLE」を選択し「デバイスの削除」)
それでも症状が改善しない場合は、無線通信でのファームウェア更新、MCUの初期化を順に試してみてください。
端末-マスタの片側のペアリング情報のみを削除し、もう片側に古いペアリング情報が残ったまま、端末-マスタを新しくペアリングすると表題の問題が発生するようです。ペアリングが出来ない・出来なくなったを参考にペアリング情報をすべて削除した上で再度ペアリングを行うと解決されます。
ドライバエラー |
- 入力遅延が気になる場合は、
caravelle_ble/config.h
内の下記のパラメタを編集します。 - 接続先の省電力設定も確認してください
パラメータ | 定義 |
---|---|
BLE_NUS_MIN_INTERVAL | 左右間の通信間隔の最小値(ms) 下げるとマスタとスレーブ間の遅延が減るものの、消費電力が増える。デフォルトは20 (2020/07/27以前は30) |
BLE_NUS_MAX_INTERVAL | 左右間の通信間隔の最大値(ms) 下げるとマスタとスレーブ間の遅延が減るものの、消費電力が増える。デフォルトは50 (2020/07/27以前は30) |
BLE_HID_MAX_INTERVAL | 端末との通信間隔の最大値(ms) 下げると端末とマスタ間の遅延が減るものの、消費電力が増える。デフォルトは60 (2020/07/27以前は90) |
BLE_HID_SLAVE_LATENCY | 端末との通信パラメータ 下げると通信頻度が増えるが、消費電力が増える。HID_INTERVALに反比例させると良い? デフォルトは3 (2020/07/27以前は4) |
config.h
のDEBOUNCE
の値を調整してください
- 電源を常時付けたままでも3ヶ月以上は電池が持つ試算ですが(使用環境や条件によって変化します)、長時間使用しない場合は電池の消耗を防ぐため、電源を切ってください。また、持ち運び時にキーが押下状態のままになると電波を発信しつづけて電池が消耗するため、持ち運びの場合も電源を切った状態にしてください。
- 正常な動作中に電池が発熱することはありません。発熱を感じた場合はただちに使用を中止してください
本ビルドガイドは下記を参考に執筆しました。
- nrtkbb氏 uzu42ビルドガイド
- Sekigon氏 SISO59ビルドガイド、BLE-Micro-Proドキュメント
- yfuku氏 Claw44ビルドガイド