LoginSignup
4
2

More than 3 years have passed since last update.

Arduinoで作るテレワーク向けマイクミュート切替ボタン

Last updated at Posted at 2020-05-14

はじめに

初Qiita投稿です。

Web会議中に話しかけられた時に「マイクミュートされてる!解除どこだ!」って焦ることありませんか?
こっそり別の作業していたりすると特に困りますよね。
ショートカットキーもありますが、アプリによって違ったり、片手で押せない組み合わせだったりで、慌ててしまいます。
ハードウェアのボタンあると良いなって思いません?思いますよね。

検討

Arduinoを使うとUSBキーボードに出来るらしいので、ボタン押したらキー情報を送信するハードウェアを作れば良さそうですね。注意点としてUSBデバイス(HID)に対応するLeonardo系ATmega32U4を搭載したArduinoが必要です。LeonardoボードはUNOと同じサイズなので、ノートPCの隣において使うにはちょっと大きいですね。ここでは小サイズのArduino Pro Microを使うことにしました。

用意するもの

  • Arduino Pro Micro
    • Sparkfunの公式ボードが2千円くらいのようですが、互換品がAmazonで数百円で買えます。5V 16MHz版と3.3V 8MHz版の2種類があるようですが、今回の用途だとどちらでも可。
  • プッシュスイッチ
    • 押している間だけONになるモーメンタリスイッチであれば何でも良いです
    • マイクのミュートだけなら1個で良いですが、せっかくなので他のショートカットも登録出来るように数個使いましょう。
    • 主スイッチには秋月のこれを使いました。 http://akizukidenshi.com/catalog/g/gP-04581/
  • ケース
    • ブレットボードでも良いですが、やっぱりケースに入れたいですね。
    • 今回は手元にあったタカチのMB型アルミケースの小さいやつを使用。
  • ユニバーサル基板の切れ端
    • これもケースに固定する方法があれば無くても問題なし。

Amazonで買ったPro Microの互換品。ピンヘッダが付属しているところが良心的。
promicro

ハードウェア制作

プルアップ抵抗は内蔵のものを使うので、デジタルピンとグラウンドの間にスイッチを付けるだけ。
基板左側にGNDと2pin~が並んでいる部分があるので、そこを使いましょう。

こんな感じにケース加工して部品を取り付けました。
button

出来上がりはこんな感じ。なんか自爆スイッチみたい。
button

プログラム作成

Arduino IDEの使い方は他に分かり易い記事がたくさんあるのでそちらを参照。
プログラムはこんな感じ。

usbkey.ino
#include "Keyboard.h"

#define BTN 4

const uint8_t btnArray[BTN]  = {2,3,4,5};
const uint8_t btnSmplNum   = 10;
uint8_t btnCount[BTN];

void setup() {
  Keyboard.begin();
  for(uint8_t i=0; i<BTN; i++) {
    pinMode(btnArray[i], INPUT_PULLUP);
    btnCount[i] = btnSmplNum;
  }
}

void loop() {
  for(uint8_t i=0; i<BTN; i++) {
    if(digitalRead(btnArray[i]) == LOW) {
      if(btnCount[i] != 0) {
        btnCount[i]--;
      }
    } else {
      if(btnCount[i] == 0) {
        switch(i) {
          case 0: // Lync Mute
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press(KEY_F4);
            Keyboard.releaseAll();
            break;
          case 1: // Launch Explorer
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press('e');
            Keyboard.releaseAll();
            break;
          case 2: // Show Desktop
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press('d');
            Keyboard.releaseAll();
            break;
          case 3: // Screenshot
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press(KEY_LEFT_SHIFT);
            Keyboard.press('s');
            Keyboard.releaseAll();
            break;
          default:
            break;
        }
      }
      btnCount[i] = btnSmplNum;
    }
  }
  delay(10); // Sampling間隔(10ms)
}

特に工夫したところもないですが、大き目のスイッチ使っているので、
チャタリング対策で10ms間隔でキーをサンプリング。
10回連続でLOWを検出した後に、HIGHを検出したら(指を離したら)キーイベントを送信してます。

caseの中身はやりたいことに合わせて適宜変更を。
主目的はLyncのミュート切替のため、Alt+F4 を黒いボタンにアサインしています。
Zoomなら Alt+A、Skypeなら Alt+M ですかね?

動作確認

プログラムを書き込んで、パソコンにつないでみましょう。

03.png
お、USBデバイスとして認識開始?

02.png
デバイスマネージャーからも見えるようになりました。

アプリ立ち上げて黒いボタン押すとミュート切替も無事動きました。

おしまい

こんな感じで活用されています。1000円以下で作れて便利です。
プログラム自由なマクロキーボードなので、使い方は無限大ですね。
オススメです。

button

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2