お知らせ:この記事はJLCPCBの提供でお送りしています。
自作キーボードに続いてPC周辺機器DIYシリーズということで1、今回はHDMI切り替え機を改造してWiFi対応にしてみました。
入力切替が不便過ぎる問題
2020年の新型コロナウイルスの流行でテレワークが増え、自宅で私物のPCと社用PCを同じモニタに接続して使うようになりました。当初はSONYのテレビをモニタとして使っていたのですが、都度都度リモコンを出してきてポチポチと入力切替をするのも面倒だなと感じていました。そこで作ったのがProfileのページの入力切替専用リモコンです。これはSONYのテレビが持っているREST APIをM5Stack CoreInkを使って叩くものでした。
この入力切替専用リモコンは2年ほど便利に使っていたのですが、先日引っ越した際に作業用のモニタを新調し、テレビをモニタ代わりに使うのをやめてしまいました。今度のモニタは普通のモニタなので、REST APIはありません。この新しいモニタで入力を切り替えようとすると、
- 入力切替キーを押す
- 上下キーで所望の入力を選択する
- 決定キーを押す
…と、私の用途では高々2入力間を行ったり来たりするだけなのにもかかわらず、最低でも3キーの入力が必要です。さらにモニタのスイッチは目立たせないデザインのために小さく、押しにくいので実に不便です。
とりあえずHDMI切り替え機を買ってみる
この不便さを解決すべく、Amazonで購入したのがこのHDMI切り替え機です。1000円以下で購入できました。4K60Hzの出力でも特に映像が乱れたりもせず、ワンボタンで入力を切り替えられるのはいいのですが、切り替え機本体にスイッチが付いている都合上、2入力1出力のケーブルが刺さっている本体を手元に出しておく必要があり、これがなかなか邪魔です。
そこで、このHDMI切り替え機の上についているボタンの信号を乗っ取り、WiFiで遠隔から制御できるようにしてしまえばいいのではないかと考えました。そうすれば、元々SONYのテレビでやっていたようにM5Stackなどでリモコンを作るのも簡単ですし、ケーブルが刺さった本体を手元に置いておく必要もなくなります。
早速分解&解析
方針が決まったら早速、ボタンの信号を乗っ取るための解析を始めます。左右の側面にある4つのネジを外すことで上部のカバーを外すことができました。
上の写真でボタンの右下にある細長いICはDiodes/Pericom社のPI3WVR12412というアナログスイッチICです。このICはHDMIやDisplayPortの信号を切り替える用途のために設計されたICです。また、基板のパターンも高速信号が通ることを踏まえた等長配線など、配慮がなされていることが分かります。
アナログスイッチICの型番を手掛かりに、ICの切り替え信号入力とボタンの間の配線を解析しました。愚直にボタンの接続・切断をエミュレートしてやれば細かい解析をする必要はないのですが、大した規模の回路ではなさそうなことと、自作する回路をシンプルにしたかったため、そこそこきちんと解析をしました。
解析の結果、このHDMI切り替え機では2つの信号を1つのボタンで切り替えていることが分かりました。上の写真ではボタンが取り外され、ボタンの下にあった左右に3つずつ、計6個の端子が見えるようになっています。左側の3つの端子が入力を切り替えるうえで重要な働きをしています。3つ並んだ端子のうち、ボタンが押し込まれている状態では上側の端子と真ん中の端子が、ボタンが飛び出ている状態では下側の端子と真ん中の端子が接続された状態となります。真ん中の端子はGNDに接続されているため、選択したい入力ポートに合わせて、上下の端子をGNDに落としてやれば、ボタンと同等の働きを実現できそうです。
また、こちら側の信号は、状態表示LEDの切り替え、アナログスイッチICの切り替え信号、Port A/Bのどちらから切り替え機の電源を取るかを選択する機能の制御を兼ねています。上下の端子はHDMIケーブルから給電される5Vでプルアップされていますので、3.3V系のマイコンに接続するためにはレベル変換が必要そうだということもわかりました。アナログスイッチICの入力も3.3V系を前提とした設計になっているので、ボタンの信号が直接入力されているわけではなく、分圧したうえで制御信号入力へと入力されているようです。
一方、反対側の3つの端子はパターンを追いかけていったところ、それぞれのHDMI端子からのUtilityピンの信号を切り替えて、出力側のポートに接続しているだけでした。Utility信号線は初期のHDMI規格では使われておらず、新しめの規格ではイーサネット信号やARC2のために使われている信号線です。今回使われているアナログスイッチICにはUtility信号を切り替える機能がないため、ボタンを使って直接切り替える設計となっているようです。「ARCには対応しません」とAmazonの商品ページには書いてありましたし、イーサネットやARCの用途で使う場合にここを通る信号はそこそこ高速なはずなので、この設計では安定して通信はできない気がします。まあ一応つないでおこうというところでしょうか。今回は実験の結果、Utility信号線を繋がなくても問題ないことを確認しているため、簡略化のためにUtility信号線の切り替えは実装しませんでした。
ボタンエミュレーターを設計する
さて、お次は解析結果をもとにボタンの代わりをするボタンエミュレーター基板を設計していきます。といっても、回路図は上の通り非常に簡単です。制御用のマイコンは手持ちで余っていたことと、コンパクトさ、Arduino IDE対応の手軽さから、M5Stamp C3Uを使いました。
解析の結果から、HDMIの入力を切り替えるためには2つの端子を適切にGNDに落としてやればよいということと、5Vでプルアップされているため3.3V系のGPIOには直接接続できないことが分かっています。そこで、M5Stamp C3Uの先にレベル変換用のデジタルトランジスタを接続してHDMI切り替え用の端子を制御するようにしています。デジタルトランジスタはトランジスタを使う上で必要なベース抵抗やベース・エミッタ間抵抗が内蔵されたトランジスタです。デジタルトランジスタを使うことで、部品数も最大限減らすことができました。
なお、HDMIケーブルには5Vが通っていますが、規格上では55mAの供給能力しか保証されていないため、M5Stamp C3Uを動かすには不十分です。そこで、M5Stamp C3Uの電源はそれ自身のUSB端子から給電することにしました。
簡単な回路ですが、別件で基板を発注する予定があったので相乗りすべくプリント基板化しました。とはいっても、回路が簡単なので特に凝ったところはありません。元のHDMI切り替え機のケースよりも小さくなるように、基板サイズは40mm角で設計しました。
基板到着&組み立て
今回は最近JLCPCBが対応した配送オプションであるOCS Expressを使いました。9/4に発注して9/14に到着と、10日で到着しました。OCS ExpressはDHLより安いので、この日数感であれば結構アリなのではないでしょうか。
早速M5Stamp C3Uとデジタルトランジスタを実装していきます。M5Stamp C3Uは一度カバーを外して実装し、あとでカバーを付けなおします。
ボタンエミュレーター基板の実装が終わったら、あらかじめボタンとLEDを外しておいたHDMI切り替え機とケーブルで接続します。ケーブルはボタンが出ていた穴を活用して通しました。
HDMI切り替え機のケースを閉じるとこんな感じです。狙い通り、HDMI切り替え機の上に、ボタンエミュレーター基板がいい感じに収まるようにできました。
プログラムを書く
プログラムはArduino環境で開発しました。ソースはGistに置いてあります。ざっくりとどのような機能に対応しているか、書いておきます。
- WiFi接続機能
- 固定IP or DHCPを選択可能
- mDNSによる接続も可能
- 接続断の状態がしばらく続いた場合、WiFi再接続のためにシステムリセットをかける機能を実装3
- Webサーバ機能
- 80番ポートでREST APIを提供
- /status:どちらのPortが選択されているかを応答
- /sw/0:Port Aに切り替え
- /sw/1:Port Bに切り替え
- 80番ポートでREST APIを提供
- 本体ボタンによる入力切替機能
- 本体ボタンを押すことで入力をトグルする
ケースを作る
モニタの裏に置いて常時運用するものなので、安定して使えるようにボタンエミュレーター基板を保護するケースも作成しました。まずはベースプレートからプリントしました。ケーブルを通せるようにするための穴と、固定用のネジ穴をあけた板になります。3Dプリンタで50分程度でプリントが完了しました。見た目重視の方はJLCPCBの3Dプリントサービスに投げてみるのもありかもしれません。このベースプレートをHDMI切り替え機のケース上部に両面テープで固定しました。
お次はカバー部です。サポート材が必要にならないような形状にするため、ネジの頭が隠れるような設計にはしませんでした。FDM機でプリントした部品は、ヒートベッドに張り付いていた側が白っぽくなることが多いですが、ヒートガンなどで軽くあぶってやると目立たなくなります。
最後に、ベースプレート、ボタンエミュレーター基板、カバーを組み合わせてねじ止めすれば完成です。
まとめ
今回は市販のHDMI切り替え機の回路を解析し、WiFi経由でHDMI入力を切り替えられるように改造しました。今回は2入力の切り替え機ですが、4入力品なども似たような要領で改造できるのではないかと思います。モダンなWiFiマイコンで安いガジェットをちょこっと改造するのはいろいろ深堀りする余地がありそうです。