特定小電力トランシーバーを Discord と連携して、テレワーク（？）を推進

特定小電力トランシーバー（特小無線）という、手頃な値段で購入できて、免許や登録のいらない無線機があります。このトランシーバーの電波は数百メートルの範囲しか届かないので、通常、現地にいる人同士でしか通話することができません。

そこで、特定小電力トランシーバーの通話内容を、インターネットを用いて Discord 経由で中継し、離れた場所にいる人からも通話の送受信ができるようにしてみました。昨今は、感染症の関係で外出に制限がある人も多い世情ですが、そんな人がテレワークとして、大きめのフリーマーケットでスタッフを指揮する運営本部要員になる、あるいは、サバゲーで後方司令基地役をするなど、現地メンバーと一緒に仕事したり遊んだりするのに役立ちます。

おおまかなやりかたですが、トランシーバーと、Discord をインストールした PC 等とを、加工したオーディオケーブルで繋ぎ、相互に音声をやりとりできるようにしています。トランシーバーで受信した音声を、PC のマイク入力に流し、反対に、PC のヘッドホン出力を、トランシーバーのマイク入力に繋がるようにすればよいわけです。このように繋いだ一式を現地のどこかにセッティングしておけば、セットした場所から特小無線の電波が届く範囲との間は、Discord で通話できるようになります。
<img width="150" alt="トランシーバーの絵" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/ce9afce6-a094-9b10-4b2d-62866c878993.png" />
_注意事項: 本記事の内容を実行したことにより生じる機器への影響や、法的な適合性について、筆者は保証しません。_

## 用意したもの
- 特定小電力トランシーバー NX-20X https://www.yodobashi.com/product/100000001002352403/
    - 同機にはVOX機能（PTTスイッチを押さなくても、マイク入力が一定以上のときに送話する機能）がついています。
- ステレオミニプラグ（4極）のイヤホンマイクを使い、 Discord 通話ができる機器
    - ノートパソコンを推奨。
- φ3.5 ステレオ4極ケーブル（https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4Z7Z 等）
    - ダイソーで売っているイヤホンマイク等、ステレオミニプラグ（4極）のついている機器2つでも代用できますが、費用がかさみます。ダイソーのイヤホンマイクは導線が細く、被覆を紙やすり（1000番）で剥がす必要がありました。
- 電子工作キット（テスタ、はんだ、はんだごて、導線、熱収縮チューブ、ヒートガン）
- 抵抗器 6kΩ前後 2個

## 作ったケーブル
### ケーブルの回路図
ステレオ4極ケーブルには4つの端子が付いていますから、ケーブルを真ん中で切ると、4本の導線で繋がっています。それらを、下の図1. のように繋ぎかえ、抵抗器を挟みました。4極ミニプラグの先端を "Tip" といい、根本の側を "Sleeve" といいます。切って現れた4本の導線と、プラグ内の極との対応関係は、テスタで調べます。
![図1. 作成した変換ケーブルの回路図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/6a27e855-0694-596c-5f5e-31e8041efd81.png)


図1. 作成した変換ケーブルの回路図

### 解説・調査
作ったケーブルは上の通りですが、なぜこうしたのか・どのように調べたのか、を解説してゆきます。

