メモ帳DPA

ぐぐってあまり引っかからないような何かがあったら書いたりする

自作キーボード Helix (rev3じゃない方)に SU120 でそこそこ簡単にロータリーエンコーダを増設する

経緯

ロータリーエンコーダが搭載可能な新しいHelix(rev3)が出たのを見て、ロータリーエンコーダに興味が出てきた。
ただ特に目的があるわけではなく、とりあえずロータリーエンコーダを試したいだけであって、まるごと買い換えるほどでもないくらいの興味だったので、今使ってるキーボード(以前のHelix)でそのまま使えないか調べてみた。

結果

できた。
f:id:de0:20210527173010j:plain
Helix + BLE Micro Pro + SU120 + ロータリーエンコーダ + 電池基盤 + 昇圧モジュール

完成品に後から色々変更加えられるのが自作キーボードの良いところだと思う。
本当は両手とも単4駆動にしたかったんだけど、配置スペースの都合で片側はボタン電池で妥協した。

材料

土台:Helix + BLE Micro Pro

特に基盤作ったり3Dプリントしたりは必要なく、既存パーツの組み合わせだけで結果的に上手く行った。

増設方法

設定を変える

BLE Micro Proでは、専用の設定が用意されているので、物理的にロータリーエンコーダと接続する2ピンとGNDを確保すれば簡単に動くようになっていた。encoder.jsonのenabledを1にしてピン番号を指定するだけで使える。
直付けしたらちゃんと動いてくれたので、配置場所と固定方法を考えてちゃんとキーボード上に配置してみることにした。

空間を確保する

自分の用途的に全く不要なTRRSジャックとリセットボタンとLCDを全部取っ払ってそこに置くことにした。
(無線前提なので、有線で使う場合はこの場所は使えない)
f:id:de0:20210525203021j:plain

Helixの拡張性がすごい

BLE Micro Proから直接配線するつもりだったが、公開されているHelixの基盤を見てみたところ、使われてないスルーホールが色々用意されていた。
普通に使う分には全く要らないものなので、こういった拡張を見越して用意してあったのかもしれない。ありがたい。
f:id:de0:20210526213930j:plain

配線する

ちょうど良いところにあったSDA/SCL端子とリセットボタン用だったGND端子にロータリーエンコーダを繋いだら、期待通り動いてくれた。
表で配線を引き回す必要がなくなったおかげで、かなりスッキリした構成にできた。
f:id:de0:20210525225855j:plain

固定する

ロータリーエンコーダに直接ネジ止めできるような作りにはなっていないため、固定方法をどうにかしないとならない。
SU120のロータリーエンコーダ用基盤部分がいい感じに使えそうだったので、そこだけ切り取って固定用に使ってみることにした。
SU120の穴がM1.4なのに対して、Helixの穴(もともとアクリルカバーを付ける用)はM2なのでサイズが合っていないが、気にせず固定してみたら大丈夫だった。

4箇所中2箇所しか固定できず、端子や導線分の厚さも基板裏面に加わるせいで固定時に若干傾きが出来てしまったんだけど、思いがけず回しやすい感じの位置に偶然なってくれたのでよしとした。
f:id:de0:20210525231554j:plain

塗装する

ついでに、ノブの色が白くて浮いていたので、ラッカー吹いて黒く塗った。
f:id:de0:20210527174532j:plain

割り当て

特に何に割り当てたいとかの目的があって作ったわけではないため、出来てからいくつか試してみた。
対になる操作2種類を1Uに収められ、同一キーの連打もしやすいので、普通のキーにはない操作性がロータリーエンコーダだと得られて思ったより便利だった。無くても困らないけどあると助かる。

現状は以下の3セットを割り当てている。(2組目以降はレイヤ切替)

  • PageUP / PageDown
  • Ctrl+Tab / Ctrl+Shift+Tab (タブ切り替え)
  • VolumeUP / VolumeDown

他のアサイン例

  • Left / Right とか、 Up / Down あたりも汎用性が高そうな組み合わせだった。
  • Ctrl+Z / Ctrl+Y の割り当ては、挙動は面白いんだけど実際にはそんなに使う機会がなかった。
  • Alt+Tab / Alt+Shift+Tab は画面狭い人だと便利かもしれない。
  • 動作中のアプリケーション毎に動作を切り替えたい場合は、 F20 / F21 とか適当な使わないキーを割り当てた上で、Autohotkeyで制御するのがよさそう。

他に何か便利なキーの割り当てがあったら教えてください。

MTGA ヒストリック BO1デッキ 4色ネオストーム

f:id:de0:20210403213013p:plain
MTGAで上位ランクのみが得られる、ミシックチャンピオンシップ予選の参加権利を初めて獲得できた。うれしい。
予選でこのまま勝てるとは思えないので記念受験にはなるだろうけど、流行りのトップTierデッキではなく、自分なりに調整したデッキで結果が得られたので、調子に乗ってメモを記録しておくことにします。

