天高工房

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

コミックマーケット96に出展します(月南ラ38a)

天高工房はコミックマーケット96に出展します。 配置情報は 8月12日月曜日 南地区ラ-38aです。南3ホールです。どうやら新しくできた 西館の奥の建物の4階 のようです。遠い...

キーボード島はラの20番台なので隣の隣の島です。Vimとかニキシー管とかそんな感じの島です。

販売情報

オタクスプリット

日本語配列ベースの分割キーボードです。Barocco難民さん如何でしょうか。

物理配列と論理配列にどんなものが組み込めるのかはQMK configurator : otaku_split/rev1をぽちぽちして確認してください。

config.qmk.fm

キット(MXソケット, promicro別売り) : 13,000円

部品実装済み : 20,000円

ともに追加で以下を別途購入ください。

  • MXスイッチ 73個
  • 日本語キーキャップセット
  • microUSBケーブル(通信可能なもの)
  • オーディオミニプラグケーブル(3極もしくは4極)

在庫が思ったよりなかったので、基板発注に失敗したら実装済みが5枚とかそんな感じの販売数になりそうです。

f:id:skyhigh_works:20190726125758j:plain

すいはんきー

ゲーミング左手キーボードです。設計者はレンタルボックス共同運営(?)の@kakunpc 氏です。qmk名は suihankey

キット : 7,000円

別途購入が必要なものは以下です。

  • MXスイッチ 18個
  • 1uキーキャップ 18個
  • MX用スイッチソケット 18個
  • promicro, コンスルー 1式
  • OLED(SSD1306)
  • microUSBケーブル(通信可能なもの)

特徴

主にファーストパーソン・シューティングゲームMMORPGなどのオンラインゲームで使うことを想定して作った左手用キーボードです。 QMKConfiguratorで自由にキーマップを割り当てられるので、FPSの移動用のキーマップやMMORPGのスキルショートカットとしても使えます。 リバーシブルなので2つ購入して右手分も用意すれば36キーのコンパクトキーボードにもなります。 また、ゲーマーが大好きなLEDで光らせるのにも対応しています。

f:id:skyhigh_works:20190726143219j:plain

Angel64

タブレット向けキーボード by kakunpc。

キット : 10000円

タブレットで使うことを想定して作ったコンパクトキーボードです。 コンパクトでありながら64キー備えてあり、またBLEMicroProというBluetoothLowEnergyに対応したProMicroを使用することで、無線化にも対応できます。 急なミーティングや出張など、iPadProやAndroidタブレットと一緒に持ち運んで利用するのを想定して設計しました。

一部部品の購入が別途必要なキットとなります。

ProMicro or BLEMicroPro x 1
コンスルー x 2本
Chocキーソケット x 64個
Kailh chocスイッチ x 64個
Kailh chocスイッチ用キーキャップ 1U x 54個
Kailh chocスイッチ用キーキャップ 1.5U x 8個
Kailh chocスイッチ用キーキャップ 2U x 2個
microUSBケーブル

キーボードにちょっとだけ詳しくなれる本(既刊・技術書典6)

技術書典で書いた本です。部品実装した後のデバッグの話と、現状こんな感じでキーボードが流行ってるよ、みたいな話を書いてます。

1,000円

一人月Tシャツ

まだ何人月か余ってるので買ってください。若干数持っていきます。

2,500円

その他リンク

kakunpc.hatenablog.com

基板のシルク

シルク

「(基板の)シルク」とはシルクスクリーン印刷で基板上に印刷された何らかの図形のことを指します。

主に、部品番号の表示や、部品の取り付け向きを指示するために印刷されます。

他にも基板名などの情報を盛り込んだりします。

キーボードにおけるシルク

主にダイオードとpromicroの取り付け向きくらいでしか意識しないのではないでしょうか。

ダイオードの向き表記は様々なものがありますが基本的には部品のカソード(-)側に記されている線を示す表記になっています。具体的には「本」や「コ」です。以下のURLの画像など参考にしてください。

www.atmarkele.com

キーボードではSOC123という規格サイズのダイオードがよく使われます。KiCADのこのサイズのフットプリントでは「本」ではなく「コ」のみが使われているため、初期には「向きがわからない」という人が多数出ました。

部品番号

