はじめに
こんなのを作ります
しくみ
100均で売っているイヤホンのマイク-Common間は-2.2V程度の電位差があり、ボタンを押すと0Vになるしくみのようです。
これを利用して、Common-マイク間の電圧をArduinoから監視し、値が小さくなったら音声入力ショートカット(Win+H)を押すことでマイク入力を実現します(Macだとマイクボタンを押すことでMusicアプリが立ち上がってしまうようです)。

準備するもの
- まずは100均で
・端子が4か所(4極)に分かれている
・マイク部分にボタンが1つだけついている
イヤホン購入してください。
USBのものや端子が3極のものは今回の方法は使用できません
- Arduinoはキーボード化できるものであれば大丈夫です。
作り方(ハードウェア)
-
端子に近い場所でコードの被膜を剥き、4極のうち下2か所につながっている線を取り出します。
※何種類かのヘッドホンを試してみましたが、いずれも赤い線がCommon、無色がマイクでした。 -
次に、4極目のCommon(赤)をアナログ入力に、3極目のMicをGNDに接続します。
Mic-Common間に-2.2V程度出ているので、Commonのほうをアナログに入力します。
※今回はA0ピンをアナログ、D1ピンをLOWに落としてGND代わりにしました

作り方(ソフトウェア)
今回はXIAO RP2040を使用しましたが、他のArduinoを使う場合はアナログ値の解像度(最大値が1024,2048等)にあわせてBUTTON_THRESHOLDを変更してください
#include <Arduino.h>
#include <Keyboard.h>
#define ANALOG_READ_PIN A0 // Commonをつないだピン
#define GND_PIN D1 // Micをつないだピン(GNDの代わり)
#define BUTTON_THRESHOLD 64 // Analog値がこれ以下でボタンが押されたとする
void toggleMicButton() {
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('h');
//Serial.println("Sending key for win (LeftGUI+h)");
delay(30);
Keyboard.releaseAll();
}
void setup() {
pinMode(GND_PIN, OUTPUT);
digitalWrite(GND_PIN, LOW); // Ensure GND pin is LOW to provide a common analogReadResolution(12);
ground reference for the button
Serial.begin(1150200);
Keyboard.begin();
delay(1000);
}
void loop() {
static bool wasPressed = false;
int val = analogRead(ANALOG_READ_PIN);
bool isPressed = (val < BUTTON_THRESHOLD);
if (isPressed && !wasPressed) {
toggleMicButton();
}
wasPressed = isPressed;
delay(33);
}
以上です!