デッキ

ネオストームを使った。
mtgwiki.com

これは、新生化で出た生物で新生化をコピーするループを作ることで、8体の3/3が展開されて速攻付きで2連続で殴り53点で即死させるコンボデッキで、新生化コンボとも言われる。

コンボデッキが一番好きなんだけど、宿命として対処策が多いので基本的にあまり強くない。このデッキも結構前に一瞬だけ流行ったが、やられると致命的なカードが多いせいかもうあまり見なくなってしまった。(多分墓掘りの檻と思考囲いが悪い)

このデッキは通常は赤青緑で構成されるが、確定サーチができればもっと揃うのではと無理やり黒を加えてみたところ、偶然にも環境との噛み合いが良く予想以上に勝てた。
普段はあまり勝率とかは気にしていなかったが珍しくコンボデッキでそれなりに勝てそうだったので、少しずつ弄りつつ回せるだけ回してみた結果、ランクインまで戦えてしまった。
BO1の方がどう考えても対策札が少なく有利なので、BO3は止めてそちらに絞ってプレイした。

f:id:de0:20210403214836p:plain

色拘束がきつめだけど、全色出せるクリーチャーが8枚入っているので意外とギリギリどうにかなる。(事故るときは事故る)

最高ランクは183位だった。

戦績

  • 勝率:63%
  • 先行:68%
  • 後攻:59%

BO1ヒストリックの環境デッキのツートップである、エルフと赤単を狩れたのが大きかった。
揃えば勝てる系のデッキに対しては、すべての代わりになるカードが4枚増えたおかげで「揃えば」の確率が上がりさらに有利になっている、気がする。

コンボ

コンボルート
必要なマナ 必要な自陣 手札のコンボパーツ
1 1青青緑 なし 海門の嵐呼び + 新生化
2 青青緑緑 1マナ生物(金のガチョウ) 新生化 + 新生化
3 1青緑赤赤 2マナ生物(楽園のドルイド) 新生化 + 二重詠唱の魔道士
4 2青青緑 海門の嵐呼び 玻璃池のミミック + 新生化
5 上記+1マナ 上記 + 願い爪のタリスマン コンボパーツどれか1枚

元のデッキの完成度がかなり高く、更地から4マナの2枚コンボで完成する上、新生化さえあれば別の復数のルートも備わっている点がとても美しい。
願いのタリスマンを加えたことで5のルートが加わって、揃わずに何もできず終わる確率は大幅に低くなった。

コンボ成立後の選択肢
  1. 二重詠唱の魔道士x8 + タクタクの瓦礫砦x1 + 戦闘の祝賀者 x1
    • 最大53点
    • 手札または墓地にある二重詠唱またはミミック1枚につき-6点
    • タクタクをインスタントタイミングで除去されると攻撃できず0点
  2. 二重詠唱の魔道士x8 + タクタクの瓦礫砦x2
    • 最大24点
    • 手札または墓地にある二重詠唱またはミミック1枚につき-3点
    • タクタクが冗長化されるので除去耐性が付く
    • 白青黒は2マナ、赤は3マナが立っていたら、こっちに切り替えるべき状況か検討する
      • 白:封じ込め
      • 青:バウンス
      • 黒:いろいろ
      • 赤:4点分の火力
    • 自前で何かサクれる場合は≪致命的な一押し≫の可能性があるので黒1マナでも警戒する

基本的に3マナ生物であれば最後に何でも出せるので、昔は妨害後のロングゲームに「二重詠唱の魔道士x8 + タクタクの瓦礫砦x1 + 自然の怒りのタイタン、ウーロx1」で備えるルートもあったが禁止された。
BO3の場合、「二重詠唱の魔道士x8 + タクタクの瓦礫砦x1 + 運命の神、クローティスx1」で妨害しづらい2点クロックを設置するルートなんてのもある。

負けパターン

大体以下の状況になると負ける。どれもそんなに特別な行為ではないため結構脆い。

  1. ハンデス(ほぼ思考囲い)でパーツを落とされる
  2. 新生化を打つ前にインスタントタイミングで生贄を全て破壊される
  3. 打ち消される
  4. 墓掘りの檻領事の権限鎮まらぬ大地、ヤシャーン静寂をもたらすものを配置される
  5. すべてのタクタクの瓦礫峠を手札に引く

これらを回避しつつ、こちらが死ぬ前に成立させれば勝ち、出来なければ負け。

5のケースを忘れているプレイヤーは結構多い。この状況下でもハッタリでとりあえずコンボを開始すると、新生化がコピーされたあたりでサレンダーしてくれる場合がある。

マリガン

  • 2回くらいまではいける。3回でも引きさえ良ければどうにかなる。
  • 新生化またはタリスマンを引くことを最優先する
  • タクタクの瓦礫峠と戦闘の祝賀者はライブラリから直に出すので手札に来てほしくない
    • タクタクの瓦礫峠を2枚引いた場合は、他のコンボパーツ+山札に戻すカードが揃っていない限りマリガンする
    • 戦闘の祝賀者を引いても、他の手札が良ければ続行する