最近では、どんな図案で依頼しても大体綺麗に印刷してくれることからデザイン性を重視した基板が作られています。付加価値的にもよい話なのですが、一つ問題があります。どういう理由かはわかりませんが、部品番号を省略しがちなことです。

部品番号を省略することで発生する問題は二つです。部品表と実装箇所の関連付けが写真を使わないとできないということと、部品実装時に回路図との突合せができないことです。promicroを使ったキーボードであれば、実装する部品の種類が非常に少なく一目でどこに実装すべきかがわかります。一方で、例えば複数の容量の抵抗やコンデンサが混在した場合は、実装間違いの原因となります。

はんだづけ不良や部品の不良で動作不良が見られるとき、部品番号が省略されていると回路を追えません。例えば、スイッチのパッドを剥がしてしまったとしましょう。同じ行と同じ列のキーからそれぞれ行の共通部分と列の共通部分を引っ張り出して繋ぐのですが、必ずしも見た目の行列と回路上の行列一致するとは限りません。また、LED(WS2812/SK6812)の接続確認でも困るでしょう。

すべて家庭PCBAするならともかく、他者に部品を実装させるなら部品番号は必ず表記するようにしましょう。

BLE micro proで分割キーボードを定義する

この記事は古いバージョンの内容の記事です。

github.com

今回はotaku_split_BLE/rev1を定義します。

動作確認のためには、最低限BLE micro pro2台とPC、BLEで接続可能なホストデバイス、そしてmicroUSBケーブルを2本用意しておくとよいでしょう。

ひな形をコピー

ひな形なんて存在しないので、まずキーボードフォルダを作ります。今回はotaku_split_BLE/rev1にします。

作成したフォルダの下にkeyboards/ergo42_BLE 以下をまるっとコピーします。

rules.mk

DEFAULT_FOLDERを現在のキーボードフォルダ名に変更してください。

今回はDEFAULT_FOLDER = otaku_split_BLE/rev1です。

.c.hのrename

ergo42_BLE.h ergo42_BLE.cをフォルダ名にリネームします。QMKでは今いるフォルダ名なので、今回は rev1.c rev1.hになります。

rev1.c内の読み込みファイルの変更

rev1.c内のinclude文を変更します。

#include "rev1.h"

rev1.hの移植

qmk/qmk_firmwareで利用しているrev1.hをコピーします。

config.hの書き換え

必要な部分を書き換えます。最低限の変更項目は以下の通りです。

#define MANUFACTURER
#define PRODUCT
#define DESCRIPTION

#define MATRIX_ROWS
#define MATRIX_COLS

master/config.hの書き換え

マスターデバイスで使う定義です。 ピン定義とどちらの手かを定義します。

具体的には以下です。

#define THIS_DEVICE_ROWS
#define THIS_DEVICE_COLS
#define MATRIX_ROW_PINS
#define MATRIX_COL_PINS

ピン番号は PINX(X=正の数)です。追加の2ピンには0と25が割り振ってあるため、1から24の数字で割り振れるのでそんなにつらくないです。

stonehenge30_BLE/rev1内にあるpin_assign.hをコピーして(いらない部分を削除して)includeすると、promicroと同じピン名で定義できるはず...だったんですけどどうも私の環境ではうまくいきませんでした。

また、msys2上のvimでは Shift+insertで貼り付けができます。

slave/config.hの書き換え

スレーブデバイスで使う定義です。 master/config.hと同様です。もし左右で異なるピンを割り振っていた場合はMATRIX_ROW_PINS_RIGHTなどの値に適宜置き換えてください。

keymap の書き換え

LAYOUTマクロは移植済みなので、キーマップのコア自体はそのままの移植で大丈夫です。

そのあとに、BLEのデバイス検索・接続などの機能の入り切りのためのカスタムキーコードを定義して適当なキーに割り当てる必要があります。ergo42_BLEからカスタムキーコードと関数呼び出し周りを上手に移植してください。

一通りすべての機能が「マスターデバイス上で」使えるようにしておいてください。大体どれも使うことになります。また、スレーブにもまたがっていると、スレーブがうまくつながらなくなったときに死にます。

ビルド、書き込み

マスターとスレーブで書き込みコマンド・書き込みファームウェアが異なります。

"マスター用
make otaku_split_BLE/rev1/master:default:nrfutil
"スレーブ用
make otaku_split_BLE/rev1/slave:default:nrfutil

