PC部屋として防音室を買った。いつでも好きに音を出せて快適になった。
(防音室についての記事は別途そのうちいつか書くかと思う)
防音室の出入りの際は空いた扉から当然音が漏れるので、夜中の利用時はその都度PCをミュートしたりしていた。
開いてるタイミングと音出したくないタイミングは一致しているので、これはセンサーつければ簡単に自動化出来るのではということに気づいた。
作った
できた。磁力でドアの開閉を検出できるセンサーがあったので、Arduino(pro micro)に単純に半田付けしたらそれだけで超簡単に完成した。
ドアの端と枠にそれぞれコマンドタブで貼り付けて、USBケーブルつないだら設置完了。
ドアを開けたらPCの音声がミュートされ、ドアを閉じたらミュートが解除されるようになった。やったね。
材料
ソース
digitalreadで開閉状態が取れるので、それに応じて処理を入れるだけで簡単に出来た。
USBキーボードとして認識させ、状態遷移時にホットキーを送るようにした。
本当はミュートのメディアキーを直接送るつもりでいたんだけど、用意されているサンプルで対応していたのは基本的なキーコードのみだったので、PC側でAutohotkeyを併用して妥協した。
Arduino側
#include "Keyboard.h" //ピン定義 const int buttonPin = 5; const int ledPin = 17; //センサ状態用変数 int buttonState = 0; int prevState; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { //CloseならHIGH digitalWrite(ledPin, HIGH); } else { //OpenはLOW digitalWrite(ledPin, LOW); } if ( (buttonState == HIGH) && (prevState == LOW) ) { //閉じられた時の処理 - SHIFT+Alt+Ctrl+c Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('c'); Keyboard.releaseAll(); } else if ( (buttonState == LOW) && (prevState == HIGH) ) { //開けられた時の処理 - SHIFT+Alt+Ctrl+o Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.write('o'); Keyboard.releaseAll(); } prevState = buttonState; delay(10); //delayなしだと開放時に一回余分に閉じ明けが認識されるので回避 }
PC側(Autohotkeyスクリプト)
+^!c::Soundset,0,master,mute ;ドア閉まったらミュート解除 +^!o::Soundset,1,master,mute ;ドア空いたらミュート