天高工房

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

CapsLockは実はCapsLockではないというはなし

この記事はアドベントカレンダーとは特に関係なく書かれた記事です。

全然別のこと書いてたけどやっぱりまとまらなかったので5分で書けそうな内容を書きます。

日本語配列においてCapsLockはそもそもファーストレイヤーに存在しない

表にいるのは英数キーです。

本物のCapsLockはShift+英数です。

何故遠い半角全角が入力方式の切り替えに使われてしまっているのか

押してしまうと、変換可能な全角のアルファベットが入力されるようになってしまう最高に謎な糞なキーだと思っている人も多いでしょう。私もそうでした。

実は半角全角と同等の機能を持っているのですが、なんと謎の学習機能が付いているのです。デフォルトでは「前回の変換結果に従う」という素晴らしい状態だったと思います。

この謎の学習機能をオフにすることで、Aの左というS席に入力方式の切り替えキーを配置できます。

謎の学習機能?

本当になんで存在するのか謎なんですよこれ。ググってください。

本当に5分で書きなぐりました。

この記事はXD75 atomic style JPで書かれました。

Novelkeys Big Switchをスマートホームデバイスにした

概要

どこのご家庭でも持て余しているNovelkeys Big SwitchとM5Stick-Cを使って間接照明を作ります

必要なもの

  • 基板
  • M5Stick-C
  • Groveケーブル
  • USB type-Cケーブル
  • USB電源

skyhigh-works.booth.pm

GROVE - 4ピンケーブル 20cm (5本セット)

GROVE - 4ピンケーブル 20cm (5本セット)

M5Stick-C・Groveコネクタともに、スイッチサイエンスかマルツから購入することをお勧めします。

M5Stick-CはAliexpressの公式ストアから購入するとさらにおまけがつきます。技適通ってるので安心です(たぶん)。

手順

基板の準備

基板に部品がついていない場合は、基板に必要な部品を実装します。 必要なものは、Groveの90度コネクタ 1個とWS2812bか同サイズ同ピン配置の5050LED 12個です。

LEDは配線を楽するために向きを回しまくったので向きに気を付けて実装してください。

groveコネクタは、LEDが配置されている側の反対側から差し込みます。

開発環境の準備

ArduinoIDEを使ってESP32を開発できる環境を構築してください。以下のページを参照するとよいでしょう。

docs.m5stack.com

ライブラリの準備

スマートデバイスをESP32で作成するライブラリはいくつかありますが、今回はfauxmoespを使います。

bitbucket.org

インターネット上で見ることができる利用例では好評でしたが、現在では方針転換をして Hueに偽装するライブラリになったようです。

This is a library for ESP8266/ESP32-based devices that emulates Philips Hue lights and thus allows you to control them using this protocol, in particular from Alexa-powered devices like the Amazon Echo or the Dot.

LEDは定番のFastLEDを私は採用していました。最新版ではESP32に対応していますが、古いバージョンでは定義がないので必ず最新にしてください。

サンプルソースコード

credentials.sample.hを参考にcredentials.hを作成して同じフォルダに置いてビルド・書き込みを行ってください。

github.com

このinoでは、メイン基板のLEDと、M5StickCのLEDを点灯させるようになっています。

バイス名はBigSwitchにしてありますが、適当な発声しやすい名前に変更してください。

動かす

alexa appなりgoogle home appなりで、スマートホームバイスの検出を行ってください。 認識されたら、設定したID名で呼び出すことができます。

色変更とかは頑張って実装してください。一つのデバイスが複数の名前・複数の仮想デバイスを持つことも可能なので、 パリピモードという名前にして「パリピモードつけて」で有効になるようにしてもよいかもしれません。

BigSwitchをスマートホームバイス(ライト)にすることができました!

私は寝室照明に使っています! 布団の枕元において光らせるとepaperを読みやすくてよいです! 単に飾っておくだけでも可愛くてよいと思います!

おまけとして、スイッチと基板の間に3mmのアクリルを挟むと、Groveコネクタとスイッチ足の突き出し量が釣り合って自立するようになることを報告させていただきます。

TRRS checkerつくった

概要

マイコンなど知性のあるものは使っていない原始的な仕様です。

外部から電源を供給し、TRRSを経由してLEDに流し込むことで光っていたら導通していることを確認できるというだけの仕組みです。

