Grove Beginner KitでのArduino入門 その4 回転角センサ

概要

前回までにデジタル入力とデジタル出力を説明しました。今回はアナログ入力です。ポテンションメーターと呼ばれる可変抵抗を使って、ボリューム入力を行います。

回転角センサとは?

A0に接続されている、ロータリーポテンションメーターです。中身はボリュームを回すと抵抗値が変わる可変抵抗で構成されており、入力された値を取得することでどれぐらいのボリュームになっているかを推測できる部品です。

スケッチ例

int rotaryPin = A0;   // 角度センサー(A0)
 
void setup() {
  // シリアル出力を初期化
  Serial.begin(115200);

  // 角度センサーピンを入力に設定
  pinMode(rotaryPin, INPUT);
}
 
void loop() {
  // 角度センサー値を取得
  int rotaryValue = analogRead(rotaryPin);

  // シリアル出力に角度センサー値を出力
  Serial.println(rotaryValue);

  // 50ミリ秒待機
  delay(50);
}

センサー値を取得して、シリアル出力をするためのスケッチ例です。これを実行しながら「ツール」→「シリアルモニタ」を開きます。

右下に115200 bpsというプルダウンリストがありますので、スケッチで指定した115200 bpsに変更します。そうすると画面に文字が表示されていくと思いますので、ボリュームを動かしてみてください。上記のように一番右に回しきると0で、一番左まで回すと1023が表示されると思います。

またこの状態で「シリアルモニタ」を閉じて、「ツール」→「シリアルプロッタ」を開いてみてください。

「シリアルプロッタ」では数字では無くてグラフでデータを表示することができます。数字で見ていると推移がわかりにくいので、「シリアルプロッタ」も利用してみてください。

余談・analogRead()

analogRead()関数は、実際には電圧を取得しています。0から1023までの1024段階(10bit)精度のADCと呼ばれるアナログ・デジタル変換です。Arduino UNOの場合5Vで動いていますので、通常の設定では0Vから5Vまでを1024段階で取得します。つなり1メモリが5÷1024で0.00488(約4.9mV)となります。

  • 入力電圧=センサー値×5÷1024

上記の計算式でセンサー値から、電圧を求めることができます。400というセンサー値の場合には400×5÷1024より約1.95Vが計算できます。とはいえ、Arduino UNOのADC精度はあまり高くないので、実際にテスターとかで計測するとたとえば2Vだったりと微妙な誤差はでると思います。特に0付近と1023付近は意図的に精度を落として、0V付近は0になるように、5V付近は1023になるように調整が入っています。これにより、ボリュームを最小にしても誤差で1までしか落ちないなどが発生しにくいようになっています。

余談・回路図

上記がこの回転角センサーの回路図です。ちょっと見にくいですね。回路的にはVCC(5V)から可変抵抗を通って、SIG1に接続されているだけになります。可変抵抗の型番がWH09-2-103ですね。10kΩの可変抵抗なので、0Ωから10kΩまで値が変化します。

回路図の可変低能の1と3の間が10kΩで、2が移動するイメージです。3と1の電圧差がVCCである5Vになります。2が1と同じ場所にある場合には0Ωで0Vの入力になります。2が3と同じ場所にある場合には、10kΩで5Vの入力になります。同じ用に2が中間にある場合は5kΩで2.5Vになります。

まとめ

アナログ入力は比較的かんたんに利用することができます。各種センサー入力などでよく使うと思います。デジタルとアナログで接続する端子が違うので、A0などAがついている端子番号に接続するようにしてください。

コメント

タイトルとURLをコピーしました