相手色別勝率と対処メモ (試合数多い順)

緑:71%
  • ほぼエルフデッキだった。今の環境では一番よく当たる。
    • 2021/3 ヒストリックアンソロジー4/カルドハイム環境
  • コンボ妨害手段を何も持たないので、殴り殺される前に揃えれば勝ち。
  • タリスマンを渡しても致命的なカードはサーチされない。
    • タリスマンはコンボ成立ターンに起動してその場で殺すのが基本だが、この相手にはコンボ成立しないターンにも起動することができる。
  • 地味テクニックとして、相手の≪集合した中隊≫を二重詠唱でコピーする手がある。
    • めくれた中に二重詠唱またはミミックがある限り、集合した中隊のコピーを打ち続けることができる
  • 干渉する手段がある場合は、≪エルフの大ドルイド≫を最優先で潰す。
    • 召喚酔いが解けるとマナ使い放題タイムが始まり、4/4以上が複数並ぶとコンボが成立したとしても殴り合いで負けてしまう。
赤:60%
  • 7割くらいがバーンデッキ、3割くらいがゴブリンデッキだった。
  • 相棒がジェガンサの場合バーンの可能性が高い。
  • 新生化前に海門の嵐呼びを簡単に破壊されうるので意識する。
    • ≪楽園のドルイド≫が生存していると対処できるので、出せたら基本的にコンボ成立まで呪禁を解かないようにし大切に扱う。
    • ゴブリンは一見干渉手段が無さそうだけど、≪宝石の手の焼却者≫で焼かれる可能性があるので2マナ立っていたら注意する。
  • バーンの場合は、タリスマンを渡しても大幅に相手の打点が伸びる可能性は低いので、状況次第ではコンボ非成立のターンに起動させてもよい。
  • ゴブリンの場合は、マクサスが出せない状態かつ楽園のドルイドが自陣に居る時以外は安易にタリスマンを渡してはいけない。
赤黒:48%
  • ほぼアルカニスト。
  • 天敵の≪思考囲い≫を墓地再利用込みで死ぬほど擦ってくるので厳しい戦いになる。クリーチャー破壊もあるのでなお厳しい。
    • 現環境の最強1マナ呪文の一つなので、黒いと大体入っていてコンボ的には非常につらい
  • 基本的には妨害が間に合わないことを祈りつつ最速で成立させるしかない。
  • アーティファクト破壊を持っている確率が低いので、タリスマンを1枚配置出来さえすればパーツ1枚分の獲得がほぼ保証される。
    • パーツ1枚をトップ解決してコンボ成立できるケースがそこそこあり、クロックも安めなので、落としきられてもすぐに諦めない。
  • ルールスが見えていたらほぼアルカニストかオーラの二択なので、マリガン時にはタリスマンの優先度を上げる。
青黒緑:56%
  • 多分ほぼ根本原理。(だいたいその前に勝負が付くのではっきりしない)
    • 全色使われずに終わる場合が多いので、計算上これだけは青緑/黒緑/青黒も含んでいる
  • ヨーリオンが見えていたらこの可能性が高い。
  • 飛んでくる思考囲いの枚数次第な気がする。
  • 打ち消しの数は少ない場合が多いが、インスタント除去を持っている可能性が高いので、コンボ成立後はタクタク2枚ルートにするべきかよく考える。
    • 否定の契約を構えられている状態でコンボ突入できるのであれば、どちらにせよ安心できる。
白:53%
  • ほぼ天使。稀に≪厳粛≫コンボの場合がある。
  • コンボへの干渉手段は少ないが、4/4以上の生物を並べられると打点が足りなくて負けるので、成立までの猶予はそこまで長くはない。
  • 魂の管理人≫がいるとコンボ成立時に相手のライフがモリモリ伸びるので、どかせる手段があるならなるべくこいつを優先してどかす。
    • 正義の戦乙女≫が一緒に居るとコンボ中に能力が発動するので、アンタップ生物が並んでいると危ない。
  • ≪スカイクレイブの亡霊≫が入っている場合はタリスマンを狙われるので、渡して大丈夫そうなら早めに起動する。