これだけだとほかの端子との短絡が確認できませんが、このチェッカーではタクトスイッチを個別にはさむことで短絡の確認ができるようにしました。

動作例

Tipのスイッチを押してTipのLEDだけが点灯すればTip線は問題ありません。

Tipが点灯しなければTipは接続されていません。

Tip以外のLEDも点灯した場合はその線と短絡しています。

必要なもの

  • 基板
  • 0603 LED 4個
  • 0603 抵抗 4個
  • 6x6mm タクトスイッチ 4個
  • 電源専用USB type-cコネクタ 1個
  • TRRSコネクタ PJ-320A 2個

USBコネクタはたぶんこれです。

www.aitendo.com

TRRSジャックはaitendo以外にも秋月でも買えます。

www.aitendo.com

また、CR2032電池ホルダを調達・実装することでコイン電池でも動作するはずです(未確認)。

www.aitendo.com

部品実装

特に紛らわしい箇所はないのでシルク・フットプリント通りに実装してください。

コネクタ->抵抗・LED->TRRS->LEDの動作確認->スイッチという順番の取り付けがおすすめです。

R(抵抗)に向きはありません。

D(ダイオード・LED)に向きがあります。 0603 led 向き 0603 led polarityなどで検索すると向きの判断方法を紹介しているウェブサイトが見つかります。

基本的には裏面に書いてある矢印の向きです。表面の流れ先に線や点が入っているように見えるLEDもあります。

BLE micro proの新しいファームウェアを入れる

BLE micro proの新しい標準ファームウェアが公開されました(2019/10/1現在Beta版)。

github.com

最近オタクのドッグフーディングかねてBLE micro proを使っているので試してみたいと思います。

前提

Getting startを読みながら進めていきます。 OSはWindows10です。

qmk/qmk_firmwareにマージされているキーボードのみを取り扱い、野良定義には触れません。開発者向けの内容になるのでBLE micro pro開発者向けドキュメントを読んでください。

github.com

おおざっぱな手順は以下の通りです。

  1. 準備する
  2. ブートローダを書き換える
  3. ファームウェアを書き換える
  4. 設定ファイルを書き換える

準備する

フォルダを準備し、必要なファイルをダウンロードします。

フォルダを準備する

自分が管理しやすい適当な場所にフォルダを作ります。

gitとgithubを使って管理したいなーと思うので、今回は以下のようなフォルダ構成を考えています。

./BMP_beta/
    |--workspace/
    └--keyboards/
        |--OtakuSplit/
        |                     |-left
        |                     └-right
        |--other_keyboard_1/
        |--other_keyboard_2/
        └--and others/

後述するnrfutil.exeだとかbootloaderやfirmwareを一緒にアップロードするのはライセンス上よくない可能性がある(調べてない)ので、これらは作業ディレクトリのworkspaceの中に突っ込んで管理外にしたいと思います。

バージョン情報は欲しいので、どこかにバージョン情報を記録したメモを用意しておくとよいかもしれません。

nrfutil.exeを調達する

以下のURLから最新版のnrfutil.exeをworkspace以下にダウンロードします。

github.com

ブートローダファームウェアを調達する

ブートローダはsekigon-gonnoc/BLE-Micro-Pro, ファームウェアはsekigon-gonnoc/qmk_firmwareにあります。 それぞれから、同じバージョンのファイルをダウンロードしてください。カンマで区切られた3番目の数値はrevisionのため、一致させる必要はありません。

それぞれ同じバージョンをworkspace以下にダウンロードします。

github.com

github.com

キーボード定義を調達する

キーボード定義を調達してください。今のところ、準備されていないものはすべて人力で用意する必要があります。 これが用意できない場合、旧ファームウェアを使ってください。

ブートローダを書き換える

この手順は3手順です。

作業ディレクトリに移動する

powershellを開いて、作業ディレクトリに移動してください。

ポートを確認する

Win+X->Mの順番で押してデバイスマネージャーを起動します。

ポート(COMとLPT)という項目があるかどうかを確認してください。ないならそのまま次に行きます。あるならば、何番がすでにあるのかを控えてください。

BLE micro proのリセットボタンを押しながらUSB接続し、ブートモードでPCと接続されている状態にします。この状態でデバイスマネージャのポート(COMとLPT)を見ると新しいデバイスが追加されています。新しく増えたデバイスが、BLE micro proである可能性が高いです。これが何番か(COMn(nは整数))を控えてください。この番号はブートローダが書き換わったり、異なるUSBポートに接続すると変わる可能性があります。

