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);