青白:50%
  • オーラとアゾコンが半々くらい。
  • オーラは有利。
    • 最強生物が誕生して殴り殺される前にコンボ成立させれば勝ち。
    • バウンスは破壊不能無視でオーラを全部剥がしつつ遅延出来るので、≪危険な航海≫を引けたら活躍する。
    • 飛び始めたとしても、ガチョウのブロックで1ターン稼げるのも地味に大きい。
  • アゾコンは滅茶苦茶厳しい。勝てたらラッキー。
    • ≪墓掘りの檻≫をメイン採用している上、≪領事の権限≫もあり、さらに打ち消しまで控えている。基本的には相手の回りが悪いことに期待するしかない。
    • 置物による妨害は相手ターン終わりにバウンスして対処ができるので、復数置かれるまではまだ諦めてはいけない。
    • 領事の権限がある場合も、全除去を持っておらずそのままターンくれる場合があるので、一応コンボできるならそのターン殴れないとしてもやるだけやってみたほうが良い。
    • 配置したタリスマンを起動せずにパーツが揃った場合、コンボ分に加えて1マナあれば、相手の妨害に対し≪否定の契約≫をサーチして0マナで打ち消しが使えるので意識する。
赤緑:50%
  • ほぼグルールアグロ。
  • 殴りきられる前にコンボ決められるかの勝負。
  • 速攻付きでパワーのある生物がどんどん出てくるのでこっちが死ぬまでの猶予は短い。
  • ≪危険な航海≫を宝剣の対象に重ねられるれば死を1ターン免れるので持ってたら狙う。


今のBO1ヒストリック環境的に、アゾコンとアルカニスト以外は大体どうにかなる相手だった。
なおネオストームの相手には滅多に遭遇しなかった。ちょっと寂しい。

終盤の順位変遷

3/30 10:50 #336 -
3/31 0:58 #419 -6位/時
3/31 22:55 #729 -14位/時
4/01 5:00 #1072 -57位/時

各所で言われている、結局締め切り間際に詰めておかないと途中の順位はほぼ無意味だということを体感できた。
終盤数日の試合の重みだけがやたら高くてあまり良いシステムでは無い気がする。

調整

全然ミラー試合が発生しないので、もう誰もネオストーム使ってないのではないかと思ったら、なんとタリスマン入りでカルドハイムチャンピオンシップに出ているプレイヤーがいた。

まず土地だけ真似してみたところ実際意外とどうにかなった。
赤の土地をだいぶ絞りつつ、3枚目まではアンタップインできる2色土地が大量投入されている。
どうしても赤で唱えたいのは≪ヴァラクートの覚醒≫と≪二重詠唱の魔術師≫くらいで、入っている枚数自体は多いが赤は実際さほど重要ではなかった。
二重詠唱をコンボ始点で使う場合はほぼ楽園のドルイドが立っている時なので、ダブルシンボルでも実際は結構出せた。
www.mtggoldfish.com


それを踏まえて、思考囲いを雑に4詰みした構成を今は試している。
色事故の確率が更に上がっているような気もしないでもないけど、コンボ前に安全確認しつつ妨害入れられるのは嬉しい。
遅めのデッキに強くなった半面、速いデッキには対して約に立たないので一長一短かもしれない。
現状の勝率は63%だった。(月末でリセットされたのでミシック帯ではない)

かなり相性が良さそうな≪渦まく知識≫が今度入るので、こちらも期待したい。

f:id:de0:20210404202706p:plain

防音室の扉に連動してPCの音声を自動制御する

PC部屋として防音室を買った。いつでも好きに音を出せて快適になった。
(防音室についての記事は別途そのうちいつか書くかと思う)

防音室の出入りの際は空いた扉から当然音が漏れるので、夜中の利用時はその都度PCをミュートしたりしていた。
開いてるタイミングと音出したくないタイミングは一致しているので、これはセンサーつければ簡単に自動化出来るのではということに気づいた。

作った

できた。磁力でドアの開閉を検出できるセンサーがあったので、Arduino(pro micro)に単純に半田付けしたらそれだけで超簡単に完成した。
f:id:de0:20210101134948j:plain

ドアの端と枠にそれぞれコマンドタブで貼り付けて、USBケーブルつないだら設置完了。
f:id:de0:20210101135638j:plain

ドアを開けたらPCの音声がミュートされ、ドアを閉じたらミュートが解除されるようになった。やったね。

ソース

digitalreadで開閉状態が取れるので、それに応じて処理を入れるだけで簡単に出来た。
USBキーボードとして認識させ、状態遷移時にホットキーを送るようにした。
本当はミュートのメディアキーを直接送るつもりでいたんだけど、用意されているサンプルで対応していたのは基本的なキーコードのみだったので、PC側でAutohotkeyを併用して妥協した。

Arduino
#include "Keyboard.h"

//ピン定義
const int buttonPin = 5;
const int ledPin =  17;

