おかゆ++

IT業界の片隅で生き残るブログ

2.道具の準備【手配線で自作キーボードを作る講座】

f:id:okayu-moka:20190818161802p:plain

この記事は、【手配線で自作キーボードを作る講座】の第2回目です。 そのほかの記事はこちら↓

okayu-moka.hatenablog.com

自作キーボードに必要な道具

ここで紹介するのは3Dプリンターで筐体を作るときに必要な道具です。 アクリル板などを用いる場合には不要なものがあったり、逆に足りない道具などもあるので注意してください。

普段あまり工作をしない方は、新しくそろえる道具が多いかと思います。 ほぼ100円ショップで買えるものばかりですが、 はんだこてだけはちゃんとしたメーカーのものを買いましょう。 よくわからないメーカーのものは使いにくいですし、なんなら燃えたりしそうでちょっと怖いです。

絶対に必要な道具

はんだ付け道具一式

「はんだこて」「こて台」「はんだ」は、できれば電子工作用、または精密基板用のものがよいかと思います。

電子工作初心者で、これからはんだ付け道具を購入する方は、あまりにも安い商品は選ばないほうが無難です。 と言いつつ、私が使っているのは温度調整機能も付いていない安いはんだこて「KS-30R」です。

goot 一般電気用はんだこて KS-30R

goot 一般電気用はんだこて KS-30R

goot はんだこて台 ST-11

goot はんだこて台 ST-11

温度調整機能がついたものでは、こちらの商品などが定番のようです。

白光 ダイヤル式温度制御はんだこて FX600

白光 ダイヤル式温度制御はんだこて FX600

白光(HAKKO) こて台 633-01

白光(HAKKO) こて台 633-01

はんだは前述のとおり「電子工作用」や「精密基板用」などの、細くて融点の低いものがいいと思います。あまり熱しすぎるとProMicroが壊れる場合があります。

goot 精密プリント基板用はんだ SD-62

goot 精密プリント基板用はんだ SD-62

はんだ付けスタンド(はんだツール、サードアーム)

はんだ付けをするときは、利き手にはんだこて、もう一方の手にはんだを持っているので、両手がふさがります。 不安定なものをはんだ付けするためには固定するための道具が必要です。(なくてもなんとかなりますが、無いと結構難しい。)

自作キーボードの場合、銅線同士のはんだ付けや、ProMicroと銅線のはんだ付けなどの際にはあると便利でしょう。 工夫次第では不要です。実際私は持っていないので、木片にマスキングテープで銅線を固定してはんだ付けしてます。ただあったほうが楽なのは間違いないです。

ヤスリ、カッター(筐体の微調整用)

3Dプリンターで作った筐体は、どうしても精度が甘かったり、熱収縮で縮んだりしがちです。 最終的にはヤスリやカッターで微調整が必要になります。

ヤスリは100円ショップのダイヤモンドヤスリがおすすめです。

