フットスイッチコントローラの作り方

# どんな内容か？
コロナ禍ということもあり、展示会（Maker Faire）で来場者の方に手で触れて遊んでもらうことが、難しくなってしまったので、手がダメなら足で遊んでもらおうとフットスイッチ（音楽用のフットスイッチ）を使ったコントローラを作りました。コロナ禍で他のシーンでも利用できるかと思いますので、作り方を含めて紹介します。下記が作成したコントローラです。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/ee48e734-593d-3299-8c29-eaf5f243a03c.png">

# プロジェクトの概要
今回作成したコントローラに、市販のフットスイッチ（YAMAHA FC5）を接続することで、フットキーボードとして利用できるものです。マイコンには、SeeedStudioが最近販売した小型のマイコンXIAOを使っています。今回４つのフットスイッチが接続できる基板を作成しました。
コントローラは、PCに接続するとHIDキーボードとして認識されるので、特定のキーを割り当てておけば、スライドのスクロールとか、上下左右とかの操作を足で行うことができます。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/f98e809a-b6be-02c8-3be5-d6a7c81ec761.png">

# 作り方
### 回路図
スイッチをダイレクトにGPIOに取り付けています。スイッチは、内蔵のプルアップ抵抗を利用することにしました。スイッチ以外の端子は、Groveコネクタや、ピンヘッダから取り出せるようにしています。言ってしまえば、専用基板無しでXIAOに直接フットスイッチをはんだ付けするだけで作れます。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/906623be-4e99-8356-8c26-92e74b930674.png">
※見づらい場合は、Githubから[PDFのダウンロード](https://github.com/carcon999/footkey/tree/master/schematic)が可能です。

### 基板を入手する。
専用基板製造に必要な[ガーバーファイルを公開](https://github.com/carcon999/footkey/tree/master/gerber)しますので、必要であればそのまま基板をオーダーいただくことで入手が可能です。（専用基板でなくてもユニバーサルでも作ることは可能だと思います。）[Maker Faire Tokyo 2020 (2020/10/3,4)](https://makezine.jp/event/mft2020/)にてキットとして少量頒布予定です。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/d81193e6-d1ed-01eb-f0b0-6ddc57f64411.png">

### フットスイッチを入手する。
今回、YAMAHAのFC5を利用しています。選定のポイントは、値段がお安く作りもしっかりしている点です。当方購入時は、[Amazon](https://amzn.to/33UJlF8)で1,100円程度でした。コネクタは6.3mmのオーディオプラグになります。他社製のフットスイッチも利用できると思いますが、スイッチの接点方向を確認してください。YAMAHAのFC5は、B接点のノーマリークローズ（NC）となります。底面のゴムなどがしっかりしており、簡単には壊れないので一生もので使えるはずです。(笑)
<img width="320" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/ce19619b-db51-75df-0d5d-96720f6d4619.png">

### 部品を入手する。
|シルク番号|部品名|個数|購入先|備考|
|---|---|---|---|---|
|U1|XIAO|1|秋月通商|[Ｓｅｅｅｄｕｉｎｏ　ＸＩＡＯ](https://akizukidenshi.com/catalog/g/gM-15178/)|
|J1-J4|MJ-462|4※1|秋月通商|[６．３ｍｍステレオジャック　ＭＪ－４６２](https://akizukidenshi.com/catalog/g/gC-12481/)|
|J5|1x6ピンヘッダ※2|1|秋月通商|[ピンヘッダ　（Ｌ型）　１×６　（６Ｐ）](https://akizukidenshi.com/catalog/g/gC-05336/)|
|C1,C2|1608 0.1uFコンデンサ※2|2|秋月通商|[チップ積層セラミックコンデンサー　０．１μＦ５０Ｖ　Ｆ　１６０８](https://akizukidenshi.com/catalog/g/gP-13374/)|
|R1,R2|1608 1kΩ抵抗※2|1|秋月通商|[金属皮膜チップ抵抗器※3　１６０８　１／１０Ｗ１ｋΩ±０．１％](https://akizukidenshi.com/catalog/g/gR-11790/)|
|J6,J7|L型Groveコネクタ※2|2|秋月通商|[Ｇｒｏｖｅ用－４Ｐコネクタ　Ｌ型　オス　（１０個入）](https://akizukidenshi.com/catalog/g/gC-12634/)|
※１：利用するフットスイッチ数分で良い。
※２：SPI,I2C,UARTを利用する必要がない場合は、これらの部品は必要ありません。最低限XIAOとMJ-462があれば良い。
※３：1Kの抵抗であれば何でも良い。高精度の抵抗である必要はない。（秋月通商で部品をそろえるなら・・・）

### 部品を実装する。
下記の写真を見て実装してください。J5のピンヘッダは実装されていません。
XIAOは、USBのコネクタが基板の外に出る方向にはんだ付けします。
MJ-462も、端子の挿入口が基板の外に出る方向ではんだ付けします。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/eea9b3e5-edca-2270-94ce-83ed991c4fb4.png">

### 開発環境を準備する。
書き込むためには、Arduino IDEが必要です。（環境の構築方法は、ここでは説明しませんが、検索するとみつかると思います。）
XIAOがArudino IDEで使えるように、ボードの情報を追加します。
下記の、サイトが非常に詳しく説明されていますので、手順に従ってボードを追加してください。
[ＡｒｄｕｉｎｏＩＤＥにＸＩＡＯボードを追加する方法](http://zattouka.net/GarageHouse/micon/Arduino/XIAO/install.htm)

また、今回、Adafruit_TinyUSBをライブラリとして利用しています。ライブラリマネージャから、最新版の[Adafruit TinyUSB Library](https://github.com/adafruit/Adafruit_TinyUSB_Arduino)をインストールしてください。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/6813d462-a243-7bbc-4eab-8ec6618bc8c0.png">

### 必要に応じてキーコードを変更する。
[GitHub](https://github.com/carcon999/footkey/tree/master/xiao_footkey)からコードをダウンロードして、xiao_footkey.inoのファイルを開きます。
デフォルトで、キーコードが、'1','2','3','4'に割り当てられていますので、お好みで他のキーコードに変更します。
定義は、[この辺](https://github.com/platformio/platformio-pkg-framework-arduinosam/blob/master/cores/adafruit/Adafruit_TinyUSB_Core/tinyusb/src/class/hid/hid.h)を参考にしてください。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/0f517e0c-2108-09c6-a556-ea288578ad0c.png">

### XIAOに書き込む
Arduino IDEのツールメニューから、下記のように設定します。（シリアルポート番号は、各自の環境でことなります。）
ボード名：Seeeduino XIAO
USB Stack:TinyUSB
シリアルポート：COM XX (Seeeduino XIAO)
<img width="320" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/9f60ad60-74e3-23e8-8064-dc16b3925222.png">
しばらく待つと書き込みが完了します。

### 動作確認
本体のステレオジャックに、FC5を差し込んだ状態で、USBコネクタをパソコンに接続します。
フットスイッチを踏むことで、対応するキーコードがパソコンに送られるはずです。踏みっぱなしにすると、キーリピートが発生します。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/4ffac831-ab8c-66eb-9f21-3a7ac98c905c.png">

私は、多少乱暴に扱っても良いように、タカチのケース（[YM-100](https://akizukidenshi.com/catalog/g/gP-09534/)）に入るように加工しました。

### 最後に
[Maker Faire Tokyo 2020](https://makezine.jp/event/mft2020/)で本フットコントローラを使って、来場者にゲームを楽しんでいただきます。また、本当に少量なのですが、同じものが作れるDIYキットを頒布させていただく予定です。是非ご来場(2020/10/3, 4)いただければと思います。
<img width="640" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/10e79cc5-3372-1d0c-99c0-c9acae04e564.png">

以上です、