//センサ状態用変数
int buttonState = 0;
int prevState;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    //CloseならHIGH
    digitalWrite(ledPin, HIGH);
  } else {
    //OpenはLOW
    digitalWrite(ledPin, LOW);
  }

  if ( (buttonState == HIGH) && (prevState == LOW) ) {
     //閉じられた時の処理 - SHIFT+Alt+Ctrl+c
     Keyboard.press(KEY_LEFT_ALT);
     Keyboard.press(KEY_LEFT_CTRL);
     Keyboard.press(KEY_LEFT_SHIFT);
     Keyboard.press('c');
     Keyboard.releaseAll();

  } else if ( (buttonState == LOW) && (prevState == HIGH) ) {
     //開けられた時の処理 - SHIFT+Alt+Ctrl+o
     Keyboard.press(KEY_LEFT_ALT);
     Keyboard.press(KEY_LEFT_CTRL);
     Keyboard.press(KEY_LEFT_SHIFT);
     Keyboard.write('o');
     Keyboard.releaseAll();
  }

  prevState = buttonState;
  delay(10); //delayなしだと開放時に一回余分に閉じ明けが認識されるので回避
}
PC側(Autohotkeyスクリプト)
+^!c::Soundset,0,master,mute	;ドア閉まったらミュート解除
+^!o::Soundset,1,master,mute	;ドア空いたらミュート

おわり

かなりシンプルに実現できてしまった。
現状特にアイディアはないんだけど、同じ要領でArduinoで使えるあらゆるセンサーとPCが連携できそうなので、他にもいい感じの何かを思いついたら試そうと思う。

枠が空いてたので、この記事は Arduino Advent Calendar 2020 に遅刻で登録しました。
qiita.com

Atmoph Window的なスマート窓もどきを雑につくる (余ったAndroidタブレット+WindowSwap)

動機

Atmoph Windowという世界の風景を表示する製品がある。良さそう。
atmoph.com
コンセプトはなかなか魅力的なんだけど、本体が4.5万する上に毎月980円の課金が必要になる。強気の本体価格なのに加え、無けりゃ無くても困らない置物を成立させるために永続的に毎月千円吸われ続けるのは個人的には結構抵抗がある。

高品質な風景の撮影コストの回収にはある程度仕方ないんだろうなとは思うけど、ハードウェア的には要は画面に動画流せりゃ何でも成立しそうに見える。
いい感じの動画ソースさえあれば、適当に有りもの組み合わせて代替はどうとでもなりそう。

window-swap.com

探してみたらうってつけのWebサービスが見つかった。

window-swap.com
窓からの風景を集めて流してくれるWebサービスで、ユーザ投稿の動画を追加していっているとのこと。

単にブラウザでページ開くだけで済んでしまう。動画のスクレイピング等も視野に入れて探していたんだけどそれさえも必要無くなった。

Fully Kiosk Browser

play.google.com

フルスクリーンでオートリロードできるブラウザなら何でもよい。以下の2箇所設定して飾ればもう完成。

  • Web Content Settings > Start URL
  • Web Auto Reload > Auto Reload on Idle
    • 3600 sec (リロードで別の風景に切替)

MacroDroid

必要な内容はもう上記だけで9割方終わってるんだけど、夜中光られると邪魔なので、照度センサーの値を参照させて照明に連動してもらうことにする。

play.google.com
各種トリガーをもとに自動制御するアプリ。照度以外の制御もいろいろ可能。

以下のマクロを追加

  • 光センサー ~まで減少 5.0lx → 画面をOFFにする
  • 光センサー ~まで増加 20.0lx → 画面をONにする

以下の設定を変更

  • 設定>トリガーオプション>光センサートリガー>光センサーのバックグラウンド更新間隔
    • 2分 (無効以外なら何でもよい)

装飾

黒縁のままでも行けるが若干味気ないので、物理的に何か外装を盛ることにした。
ダイソーにかなり丁度いい木製ケースがあった。これに適当にケーブル穴削って入れたら終わった。完成。
タブレットauのQua Tabを使った。それなりのサイズの画面のAndroidなら何でもよい。
f:id:de0:20201228201507j:plain
f:id:de0:20201228205247j:plain
(黒いケーブルが目立つので後でカバーで隠した)

試してないけど出来そうなバリエーション案

おわり

HW品質はさておき、WindowSwapが良いおかげでほぼタダみたいなコストで簡単にそれっぽいものが出来るので、妥協の選択肢としては有りかもしれない。

ディスプレイ下に棚をつける(MOUNT-KB03)

背景

アームでディスプレイを移動できるようにし、ベッドと机でPCを使いまわしている。
画面の移動をする際一緒に入力装置等の小物の移動も必要になるので、画面と一緒に移動できたら便利ではと考えた。

買った製品

画面の上に棚を作る製品はいくつか見かけるが、移動を前提とはしていなさそうだし、使い勝手もあまり良くなかった。

独立アームでなく画面と同一のポジションかつ下に付けられるやつ無いかななと探してみた結果、1つだけ見つかった。

MOUNT-KB03 <br><br>VESA Keyboard Tray - Blackvivo-us.com


国内だとやたら高いので、amazon.comから買った。送料差っ引いてもこっちのほうが大分安い。
www.amazon.com

駄目だった

便利そうなのに各社から売られてないのには理由があったことが分かった。いざ着けてみたらアームが重さに勝てないのだ。
それなりに強力なはずのエルゴトロンのLXアームを使用していたんだけど、画面がお辞儀してしまった。

