ボリュームモジュール(可変抵抗モジュール)
私が購入した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の項