それぞれビルドが終わったら書き込むデバイスの検索をはじめますので、検索が始まったら該当するBLE micro proのにリセットを掛けながらUSBケーブルで接続してください。ピン名としてはRSTではなくBOOTだったかもしれません。書き込みが完了したら抜いてもらって構いません。

動作確認

まず、マスターにUSBケーブルを差し込んで USB_ENを実行してください。これはマスターとホストデバイスをUSB接続可能にするキーコードです。事前にテスターなどでデバッグをしているとは思いますが、一通りのキーが入力できることを確認してください。

次に、AD_WO_L を押して検出可能モードにしてください。タイムアウト時間がいくらかは知りませんが、しばらく適当なデバイスで接続可能なデバイス一覧に表示されるようになります。

適当なデバイスで接続をして、BLE経由で入力ができることを確認してください。

忘れてましたが、スレーブデバイスにもUSBケーブルを接続して電源を供給し動作確認をしてください。

最後に、電池で動作確認してみてください。

最後に

うまく定義できたらせきごんさんのリポジトリにプルリクエストを投げてついったーで宣伝しましょう。

私はあとでなげます。

書き換えなければいけない場所が分かっていれば特につらくないと思います。

思ったより書いてきそうなので積極的に使っていきたいなーと考えています。

エンドユーザー向けには厳しいので、QMK configuratorをうまいこと使ってキーマップ書き換えを楽にする話をかかないとなーと思っています。

Otaku Split rev.1 ビルドガイド

Otaku Split 概要

オタクスプリットは「とにかくキーボードをたたき割りたい」人の逃げ場をなくすために設計されたキーボードです。 移行コストを可能な限り下げる工夫を盛り込んであります。「慣れるのが大変そうだから...」なんて言わせません。 「はんだづけはちょっと...」な人のために実装済みも用意しました。スイッチはめてキーキャップ被せるだけ*1で使い始めることができます。

  • 普段使っているキーボードとほとんど変わらないスイッチ配置
  • 分割時に戸惑いがちな運指分担が重複する6,Y,Bの3キーを両手に配置

一方で、ただ分割しただけではなく、よりモダンな体験が得られる工夫も盛り込まれています。

  • スペースキーを細切れにして左右3キーずつ確保したのでモダンな「親指活用」の打鍵体験が得られる

左手33キー右手40キー、合計73キーとなっています。 日本語物理配列を基として、市販の日本語交換用キーキャップのみで足りるように設計をしました。

スイッチはMXスイッチ専用で、スイッチ向きはKailh準拠のいわゆるNorthFaceです。

booth.pm

booth.pm

本記事では利用をはじめるまでの方法を、いくつかの記事に分割して紹介します。

ファームウェア書き込み

組み上げたあとに問題らしい問題が見つからないのに動作しない...と困る場合があります。問題の切り分けを容易にするために、組み立て前にpromicroにデフォルトファームウェアの書き込みを推奨しています。

PCに全く認識されないという場合は大抵はケーブルの不良が原因です。まれにpromicro自体の不良が原因のこともあります。

QMK toolboxをダウンロードする

最新版は0.0.11です(2019/08/02現在)。変更が追えていないので随時修正します。

とりあえずWindowsではウィルス検出がされることになっていますが、これはBootloadHIDをウィルスとして誤検出しているものです。偽陽性というやつです。実際にはウィルスはいないので実行してください。

github.com

QMK WEBページからhexをダウンロードする

Keyboard from qmk.fmがうまく動作しないので、同等であるhttps://qmk.fm/keyboards/からダウンロードしたhexファイルを使います。otaku_split/rev1です。

qmk.fm

QMK toolboxで書き込む

  1. Local fileにhexを読み込ませる
  2. autoflashにチェックを入れる
  3. promicroにUSBを差し込む
  4. リセットボタンを押してリセットをかけてちょっと待つ

うまくいかない場合はまずケーブルが通信可能か確認してください。次にQMK configurator自体を再起動してください。リセットを2回連続で押すのも試してみましょう。それでもダメなら念のためArduinoIDEで書き込みをしてみてください(リセット不要)。ArduinoIDEでは書き込めるけどQMK toolboxではうまく書き込めないことはよくあります。

万が一通信可能なケーブルで、通信できないのにpromicroが発熱していたら急いでUSBケーブルを引き抜いてください。不良promicroです。

f:id:skyhigh_works:20190213160819p:plain

