2022年1月21日金曜日

思い付きで作ってみたPCのマスターボリュームコントローラが割と便利だった

Arduino Microは自作キーボードのUSBインターフェイスなどに使用されていますが、キーボードのようなスイッチだけではなく、ジョイスティックなどの入力デバイスも作れて面白いです。 

ここではArduino MICROにロータリーエンコーダを接続して、PCのマスターボリュームをコントロールするUSBデバイスを作成します。

このツマミをぐりぐり回すと‥
画面左上にマスターボリュームのスライダが現れ、マスターボリュームを調整できます。

いくつかのキーボードには、ボリュームコントロールのボタンが付いていたり、Fnキーを押しながら入力するものも存在しますが、あまり使われていない気がします。(個人的な見解です)

このようなツマミ式だと直感的で非常に使いやすいと感じました。

ユーザーインターフェース大事!


使用するもの

  1. Arduino MICRO
  2. ロータリーエンコーダモジュール

今回は、たまたま手元にあったArduinoMICROを使用しましたが、少々お高いのでRaspberryPiPicoなどを使用したほうが良いかもしれません。ただしスケッチはそのままでは使えないので書き換えが必要です

ロータリーエンコーダはElegooのスタータキットに同梱されていたものを使いましたが、Amazonなどで検索すると同様のものが多数表示されます。お好みのものをお使いください。(ツマミ付きのものもありますし、RGBLED付きのものだと、ゲーミング仕様にもできます)


接続図



Arduino MICRO -> ロータリーエンコーダ

  • D7ー>CLK
  • D8->DT
  • D3ー>SW
  • 5Vー>+
  • GNDー>GND

部品点数を減らすためスイッチにはキャパシタを付けておらず、チャタリング対策はソフト側で行っています。心配な方はCLK、DT、SW端子にキャパシタを取り付けると良いでしょう。

今回使用したロータリーエンコーダは、ロータリーエンコーダにプルアップを付けたモジュールになっているため、接続は上記のピンアサインとページ最初に掲載している写真などを参考にしてください。


スケッチとライブラリ

ArduinoIDEなどを使って下記の3つのコードをコピーしてください。

MasterVolControl.ino

ConsumerControl.h

ConsumerControl.cpp

コンパイルする前に、ボードをArduinoMICROに変更してください。

clk_reg, dt_reg, sw_regのLSBにスイッチやロータリーエンコーダの入力を接続し、シフトレジスタのように扱います。

ロータリーエンコーダの仕様書には、チャタリングが落ち着くまで3msec以下とあるので、サンプリング周期をおよそ3msec周期にするため、delay(3)を入れます。

clk_regのLSB側2bitを見て、値が10となった場合、clkピンがネガティブエッジとなったことを示します。

このときのDTの値がHighかLowかによってロータリーエンコーダの回転方向が分かります。

SWについても同様に、sw_regの値が10となったときに、スイッチが押されたことになります。



使用方法

ロータリーエンコーダを右に回すとマスターボリュームが上がります。

ロータリーエンコーダを左に回すとマスターボリュームが下がります。

ロータリーエンコーダを押すとミュート、もう一度押すとミュート解除します。


応用

多数のロータリーエンコーダを接続して、ステミキソフトのコントロールができると、Youtubeで配信している方々に使ってもらえるかもしれません。

あとケースが必要!見た目は大事!



0 件のコメント:

コメントを投稿