アナログ値をArduinoに入力する際にポテンショメータを利用すると、入力電圧を変化させ様々な制御が出来るようになります。

MEMO

この記事は以前に購入したOSOYOO製のArduino学習キットのレッスン内容について解説した記事です。
OSOYOOの学習キットは複数のグレードがあり、僕が購入したのは「LACC2006AD」という型番のもので低価格帯のグレードのものになります。

公式マニュアル LACC2006AD

OSOYOOはキットの内容を時々変更しているようで、僕が購入したものは品切れになっています。上記のリンクは僕が購入したキットに構成が近い製品です(やや豪華版)

他のレッスンの内容を知りたい場合は、下記のリンク先にまとめていますので、そちらを参照してください。

Arduino互換のスターターキットを買ってみた

Arduinoを触ってみたいけど、何を買ったらいいのか、なにから始めればいいのかわかならない!調べて見れると便利でお得な学習…

実験する内容

今回はポテンションメータを使って以下の2つのことを行います

  • LEDの点滅速度を制御する
  • LEDの輝度を制御する

ポテンショメータとは?

ポテンショメータとは可変抵抗器の一種でいわゆるボリュームのことです。ツマミを回すことで抵抗値を変更させることが出来る。ツマミの位置(回転角)に応じた処理をしたい場合に用います。

ポテンショメータ外観と回路図

ポテンショメータには図のように端子が3つあります。ツマミを回すことでB端子の位置が変化しA-B間の抵抗値が変化する仕組みです。例えば10kオームのポテンショメータでツマミを全体の50%回したとすると抵抗値は5kオームになるわけです。

端子が3つある理由

抵抗値を変化させるだけであればC端子は不要に思いますが、マイコンに接続する場合には3つの端子が必要です。

回転角度による分圧

先ほど説明した通り50%の位置ではA-B間の抵抗値は半分の5kオームになりますが、この時B-C間の抵抗値も5kオームになっていることがポイントです。つまり図のように2つの抵抗の間からB端子が出ている状態になっています。もし電源電圧5Vであれば両方とも5kオームなのでA-B間、B-C間の端子間電圧はともに2.5Vに分圧されます。

B端子をArduinoにインプットするので、このB-C間の電圧がインプット電圧となります。

図の下側のように70%まで回転させた場合だとA-B間は7kオーム、B-C間は3kオームとなるのでインプットされる電圧は1.5Vとなります。

このようにツマミを右に回すほどにB-C間の端子間電圧は下がっていきます。

つまりポテンショメータに3つの端子がある理由は可変式の分圧器として動作させるためです。これによりマイコンにツマミの角度に応じた電圧をインプットできるようになります。

ポテンショメーターでLEDの点滅速度を制御する

まずはポテンショメータを使ってLEDの点滅速度を制御してみます。

回路図と結線

ポテンショメータ回路図

ポテンショメータの中央の端子(B)をアナログ入力A0に、左端子(A)を5V、右端子(C)はGNDへ接続します。今回の場合は左右を間違えても動きが逆になるだけですので大した問題はないです。

結線図

スケッチ


int potPin = A0;
int ledPin = 9;
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  val = analogRead(potPin);    
  digitalWrite(ledPin, HIGH);  
  delay(val);                  
  digitalWrite(ledPin, LOW);   
  delay(val);                  
}

analogRead

引数に指定したアナログピンの値を読み取ります。digitalReadではONかOFFの2値でしたがanalogReadでは0~1023の1024段階で電圧を読み取ることが出来ます。アナログピンは0~5Vの電圧に対応しています。

つまり1単位は5V÷1024で4.9mVってことね

ツン子

ここでは読み取ったアナログ値をdelayの待ち時間に使用しています。

5Vであれば待ち時間は1023m秒。1Vであれば204m秒となります。つまり電圧が低下に比例して点滅が速くなります。ツマミを右に回すほどに端子間電圧は下がるので、右に回すほど点滅が速くなるということですね。

LEDの明るさを変更する

const int analogPin = A0;
const int ledPin = 9;
int inputValue = 0;
int outputValue = 0;

void setup()
{
}

void loop(){
  inputValue = analogRead(analogPin);
  outputValue = map(inputValue,0,1023,0,255);
  analogWrite(ledPin,outputValue);
}

次はポテンショメータのツマミの位置に合わせて明るさが変化するスケッチです。

回路自体の変更はありません。

LEDの明るさを変化させるにはPWM制御を利用すればいいけど、PWM制御は0~255までの256段階です。そのためアナログ値をそのまま利用することは出来ないのでmap関数を使用します

map()

この関数は値の割付けを自動で行ってくれる関数です。例えばアナログ値が500だったとします。これを0~255の範囲に割り付けるといくつになるか?ということを計算してくれる関数です。

計算としてはさほど難しいことをしているわけではないですが、最小値が0でなくても良いので使い勝手が良いと思います。

引数は左から

  • 元の最小値
  • 元の最大値
  • 新しい最小値
  • 新しい最大値

となっています。

このスケッチを実行しツマミを回すとLEDの明るさが変化することが確認できるはずです。

Arduinoを始めるなら学習キットがおすすめ

学習キットならArduino互換ボード本体に加えてLEDやモーターが付いてくるのですぐに実験&学習がスタートできる。

僕が買ったのはOSOYOO製のセットで比較的シンプルなセット。※セット内容は常に変動するため購入当時と同じものは見つからなかった。リンク先は僕が購入したものになるべく近いものを選んでみた。

OSOYOO学習キットのまとめ記事

Arduino互換のスターターキットを買ってみた

Arduinoを触ってみたいけど、何を買ったらいいのか、なにから始めればいいのかわかならない!調べて見れると便利でお得な学習…

まとめ記事ではこの学習キットを選んだ理由や各レッスンの概要とレッスン毎の詳細記事へのリンクをまとめているので、Arduinoを始めたいという人の参考になればと思う