QMK toolboxの使い方に関して以前書いた記事

skyhigh-works.hatenablog.com

はんだづけが必要な部品の実装

skyhigh-works.hatenablog.com

はんだづけ後の組み立て

skyhigh-works.hatenablog.com

次のステップ

組み立て・動確お疲れさまでした。とりあえず写真を撮影して、#自作キーボード とか #オタクスプリット とタグをつけてSNSに投稿してみてはいかがでしょうか。

色々な意見はありますが、私はキーボードキットのことをPCのベアボーンキットと同程度のものだと思っています。  このキットは適当なMXスイッチとMX用キーキャップ、そしてデフォルトキーマップのファームウェアがあればとりあえずは使えます。しかしそれはキーボードとして最低限の動作はするよ!というだけの、あくまでも最低限のものです。

キーボードキットに手を出してしまうような人間であれば、使っているうちに大小の不満が発生するでしょう。あのキーよく使うんだけど使いやすい場所にないな、とか。このスイッチ重い/軽いとか。このスイッチとキーキャップの組み合わせの音が不満だとか。めんどくさがらずに、不満とその理由を書き出してコストと突き合わせて対策をしていきましょう。「こんなことやってみたよ!」とどこかにまとめて公開すると「そうか!こんなことができるのか!こんなことをしてもよいのか!」と参考に改造するフォロワーがきっと現れるでしょう。きっと想像もできないような魔改造が含まれているに違いありません。楽しみですね!

任意キーマップのファームウェアの作り方

QMK configuratorを使うことを推奨しています。

config.qmk.fm

上記URLを開くと、デフォルトキーマップが読み込まれます。キーマップ一覧からドラッグアンドドロップをするか、キーを選択肢てキーボードの任意キーを入力することで任意位置のキーコードを置き換えることができます。

QMK独自機能も含めた主なキーコードの説明は以下をご覧ください。

github.com

また、QMK上では各キーコードはANSIでの内容になります。日本語配列とは表示が異なりますが、同じ位置にあるキーは大体同じキーコードを発行することを覚えておくと何とかなると思います。

編集が終わったらCOMPILEを押してください。芋が焼き終わったらFIRMWAREを押してhexファイルをダウンロードしてください。

もしキーマップを編集していた場合は3. Keymap.jsonからダウンロードできます。次回は右側の上矢印からアップロードすることで、編集した内容を読み込めます。

config.qmk.fm f:id:skyhigh_works:20190718140019p:plain

書込みはQMK toolboxで行ってください。

デフォルトキーマップ

現在初期値がすべてKC_NOになっているので、基本的なキーコードを打ち込むのがめんどくさいという人は以下のjsonファイルをkeymap.jsonとして読み込ませてください。ひな形として使うことができます。一度ダウンロードしてから読み込ませてもいいですが、雲に上矢印のアイコンボタンを押して、gistのrawのURLを入力するとダウンロードせずに読み込ませることができます。

デフォルトキーマップが追加されました。上記jsonとはちょっと違います。

オタクスプリットrev1のQMK configurator向けサンプルキーマップです。keymap. ...

CapsLockの位置にEscを突っ込んであることと、そこら中にLT()が突っ込んであること以外は定番で入れてあります。

出来たkeymapは、保存機能はないのでkeymap.jsonの左側、ダウンロードボタンでjsonファイルをダウンロードしてください。読み込ませることでまた編集することができます。

keymap.jsonボタンの右側にある印刷ボタンから、一覧表示ができます。スクリーンショットを撮影したのち、可能であればkeymap.jsonを添えて #オタクスプリット ハッシュタグを付けて投稿していただけますと幸いです。slackでもお待ちしております。

より複雑な設定

より複雑な設定や拡張をしたい人は、qmk/qmk_firmwaregit cloneしてsh ./util/qmk_install.shしてmake otaku_split/rev1:default をしましょう。そのうえでQMKのドキュメントを読んで、独自キーマップを編集してください。

その他の記事の紹介

ビルドログ(組み立て記録)やビルドガイド(組み立て説明)記事の紹介です。通常利用者はビルドログを、製作者はビルドガイドを書くものですが、まさかの利用者の方にビルドガイドを書いていただきました。この記事も充実させていきます...

ビルドガイド

めっちゃ詳細なものを@k69 氏に書いていただきました。各箇所を写真で詳しく説明していただいています。

