天高工房

キーキャップに印字して遊んだり電子工作して遊んだりしたことを書くかもしれません。

分割キーボードを定義する

通常のキーボード定義の話は本稿では省略します。

環境

この記事を書いているとき、QMKバージョンは 0.6.242 でした。

新しい分割キーボードの定義

分割キーボードを新しく定義する際にやるべきことは3つです。

rule.mk

以下を追加して分割キーボードに関するライブラリの読み込みを有効にします。

SPLIT_KEYBOARD=yes

config.h

TRSを用いた単線通信の場合は以下を定義します。使えるピンは D0, D1, D2, D3, E6 の5ピンです。

#define SOFT_SERIAL_PIN DX

TRRSを用いたI2Cを使う場合は以下を定義します。

#define USE_I2C

キーマップの定義

キーマップを定義する前にレイアウトマクロを定義します。この際に、そのまま行を2倍にします。

前半行が左手、後半行が左手になります。

分かりやすさのため、前半はprefixをKでなくL、後半のprefixをRとする人もいます。

キーマップはレイアウトマクロを使って過不足なく定義してください。

ファームウェアのビルドと書き込み

ファームウェアのビルド方法は変わりません。

書き込みは両デバイスマイコンに書き込んでください。

オプション

マスタデバイスの向きを切り替える

ここでいうマスタデバイス(マスタ)とは、分割キーボードのうちUSBケーブルでPCと接続された側のデバイスのことをいいます。 逆に、マスタデバイスとオーディオ4極ケーブル等で接続されたデバイスをスレーブデバイス(スレーブ)とします。

デフォルトではマスタは左手です。そのため、USBが接続されたデバイスは必ず左手として認識されます。

ハードウェアの変更なしにUSBを右手に接続したい場合は以下を定義します。

#define MASTER_RIGHT

それぞれのデバイスが内部に両方のキーマップを持っていますので、キーコードで一時的に左右の手を切り替えることもできます。

skyhigh-works.hatenablog.com

ハードウェアに変更を加えて

ハードウェアに変更を加えることが可能な場合は、空いているGPIOを一つ用意します。

#define SPLIT_HAND_PIN your_choose_pin

そして、左手になるデバイスのこのピンをVCCに接続してください。右手になるデバイスはこのピンをGNDに接続してください。

これで、左右の役割が固定されるのでどちらのUSBに接続しても役割が変わらず利用できます。

左右の手で異なるマトリクスを使う

追加で接続されるデバイスは右手扱いになります。以下の定義をすることで異なるピンアサインを定義できます。

#define MATRIX_ROW_PINS_RIGHT {X,X,X.,..,X}
#define MATRIX_COL_PINS_RIGHT {X,X,X,...,X}

注意事項として、現在は MATRIX_ROW_PINSMATRIX_ROW_PINS_RIGHT は同じ長さにしなくてはならない、とあります。

ピン数さえ揃えれば動作します。

確かオタクスプリットで使いました。

RGBLED

QMK用語でとても分かりにくいものにLEDがあります。

  • BACKLIGHT(普通のLED)
  • RGBLED(neopixel系)
  • RGBMATRIX(普通のLED+LEDドライバだったけど最近neopixel系も盛り込まれた)

これらはすべて別個です。 ここではRGBLEDもしくはLEDという語句を使ったとき、ws2812やsk6812といったneopixel系の単線通信マイコン内蔵のフルカラーLEDのことを指します。

まずLEDの信号を吐き出すピンを定義します。左右とも同じピンを使います。

define RGB_DI_PIN YOUR_LED_PIN

次に、左右それぞれのLEDの数を指定してください。

define RGBLED_SPLIT {LEFT_NUM, RIGHT_NUM}

以上です。RGBLIGHT_SPLIT という定数もありますが、これはRGBLED_SPLITを定義したときに暗黙に定義されるので設計者が定義する必要はありません。定義するとコードレビュー時に「意味ないから消せ」っていわれます。

参考ページ

@mtei 氏の連続ツイートを主に参考にしました。

また、Discordでまとまっているという情報があったので以下のドキュメントを参照しました。

github.com

おまけ

QMKの標準スプリットキーボードは、スレーブデバイスのLEDはサポートしてないそうです。

どうやら、TRRSで片方を単線通信用、片方をLED信号用にすることで実現できるようです。品質の良くないケーブルを使うと動かなくなりそうですね。

