ボリュームモジュール(可変抵抗モジュール)
私が購入したGROVEスターターキットV3に入っていたボリュームは、Rotary Angle Sensor V1.2 というモジュールです。スイッチサイエンスさんの単体販売ページの中央に写っているものと同じです。同じページの右上の画像のモジュールはボリュームパーツが若干異なるようです。


ボリュームモジュールの動作
ボリュームモジュールはアナログモジュールです。3.3Vの電源に接続している場合、ノブを回すと0Vから3.3Vまで電圧が連続的に変化します。ノブを時計回りにいっぱい回すと0Vで反時計回りにいっぱい回すと3.3Vが出力されます。なんとなく逆のイメージがありますが、このような動作になっています。
プログラム
ボリュームモジュールから読み込んだ値をシリアルコンソールに表示するプログラムです。値の読み込みはanalogRead(PIN)関数で行なっています。
#include <Nefry.h>
//Groveケーブルを接続するGroveソケットを1つ選んで#define文に記載してください。
// Nefry BT無印の場合: D0, D2, A0, A2
// Nefry BT R2の場合: D0, D2, D5, A1 (注:A0を使うときはA1を記載します。)
#define PIN A1
void setup() {
pinMode(PIN, INPUT);
}
void loop() {
Serial.println(analogRead(PIN));
delay(300);
}
プログラムを動作させノブを左右に回すとこのように0〜4095の数字が表示されます。右にいっぱい回すと0、左にいっぱい回すと4095が表示されます。

Groveソケットごとの動作状況
4箇所のGroveソケットにボリュームモジュールを順に接続して、動作をテストしてみました。
Nefry BT 無印の場合はこうなります。
| GROVEソケット名 | 動作状況 | コメント |
|---|---|---|
| D0 | NO | ボリュームを接続した状態だとNefry BTが起動しない。起動してから接続すると、常に4095が表示される。 |
| D2 | NO | 常に0が表示される。 |
| A0 | NO | 常に4095が表示される。 |
| A2 | OK |
Nefry BT R2の場合はこうなります。
| GROVEソケット名 | 動作状況 | コメント |
|---|---|---|
| D0 | NO | 常に0が表示される。 |
| D2 | NO | 常に0が表示される。 |
| D5 | NO | 常に4095が表示される。 |
| A0 | OK | プログラムでは、A0ではなくA1を使う。 |
Nery BT無印ではA2だけ、Nefry BT R2ではA0だけ使えるという結果になりましたが、これには理由があります。
0〜3.3Vの電圧を0〜4095の数値に変換する作業はADC(Analog Digital Converter)が行います。Nefry BTのCPUであるESP-WROOM-32には2系統のADCがありADC1、ADC2と呼ばれています。ADCが使えるGPIOピンは決まっています。
| GPIO番号 | 無印 Groveソケット名 | 無印 PIN名 | R2 Groveソケット名 | R2 PIN名 | ADC1 | ADC2 |
|---|---|---|---|---|---|---|
| GPIO0 | ADC2_CH1 | |||||
| GPIO2 | ADC2_CH0 | |||||
| GPIO4 | ADC2_CH2 | |||||
| GPIO12 | ADC2__CH5 | |||||
| GPIO13 | A6 | D7 | ADC2_CH4 | |||
| GPIO14 | A5 | D8 | ADC2_CH6 | |||
| GPIO15 | ADC2_CH3 | |||||
| GPIO25 | A0 | A0 | D5 | D5 | ADC2_CH8 | |
| GPIO26 | A1 | D6 | ADC2_CH9 | |||
| GPIO27 | A4 | T4(基板裏) | ADC2_CH7 | |||
| GPIO32 | A2 | A2 | A0 | A1 | ADC1_CH4 | |
| GPIO33 | A3 | A0 | ADC1_CH5 | |||
| GPIO34 | ADC1_CH6 | |||||
| GPIO35 | A7 | ADC1_CH7 | ||||
| GPIO36 | A3 | ADC1_CH0 | ||||
| GPIO39 | A2 | ADC1_CH3 | ||||
Nefry BT無印のGroveソケットでは、A2でADC1が、A0でADC2が使えることになりますが、A2は動作しますが、A0は動作しません。同様にNefry BT R2のGroveソケットでは、A0でADC1が、D5でADC2が使えることになりますが、A0は動作しますがD5は動作しません。これは、
Wifiが動作しているときはADC2は使えない
という制限がESP-WROOM-32にあるためです。詳しくはESP-IDF Programming GuideのADCの項を参照してください。
Wifiを止めればNefry BT無印のA0とNefry BT R2のD5も使えると思いますが、まだ実験していません。
ADC1は、Nefry BT無印のピンソケットA2、 A3、A7や、Nefry BT R2のピンソケットA0、A1、A2、A3にも接続されているので使えると思いますが、こちらもまだ実験していません。
諸元
| 名称 | Rotary Angle Sensor ボリューム |
| バージョン | v1.2 |
| Seeed社 Wiki | http://wiki.seeedstudio.com/Grove-Rotary_Angle_Sensor/ |
| スイッチサイエンス商品ページ | https://www.switch-science.com/catalog/805/ |
| Nefry BT無印 動作ソケット | A2 |
| Nefry BT R2 動作ソケット | A0(プログラム上はA1) |
参考文献
ESP-IDF Programming Guide – ADC
スイッチサイエンスの記事 「ESP-WROOM-32に関するTIPS」のADCの項
