残暑が残暑というか「普通に夏だね?」って感じですね。もう暑いのはいいです。

この2ヶ月くらい格闘してたものができましたので、それについて書こうかと思います。

今回のキーボード

今回のスペックはこんな感じです。

  • 40%、42キー
    • 自分の作業的に、これ以上削るとだいぶ厳しいので、これが事実上の最小限かなーと。
  • 16.6mmピッチ
  • Choc v2キー専用
  • Glidepoint/OLEDディスプレイ
  • 完全無線
  • 単三電池駆動
  • エンコーダーサポート
  • ケース、キーキャップ、エンコーダーはすべて3Dプリンター製

名前は(コンセプトが)ふらふらしてるなーということで Planetes42 としてます。ケースや基板は以下のリポジトリで公開してます。

https://github.com/derui/planetes42

FreeCADのデータについては完全にオープンドメインですが、基板はいくつか公開されているフットプリントを利用しているため、ライセンスはそれらに準じます。

キーピッチとキーの物理配列

今回のキーボード、前回作ったものよりも0.4mmだけピッチを狭めてます。こうなると、キーキャップが既製品ではほぼほぼ存在していないため、大変に困ったことになります。3Dプリンターが一番ありがたかったのはここになります。

実際ピッチは16mmですが、キーキャップは余裕を持って16mmで印刷してますが、これらについても問題なく利用できてます。若干象足部分が気になることもありますが、これをなんとかしようとすると、事実上研磨するしかなくなるので。

今回のキー配置は こちらのキーボードを参考にさせていただきました。Aliceでもなく、Row staggeredでもなく・・・という不思議な感じですが、尊師スタイルで利用したりするとだいぶしっくりきます。こういった配列を実現できるのも自作キーボードならではですな。

前回の記事で印刷したキーキャップは、こいつで利用しようとしたものでした。無事に日の目を見てよかったです。

エンコーダー

今回もエンコーダーを搭載しました。ちと悩みはしましたが(マイコンのピンの数的に)、一応両方に配置しています。文書編集中だったり、ページ単位でのスクロールなどで意外と便利に使ってます。最近はmacOSのデスクトップ切り替えとかにも使えるなー、とか思ってます。

せっかく3Dプリンターがあるので、エンコーダーノブも設計してみました。

直径26mmくらいのサイズにしてます。このサイズ感だと結構大きめですね。ただし、PLAで印刷したので、当然ですが金属のノブと比較するとスパーンと軽いです。利用しているエンコーダーは信頼のアルプスアルパイン製、かつロープロファイルのものなのですが、かなり軽い力で回転させることができます。これくらいのサイズだと、品質設定をだいぶ上げても30分とかで印刷できるので、最近のプリンターはほんと性能が高いです。

Glidepoint

前回のキーボードで採用したものの、配置する方法が迷走してしまったのでリベンジしました。これも3Dプリンターのおかげで、きちんと抑える形状を設計して、ようやく利用できるようになりました。まだ記事にしてませんが、glidepointのドライバーを拡張して、周囲をなぞるとスクロールできるようにしていたりします。いずれ書きます。

ちなみにglidepointってどこで使われてるの?って感じですが、Steam コントローラのタッチパッドがglidepointらしいです。

https://www.amazon.co.jp/Valve-1001-STEAM-CONTROLLER-%E4%B8%A6%E8%A1%8C%E8%BC%B8%E5%85%A5%E5%93%81/dp/B017WHPVT8

これとかですね。

OLEDディスプレイ

今回はイロモノ枠でつけてみました。nice!viewという製品で、E-inkを利用したOLEDディスプレイです。E-inkなので、書き換えが発生しない場合は超低消費電力・・・ってことです。未だ実感は出来てませんが。

初めてZMK上でOLEDを使ってみましたが、centralの方に繋がないとそもそも表示できる情報が少ない・・・ということに後で気づいて :cry: ってなりました。事前にファームウェアは読んでおきましょう。SPIも初めてでしたが、ソケットの配線を完全に逆にしてしまい、これのせいで基板の再発注と相成りました。。。

ケース

今回やりたかったことである、ケースです。いきなりやるのは難易度が高いと知りつつ、 2ピースケース にチャレンジしました。

マウント方法はガスケットマウントなので、それに対応するための溝を掘ってあります。

トップケースとボトムケースをそれぞれ作成したのですが、最高に難易度が高かったのは、 A1 miniで実装できるように分割する ことでした。分割すると、当然ですが次のような問題が出てきます。

  • 分割するため、接合する方法を考える必要がある
  • 分割する分、単純に手間が増える
  • 見た目上どうしても分割した線が見える

あと、このサイズだと、ある程度の品質を狙うと 7時間 とか印刷にかかります。以下に単純な形状にしつつ、少ない部品数でつくるか・・・みたいな考察が求められます。まだまだ改善の余地はあるんですが、なんぼでも時間を溶かせるのが罪深いですね。