光らせたい&OLEDを点灯させたいというのはよくわからないので、Helix回路/コードを流用するのがよいのではないでしょうか。

正確な日付は覚えていませんが、現在は単線通信でもRGBLEDがサポートされています。

分割キーボードで右手用デバイスにUSBを刺す(左右のデバイスの役割を交換する)

QMKでは分割キーボード(スプリットキーボード)をサポートしています。現在のキットで一般的な構成は以下の通りです。

  • 左右基板にそれぞれpromicroを取り付ける
  • 左右基板にそれぞれTRRSジャックを取り付ける*1
  • 左右基板の通信をTRRSケーブルで行う*2

この際、両方ともにpromicroがあるのでどちらでもマスターにできるように見えますが、デフォルトでは左がマスターです。

左手にUSBケーブルを指せば使えますが、右手にUSBケーブルを指したいこともあると思います。その場合どうすればいいかを調査しました。

一時的に交換する

SH_から始まるkeycodeを使うことで一時的に左右の手の切り替えができます。トグルや交換の有効無効、長押し中のみ切り替えなどがあります。「キーを押し続けている場合は手を交換」は片手キーボードを実現するための機能かもしれません。

この交換は電源を切った場合交換しない状態に戻ります。

詳細は以下URLを参照ください。

beta.docs.qmk.fm

恒久的に交換する

デフォルトではUSBを差したデバイスが左手扱いされます。これを右手扱いに変更したい場合はkeymapフォルダ内の your_keyboard_name.c に以下の定数宣言を追加します。

#define MASTER_RIGHT

*1:単線通信のみサポートする場合はTRSでも可

*2:単線通信のみサポートする場合はTRSでも可

キーボードわいわい会を開催しました

ほとんど勢いでキーボードmeetup「キーボードわいわい会」を開催しました。

connpass.com

すでにshela_氏により2年ほど前に「HHKB hacking会」が開催されていたことを観測しているので愛知で開催されるキーボードイベントとしてはおそらく2回目です。

背景

NGK2018BでLTしましたけど反応がいまいちでした。twitter見る限りぼちぼちいたようなのですけれど、音楽性の違いが露骨にでるので難しいですね。

しかし、来栖川電算さまから提供いただけることになりました。思い立ったら吉日ということで初週開催です。

振り返り

どんな人が集まるかわからなかったので適当にLT(Longtime Talk)と休憩/わいわいを交互にやろう、と決めていました。

開始予定は13時15分くらいだったのですが、13時5分くらいには全員そろっていたのでちょっと早めに始めました。

私は「キーボード、普段使ってると思うけど思ったより知らないこと多いから色々構成要素見てみようぜ」みたいなスライドを作りました。規格系の配列はこんな感じでこんな違いがあるよ、そこから最近の拡張はこんなのがあるよ、みたいなのを雑に20分くらいで話しました。

次に、@shela_氏により、HHKB hacking会のスライドベースでざくっと説明がありました。過去の会では2時間くらいかかったそうで、結構流したはずなのに今回は50分くらいはかかっていたかと思います。

このあたりで14時半とかでした。

その後自分がkinesisなど見たかったので1時間くらいあれやこれやわいわいしました。

一応もうひとつ「もっとゆるくやっていこう」みたいなネタがあったので脱線しつつざっと話しました。

その後荷物をまとめつつ適当にわいわい、18時頃解散しました。

開催の様子

やらかしをしたので写真は一枚もありません。

キーボードわいわい会 に誰かあげている可能性はあります。

次回?

今回会場提供いただいた来栖川電算様から引き続き開催されるようであれば提供できます、という申し出をいただきました。 また、参加者の方からも弊社使えますとご提案いただけましたので、開催場所はなんとかなりそうです。

あくまでも勉強会などではなく集まってわいわいするmeetupとしてゆるゆるやっていきたいな、とは思いますが、だらだら目的もなく集まっても締まりがないと思うので何かしらまとまる方法がないかなーと考えています。

やるとすると、15分くらいの持ち時間で語りたいことを語る枠を最大3枠くらい用意するのがまず良いかな、と考えています。

また、これは賛否が分かれると思うのですが、当日LT指名とか、発表聞いてみたい人投票とかやってみたいなぁという気持ちもあります。

とりあえず意見ください。

無変換/変換でIMEのON/OFFを切り替える

この記事をみて「そういえば試してみるかー」と思ったら面白いことがわかったので書きます。

www.itmedia.co.jp

前書き(読み飛ばしてください)