Powershellから確認する方法もあります*1。以下のコマンドを実行すると、現在利用可能なCOMポート一覧が表示されます。デバイスマネージャーと同様に、接続前後で差分をとるだけです。

(Get-WmiObject -query "SELECT * FROM Win32_PnPEntity" | Where {$_.Name -Match "COM\d+"}).name

ブートローダを書き込む

作業ディレクトリで先ほど控えたポート番号を使ってコマンドを作成、実行します。この際BLE micro proはブートモードである必要があります。

./nrfutil.exe dfu usb-serial -pkg ./ble_micro_pro_bootloader.zip -p COMn

ファームウェアを書き込む

この手順も3手順です。ほとんどブートローダと同じです。

ポートを確認する

ブートローダの書き換えと一緒です。変わっていないことを確認したほうがよいです。

ブートローダを書き込む

ファイル名以外ブートローダの書き換えと一緒です。

設定ファイルを書き込む

設定ファイルは3ファイルからなります。

  • CONFIG.JSN
  • KEYMAP.JSN
  • TAPPING_TERM.JSN

全てJSONファイルですが、3文字制限があるためJSNになっています。

CONFIG

キーボード定義です。左右どちらがマスターかも含んでいます。

せきごん氏により、QMKのキーボード定義から変換するスクリプトが用意され、試験ついでに主要な国内キーボードキットの定義を用意していただいています。

github.com

ここに定義がない場合は、QMKの定義から変換をするか、自分で用意する必要があります。 これは開発者向けの内容になりますので、この記事では扱いません。

KEYMAP

QMK configuratorから生成したkeymap.jsonのファイル名を変更して書き込むだけです。 ただし、BMP専用のBLE挙動を変更するためのキーコードが含まれていないので、直接書き換えるか、Quantum>QMK specific>ANY()を使って任意のキーコードを差し込む必要があります。一通り必要になるので、専用レイヤーを用意して一通り入れておきましょう。

私は打ち間違えで悩む未来が見えたのでQMK configuratorを拡張しました。keyboard settings > BLE micro proに一通りキーコード定義があります。

takashiski.github.io

特にメンテナンスをする予定はないので、動かなくなってたら教えてください。

tapping_term

キーコードペアごとにtapping termを切り替えられるようです。私は今のところ気になってなくて触っていません。

ざーっと書いて続きはまた明日、と一晩おいたら更新されてました。流石せきごんさん手が早い。ほとんど全部書き直しになった。

導入だけ済ませてしまえば、あとはUSBで繋いでKeymap.jsonを抜き取り、Configuratorに読み込ませて調整、再度読み込ませれば書き換わるので非常に楽です。せきごんさんすごい!

今までBLE micro proはnrf開発環境の導入などサポートのしんどさが目に見えていて公式にはお勧めできない状態でした。一体どれだけの人間が使われていないBMPを所持しているのか、と考えたものです。しかし、これならガンガン推し進めることができるように思いました。

この記事は特に無線化されてない普通のXD75(atomic_style_jp)で書きました。

一応オタクスプリットはBLE micro proが取り付けやすい空間が存在しています。

skyhigh-works.booth.pm

コミックマーケット96に出展しました

天高工房はコミックマーケット96に出展しました。ご来訪されたかた、ありがとうございました。

だいたい輝くオタクの左手を見て一定距離離れて怪訝な顔で見ながら通り過ぎた方が多いかと思います。

f:id:skyhigh_works:20190813154605j:plain
実験的に置かれた輝くオタクの左手(ホテルで撮影)

訪れた方に私からはだいたい「親指活用がモダンなんですよ!!!!」みたいなことを中心に話しました。「なるほどおもしろい!」から「なにいってんだこいつ」まで反応は様々でした。

kakunpc氏からはAngel64の説明がなされました。タブレット向け市場はありそうです。

販売されていた物品

各物品は原則Booth、一部遊舎工房レンタルボックスで販売されます。

booth.pm

オタクスプリットは在庫がなくなっても随時追加していきます。原則実装済みで用意しようと思っています。

booth.pm

すいはんきーとangel64は8/13 17時より在庫補充予定です。

kakunpc.booth.pm

kakunpc.booth.pm

その他

すいはんきーが8/17(土)より遊舎工房群遊伝で販売されるかもしれません。

