自作キーボードのOLEDに現在のレイヤーと押した回数を表示する

f:id:takashicompany:20210711220734j:plain:w400

頒布を計画しているキーボードに、OLEDを搭載できるようにした。

せっかくなので、ディスプレイを使った機能を入れたいと思い、

  • 現在のレイヤーを表示する機能
  • キーを押した回数を表示する機能

を実装してみた。

なお、私はC言語とQMKにさほど詳しくはないので、アドバイスを頂けば幸いです。

手順

keymap.c に以下のコードを書く。

1. <stdio.h>をincludeする

2. キーを押した時にカウンターを+1する実装を追加する

既に process_record_user を使用している場合は、 if (record->event.pressed) { の区切りを既存のコードに追加する。

3. oled_task_user に処理を追加する

こちらもoled_task_userを既に使用している場合は、実装部分を抜き出して追加する。

ソースコード

記事最初のOLEDの表示の実装はこちら

自作キーボードにおけるジャンパ

最近、見様見真似でPCBを設計しております。

ついでにOLEDも載せられるようにしようと思ったところ、OLEDの向きをリバーシブル対応するにはどうしたらいいか?と考えていたら以下の結論に。

なるほど。
ジャンパを使うと、はんだ付けで使い分けができるのか。
OLED以外にもいろいろ使えそう。
キットを組み立てているときにもジャンパは見かけていたし、はんだ付けもしていたけど、こういう意味があったのか!と合点が行きました。

これは便利ですね。

回路図を書き直す

とりあえずそれっぽくはしたけど、うまくいくかは後でのお楽しみ。

「自作キーボードを始めたい」と思っているあなたへ

私が自作キーボードを始めて、もう少しで半年になります。

始める前は興味こそあったものの、電子工作をまったくやったことがなかった自分が作れるのか続くのか不安でなかなか手が伸びなかったのが思い出されます。

今では、自作キーボードのキットや部品を買い漁り、週末は組み立てやはんだ付けに勤しんでいます。

さらにのめり込む前に、初心を思い返し、葛藤や実際にやってみた体験を書くことで、半年前の私のような興味を持っているけど踏み出せない…といった方の後押しができれば幸いです。

私のきっかけ

仕事で使っているキーボード(FILCO Majestouch MINILA Air)が古くなってきたこともあり、 新調するためにいろいろ調べているうちに、自作キーボードという分野に出会ったのが始まりです。

結局はHHKB(Professional HYBRID Type-S)を購入したのですが、 自宅で使うキーボードも欲しくなってしまい、さらに探しているうちに自作キーボードへの興味が高まっていきました。

「好きなキースイッチを選んで、好みのタイピング感で文字が打てたら、さぞ楽しいだろう。」

思いも馳せつつも、電子工作の経験がまったくなく、工具も一切持っていなかったので、自分には関係ない世界だと思っていました。

しかし、日に日に思いは強くなり、自作キーボードの検索に費やす時間が日々増えつつありました。

「未経験の自分が完成させられるのか?工具とキットを買うお金があったら、既製品でもだいぶ良いものが買えるぞ」

そんなことを葛藤を抱きながら悩んだ末に、

  • このまま悶々とするぐらいなら思い切って試してみよう。それで自分にあわなければ諦めがつく
  • キットと部品、工具代(あわせて25000円ぐらい)は確かに安くはないが、人生で手に入れるお金の総額からしたら微々たるもの

と思い切って、工具一式とキットの購入を決断しました。

始めて買ったErgo42のマニュアルがとても丁寧だったこともあり、無事に完成させることができ、今ではどっぷりと浸かることとなりました笑

未経験者から見た自作キーボード制作

電子工作未経験だった私から見た、電子工作(自作キーボード)は

  • 高度な専門知識が要求される
  • 精密な作業が要求される
  • 失敗するとビリビリする

というイメージでしたが、実際にやってみた所感としては

  • 組み立ての手順書をしっかり読んだ上で取り組めば、素人でも完成する
  • はんだで部品がくっついてさえすれば、意外と動いてくれる
  • ビリビリしない。多分そこまで電気が流れていない気がする

といったような感じで、予想よりもはるかに手軽に楽しめることに驚きました。

自作キーボードを始める際の心がけ

以下は、半年間の経験を踏まえて、初めて自作キーボードを作る際に心がけたいポイントを簡潔にまとめました。

結論から言いますと、工具をちゃんとしたものを買って、手順書をしっかり読んで進めれば完成できます。

工具はケチらない

初心者なので、良い道具を揃えても使いこなせないのでは? と私が始める際に思ったりもしましたが、 初心者こそ良い道具を使ったほうが恩恵を受けやすいという別ジャンルでの経験上、 工具…特にはんだごて & こて台は先人達がオススメするものを買いました。

半年経ちましたが、↑は買って良かったと心から思います。

  • 電源を入れてすぐに温度が上がる
  • 温度調節が簡単にできる & 分かりやすい
  • こて台が安定しているのではんだ付けをしていないときも安心感がある

といったところがメリットでしょうか。

道具の扱いに悩まされず、作業に集中できるということがとてもありがたい。

併せて、こて先も購入しました。

白光 こて先 1.6D型 T18-D16

白光 こて先 1.6D型 T18-D16

  • メディア: おもちゃ&ホビー

はんだづけをするためには、はんだも必要です。 様々な種類がありますが、ここもオススメされているものを購入しました。

ニッパーやドライバーも必須ですが、百均のものでも作業はできるかなと思うので、 こちらは本格的に取り組む際に良いものを買うと良いかなと思います。

加えてオススメしたいのは、はんだ吸い取り線。 これがあればはんだ付けを失敗してもやり直しができます。

はんだごての温度を420度に設定し、はんだを取りたい場所にはんだ吸い取り線を乗せて、その上からはんだごてで熱すると、吸い取れます。 吸い取り線が熱されるので火傷にはご注意。

組み立ての手順書は何度も読む

組み立ての手順書(ビルドログ)は組み立てる前に一度目を通しましょう。

頭の中で実際の作業をイメージできるようになるまで何度も読むのが理想です。

分からないところを見つけたら、検索するなりして手順などを明確にしておきましょう。

組み立てる際も、都度確認しながら進めることで失敗をかなり抑えられるようになります。

はんだは温度の高いところに流れる

この特性を知っているだけでも、はんだ付けで困るケースが少なくなると思います。

私はこれを知ったことで少し気が楽になりました笑

はんだ吸い取り線を使う際も、この特性を知った上で作業をするとうまくいきます。

自作キーボードを始める上でオススメのキット

以下は自作キーボード未経験の方が始める際にオススメのキットです。

Ergo42 (Single Edition)

f:id:takashicompany:20210516144541p:plain

購入はこちら

  • 組み立て説明書がとても丁寧で、電子工作未経験者でも工程が分かりやすい・イメージしやすい
  • 楽天で買える(ので楽天ポイントが使える・貯まる)
  • 難易度の高いはんだ付けをしなくて済む f:id:takashicompany:20210516142225p:plain

入門的な位置づけながらも、自作キーボードの工程をフルに体験できるため、Ergo42が組めれば大抵の自作キーボードは組めると言っても良いでしょう。

キースイッチとキーキャップを別で揃える必要があるので、お忘れなく。

Meishi2

f:id:takashicompany:20210516013956j:plain:w600

購入はこちら

  • 3000円程度で買えるお手頃さ
  • キースイッチ・キーキャップ付きのセットなら、材料がまるっと手に入るのですぐに始められる
  • ビルドログが初心者向けに分かりやすく書かれている biacco42.hatenablog.com

とにかく手軽に始めたい人向けのキット。
自作キーボードに入門する際の障壁の一つである、はんだ付けを学ぶのにオススメです。

Gherkin

f:id:takashicompany:20210516014217j:plain:w600

購入はこちら

  • シンプルな構造と手軽な値段ながらも、長く楽しめるキット
  • 工程自体もシンプル
  • 既製品にはないコンパクトさとキー配置を楽しめる
  • キー数が少ない分、配置やレイヤーを考えて使いこなすところも含めて楽しめる

自作キーボードを始める人には一度は触って欲しいのが 、このGherkin。
そのサイズ感と配列は「自作キーボードならでは」を詰め込んだ一品ではないかなと。

キー数が少ないというところがネックにも見えますが、文字を打つだけなら一週間ぐらいで慣れます。

meishi2やErgo42に比べると、組み立ての説明書がやや専門的ですが、工程自体はErgo42とほぼ同じです。

文字を打つのが楽しくなる

自作キーボードを作る理由や楽しみ方は様々ですが
共通しているのは「文字を打つのが楽しくなる」ことだと私は思います。

私は仕事柄キーボードを多用するのですが、手段だったタイピングに楽しさを見出せるようになり、仕事の楽しみ方が増えました。

この記事を読んで、自作キーボードを楽しむ人が増えれば幸いです。

この記事はMinidoxで書きました。

Git subtreeを楽に使えるシェルスクリプトを作った

以前書いたUnityでGit subtreeを導入する話の続き。

takashicompany.hatenablog.com

--prefix でパスをしてるのが面倒くさくなったのでシェルスクリプトを作った。

git-subtree support shell.

reporemotebranchpathを書き換えて使えばOK。

コマンドも下記の3つのみ

$ sh subtree-template.sh init        # 初期化
$ sh subtree-template.sh pull       # 変更を取り込む
$ sh subtree-template.sh push     # 変更を送信する

プレイヤーの見ている画面とは別視点からのリプレイ動画をお手軽に作れないか頑張った話【Unity Advent Calendar 2017】

この記事はUnity Advent Calendar 2017 2日目の記事です。

ゲームを作っていると、ハイライトやリプレイをリザルトで出したいなーと思うことが常々あるかと思います。
最近だとPS4Nintendo Switchでプレーの録画をSNSにアップロードできたりしますよね。

UnityだとEveryplay SDKで録画機能を実装できます。

ただ、上記の録画機能はプレイヤーの見ている画面を録画していますが、
プレイヤーの見ている画面とは別視点からのリプレイ動画を作れないかな
と思い、今回いろいろ試してみました。

イメージはこんな感じ(ちょっと違うかな?)
f:id:takashicompany:20171202171555g:plain

作り方

簡単に言うと

  • ① カメラを2台用意する
    • プレイヤーの見る画面を描画するカメラ
    • リプレイの録画に使うカメラ
  • ② 録画用のカメラにRenderTextureを設定する
  • ③ RenderTextureの描画結果を動画ファイルに書き込む

という感じです。

(プレイヤー画面用のカメラと録画用のカメラの図)
f:id:takashicompany:20171202171823p:plainf:id:takashicompany:20171202171832p:plain

①と②はUnityですぐにできますが、③が考えどころです。
今回はOpenCV for UnityのVideoWriterという機能を使って動画ファイルを生成したいと思います。
f:id:takashicompany:20171202172013p:plain

実装

プレイヤーの画面とは別視点のリプレイを録画する


プレイヤーの画面とは別視点のリプレイを録画する


実際に録画された動画

実装の細かい話

  • Unity Editor(Mac)と、iOSで動作を確認
  • 上述した③ RenderTextureの描画結果を動画ファイルに書き込むOpenCVForUnity.Utils.textureToMat(Texture texture, Mat mat)OpenCVForUnity.VideoWriter.write(Mat image)で実現した
    • OpenCVForUnity.Utils.textureToMatで録画カメラのRenderTextureMatに変換。
    • ただ、textureToMat(Texture texture, Mat mat)iOSでしか動作しない(([作者も確認済みとのこと] (https://forum.unity.com/threads/released-opencv-for-unity.277080/page-28#post-3261290)))ので、他の環境ではRenderTextureを一旦Texture2Dに変換した上でMatに変換している
    • RenderTextureTexture2Dに変換する場合は内部でTexture2D.ReadPixelsを呼んでいるので処理に時間を要する
  • OpenCVForUnity.VideoWriter.writeで動画ファイルに書き込み
  • Androidも動画の拡張子とfourccの選択次第では動きそう(拡張子を.avi、fourccを`'M', 'J', 'P', 'G' (Motion JPEG)にしたら録画はできた。しかしVideoPlayerが再生に対応していなかったので今回のサンプルコードから外した)
  • iPhone SEで↑の動画と同じアプリを動かしたが処理落ちはそこまでなかった。解像度によっては処理落ちを招くケースがありそうなので、その辺は要調整
    • VideoWriter.writeを呼んでいるところは別スレッドに逃してもいいかも
    • iPad mini(4th gen)だと30FPSが15FPSまで下がった。おそらくだがRenderTextureの解像度を下げれば改善すると思う
  • OpenCVのモバイル用のプラグインが結構なサイズ(.frameworkとかだと500MB超えてたり)なので、ビルド時に不要な機能を消したりする必要はありそう

おわりに

今回はOpenCVForUnity(OpenCV)を使って動画の生成を実装しました。
改善すべきポイントは諸々ありますが、手早く作れるのが良いかなと。
ゲーム側でリプレイ機能を自前で作るとなると、設計時点でしっかりやる必要がありますしね😃
やはり理想を言うならネイティブプラグインでしっかり作るのがベストですね。