OADG109AベースのキーボードはANSIに比べてスペースキーが短くなる代わりに「無変換」「変換」「カタカナひらがな漢字」といったキーが追加されています。

そしてIMEのON/OFFは左上のやや遠い位置にある「半角/全角」で実施すると信じられています。このトグル式の評判がよくないです。引き合いに出されるのはMacOSのキーボードです。MacOSではOADG109Aではない配列のキーボードが採用されています。そのため無変換/変換といったキーは存在しません。代わりに「英数」「かな」があります。これは書いてある通りに入力モードを切り替えるボタンです。どうも「脊髄で理解させるため」の設定だそうです。

従来の手法

WindowsでもMacOS方式を実現したいという声は少なくないです。OS/IMEの機能として持っていないわけではないのでIMEの設定を変更することで従来より実現できます。

スクリーンショットを撮影して説明しようと思いましたが、ほぼそのままのサイトがあったのでやり方はそちらを見てください。

www.onebizlife.com

公式アナウンス

冒頭で紹介した記事でデフォルト設定が従来の手法で紹介した記事の最終的な設定になることが決まったようです。

www.itmedia.co.jp

オチ

IMEの設定を見ていたら、「Shift+無変換」で英数入力に切り替わることが分かりました。 試しに英数入力状態で「変換」を押したら日本語入力に切り替わりました。

無変換単独ではカタカナ変換に使いたいのでなんかこれでもういいじゃん、となりました。

つまり、我々はなにも追加の設定をしなくても、僅かな好奇心さえあれば無変換のカタカナ変換を維持したままMacOS方式に近いIME切り替え方式を得ることがすでにできていたのです!!!!

まとめ

  • 「Shift+無変換」で英数入力
  • 「変換」で日本語入力

なおサンプル数1(自分のみ)です。再現したら教えてください。

無変換/変換でIMEのON/OFFを切り替える

この記事をみて「そういえば試してみるかー」と思ったら面白いことがわかったので書きます。

www.itmedia.co.jp

前書き(読み飛ばしてください)

OADG109AベースのキーボードはANSIに比べてスペースキーが短くなる代わりに「無変換」「変換」「カタカナひらがな漢字」といったキーが追加されています。

そしてIMEのON/OFFは左上のやや遠い位置にある「半角/全角」で実施すると信じられています。このトグル式の評判がよくないです。引き合いに出されるのはMacOSのキーボードです。MacOSではOADG109Aではない配列のキーボードが採用されています。そのため無変換/変換といったキーは存在しません。代わりに「英数」「かな」があります。これは書いてある通りに入力モードを切り替えるボタンです。どうも「脊髄で理解させるため」の設定だそうです。

従来の手法

WindowsでもMacOS方式を実現したいという声は少なくないです。OS/IMEの機能として持っていないわけではないのでIMEの設定を変更することで従来より実現できます。

スクリーンショットを撮影して説明しようと思いましたが、ほぼそのままのサイトがあったのでやり方はそちらを見てください。

www.onebizlife.com

公式アナウンス

冒頭で紹介した記事でデフォルト設定が従来の手法で紹介した記事の最終的な設定になることが決まったようです。

www.itmedia.co.jp

オチ

IMEの設定を見ていたら、「Shift+無変換」で英数入力に切り替わることが分かりました。 試しに英数入力状態で「変換」を押したら日本語入力に切り替わりました。

無変換単独ではカタカナ変換に使いたいのでなんかこれでもういいじゃん、となりました。

つまり、我々はなにも追加の設定をしなくても、僅かな好奇心さえあれば無変換のカタカナ変換を維持したままMacOS方式に近いIME切り替え方式を得ることがすでにできていたのです!!!!

まとめ

  • 「Shift+無変換」で英数入力
  • 「変換」で日本語入力

JISキーボードって...クソだよねー!

この記事は18日目の記事です。

adventar.org

ポエムしか書く気がないので適当な題です。あ、私は普段いわゆるJISかJIS寄りのキーボードしか使ってないです。

JISキーボードって...クソだよねー!

と度々言われるし、実際キーボード設計をするときに面倒な要素がある*1ことに気づいて私も嫌いになりました。

しかし、よくよく考えるとJISでどんな感じで定義されてるのか見てませんでした。見ようと思いましたが、安くない金を支払わないと見れないようなので結局JISもANSIも見ることはしませんでした。ストリーミング的な形で読めるようなので一応読みました。