#### トランシーバー側の仕様
はじめは、ケーブルを自作しなくとも、ピンの順序を [CTIA-OMTP 変換アダプタ](https://product.rakuten.co.jp/product/-/c948805efcb7ccc28789eb3e3d7be350/) で変換したうえで、ステレオ4極をイヤホンとマイクに分離する [変換アダプタ](https://www.yodobashi.com/product/100000001004028614/) を用い、マイク端子とイヤホン端子とを互い違いに接続してやれば、ほぼ上手くいくのではないか...と思っていました。ところが、そのまま繋ぐと、トランシーバーが送話状態（電波を発信している状態）になったままになってしまったのです。

トランシーバー NX-20X に標準で付属しているイヤホンマイクには PTT ボタンが付いており、通常、このボタンを押しているときだけ送話状態になります。（VOX 機能をオンにしている場合は、PTT ボタンを押さなくても、マイク入力が一定以上のレベルになると送話状態になります。）つまり、単に変換コネクタを介して繋いだだけの方法だと、PTT ボタンが常に押されている状態になってしまっているわけです。

そこで、付属のイヤホンマイクを分解し、内部がどうなっているのか調べると、図2. のように配線されていました。
<img width="400" alt="図2. NX-20X 付属イヤホンマイクの回路図" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/87f937dc-3b96-beeb-2d44-74f32b052a33.png" />
図2. トランシーバーに付属しているイヤホンマイクの回路図

マイクは、直流抵抗として約 6kΩ を持っていました。そして、マイクと並列に、PTT ボタンがオンのときだけ電気が流れる回路があり、1.82kΩ の抵抗器が繋がれていました。つまり、PTT ボタンを押しているか否かで、マイク（3番目の極）と GND（4番目の極）との間の抵抗値が変わるのです。トランシーバーはこの抵抗値をチェックし、抵抗値が一定以下であること（一定以上の電流が流れること）を検出したときに、PTT ボタンがオンになっていると判定することが分かります。（分解しなくても、端子にテスタを当てれば推測可能ですね。あとになってみれば、ですが）

よって、作成するケーブルでは、図1中の抵抗器 R<sub>1</sub> を直列で繋ぎ、トランシーバーのマイク端子と GND との間に、常に一定以上の抵抗がかかるようにしておきます。なお、このトランシーバー本体では、2番目と3番目の極とが、内部で繋がっているようだったので、使わなかった2番目の極は、GND に短絡したり、PC 側と接続したりせず、切断しておきます。

#### PC 側の仕様
Discord を実行するノートパソコンやスマートフォン側のピンの仕様は、多くの機器が標準的な仕様に沿っているので比較的簡単です。[参考資料 \[1\]](https://101010.fun/posts/ctia-ecm-mic.html) の通りですが、要所を解説しておきます。

まず、4極それぞれに機能がどう割り当てられているかですが、 "CTIA" と "OMTP" という規格の種類があります。もっとも、最近の機器はほとんどが CTIA 規格です。つまり、先端 (Tip) から順に、出力（左）、出力（右）、GND、マイク入力です。

また、機器に「マイクが接続されている」ことを認識させるためには、マイク（第4極）と GND（第3極）との間の抵抗が、1kΩ 以上である必要があります。このために挿入したのが、図1中の抵抗器 R<sub>2</sub> です。R<sub>2</sub> の抵抗値は一定の範囲内であれば何でも構いませんから、R<sub>1</sub> と同じ 6.2kΩ を流用することもできます。ちなみに、この抵抗器がなくても、プラグを繋ぐ順番等によっては運が良ければ認識しますが、あると安定します。認識しないと、機器に内蔵されているマイクが使われてしまいます。

## 設定項目
### トランシーバー
トランシーバー NX-20X の設定で、PC 側から音声信号が入力されたことを検出したときに自動的に送話を行うように、VOX 機能をオンにします。

### Discord
「ノイズ抑制」「エコー除去」「ノイズ低減」といった項目はオフにしておきます。無線経由の音声は音質が独特なので、ノイズとして扱われることがままあるためです。また、入力感度も、自動調整ではなく、固定のしきい値を設定しておくとよいでしょう。

また、不用意な音声が Discord で送信されると、トランシーバーから電波が発出され、使用している全員が送話できなくなりますが、Discord 側の人はこれを忘れがちなので、「プッシュトゥトーク」モードにして、Discord 上のボタンを押しているときだけ音声が送信されるようにしておくとよいかもしれません。

## 実際に使ってみて
送受信ともかなりクリアーな音質で、送話・受話ともにほとんど違和感がなく、トランシーバーで通信していると、Discord の向こうにいるテレワーカーが現地にいない・・・ということが分からないほどでした。

トランシーバーのVOX機能は、音声を受信してから送話がオンになるまで若干のタイムラグがあります。言葉の最初が聞こえなくなる頭切れが発生しやすく、最初に「あー」などと発声してから話し始めなければなりませんでした。また、話している途中に無音状態が続くと、そこで送話が終了してしまい、再開時にはまた頭切れするので、考えながら話すとき等は、言葉が途切れないよう特に気をつける必要がありました。

## 今後の展望
今回はトランシーバーの VOX 機能を使いましたが、 Raspberry Pi の GPIO ピン等を使うことによって、トランシーバーの PTT ボタンを押した状態を再現することも可能でしょう。これを用いれば、より頭切れの少ない通話環境が構築できそうです。

また、NX-20X 以外のトランシーバー機種（デジタル簡易無線など）でもトライしてみたいところです。機種によりイヤホンマイクの仕様が違うので、他の機種を使う場合、調べ直す必要があります。また、高級な機種だと、コネクタチェックなどがしっかりしていて、かえってやりにくそうでした。

### 全員が Discord を使えばいいだけでは？
それはそう。
・・・でも、手が離せない、継続的なタスクが発生する状況では、トランシーバーって便利なんですよね。

## 作成風景
<img width="300" alt="ケーブルを繋ぐ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/7e0a4bdd-2cc3-acd1-2cac-7ebade0a9820.jpeg" />
図3. ケーブルを切断し、熱収縮チューブをあらかじめ全て通しておきます。切った導線や抵抗器を繋ぎ、熱収縮チューブで覆います。さいごにケーブル全体を、太い熱収縮チューブで覆います。

<img width="300" alt="完成品" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/458a0528-c087-4c51-8128-6a7aaf6c2ee5.jpeg" />
図4. 完成品。どちらがトランシーバー側か分かるように、プラグに目印を付けておきましょう。

<img width="300" alt="ブレッドボード" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/1d307d98-3298-f35e-04aa-09e29fc37d1f.jpeg" />
図5. ミニジャック（メス側）のついているケーブルを切断して導線を繋ぐと、ブレッドボードを使用して簡単にテストができます。

<img width="300" alt="悪戦苦闘" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261973/00b4481d-6ecd-9b92-055e-62a6a05f6809.jpeg" />
図6. ・・・というのは後知恵で、市販の変換コネクタ等でどうにかできないか、と悪戦苦闘している様子。

## 参考資料
- [1] スマホで使えるイヤホンマイクをECMで自作してみた（mopipico様） https://101010.fun/posts/ctia-ecm-mic.html
   - イヤホンマイク関連の情報がまとまっています。本記事中で参照。
- [2] VX-3にスマホ用イヤホン（くまほーブログ） https://kumaho.info/archives/2690
   - 他機種の場合の、PTT が押しっぱなしになる問題を解決しています。
- [3] 特小トランシーバーBC-20の外部PTTスイッチ制作でバイクのインカムに（ＣＢな日々） http://swordfish109.blog116.fc2.com/blog-entry-552.html
    - ミニプラグやトランシーバー関連の電子工作で、綺麗に仕上げる方法が解説されています。