k69.hatenablog.com

ビルドログ

miz7f.hatenablog.com

*1:あとケーブル刺したりとか...キーマップ再定義したい人はファームウェア作成・書き込みも必要

pcbnewのpythonコンソール

自分用メモ

パス

KiCADのインストールフォルダ。WindowsだったらC:\Program Files\KiCADとかそんな感じの場所

shell.run(COMMAND)cdなど実行可能なので、起動後にプロジェクトフォルダに移動するといい感じ

cdとlsはそのままつかえた。

定型

とりあえずimport pcbnewはしとくとよさげ。

pcb=pcbnew.GetBoard()もしておくとよいかも。

Helix LED Plate (WIP)

概要

Helixのボトムプレートです。

Helix基板の穴の位置にLEDが来るように作成してあるので、LEDを実装することで光らせることができます。 Helix基板のLEDの実装が辛いと思う人如何でしょうか。

フットプリント

SK6812miniの手はんだ用のフットプリントを作りました。ちょうど頂点がシルクに合うように作ってあります。向きは三角形に閉じているシルクと、SK6812miniの4隅のうち三角にカットしてある頂点を合わせてください。

角を合わせたら何らかの方法で固定して、4か所はんだ付けをしてください。浮かないようにするのが重要です。

連続でやる場合は、片側2か所ずつやっていくといいでしょう。

f:id:skyhigh_works:20190523112854j:plain

信号線は基本的に行方向につながっています。方向が変わる場所には矢印を書いておいたので途中から光らなかった際に参考にしてください。

内容物(全部入りの場合)

  • 基板
  • SK6812mini 35個
  • 2mm厚ゴム足4個
  • 細めのワイヤー3本(太さは在庫による、AWG30など)

【QMK】JPキーボードチートシート

新しいキーボードを作るたびに、新しくキーボード定義とキーマップを起こす必要があります。 いい加減めんどくさくなってきたところでwrapperという文化を知った*1のでその話と、ついでにJPキーボードとして定義する際のチートシート的なものをまとめます。

wrapper

可変長引数マクロを利用した、多重マクロ?を使った省略形です。

キーボードで、特にOrtholinearな分割キーボードを定義する場合は、各行5文字単位でひとまとまりの定型となっています。 繰り返し出てくるパターンなので、例えばKC_Q,KC_W,KC_E,KC_R,KC_Tの5文字をまとめて___QWERTY_L1___と定義したとしましょう。 これを単純にLAYOUTマクロでくるむと「引数の数が違うぞ」と怒られます。なので間に可変長引数を受け取れるようにしたLAYOUT_wrapperを確保します。

可変長引数マクロはGCCの機能だそうで、__VA_ARGS__を与えることで実現できます。

#define LAYOUT_wrapper LAYOUT(__VA_ARGS__)

定型化している部分を都度コピーしてもよいですが、qmk_firmwareには./usersフォルダーがあります。この中にユーザ名/wrappers.hを定義することでincludeするだけでどのキーボードでもマクロをすぐに使いまわすことができるようになります。

github.com

例えば、QMKメンテナのdrashnaさんがCorneなどでやっています。

github.com

JPキーボード

さて、上記の範囲はどのキーボードでもほぼ固定となりますが、JPは追加の記号が必要です。

ANSI104にあるキーは同じ位置、ないキーはKC_INTXになります。

項目 キーコード
R1 半角/全角 KC_GRV
R1 ハイフン/イコール KC_MINUS
R1 サーカムフレックス/チルダ KC_EQL
R1 YEN/パイプ KC_JYEN/KC_INT3
R2 アットマーク/バッククオート KC_LBRC
R2 左かっこ KC_RBRC
R3 セミコロン/プラス KC_SCLN
R3 コロン/アスタリスク KC_QUOT
R3 右かっこ KC_NUHS
R4 バックスラッシュ/アンダースコア KC_INT1/KC_RO
R5 無変換 KC_MHEN/KC_INT5
R5 変換 KC_HENK/KC_INT4
R5 ひらがなカタカナ KC_KANA/KC_INT2

ここら辺使ってそろそろXD75をAtomicLikeLayoutから移行しつつ、XXX4x7*2向けのキーマップ用意していきたいなーと思います。

*1:SMKJで紹介されてるのを見た

*2:X-Switch専用の4x7 Ortholinear