なお、ケース作成にあたってはサリチル酸さんの自作キーボード設計ガイド Vol.2を大いに参考にさせていただきました。ただ、徹頭徹尾FreeCADで作っているので、手順とかは全く異なります。

ケース設計での注意点

ケース設計を進めていく中で、いくつか気にしたほうがいい・注意したほうがいい部分をまとめました。

  • クリアランス設計は最初の最初から入れておく
    • あとからやろうとすると、式の変更で絶望します。ぶっちゃけ最初からやり直した方が早いすらあります
  • 同じような拘束を作るのは難しい
    • 今回のケースでは、ナットをいれるスリットの位置の拘束が最高にめんどくさかったです。合計24箇所あるのですが、拘束は基本コピーできないので、都度都度作っていく必要があります
  • 履歴を戻すのはとても難しいので、手順を考えておく
    • パラメトリックの3D CADは、2Dと違い、レイヤーとかで云々というよりは、作業の積み重ねが対象になります
    • 手順によっては、順序を入れ替えると色々破壊されることがあるので、事前にどうやれば最短かつ影響が少ないか?を考えておかないと、泣きながらやり直す羽目になります(なった)

個人的には無心になってやれるので、楽しいんですが、4時間とかが速攻で吹き飛んでいって 😵 ってなるときもしばしば。気をつけましょう。

ファームウェア・マイコン

今回もマイコンはXIAOを利用しました。と、いうか、自作キーボードで無線を利用できてZMKを使えて・・・ってなると事実上択一です。手ハンダの都合上、一番安価な XIAO nRF52840 を利用してます。 XIAO nRF52840 Plus だと、利用できるピンが9本とか増える・・・のですが、追加されるピンの位置が非常にしんどく、手ハンダが厳しそうなのでやめてます。そのため、unibodyなのですがXIAOを二個利用することにしてます。内部なのになんでか無線通信が発生している、という中々カオスな展開です。

ただ、XIAOが内部で利用しているnRF52xxxは、 SPIとI2Cを同時に利用できない (ビルド時にエラーになった)ため、一個のXIAOでいくつか利用したい場合は、I2CかSPIのどちらかに統一することをおすすめします。今回は2個あるので、SPI/I2Cで利用してます。

最初に単三電池で・・・って書いてますが、つまり現状は

  • XIAO x 2
  • nice!view
  • glidepoint

が、全部一本の乾電池で動作してます。昇圧回路込みではありますが、3日くらいガッツリ使ってもまだまだ行けそうではあるので、意外と電池持ちはよさそうです。単4電池に比べると容量が4倍くらいあるからそりゃそうじゃん?ってところではありますが。

glidepointをI2Cで利用するように抵抗を破壊してしまったんですが、nice!viewがSPIのみのサポートで「なん・・・だと・・・」ってなったのは秘密です。

ファームウェアについてはzmk-configで公開しているのでそちらを見ていただくのがいいのですが、今回ファームウェアで時間を溶かしたのは chalieplex matrixの設定でした。

https://github.com/derui/zmk-config

ソースまで見て大体察しましたが、 左右で利用するピンの数は一致させる必要がある ことと、 片手分のkscanで定義しているピンの数が、全体のキー数を上回っている 必要がありそうでした。そもそも6ピンしか指定しない、とかやると、処理上が厳しそうでした。ただ、そもそもinterrupt pinの配線を間違っていたので動かなかった・・・という可能性も否定はできませんでした。動かない場合、ログが全く出ないのもデバッグとして厳しかったです。

あとchalieplex matrixは配線を理解する難易度がとっても高いです。今はなんとなくなんで動かないのか・・・は理解しましたが、回路図だけで理解できるようになるには、まだ経験が足りないですね。

wired splitとserial

ZMKの公式でwired splitサポートが行われている・・・のですが、どうもXIAOではこことUSBのシリアル通信が択一?になっている様子で、デバッグしながらつなぐ、みたいなことができなさそうでした 🤔 。一旦は断念してますが、これができるとBATの配線が片手分だけで済むので、どこかで挑戦したいですね。

締め

今回、前回出来なかったりうまくいかなかったところに対しては、大体リベンジできて満足しています。ケースづくり・・・というか3D CADが思ったよりも楽しく、いじったものがうまく印刷できたりするとすごいアガりますし、うまくいかない場合でも試行錯誤する過程が楽しいですね。そろそろ分割が恋しくなってきましたが(中央が空くのはやっぱりメリットです)、出社してると、そもそも席にいないときが多く、尊師スタイルもやりづらいので、未だしばらくはこのスタイルが続くと思います。

まだまだ理想に向けてやっていくことはあるので、継続して進めていきたいと思います。

この文章はPlanetes42で書きました。