Arduino Microは自作キーボードのUSBインターフェイスなどに使用されていますが、キーボードのようなスイッチだけではなく、ジョイスティックなどの入力デバイスも作れて面白いです。
ここではArduino MICROにロータリーエンコーダを接続して、PCのマスターボリュームをコントロールするUSBデバイスを作成します。
このツマミをぐりぐり回すと‥画面左上にマスターボリュームのスライダが現れ、マスターボリュームを調整できます。
いくつかのキーボードには、ボリュームコントロールのボタンが付いていたり、Fnキーを押しながら入力するものも存在しますが、あまり使われていない気がします。(個人的な見解です)
このようなツマミ式だと直感的で非常に使いやすいと感じました。
ユーザーインターフェース大事!
使用するもの
- Arduino MICRO
- ロータリーエンコーダモジュール
今回は、たまたま手元にあったArduinoMICROを使用しましたが、少々お高いのでRaspberryPiPicoなどを使用したほうが良いかもしれません。ただしスケッチはそのままでは使えないので書き換えが必要です
ロータリーエンコーダはElegooのスタータキットに同梱されていたものを使いましたが、Amazonなどで検索すると同様のものが多数表示されます。お好みのものをお使いください。(ツマミ付きのものもありますし、RGBLED付きのものだと、ゲーミング仕様にもできます)
接続図
- 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 件のコメント:
コメントを投稿