自作 3ペダルフットスイッチ
WAR THUNDER(陸)で遊ぶときに、ジョイスティックに割り当てていないキーを押すときはキーボードに手を伸ばしていますが、足でも操作できるスイッチがあればもっと操作が快適になるかと思い、作ってみました。
試作なので手持ちの材料+なるべく安く部品を手に入れる方針としました。スイッチの数は3個、足で操作するのであまり多くても大きくなって場所をとるし、足は器用ではないのであまり多くても操作できないので、この数に決めました。
板に溝を掘ってマイクロスイッチを埋め込み、適当な板でスイッチを押す構造にしました。回路は余っていたESP32、キーボードとマウスの機能を組み込みました。ESP32-S3-DevKitCはハンコンに使っていた物ですが、ハンコンのマイコンはREVIVE USB ADVANCEで置き換えたので余っていました。
近所のハードオフ(部品屋の代わり)で適当なマウスを110円で買って、分解して3個のマイクロスイッチを入手。1.2mのUSB typeCケーブルは、メルカリで安く調達しました。
以下にESP32のコードを掲載。
左スイッチに「ALT 左側」、中央スイッチに「マウス左クリック」、右スイッチに「c」を割り当てました。
最後の delayは無くても良いかもしれません。()内の数値を大きくすると、リピート時の速度が遅くなりました。
//
// 3 pedal footswitch
// LEFT : LEFT ALT
// CENTER : mouse LEFT click
// RIGHT : keyboard 'c'
//
#include <Arduino.h>
#include "USB.h"
#include "USBHIDKeyboard.h"
#include "USBHIDMouse.h"
USBHIDKeyboard Keyboard;
USBHIDMouse Mouse;
#define SW_RIGHT GPIO_NUM_2
#define SW_CENTER GPIO_NUM_42
#define SW_LEFT GPIO_NUM_41
volatile int SW_RIGHT_changed = 0;
volatile int SW_CENTER_changed = 0;
volatile int SW_LEFT_changed = 0;
volatile int Timerflag = 0;
//------------------------------------------
void setup() {
// USB
USB.PID(0x8211);
USB.VID(0x303b);
USB.productName("ESP32-FOOTSWITCH");
USB.manufacturerName("ky01");
USB.begin();
Keyboard.begin();
// 入力ピン設定
pinMode(SW_RIGHT, INPUT_PULLUP);
pinMode(SW_CENTER, INPUT_PULLUP);
pinMode(SW_LEFT, INPUT_PULLUP);
Serial.begin(115200);
}
//----------------------------------------------
void loop() {
int r_released = 0;
int c_released = 0;
int l_released = 0;
//-------------------------------SW_RIGHT
if (digitalRead(SW_RIGHT) == 0) {
Keyboard.press('c');
r_released = 0;
}
if (digitalRead(SW_RIGHT) == 1){
if (r_released == 0){
Keyboard.release('c');
r_released = 1;
}
}
//-------------------------------SW_CENTER
if (digitalRead(SW_CENTER) == 0) {
if (!Mouse.isPressed(MOUSE_LEFT)) {
// ボタンが押されていたらクリック
Mouse.press(MOUSE_LEFT);
}
}
// クリックを離す
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
}
//-------------------------------SW_LEFT
if (digitalRead(SW_LEFT) == 0) {
Keyboard.press(KEY_LEFT_ALT);
l_released = 0;
}
if (digitalRead(SW_LEFT) == 1) {
if (l_released == 0){
Keyboard.release(KEY_LEFT_ALT);
l_released = 1;
}
}
delay(2);
} // end of loop()
platformio.ini はこんな感じ。
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
lib_deps = schnoog/Joystick_ESP32S2@^0.9.4
今は寒い時期なのでホットカーペットを足元に置いて、その上にフットスイッチを置いています。ペダル部を親指で軽く押すと動作します。マイクロスイッチの「カチッ」という音は、意識していれば聞こえるくらい。足の裏で押すと、押したのか押せてないのかがわかりません。足裏はだいぶ感覚が鈍いようです。相手が迫っていて緊迫したシーンで思わず力が入ると、知らないうちに親指でペダルを押していることがあります。左ペダルを押してしまうとカーソルを動かす状態になるので、マウスをいくら動かしても砲塔が動かなくなり、とても焦ります。ここら辺は操作に慣れるか、スイッチをもっと固い物に置き換えるかしないとだめそうです。ギターのエフェクター用のスイッチがよさそうですが、高さがあるので今回の用途には向いていないかもしれません。
左の「ALT」と右の「c」はとても便利に使えています。周囲を見回すときに使う右ペダルはジョイステックのボタンを押すより断然使いやすいです。「ALT」は今までキーボードを押していましたが、左ペダルにしたことで手をジョイスティックから離さなくてすむようになりました。
中央の「マウス左クリック」は、航空機の操縦時の機銃トリガとして使えるかと思いましたが、そもそも航空機の操作が下手でうまく飛べず、それゆえ遊ぶこともほとんどないので出番がありませんでした。別の機能に割り当てしなおすことを検討中です。
試作で十分に楽しめているので、このまま使っていくことになりそうです。