単純な重量合計的にはアームの耐荷重を一応下回ってそうだが、トレイの重さがそこそこあるのと、それによって重心がかなり前方に移動するのが悪いっぽい。

パワー解決

キーボードとトラックボール2つ買ったほうが絶対に安いんだけども、何だか無駄が多い感じがするので避けたかった。
使わずにしまっておいて置くのも邪魔なサイズなので、どうにか使えるようにすることにした。

ある程度の可動域があるアームの中で普通に手に入るアームとして耐荷重最高なのは、エルゴトロンのHXアームらしい。
結構いい値段したが、半分意地みたいなもので結局ポチった。完璧に損切りに失敗している。

www.ergotron.com

結果

成功した。色々載せてもちゃんと角度を保持してくれた。
f:id:de0:20201120081648j:plain

移動がまとめてできるのはもちろん、乗せたままでも普通に使える。(ただ体勢的には左右にあったほうが絶対楽なので軽く使う時に限る)
f:id:de0:20201120081129j:plain

ベッドの周り全方位に物が置けるようになった。
f:id:de0:20201120081054j:plain

特に計算してなかったけど、やたらかさばるPHOENIXWANの上がいい感じのスペースとして収まった。
f:id:de0:20201120081352j:plain

プレイ時のキーボード置き場としても使える。専コンだけで完結しないちょっとしたテンキー操作等もそのまま出来て便利。
f:id:de0:20201120081535j:plain

ちなみに壁にパンチングボードを付けた。大掛かりな工事とか要らずピン留めで割と簡単に設置できる
各種コントローラ、ヘッドセット、Switch本体、Viveなんかがいい感じに収まってよろしい。

余談:ゲーミングモニタ良い

以前はPhilipsの大型の60Hz4kモニタを使っていたが、 高リフレッシュレートを一回体感したら二度と60Hzには戻れない体にされてしまった。
専コン整えてそれなりにプレイ回数増えたこともあるけど、画面変えてからというものスコアもクリアもいろいろ伸びてくれた。段位で言うとDP発狂九段やInfinitasDP皆伝を抜けられたりした。

大画面高リフレッシュレートの製品の選択肢はかなり狭い。大きすぎるLG製のやつ以外ほぼ国内未発売で、海外向けで出ている丁度いいサイズの製品もピクセル配置がRGBでなくBGRだったりして完璧なものがなかった。
アーケード準拠の画面サイズへのこだわりは捨てて小さい画面になったが、結局のところ特に違和感なく遊べた。
いろいろ試した結果最終的に27GN950-Bに乗り換えた。機能全部盛りかつ高解像度で強い。まだ未発売だけどPG32UQXなんかも良さそう。

おわり

単に板一枚浮かせるだけのためにしてはどう考えても必要な条件がきつすぎる。
稼働範囲の狭い半固定寄りのVESAマウントであれば普通に使えそうだけど、それならトレイ専用のアームを別に付けたほうが良い気がする。

得られたものに満足はしているしそれなりに便利にもなったが、コスパは最低だった。
既に強いアーム持ってる人には良いんじゃないでしょうか。

IIDX ULTIMATE MOBILE用PS2専コン変換器(PHOENIXWAN対応)の作り方

PHOENIXWANを買った。

アルティメットモバイルは、以前メルカリで買った変換基板+初代純正専コンでそれまでプレイしていた。PHOENIXWANも同様に使えるだろうと予想していたが、実際には入力を受け付けてくれなかった。困った。

理屈上は認識できるはずに思えるんだけど、変換器のソースが公開されてない以上動かないまま対処のしようがない。
どういう仕組みでアプリに認識させているのか不明ではあったものの、純正コンではちゃんと認識する現物があるので、これをヒントに自分で作り直してみることにした。

結果

できた。

作り方

全体的にかなり素直な方法で作ることができた。特殊な要素はデバイス情報指定くらいしかなかった。

流れ
  1. PS2コントローラの端子とPro Microをはんだ付けする
  2. バイス情報を書き換える
  3. スケッチを書き込む
  4. 適当に外装を整える
作成のポイント
  • プロダクト名、ベンダ名、ベンダIDを揃えればUltimate Mobile側で認識される
  • PHOENIXWANは、PSXNewLibを使えば認識できる

以下に詳細を書きます。

材料

  • Pro Micro または何かしらのArduino
  • PS2コントローラのメス端子(を部品取りするためのUSB変換器)
  • リード線
  • はんだ
  • 保護ケースなど(任意)

今回5V版のPro Microを使って作ってしまったんだけどこれは選択ミスだった。
一応動いてはいるけど、PS2コントローラの電圧仕様的には本当は3.3V版の方を使ったほうがよさそう。作り終わってから気づいた。

なお、PS2端子の代わりに皿とスイッチ7個を直接繋ぎ、ソースを多少調整すれば専コン自体が作れる。(と思う)