グルーガン(ホットメルト、ホットボンド

キーと筐体を固定したり、ProMicroのモゲ対策として使用します。 グルーガンは簡易な絶縁にも使えたりと便利です。

こちらも100円ショップのもので十分です。

ニッパー or ワイヤーストリッパー

銅線を切ったり被膜を剥いたりするのに必要です。 専用工具のワイヤーストリッパーがやはり便利ですが、100円ショップのニッパーでも十分です。

ピンセット

銅線やダイオードをはんだ付けするとき、手で持っていると火傷する可能性があるので、ピンセットはあったほうがいいです。 100円ショップのもので十分です。

プラスドライバー

筐体をネジ止めするために必要です。家庭用のドライバーで十分です。

作業用マット(カッターマットなど)

はんだこてで机を焦がしたり、部品をなくしたりしないように、作業用のマットを用意しましょう。 A4サイズのカッターマットで十分です。 ただカッターマットははんだこての熱で溶けますのでそこは注意です。

あったほうがいい道具

ラジオペンチ

あったほうが何かと便利な工具です。 3Dプリントした後のサポート材を剥がしたり、はんだ付けの際にアーム替わりにしたりできます。

ノギス

筐体の実寸を測ったり、キースイッチのサイズを測ったり。さしがねで測るよりも便利です。

1.配列の設計【手配線で自作キーボードを作る講座】

f:id:okayu-moka:20190818160447p:plain

この記事は、【手配線で自作キーボードを作る講座】の第1回目です。 そのほかの記事はこちら↓

okayu-moka.hatenablog.com

配列を設計する

自作キーボードを作ろう! となったら、最初にキー配列を決めるのが良いでしょう。 配列によって、キーの数、モデリングの難しさ、ProMicroの個数などが決まってきます。

自作キーボードの配列は作る人によって様々です。 ただ、ある程度パターンがありますので、いくつか設計のためのパターンを紹介していきます。

設計作業自体は、3DCADやイラストソフトが使えるなら、それらで簡単な図を描いておくのが良いと思います。なければ紙と鉛筆でも十分です。 最終的には3DCADでモデルを作りながら試行錯誤するので、なんとなくのイメージを描いておくだけで大丈夫です。

分割型か、一体型か

自作キーボードには左右分割キーボードが多い印象があります。 実際一度左右分割キーボードになれると、使用時の姿勢が非常に楽で、通常のキーボードが窮屈に感じます。一度は体験してみることをお勧めします。 分割キーボードにする場合、それぞれのキーボードを接続するためのケーブル(一般的には3.5mmのオーディオケーブル)が必要になります。また、ProMicroも分割台数分必要になります。

もちろん、通常のキーボードと同じように、すべてのキーが1つの筐体に搭載されている自作キーボードも作ることができます。 そのような一体型のキーボードの場合、オーディオケーブルは必要ありませんが、筐体のサイズが大きくなるため、家庭用の3Dプリンターでは印刷が難しい場合があります。3Dプリントサービスに発注する場合でも、規定のサイズ内に収まっているか確認しておいたほうが良いでしょう。 ProMicroは基本的には1台でOKですが、キー数が81を超える場合はProMicroを2台使うか、IOエキスパンダーなどが必要になります。

  • 分割型
    • メリット
      • 自然な姿勢で使用できる(肩こり対策になる)
      • 1つの筐体のサイズが小さいので、家庭用3Dプリンターでも十分プリントできる
    • デメリット
      • 接続用のケーブルと、接続用の端子が必要
      • ProMicroが複数個必要
  • 一体型
    • メリット
      • 分割型より作成が簡単
      • ケーブル等が不要
      • ProMicroが1台で済む(81キーまでは。それを超える場合は2台必要)
    • デメリット
      • サイズが大きいと家庭用3Dプリンターではプリントできない
        • モデリング段階で2つに分割しておき、後から接着するなどの方法はある

Ortholinear Layout(格子配列、直交配列)か、Staggered Layoutか、それ以外か

キー配列は大まかに分類して以下の3つに分けられます。

Ortholinear Layout

格子配列、直交配列と呼ばれるものです。 その名の通り、キーがすべて碁盤のようにきれいに並んでいるものです。

参考:Ortholinear - Self-Made Keyboards in Japan

キーボードがコンパクトになるというメリットがあります。 また、単純に格子に並べるだけなので、モデルの作成なども簡単です。

Staggered Layout

通常のキーボードのように、キーが少しズレているようなレイアウトです。 また、横ではなく縦方向にズレているようなものもあります。

参考:staggered layout - Self-Made Keyboards in Japan

横方向にズレているレイアウトは一般的なキーボードと同じような使用感にできるため、乗り換えが容易です。 また、自作キーボードの特殊な配列に慣れてしまって通常のキーボードが使えない、という事態も避けられます。(とはいっても慣れると割と両方使えるようになります。)

縦方向にズレている配列は、人間の手の形あわせた自然なズレになり、キーが押しやすくなるという狙いがあります。

それ以外

上記2パターンに該当しないようなものとして、立体的な配列や、Ortholinear と Staggered を組み合わせたものなどがあります。 結局は「自分が押しやすいと思う配列」を実現するため、あまり枠に囚われず自由に配置していいと思います。

平面の配列か、立体の配列か

一般的なキーボードは、平面にずらっとキーが並んでいます。 自作キーボードでは、平面に並べるという制約はありませんので、手の形に合わせた立体的な配列を採用しているものもあります。

平面的なキー配列にする場合、アクリル板などを用いて作成することができます。もちろん3Dプリンターを用いて作成することもできます。

立体的な配列にする場合、3Dプリンターのメリットを最大限に生かすことができます。 しかし立体的に配置する場合、キーピッチ(キーとキーの距離)の計算が難しかったり、 あまりに複雑な形状は家庭用3Dプリンターでは印刷が難しいなどの問題もあります。 (3Dプリントサービスでプリントする場合は、複雑な形状でも問題ないです。)

キーの割り当て

キーの位置だけではなく「どのキーにどの文字を割り当てるか」もある程度考えておくとよいでしょう。 使いながら変更していく部分ですが、不要だと思うキーは最初から無くしてしまうという手もあります。

一般的なCtrlの位置にキーがない配列や、CapsLockの位置がCtrlになっている配列が多いようです。

今回作成する自作キーボードの配列

今回作成する自作キーボードは以下のような配列にします。 (要はErgo42のクローンです)

  • 左右分割型
  • 平面の格子配列
  • 縦4列、横7列

とりあえず平面に3DCADで配置してみました。これを草案として進めていきます。

f:id:okayu-moka:20190818160922p:plain

手配線で自作キーボードを作る講座

f:id:okayu-moka:20190818160056p:plain

実際に自作キーボードを作成しながら、作り方を解説していく講座です。 自作キーボード初心者でも完成させられるよう、なるべく詳しく解説していきます。

この講座について

この講座は以下のような前提で進めていきます。

  • 自前の3Dプリンター、もしくは3Dプリントサービスを利用して、自作キーボードを作成します。
  • 販売されているキットを組み立てるのではなく、オリジナルの配列(または既存の配列のクローン)で作ります。
  • PCB基板は作りません。代わりに、銅線をキースイッチに直接はんだ付けして、手配線(空中配線)します。
  • マイコンは Pro Micro を使います。ファームウェアには QMK Firmware を使います。
  • 3Dモデリングには Fusion360 を使います。
  • キーキャップは購入します。(3Dプリンターで作ることもできるけど、今回はスルー
  • 読者のスキル的には、テキストエディタCUIをある程度使用でき、問題が起きても自力で調べて解決できる程度の技術レベルを想定します。

注意事項

  • この講座を読んだからといって、すべての人が自作キーボードを作れるようになるわけではありません。
  • 必要な道具・部品の購入ではネットショップを利用していますが、その際のトラブル等の責任は負いかねますのでご注意ください。
  • アプリケーションのインストール手順、CUIの操作についてなど、自作キーボード自体にあまり関係のないところは省略しています。手順が分からなければ都度調べて対応してください。
  • この講座で作るキーボードは LEDをつけません(光りません)。 これは単に、私が自作キーボードを作る理由が 「最も自分が使いやすいキーボードを追求するため」 だからです。光っても光らなくても、使い勝手には影響ないので……

なぜ手配線?

私がPCB基盤を作ったことがないからです。

というのは半分冗談で、実際のところは、基盤がなくても作れるからです。 なくてもいいのに、わざわざ作らなくてもいいじゃん? というのが本音です。 世に色々と出回っている、アクリル版とLEDを使ったピカピカ光るキーボードにするなら必要ですが、3Dプリンターで作る場合、基盤が見えるような筐体デザインにはならないと思いますので、手配線で十分だと思います。

講座一覧

リンクになってない記事は鋭意作成中です……

  1. okayu-moka.hatenablog.com
  2. 道具の準備
  3. 部品集め
  4. 筐体の3Dモデル作成
  5. 筐体のプリント
  6. キースイッチ取り付け
  7. 配線その1(キースイッチ部分)
  8. QMK Firmwareの設定と書き込み
  9. 配線その2(ProMicro部分)
  10. 組み立て&完成

大きなカーペットをノコギリでカットして可燃ごみで捨てる!

最近模様替えをしまして、部屋のカーペットも新しいものに変えました。 前に使っていたカーペットを捨てたいんですが、カーペットって粗大ゴミなんですね。 申請して引き取りに来てもらうのが面倒だったので、ノコギリで小さく切って可燃ゴミとして捨てることにしました。

可燃ゴミとして捨てちゃダメとかそういう地区もあるのかもしれない。やるときは自己責任で

先に結論

思ったよりしんどい……普通に粗大ゴミで捨てたほうが楽かもしれない。 家の中にずっと置いておくのも邪魔なのでそういう時には切っちゃえばいいと思う。

買ったノコギリ

角利 粗大ごみ解体用 折込鋸 210mm

角利 粗大ごみ解体用 折込鋸 210mm

特別切れ味が悪いとかはないと思う。たぶん。

今回のターゲット

f:id:okayu-moka:20190608150210j:plain

4年間お世話になりました。 5等分する想定で、あらかじめガムテープで固定しておきました。

切っていく!

f:id:okayu-moka:20190608150233j:plain

やったるでー

f:id:okayu-moka:20190608151024j:plain

まずは一本目。想像していたよりも切りにくい。カーペットの糸がなかなか断ち切れず、ノコギリの刃に絡みついたりしてどんどん重くなる。

f:id:okayu-moka:20190608151029j:plain

断面はこんな感じ。無理やり引きちぎった感ある。

f:id:okayu-moka:20190608152515j:plain

なんとか5等分しました。30分くらいかかったかな? あとは可燃ゴミ用のゴミ袋にいれてポイ(゚Д゚)ノ⌒*

そこそこ面倒だったし、室内でやるのも難しいので万人には勧められないけど、ベランダとか庭とかある方はやってみてもいいかもね!

グラフィックボード GeForce RTX 2070 を買ったのでRX480と比較

Oculus Rift Sを買ってVRを楽しんでいたけども、 RADEON RX480だと微妙にカクついたり画質が荒かったりしたので、グラボ買いました。

買ったのは ASUS の ROG-STRIX-RTX2070-O8G-GAMING です。

実はあんまりグラボにお金かけたことなくて、3連ファンのモデルなんて初めて買いました。 箱の時点で「でかいなー」と思ってましたが、開封したら思った以上にでかくてびっくりしました。

f:id:okayu-moka:20190608205404j:plain
外観。でかい。

f:id:okayu-moka:20190608205727j:plain

中にはグラフィックボード本体、マニュアル、ドライバ、ケーブルをまとめるやつ、3ピン×2を8ピンに変換するコネクタが入ってました。

f:id:okayu-moka:20190608205903j:plain

裏面はこんな感じ。今のケースだと見えないけど。

f:id:okayu-moka:20190608205807j:plain

補助電源は6ピン+8ピンが必要。

現行で使っていた SAPPHIRE の RADEON RX480 と比較するとこんな感じ。でかい。

f:id:okayu-moka:20190608210239j:plainf:id:okayu-moka:20190608210300j:plain

取り付けるとこんな感じ。Gamingなんで光ります。

f:id:okayu-moka:20190608231526j:plain

せっかくなのでFFXVのベンチを回してみました。

f:id:okayu-moka:20190609004127p:plainf:id:okayu-moka:20190609004129p:plain

RTX2070 RX480
FHD 高品質 8966 快適 4007 普通
4K 標準品質 4744 やや快適 2141 重い

RTX2070だと4Kでもなんとか遊べそうですね。

これだけの性能があればVRでも困らないハズ!

3Dプリンターで Oculus Rift S のケーブルを天井から吊るしてみた

2019/5/21 に発売された Oculus Rift S を買いました。 初めてのVR機器でしたが、主にBeatSaberが面白すぎて超ハマってます。

f:id:okayu-moka:20190608161856j:plain

ところで、Oculus Rift S とおなじタイミングで Oculus Rift Quest という機種も発売されました。 Quest のウリはなんといっても PC不要&ケーブルフリーという点で、安くVR入門するならベストの選択じゃないかなーと思います。 まぁ自分はPCゲームのModとか楽しみたかったので Rift S にしたんですが……

で、Rift S で遊んでいると、やっぱりケーブルが邪魔なわけです。 調べるとみんな天井からケーブルを吊るすようにして解決しているっぽいので、自分も頑張ってみました。

ただ我が家は賃貸かつ、屋根裏が見えている物件なので、ちょっと工夫が必要そうです。 久々に3Dプリンターに活躍してもらうことにしました。

買ったもの

100均でリールホルダーを買ってきました。 天井から吊るした状態でも立ったり座ったりできるように、こういう伸縮する部品が必要ですね。 2個買ったけど1個しか使いませんでした。

f:id:okayu-moka:20190608165053j:plain

3Dプリンターでいろいろ作る

まずは天井の梁に引っ掛けるためのフックを作ります。

f:id:okayu-moka:20190608162547p:plain f:id:okayu-moka:20190608162550p:plain

こんな感じに作って、適当に接着剤でくっつけて梁に引っ掛けます。

f:id:okayu-moka:20190608165817j:plain

割と行けそう。

ここにさらにリールを引っ掛けるためのリングを作って、吊るしました。

f:id:okayu-moka:20190608164318j:plain f:id:okayu-moka:20190608164258j:plain

遊び終わったらフックから外しておけばそこまで邪魔にならない。

吊るしてみて

  • Good
    • ケーブルを踏まない安心感
    • 動いてもある程度伸縮してくれる
    • やっぱり3Dプリンター便利だな!
  • Bad
    • 手作り感満載で若干ダサい
    • 遊ぶ前の準備(フックに引っ掛けなおしたり)の手間が増えた=遊ぶための心理的なハードルが上がった

BeatSaberはそこまで動き回らないですが、FPSみたいなゲームをやるならやっぱり吊るしたほうがいいんじゃないかなーと思います。

PixiJSで日本語フォントが見切れる問題の対応

f:id:okayu-moka:20190211160822j:plain

PixiJSのバージョンは4.8.4です。 指定のフォントで描画したいだけなのにすごく困った。

最初に結論

PIXI.TextMetrics.BASELINE_SYMBOLに適当な全角文字を追加してやればOK。

PIXI.TextMetrics.BASELINE_SYMBOL += "あ|";

詳細

以下は Mplus 1m regularで描画したとき。

f:id:okayu-moka:20190211155513p:plain

const width = 500;
const height = 200; 
const renderer = PIXI.autoDetectRenderer(width, height, {
  backgroundColor: 0x000000
});
document.querySelector("body").appendChild(renderer.view);
var container = new PIXI.Container();

var textStyle = new PIXI.TextStyle({
    fontFamily: ["M+ 1m"],
    fontSize: 24, 
    fontWeight: "normal",
    fill: 0xffffff,
});
var sprite = new PIXI.Text("Hogeあいうえお", textStyle);
sprite.anchor.set(0.5);
sprite.x = width / 2;
sprite.y = height / 2;

container.addChild(sprite);
renderer.render(container);

ただPIXI.Textを生成して描画しているだけですが、見切れます。

調べてみると、このあたりの話をしているissueがありました。

https://github.com/pixijs/pixi.js/issues/4228

どうもPIXI.TextMetrics.measureFontの中でフォントのサイズを測ってるみたいですが、ここで使ってるサンプルの文字よりも大きい文字があると、見切れちゃうみたいですね。

以下、pixi.jsから抜粋。

TextMetrics.measureFont = function measureFont(font) {
    ...
    var metricsString = TextMetrics.METRICS_STRING + TextMetrics.BASELINE_SYMBOL;
    var width = Math.ceil(context.measureText(metricsString).width);
    var baseline = Math.ceil(context.measureText(TextMetrics.BASELINE_SYMBOL).width);
    ...
    context.fillText(metricsString, 0, baseline);
    ...
}

ということで、PIXI.TextMetrics.BASELINE_SYMBOL に適当な文字列を追加してやればいい。 とりあえず "あ|" とか追加しておけば大丈夫じゃないでしょうか。

f:id:okayu-moka:20190211155525p:plain