Groveで広がるArduinoの世界-Senser Kit-⑦ Grove Rotary Angle Sensor
Rotary Angle Sensorは、そのもの自体はテレビやオーディオ機器のボリュームそのものです。回すと抵抗値が変化するので、0~300度を0~5Vに対応させたセンサです。角度をディジタル値で出力するセンサをRotary Encoderと呼びます。
ボリュームには、1k、5k、10k、20k、50k、100k、1MΩなどの種類があります。そして、回す角度と抵抗値の変化で、次の3種類があります。オーディオ用ではAカーブが使われます。ここで使われているのはBカーブだと思われます。
●接続
10kΩのボリュームがつながっています。
Groveピン番号 | ボリュームのピン |
---|---|
4 GND | 3番 |
3 Vcc | 1番 |
2 NC | NC |
1 SIG | 2番 |
●プログラム
用語「ポテンショメータ」は、日本では半固定抵抗もしくは、多回転半固定抵抗を指していることが多いです。
THE POTENTIOMETERのページに掲載されているスケッチです。
int potentiometer = A0; //Assign to pin A0 void setup() { Serial.begin(9600); //Begin serial communication pinMode(potentiometer, INPUT); //Sets the pinmode to input } void loop() { int sensor_value = analogRead(potentiometer); //Read the value from the potentiometer connected to the A0 pin int value = map(sensor_value, 0, 1023, 0, 100); //Map the value from 0, 1023 to 0, 100 Serial.print("Potentiometer value: "); Serial.println(value); //Print the value in the serial monitor delay(500); //Add a delay to see the value every 1/2 second }
実行している様子です。
Map関数はArduino独自のもので、整数が返されます。アナログ入力は、0~5Vを0~1023の数値で得られます。
int value = map(sensor_value, 0, 1023, 0, 100);
0~100というのは何を目的にしているのか不明です。角度センサといっているので、0~300に変換します。また、左端が最大になるのは不自然なので、左に回し切ったら0になるように変更しました。
int value = map(sensor_value, 0, 1023, 300, 0);