見かけたおもしろいもの

WIP

Otaku Split rev.1 ビルドガイド(部品実装編)

必要な道具

  • はんだづけ道具一式(フラックス・吸い取り線など必須ではない消耗品含む)
  • テスター

前提

メイン基板のスイッチが載る上を向く面・オタクスプリットと書かれているほうを表面と呼称します。

表面と逆に下を向く面・主に表面実装部品が取り付けられる面を裏面と呼称します。

promicroが取り付けられる位置が観測者から遠い位置にある向きを正向きとし、promicroを取り付ける側の長辺を奥側と呼称します。スイッチが並んでる長辺は逆に手前側と呼称します。

読み進めるにあたっての注意事項

promicroで有線利用をする場合の内容です。 現在写真は都合によりBLE micro pro実装の写真です

表面・裏面というのは部品を取り付ける面をさしています。スルーホール部品の場合は表面に取り付けるとすると裏面からはんだ付けすることになります。表面実装部品は取り付ける側ではんだづけを行います。表面は主に高さがある部品を取り付けます。

裏面

  1. ダイオード(33+40)
  2. ソケット(33+40)
  3. (右手のみ)ジャンパ抵抗[R3]

promicroの並びにもダイオードを取り付ける場所が2箇所ずつあります。 これはBLE micro proのボタン電池の回路で使う部分なのでpromicroだけで使う人には取り付けても取り付けなくても動作は変わりません。 ダイオードは余分が同梱されており、かつpromicro理由では何があっても問題がない場所なのでここで練習してもいいかもしれません。

裏面の実装の写真

f:id:skyhigh_works:20190718132354j:plain f:id:skyhigh_works:20190718132357j:plain

右手のみの部品

ジャンパ抵抗の写真 f:id:skyhigh_works:20190718132406j:plain

表面

  1. リセットスイッチ
  2. promicro(ZigZag)
  3. TRRSジャック
  4. 1608抵抗スライドスイッチ(側面フットプリント[SW35]および[SW42])

1608抵抗(旧スライドスイッチ)

スライドスイッチのフットプリントのうち、中央とその手前一つに対して1608抵抗をはんだ付けしてください。ダイオード同様に片方を予備はんだすれば難しくありません。

スライドスイッチの流れで表面の項目に入っていますが、裏面につけても動作に違いはありません。

1608抵抗はダイオードと異なり向きはありません。

f:id:skyhigh_works:20190813170957j:plain
1608抵抗

スライドスイッチは左右とも手前のまま使います。切り替えるとUSBを刺した側によらず右手が左手の入力内容、左手が右手の入力内容になります。

スライドスイッチを取り付けない場合、promicroのきれはしでスライドスイッチのフットプリントの真ん中3つのうち、手前側2本を繋ぐと同様の動作をします。

f:id:skyhigh_works:20190718153421p:plain

表面の実装の写真

f:id:skyhigh_works:20190718153421p:plain

BLE micro proを使う場合

まず左右の内側に取り付けるはずだったスライドスイッチを 取り付けないでください。 代わりに、上部取り付け位置に取り付けてください。

BLE micro pro 自体は取り付けるだけで使えますが、電源としてボタン電池を使う場合は以下の部品を調達・取り付けてください。

I2Cを通信に使いたい場合

左右いずれかにプルアップ抵抗を追加してください。

  • 抵抗(1608) x2

SMD部品実装の小技

skyhigh-works.hatenablog.com

promicroの取り付けに関して

読んでみてよくわからなかったらすべてはんだ付けしてください。そして各ピンヘッダを少しの長さだけ残してニッパで切り落としてください。少しの長さを残すというのは、promicroに何らかの不具合が生じた際に役に立ちます。すこしピンが残っていると部品を取り外す際にはんだこてを当てやすくなり、はんだが除去しやすくなります。

ZigZag

Otaku Split rev.1ではpromicroのフットプリントにkeebioのZigZagを採用しています。これはソケットを使わずに挿抜可能な状態なまま接点を確保できるフットプリントです。このフットプリントはもともと「ピンヘッダを確実に直角にはんだづけする」ことを目的として設計されたフットプリントの副産物のようです。

www.reddit.com

一発でうまくいく場合と、何本かのピンが一部ピンが実際には接していないことがあります。その場合でも不良ピンだけをはんだ付けすれば動作するので交換が容易になります。

