[Arduinoのすすめ][ArduinoConf][ArduinoMonitor][iArduino]

ArduinoでセンサIC(アナログ電圧出力)を使う(おおまかな話)

アナログ電圧出力のICは、温度や加速度といった物理量を電圧に変換して出力します。 Arduinoにはアナログ電圧入力がありますから、簡単に使うことが出来ます。 以下では、正確に電圧を求めるための説明は省いて簡単に使って見る方法を説明します。

アナログ電圧入力ピンに入力できる電圧の範囲は 0[V]からArdunoの電源の電圧までです。5[V]で動作している Arduino Uno では5[V]まで、3.3[V]で動作している場合には3.3[V]までです。 この範囲外の電圧を直接入力することは出来ません。 とりあえずは、ICの電源が Arduino の電源と同じでよいなら気にしなくて良いでしょう。

analogRead関数

アナログ電圧を入力できるピンは A0 から A5 です(Arudino Unoの場合)。 センサの電圧出力のピンと A0 から A5 のどれかをつなぎます。 そしてanalogRead関数を使って値を読みます。たとえばA0ピンなら

        a = analogRead(A0);
とすると読んだ値が a に代入されます。またanalogReadの値を使って条件分岐する
        if (analogRead(A0)>100) {
                digitalWrite(LED, HIGH);
        } else {
                digitalWrite(LED, LOW);
        }
といった使い方が出来ます。 値は入力の電圧に比例しています。0[V]のとき0で、マイコンの電源電圧(5Vもしくは3.3V)のとき1023になります。たとえば、マイコンの電源電圧とAREFが5[V]のときに、ピンの電圧が2.5[V]なら、
2.5[V]÷5[V]×1024 = 512
になります。上の例のように電圧の大小で条件分岐をするなら、あらかじめ、この式を使って if 文の閾値(上記では100)を求めておきます。

電圧を求める

上記とは逆に、analogReadの返す値から電圧を求めるには、

512/1024*5[V] = 2.5[V]
とすればよいと分かります。Arduinoは小数点以下の計算があまり得意ではありません。 また int では大きな値の計算が得意ではありません。そこで電圧の10倍を求めるなら、 long型を使い、
        long a;
        a = analogRead(A0);
        a = a*50/1024;
などとします。

温度などに換算する

ナショナルセミコンダクタの温度センサLM35を使う場合を考えてみます。 LM35は10.0[mV/℃](=0.0100[V/℃])で温度を電圧に変換して出力するICです。25℃なら、

0.0100[V/℃]×25[℃]=250[mV]=0.25[V]
を出力します。これをArduinoのA0ピンに直接つなぎanalogRead関数で値を読むと
0.25[V]÷5[V]×1024 = 51 {=analogRead(A0)}
なので 51 となります。これから温度の10倍の値に換算すること(25℃のときに250)を考えます。
(0.0100[V/℃]×T[℃])÷5[V]×1024 = analogRead(A0)
ですから、式を変形して
T = analgoRead(A0)×5÷1024÷0.0100
  = analgoRead(A0)×5×100÷1024
で温度[℃]は求められ、温度の10倍は
10T = analgoRead(A0)×5×1000÷1024
    = analgoRead(A0)×5000÷1024
つまり
  long t = analogRead(A0)*5000/1024;
で求められます。


Arduinoのすすめ
Copyright (c) 2013, Noriaki Mitsunaga