PS2コントローラの端子とPro Microをはんだ付けする

PS2の変換器を分解してコネクタ部分だけ入手し、コネクタのピンとArduinoのピンを接続する。

PS2のピン配置については以下のページが分かりやすい。基板側はGNDとVCCの位置だけ気をつければ残りの繋ぎ先はどこでも可。
darekasan.net
f:id:de0:20200903222456j:plain

バイス情報を書き換える

boards.txtを編集して、エントリーモデル相当のハードウェア扱いとして書き込むように各パラメータを書き換える。

Pro Microの場合はboards.txtは以下にある。

C:\Users\username\AppData\Local\Arduino15\packages\SparkFun\hardware\avr\1.1.13\

以下の値を指定したらUltimate Mobile側でUSBコントローラとして認識された。

promicro.build.usb_product="beatmania IIDX controller Entry Model"
promicro.build.usb_manufacturer="Konami Amusement"
promicro.build.vid=0x1ccf

スケッチを書き込む

以下のスケッチをPro Microに書き込む。

皿の挙動が独特(回すたびX軸を移動し端でループする)なのでそこだけは追加が必要だったが、それ以外はライブラリ2つのサンプルスケッチのパッチワークでほぼ済んでしまった。

PHOENIXWANのPS2が何か特殊なのか、PSXLibraryでは入力を拾えなかったので、代わりにPSXNewLibを使ったらうまくいった。

//https://github.com/NicoHood/HID
#include <HID-Project.h>

//https://github.com/SukkoPera/PsxNewLib
#include <DigitalIO.h>
#include <PsxControllerBitBang.h>

//皿の移動幅(値は適当)
const int scr_sensitivity = 1000;

//ピン配線に合わせる
const byte PIN_PS2_ATT = 20;
const byte PIN_PS2_CMD = 5;
const byte PIN_PS2_DAT = 3;
const byte PIN_PS2_CLK = 18;

PsxControllerBitBang<PIN_PS2_ATT, PIN_PS2_CMD, PIN_PS2_DAT, PIN_PS2_CLK> psx;

int scr_pos = 0;                //皿位置
unsigned int data;              //入力情報

void setup() {
  Gamepad.begin();
//  Serial.begin(9600);
}

void loop(){
  psx.begin (); //たまに認識が外れてるっぽいので毎回beginさせとく
  psx.read ();

  data = psx.getButtonWord();
//  Serial.println (data);

  //皿
  if(data&PSB_PAD_DOWN){
    scr_pos -= scr_sensitivity;
    if(scr_pos < -32768) scr_pos = 32768;
    Gamepad.xAxis(scr_pos);
  }
  if(data&PSB_PAD_UP){
    scr_pos += scr_sensitivity;
    if(scr_pos > 32768) scr_pos = -32768;
    Gamepad.xAxis(scr_pos);
  }

  //七健
  if(data&PSB_SQUARE)   Gamepad.press(1); else Gamepad.release(1);
  if(data&PSB_L1)       Gamepad.press(2); else Gamepad.release(2);
  if(data&PSB_CROSS)    Gamepad.press(3); else Gamepad.release(3);
  if(data&PSB_R1)       Gamepad.press(4); else Gamepad.release(4);
  if(data&PSB_CIRCLE)   Gamepad.press(5); else Gamepad.release(5);
  if(data&PSB_L2)       Gamepad.press(6); else Gamepad.release(6);
  if(data&PSB_PAD_LEFT) Gamepad.press(7); else Gamepad.release(7);

  //E1-E4(アプリでは使えない)
  if(data&PSB_START)    Gamepad.press(9); else Gamepad.release(9);
  if(data&PSB_SELECT)   Gamepad.press(10);else Gamepad.release(10);
  if(data&PSB_TRIANGLE) Gamepad.press(11);else Gamepad.release(11);
  if(data&PSB_PAD_RIGHT)Gamepad.press(12);else Gamepad.release(12);

  Gamepad.write();
  
  //認識頻度の調整
  delay (1);
}

認識周りとdelayやscr_sensitivityの値は調整の余地がありそう。ノーツ多めの譜面だと若干ラグってるようなそうでもないような気がする。

純正初代専コンも含め、PHOENIXWAN以外のPS2コントローラももちろん使えるし、PCに繋いでUSBコントローラとしても使える。(使うことはないけど)

適当に外装を整える

基板も配線も剥き出しなので、適当にホットボンドで固めたりケースに入れたりしたら完成。
f:id:de0:20200904100506j:plain

おわり

アプリ側がUSBデバイスの制限をかけずかつキーコンフィグ可能になればわざわざこんな回りくどくて面倒くさいことしなくて済むので、もうちょっとどうにかしてほしい感じはある。
そもそもINFINITASが同じくらい選曲できればパーフェクトなんだけど、そんな日はたぶん来ないし、Ultimate MobileがDPに対応することもキー音出すことも多分無いので、それぞれ抱えている重大な欠点はこれからもずっと改善が見込めなそうなままのが困ったところだなあと思う。