左手promicro向き写真(右手はUSB向きのみ180度変更、部品面下のまま)

f:id:skyhigh_works:20190718132752j:plain

動作確認

ネジ止めやスイッチ取り付けをする前に、動作確認をします。

microUSBケーブルでPCに接続し、スイッチソケットの左右金属部分をピンセットなどで繋ぐと電気が流れるので何かしらが入力されます。全キー入力されることを確認してください。

入力確認の方法の一つはSwitchHitterなどのソフトウェアを使うことです。メモ帳などで確認しにくいEnter/Esc/BackSpaceや修飾キーなども押した/離したことが記録されます。

日本語キーボード特有のキーはソフトウェア上では反応がないことがあります。半角全角、無変換、変換、カタカナひらがな、YEN(BackSpaceの左)、アンダーバー(RO)の6キーが日本語独自キーです。これらはメモ帳など文字入力可能な場所で適当な入力と組み合わせることで動作がわかると思います。

また、このキーボードは論理配列がキーキャップ表記通りとは限らないので、「変なところのキーが押されるな/入力が確認できないな」と思ったらファームウェア上のキーマップがどうなっているかを確認してください。

押しても入力されないキーがあった場合

まず入力できないキーになんらかの法則性がないか確認してください。例えば1行/1列単位か、ばらばらであるかです。法則性を見つけることで、原因と確認項目を絞り込むことができます。

目視やテスターで動作不良を確認していきます。

1行/1列単位で丸ごと入力がされない場合はpromicroの該当ピンに接点不良がある可能性が高いです。はんだづけをしてください。

特に法則性がない場合は、ダイオードもしくはソケットにはんだづけ不良もしくははんだづけのし忘れがある可能性があります。

Otaku Split rev.1 ビルドガイド(部品実装後)

この記事の内容は一通りのはんだづけが必要な部品を実装した後の話です。

skyhigh-works.hatenablog.com

プレート割

左右とも、トッププレートがスイッチ差し込む部分とカバー部分で分割するようになっています。溝に沿って割れますので、えいっって力を入れて折ってください。

スイッチの取り付け

トッププレートの向きを、メイン基板と重ねて確認してください。すべてのスイッチ穴からメイン基板のソケット・スイッチ穴が見えたらその向きです。トッププレートが被ったら向きが間違っています。

正しい向きで差し込めるように、まずトッププレートの四隅にスイッチを取り付けてください。 そして、メイン基板のソケットにスイッチの足を差し込んでください。

ひたすら全スイッチをはめていってください。たまに足が曲がっています。押し込んだときの「感じ」を感じてください。

動作確認

PCにmicroUSBケーブルで接続して、一通りの入力ができることを確認してください。入力できない場合、ソケットに刺さっていない(足が曲がっている)、ソケットがはがれている、ダイオードの向きを間違えてる、どこかはんだ付けするのを忘れているなどの問題があります。ラジオペンチがあると便利です。

トッププレートへのスペーサー・ねじの取り付け

2.2mm穴と5mm穴が開いています。5mm穴がスペーサー用の穴です。5mm穴からトッププレートの2.2mm穴が見える穴を使います。5mm穴からスペーサーをいれ、逆側からネジを入れて締めます。

四隅だけとめてあればよいです。中央は好みで留めてください。

f:id:skyhigh_works:20190718132354j:plainf:id:skyhigh_works:20190718132357j:plain

底板の取り付け

スペーサーの逆側に底板をネジで固定します

カバーの取り付け

12mmスペーサーを使って底板にカバーを固定します。

このとき、ネジ穴に少し余裕があるので底板がスイッチから板を遠ざかるように板にすこし力を加えながらネジを締め付けてください。スイッチに近づけてしまうと、キーキャップとカバーが擦れててしまうことがあります。

キーキャップの取り付け

思うとおりに取り付けてください。 JP108配列に対して、6YBとスペースキー部分3個ずつが不足しています。これらは、カーソルキーやテンキーのあたりからもってきてください。

Majestouch/Archissのキーキャップ(Majestouchハイプロ除く)は行ごとに形状が4種類あります。一番下をR1(行1)としたばあい、R1,R1,R2,R3,R4,R4と並んでいます。つまりCtrlとZとテンキーの1は同じ形状で、数字とファンクションキーとHomeは同じ形状です。

skyhigh-works.hatenablog.com