よってこの記事は断片的で不確実な情報を元に書きます。

厳密なJIS準拠はもはや存在しないっぽい

キーボードは「X6002 情報処理系けん盤配列」で定義されています。が、最新は1980のようです*2

当然Windows95がでてくるより前ですので、現在の状況とは乖離があります(復改だとかまっ消だとか)。また、MODキーなども規定されていません。記号の印字位置も現在とは異なります。規格で印字位置まで定義されていると誰かいってた気がするけどどういうことなんだ...

現在までに残っている要素は、「QWERTY」「ロジカルペアリング」「ISO Enter」くらいではないでしょうか。どちらかというとこれらはISOで定めようとしていた要素な気がします。

現在一般的な108キーボードはJIS風ではあってもJISではないことがわかりました。どちらかというとJPキーボードでしょうか。

追記分

109キーボードIBMが1990年あたりに原型となるキーボードを作成し、OADGが2003年あたりに設定したもののようです。ただしOADGは2004年に活動休止しています。

厳密にはOADG109とOADG109Aが存在し、現在日本語キーボードとして販売されているのはOADG109Aです。一部記号の配置が異なるのみで、それ以外は同様です。

PCオープン・アーキテクチャー推進協議会 - Wikipedia

JPキーボードの欠点

最も辛い欠点はEnterキーです。配置の研究をしているときに気づいてしまったのですが、JPキーボードで打鍵をしているときは右手が左右に動くというか、右に1stepずれます。この動作はなんとEnterキーを押すためのものだったのです!小指もなんとなくEnterを押す準備をしてしまっているので左手ほど小指が自由に動いてくれないように感じます。

小指の可動域は手のひらが同じ位置の時、右にはずれますが右上にはずれません。これはANSI Enterはそのまま押せるけれどもISO Enterは押せない、ということを意味します。BackSpaceも右上と遠い位置にあるのでこれを連打するときにも動きますが、これは後述の理由から無視出来ます。

JPキーボードの利点

スペースキーが短いことです。これまた配置の研究をしているときに気づいたのですが、スペースキーを押す場所はかなり狭く固定されると思います。掌が動かないほうが良い以上、親指が叩く位置も一定だからです。私なんて常に左手で左端でした。1uあれば足りちゃいました。ANSIみたいに6uとか必要ないです。

厳密には、スペースキーが短いことではなく、スペースキーが短いことによるキーの追加がうれしい点です。他の記事でも述べていますが、親指にはもっと多くの役割が与えられるべきです。具体的にはBackSpaceやEscなど押しにくい上隅に追いやられているキーや、IME切り替えキー、Enterキーなどです。

アメリカなどの国でも、親指の役割を増やすということを気にしている人たちがいるようで、スペースキーが二つに分割されたキーボードも出てきています。

JPキーボードだとすでに無変換と変換がありますので3キー相当です。さらにスペースキーを半分にすると4キーになります。すべてを1uにすると6キー分の空間が確保できます。現在私が使っているXD75はすべて1uのキーボードなので親指担当キーは6キーあります。すでに運用をしていますが6キーまでなら十分打ち分けることがが可能です。それ以上は可動域の関係で厳しいのではないかと思います。

提案

以下のような感じのするといい感じになるのではないでしょうか。

  • A行より上をANSI系のキーサイズ
  • Z行以下をJP/OADG系のキーサイズ
  • BackSpaceは1u
  • 何なら最下列はすべて1.5uや1.25u

参考までに、RealforceのJPモデルの最下列はほとんど1.5uです(スペース、Win、Appのみことなる)。

各々が各々の考える"正義"を貫いていこうな!!!

私はロジカルペアリングに慣れきってしまっているからこのままいくよ!!!

参考資料

日本工業標準調査会:データベース検索-JIS検索

X6002で検索

アニメ『ポプテピピック』第2話・パロディ元ネタ解説 - 特になし

キー配列 - Wikipedia

JISキーボード - Wikipedia

http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/ISCIE2004.pdf

http://www.sanosemi.com/biztech/document/keyboard-picture2009-2.pdf

https://ia801604.us.archive.org/21/items/OADG1991/%EF%BC%AF%EF%BC%A1%EF%BC%A4%EF%BC%A7%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%83%BB%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%20%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E7%B7%A8%201991%E5%B9%B4.pdf

*1:ほとんどのキーは配列を使って配置の自動化ができるが、ISO Enterキーだけ例外処理をしないといけない

*2:削除された新JISを除く