Voxel Highway

Build Logs and Reviews of DIY Mechanical Keyboards and Many Other Gadgets⌨️

Pro Micro & QMK Firmware のセットアップガイド (Let's Split編)

前回書いた記事「格子配列で左右分離型の超コンパクトなキーボード “Let’s Split” を組み立てたよ」の続きです.
今回はPro MicroへのQMKファームウェアの書き込みと, キーマップ, RGB Underglowの設定, シリアル通信(UART)とI2C通信での接続について, 備忘録という感じですが書きました.

Pro Microのタイプ

基板の色が赤い純正品は2500円ほどしますが, 青色の中国製クローンのLeonardoは400〜1000円くらいで手に入ります. AliExpressが安いですが, Amazonでも500円で売っています(2017年4月現在).

Pro Microのブートローダーモードについて

Pro MicroはLet’s Split Build Guideの通りにPCBにはんだ付けしています. 今回, 中国製クローンのLeonardo Pro Microを使用しました.

GNDとRSTをショートさせる回数

https://cdn.sparkfun.com/assets/9/c/3/c/4/523a1765757b7f5c6e8b4567.png 純正品(SparkFun製)のチュートリアルに, GNDとRSTを素早く2回ショートさせると, 8秒間書き込み可能なブートローダーモードになると書いてありますが, Arduino Leonardo bootloaderが搭載されているもの(今回使用している中国製クローンなど)の場合は1回のショートでブートローダーモードになります.
※ 初回のファームウェア書き込み時のみ, Leonardo Pro MicroでもSparkFun製と同様に素早く2回ショートさせる必要があるようです. このLeonardo Pro Microの動作については公式のドキュメントのようなものが見つかれば, また詳しく書き足したいと思います. (2017/7/17追記)

リセットボタンの設置

https://i.imgur.com/ge57v63.jpg

毎回はんだごてなどでショートさせるのは面倒なので, リセットボタンとしてタクトスイッチをGNDとRSTにつなげました.

Pro microへのQMK Firmwareの書き込み

Let’s SplitのFlashingガイドを参考にしています.

[Mac OSXの場合]

Homebrewでavrdudeをインストール

$ brew install avrdude

QMK Firmwareリポジトリをダウンロードし, Let’s Splitディレクトリにオリジナルキーマップを作成
/qmk_firmware-master/keyboards/lets_split/keymaps/ディレクトリに新しい任意のフォルダ"hoge"(適宜自分の好きなキーマップ名を付けて下さい)を作成, keymap.cconfig.hファイルを複製して, keymap.cを編集する

今回, GitHubユーザnicinaboxさんのキーマップを一部改変して使用させて頂きました.

キーマップのビルド
/qmk_firmware-master/keyboards/lets_split/ディレクトリで下記のコマンドを実行します.

$ make rev2-hoge

.hex ファイルが /qmk_firmware-master/.build/ ディレクトリに生成されます.

キーマップの書き込み方法①

QMKファームウェアでは, 手動でブートローダーモードにする必要なく自動でシリアルポートを見つけてFlashさせることができます.

左側のキーボードにキーマップを割り当てる: rev2
TRRSケーブルは接続せず, 片方ずつPro MicroをUSB接続します.

$ make rev2-hoge-avrdude

Reset your Pro Micro nowと出てくるので, リセットボタンを1回押す.

右側のキーボードにもう半分のキーマップを割り当てる: rev2fliphalf

$ make rev2fliphalf-hoge-avrdude

左側の時と同様にリセットボタンを1回押す.
※ 最新のQMK Firmwareでは, rev2fliphalfは必要ないようで, 左右どちらもrev2で書き込めば動作するようです. (2017/7/17 追記)

キーマップの書き込み方法②

下記の方法でもキーマップを書き込むことが出来ます.

Pro Microをブートローダーモードにする
GNDとRSTを1回ショートさせて(Leonardo Pro Microの場合), 下記のコマンド

$ ls /dev/tty* 

でシリアルポート一覧に, /dev/tty.usbmodem1411があるのを確認する

左側のキーボードにキーマップを割り当てる: rev2

$ sudo avrdude -p atmega32u4 -c avr109 -P /dev/tty.usbmodem1411 
-U flash:w:/Users/***/qmk_firmware-master/.build/lets_split_rev2_hoge.hex

右側のキーボードにもう半分のキーマップを割り当てる: rev2fliphalf

$ make rev2fliphalf-hogelets_split_rev2fliphalf_hoge.hexファイルを生成しておきます.

$ sudo avrdude -p atmega32u4 -c avr109 -P /dev/tty.usbmodem1411 
-U flash:w:/Users/***/qmk_firmware-master/.build/lets_split_rev2fliphalf_hoge.hex

(デバイスが見つからないと言われてしまう場合の対処法: *1 )

RGB Underglowの設定

Let’s SplitのRGB Underglowガイドを参考にしています.

/qmk_firmware-master/keyboards/lets_split/keymaps/hoge/ディレクトリにMakefileを作成し, 下記を追加します.

RGBLIGHT_ENABLE = yes

config.hに下記を追加します.

#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 10
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17

RGBLED_NUMは左右のLEDの合計数です(今回は10).

keymap.cの[QWERTY_LAYER] のどこかのキーに, MO(UNDERGLOW_LAYER)を割り当てます. [UNDERGLOW_LAYER]を下記のように作成します.

[UNDERGLOW_LAYER] = KEYMAP( \
  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______, \
  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______, \
  _______,  RGB_TOG,  RGB_MOD,  RGB_HUD,  RGB_HUI,  RGB_SAD,  RGB_SAI,  RGB_VAD,  RGB_VAI,  _______,  _______,  _______, \
  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______ \
),

各種のキーで点滅モード, 色調, 彩度, 明るさを変更できます.

RGBLED_TOGGLE: LED ON/OFF
RGBLED_STEP_MODE: 点滅モードの切替
RGBLED_INCREASE_HUE: 色調の変更(+)
RGBLED_DECREASE_HUE: 色調の変更(-)
RGBLED_INCREASE_SAT: 彩度の変更(+)
RGBLED_DECREASE_SAT: 彩度の変更(-)
RGBLED_INCREASE_VAL: 明るさの調整(+)
RGBLED_DECREASE_VAL: 明るさの調整(-)

シリアル通信(UART)

今回, シリアル通信(UART)で左側のキーボードをMaster, 右側のキーボードをSlaveとして通信していますが, I2Cで接続することもできます.

I2C通信

Let’s SplitのPCB(v2)はI2C通信に対応しており, プルアップ抵抗を付けることでI2C通信ができるようになります. (QMKファームウェアのLet’s Splitリポジトリに, 回路図があります.)

プルアップ抵抗の設置, I2Cの設定などは下記のBuild Logに載っています.
Let’s split v2 build log (with I2C) [photos]

I2Cでは, TRRSケーブルの4つの接続すべてを使用して, シリアル通信(UART)に比べてより高速に2つのキーボードを通信させることができますが, Let’s Splitでは速度の差はほとんど認識できないレベルのようです.
また, I2Cにしてしまうと, RGB Underglowができなくなってしまうので注意が必要です.

*1:ArduinoMacアプリからArduino > ツール > シリアルポートでポート番号をチェックして色々再起動するとうまくいくようです(参照元)

Holtite Socketsではんだ付け無しでスイッチの交換し放題なPCBを作ろう

今回のLet’s Splitキーボード製作で, redditのキーボードコミュニティで話題になっていたHoltite Socketsを試してみることにしました. このHoltite SocketをPCBに設置すれば, はんだ付け/はんだ吸い取りをせずにスイッチ(またはLED)を取り付け・交換できる, ホットスワップ*1可能なPCBを作ることができます.

Holtite Socketとは?

View post on imgur.com

ベリリウム銅でできた, 非常に小さな(数mmの)ソケットです. これをPCBのスルーホールに入れて固定し, はんだの代わりに電気を通してもらおうというコンセプトです.

TE Connectivity社で製造されており, 色々なサイズのものが存在しますがキーボードPCB用には下記の2種類のサイズのものがスイッチ用, LED用として使用されています*2.

スイッチ用のHoltite Sockets

全長3.45mm, 適合するスルーホール直径:1.47mm, ピンホール直径:1.07mm

LED用のHoltite Sockets

全長2.39mm, 適合するスルーホール直径:1.04mm, ピンホール直径:0.66mm

日本国内での入手方法

下記のディストリビューターで取り扱っています.

Holtite Socketsの設置方法

この動画がとても分かり易いです.
熱したはんだごてで, PCBのスイッチ/LEDのスルーホールにHoltite Socketを押し込みます. (基本的には, はんだは必要ありません.) 色々なPCBごとにスルーホールのサイズが異なるので, そのサイズによって上手く設置できるかどうかが決まります.

Holtite Sockets互換性があるPCBかどうかの報告リスト

Holtite compatibility

[guide]Hot-swap compatibility table : MechanicalKeyboards

確実にフィットすることが報告されているPCB:
Zeal60, GON PCBs, B.Face/VE.A/WKL PCBs, Leeku PCBs

実際に設置してみた感想

https://i.imgur.com/uju2dlU.jpg

Let’s SplitのPCBはスイッチのスルーホールが大きめでハの字になっている形状だったため, ソケットが緩く熱したはんだごてだけでは設置できませんでした.
そのため, はんだでソケットを接着させたのですが, この方法だとソケットのスリット部分も接着されてしまいソケットの穴が広がらず, スイッチのピンが上手く入らない場合がありスイッチの設置・交換の難易度が高いPCBになってしまいました. はんだ付けの技能が高ければ, この問題は起こらないかもしれません.

今回気づいた良い点・悪い点は下記のようなものでした.

Holtite Socketsの良い点(Pros)

  • スイッチ交換の際のはんだ吸い取り, はんだ付けの手間が省ける
  • ワンタッチで着脱できてとても便利
  • キーボードギーク感が出てかっこいい

Holtite Socketsの悪い点(Cons)

  • スルーホールのメッキ部分(ランド)が剥がれる可能性があり, 取り扱いに注意が必要
  • キーボードの衝撃耐性, 強度が落ちる
  • それなりに高価(1個30〜50円くらい, 1スイッチにつき2つ必要なので, 60個のスイッチを付けられるキーボードの場合は120個で¥3600〜6000ほどかかる)

結論

Holtite Socketsがはんだごてだけで上手くはまることが報告されているタイプのPCBなら, 設置しても良いかもしれません. あと, スイッチの固定の仕方次第ではありますが, キーボードの衝撃耐性, 携帯性とは相反するアイテムかもしれませんね.

今のところ, どうしてもはんだ付け/吸い取りしたくない人向け or 色々なスイッチを気軽にホットスワップして楽しみたい人向けのアイテムで, 問題なく設置できることが証明されているPCB以外での設置はあまりオススメできないという感じです.

格子配列で左右分離型の超コンパクトなキーボード "Let's Split" を組み立てたよ

http://i.imgur.com/NabesMg.jpg

先日のTokyo Mechanical Keyboard Meetup vol.2 (Twitterハッシュタグ #tokyomk2)から1ヶ月経って, ようやくLet’s Splitキーボードの組み立て・セッティングができました.

Let’s Splitって?

格子配列といえばOrtholinear Keyboards(OLKB)が開発・販売している40%サイズのキーボードPlanckが有名ですが *1, Let’s SplitはそれをErgodoxのように左右分離型にしてしまおうというコンセプトで, 海外掲示板redditのメカニカルキーボードコミュニティ /r/MechanicalKeyboards/のユーザWootpatoot氏によって開発されたキーボード用PCBです.

Let’s Split PCBはダイオードやPro Microなど必要なパーツをすべてはんだ付けする必要があり, 普通のメカニカルキーボードのパーツキット(PCBにダイオードやコントローラなどが元から設置されており, キースイッチをはんだ付けして組み立てれば完成するタイプのもの)より少しハードルが高いのですが, 電子工作の勉強には最適でした.

PCBの入手方法

switchTopで1セット$10で販売されていました.
2017年7月現在, 下記のショップで取り扱っているようです.
SwitchTop / Mehkee / Mechboards (2017/7/17追記)

2017年4月に, Wootpatoot氏がv2 PCBのデータをMIT Licenseで公開してくれました. [GitHubリンク] このデータから, 各自自由にPCBを作成できます. (2017/4/24追記)

今回使用したパーツリスト

Part Cost Shop
PCB $10 switchTop
Pro Micros(コントローラ) ¥972 × 2 Yahoo!ショップ
Diodes(ダイオード) ¥180 (100個入) Yahoo!ショップ
TRRS Jack(3.5mm4極のイヤホンジャック) ¥164 × 2 DigiKey or Chip1stop
Plate and case(プレートとケース) $31 Ponoko
M3 Standoffs & Screws (スペーサーとネジ) ¥400 Yahoo!ショップ
Reset Buttons for Pro Micro
(Pro Microリセット用のタクトスイッチ)
¥313 (10個入) Yahoo!ショップ
TRRS cable
(3.5mm4極のミニプラグケーブル)
¥600 Amazon
RGB LED Strips(LEDテープ) ¥756 SwitchScience
Switches(スイッチ) $40.8 Zeal PC
Keycaps(キーキャップ) $54 Pimp my keyboard
Total(合計) approx. ¥20000

合計金額は2万円ほどでした, スイッチとキーキャップで1万円以上かかっているのでそこの金額を抑えれば1〜1.5万円くらいで全て揃うと思います.
あと, Pro MicroはAli Expressなどで300〜400円程度で手に入るようです.

プレートのSVGファイル (2017/4/27追記)

プレートは, アクリル板3mmの厚さで, 下記のデータを使用させて頂き Ponokoでアクリルのレーザーカットを注文しました.

サンドイッチプレート, M3ネジタイプ (ブログの写真はこちらのプレートです)
サンドイッチプレートの間のM3スペーサーの長さは1cmです.

スペーサーがあるサンドイッチプレート, M2ネジタイプ

こちらのスペーサーがあるタイプのサンドイッチプレートデータは, 3枚(3mm×3=厚さ合計9mm)のアクリル板スペーサーを使用し, アクリル板スペーサーの穴に9mmの長さのM2スペーサー(径が3mmのもの)を入れて, M2ネジで固定しています.

各パーツのはんだ付け

Let's Split v2 Build Log with Holtite Sockets

基本的には先人たちが作成してくれたLet’s SplitのBuild Guideに従ってひたすらはんだ付けしていくだけ. redditで他のユーザのBuild logをチェックしていたので, Pro Microの向きが左右で異なるなど肝心な点はクリアできたのですが, 電子工作初心者すぎてダイオードの向きを思いっきり間違えてました.

あとは, Pro Microのリセットボタンの挙動が慣れるまではよく分からず何度も失敗しました. (Pro Microの機種によってリセットボタンを素早く2回押す, 長押しするなどリセット方法が異なります. このあたりのセッティングの話は次回更新のときに記事にしたいと思います.)

RGB Underglow

すっごーい!なにこれなにこれ、たーのしー!

View post on imgur.com

Let’s Splitの所感

  • 小さいので持ち運びに便利

    Let’s Splitの魅力は何と言ってもそのコンパクトさと携帯性です, ケースをアクリルだけで作るととても軽いです.

  • Ergodox的な使い方もできていい感じ

    下の段の親指部分によく使うキーやEnter, Deleteなどをアサインして, Ergodox的な使い方もできるので色々捗ります.

  • 格子配列は打鍵が楽しくなる - Let’s Dive into Ortholinear Life

    格子配列での打鍵は楽しいのでオススメです. テンションが上がるので仕事効率も良くなるかも?(個人差あり)

    格子配列のメリットについては, 今後使い続けてまた記事を書いてみたいと思います.

左右分離型キーボードのメリット

1. 腕を開いて, 肩に負担がかからない姿勢で打鍵できる

私がメカニカルキーボードに興味を持ち始めた理由の一つは, 肩と首のこりを解消したいというものだったので, 左右分離型キーボードで肩に負担がかからない自然な姿勢が取れるようになるのはかなり魅力的でした. Let’s Splitはとてもコンパクトなので, 置く場所の自由度も高く色々な所で使用できると思います.

References:

2. 間に物を置ける

トラックパッドを置いてもいいし, ラーメンも置ける

他の主な左右分離型キーボードとの比較

Keyboard Keys Layout Type LED *4 Firmware
Ergodox 76-80 ⎽⎼⎻⎻⎼⎽ Column Staggered Yes QMK/Kiibohd*5
Diverge3 72 ⎽⎼⎻⎻⎼⎽ Column Staggered Yes Animus
Atreus62 62 ⎽⎼⎻⎻⎼⎽ Column Staggered No QMK
Let’s Split 48 田田田 Ortholinear / Matrix No QMK
Diverge TM2 46 田田田 Ortholinear / Matrix Yes Animus

Ergodox, Diverge3, Atreus62はキーの縦の列が弧を描くようにずれているタイプ(Column Staggered), Let’s SplitとDiverge TM2は碁盤の目のようにすべてがまっすぐ列に沿って並んでいる格子配列のタイプ(Ortholinear/Matrix)です.*6

Atreus62は完全な左右分離型キーボードではないのですが, 左右分離型のメリットを持つキースイッチの配置なので入れてみました. 普通のキースイッチの配列(Normal Stagger)の左右分離型キーボード*7とキースイッチの配列が左右対称(Symmetric stagger)のキーボード*8は今回は省いています.*9
この表の中では, Let’s Splitが一番コンパクトなサイズのキーボードです.

今後のToDo

☑ ケース, プレートを作り直す
2枚だけのサンドイッチプレートだと, (Holtite Socketを付けたPCBの場合特に) 強度に難ありのため側面も覆えるようなスペーサーを追加した新しいプレートとケースを作成予定

*1:Planckの他にもTypeMatrix社のキーボードなどがあります

*2:https://en.wikipedia.org/wiki/Repetitive_strain_injury

*3:https://ja.wikipedia.org/wiki/%E9%A0%B8%E8%82%A9%E8%85%95%E7%97%87%E5%80%99%E7%BE%A4

*4:スイッチごとにLEDを設置可能かどうか

*5:Infinity Ergodoxの場合

*6:キースイッチ配置の分類はDeskthority wikiを参照しました

*7:MISTEL Barocco, Matias Ergo Pro, Kinesis Freestyle2など

*8:μTRONなど

*9:他にもKeyboardioDactyl, 開発中の色々な左右分離型キーボードのプロジェクトがあるようですが, きりが無くなってしまいそうなのでそれも割愛します.