PHOENIXWANがUltimate Mobileモードを追加してくれると助かるんだけども、他社のベンダIDを勝手に振った機器を量産して売る形になってしまうのであまり期待できないかもしれない...と書いている途中でPHOENIXWANのVIDが気になり調べてみたら普通に1ccfだった。その辺あまり気にしてないっぽい。いいのか?

メルカリのbeatmania IIDX ULTIMATE MOBILE用PS2専コン変換器がすごい話

背景

モバイル版のIIDXとして、ULTIMATE MOBLEというアプリがリリースされている。スタミナ制の基本無料で、課金すれば無制限で遊べる。
p.eagate.573.jp

タッチパネルでも遊べはするが当然高難度をプレイするのは厳しい。そうするとやっぱり専用コントローラが欲しくなるところだけど、公式のエントリーモデルしか使えない。(ということになっている)

既存の専コンをUSB変換して接続し、Octopusを使って画面上のタップに変換するという方法もあるにはあるが、隣のレーンを巻き込んだり反応が悪かったり連皿が入らなかったりする。

専用の変換器が有ればいいのにと思いつつ調べてみたところ、なんとそれっぽいのが実際にメルカリに売っていた。
出品ページ以外の情報がインターネット上に一切見つからず、本当に使えるのか半信半疑だったが、これで上手くいくなら儲けものと駄目元で買ってみた。

結果

完璧だった。おすすめです。

※追記:PHOENIXWANのPS2端子接続では入力が認識されなかったので注意。同じPS2入力なので使えることを期待していたがどうやら駄目らしい。どういう理屈なのかはよくわからない

品物

f:id:de0:20200524120050j:plain

PS2コントローラのメス端子に、自作キーボードとかでよく見る普通のPro Microが繋がれている。かなりシンプル。
出品者の手作りなので、時期によって端子一体型だったり剥き出しだったりクリアケース入だったりと外観は変わってくる。

INFINITAS用の変換器の作り方なんかは探すと公開情報がいくつか見つかるが、Ultimate Mobile用の対応方法については全くの謎なので、そのためのArduinoスケッチは作者の独自開発と思われる。すばらしい。
(デバイスID揃えるとかで動いてくれるんだろうか。方法が気になるが謎)

※追記:認識のさせ方わかった

使い方

適当なUSB micro-TypeCケーブルでAndroid端末に繋ぐだけで、驚くほど本当に普通に使える。
どういう仕組で認識させてるのか不明だが、ちゃんとUSBコンとして認識するし、鍵盤も皿もしっかりと反応する。

f:id:de0:20200524132226p:plain
端末に繋がっていると、選曲画面で"今日のイチオシ"の左にUSB接続のマークが表示される。
Ultimate Mobile公式の説明には、専コンはBluetoothを使うとしか書いておらず、有線については何の説明もないが、実際は使える作りになっているっぽい。なにそれ。

反応の抜けも感じられなかった。皿曲や☆12のエクハも普通に出来ているので、多分入力は全部通ってると思う。

PC

PCでもINFINITAS用の変換機として使えるようになっている。(皿の感度は違う)
f:id:de0:20200524134839p:plain

Start/Selectの同時押しで別キーとして使える。(出品画像より)
f:id:de0:20200524132209j:plain

多分この機能のために、HIDだけでなくキーボードとしても認識している。
f:id:de0:20200524134841p:plain

端末依存のハマりポイント

Oppo Reno Aを使っている。以下の点でうまく行かなくてちょっと焦った。

OTG接続の有効化

節電のためかUSBポートの機能をデフォで絞っているらしく、"OTG接続"をオプションからONにしないとデバイスが認識されない仕様だった。
10分使わないとまたOFFに戻るので、専コン使う度に有効化が必要。

外部出力

モニタに出力してプレイしようと思ったが、どうやっても映像が出力されなかった。よく調べてみると、そもそもこの端末は有線出力非対応だったらしい。
大画面でやる環境組みたい場合はこの辺りの対応も注意したほうがよさそう。

購入先

この出品者から4000円弱で買える。
https://www.mercari.com/jp/u/376379913/

ArduinoPS2変換のHW代だけで2000円くらいはするだろうし、UltimateMobile対応部分がオンリーワンなのでかなり良心的価格な気がする。

おわり

究極携帯は専コンの準備がハードル高かったんだけど、これで課題が一つ解消されてしまった。
INFINITASと比べて、キー音が無いこととDPに非対応なことくらいしかもう目立った欠点がない気がする。渋すぎる解禁作業の必要もなく最初から物凄い曲数があるのもうれしい。

個人制作なので常時買えるものでもないけど、Ultimate Mobileやる人はもし売ってたら手に入れて損はしないかと思う。


※追記:その後PHOENIXWANのために改めて自分で作った
de0.hatenablog.com