この投稿は、建築発明工作ゼミ2009 『温度センサ』をもとに、新しく書き直したものです。 |
図1 温度センサ LM35DZ | ||
温度センサ LM35DZを使用し、Arduinoで温度を計測してみます。 温度センサといっても、温度計のように温度を表示してくれるわけではありません。センサの三本足のうち、左側(+Vs)はArduinoの5V電源につなぎ、右側(GND)をArduinoのGNDに接続します。Arduinoにスケッチを送り込んで処理を開始させると、真ん中のVoutから、温度に応じた電圧を出力します。これを温度換算し、Arduino Serial Monitorで表示させてみるということです。 | ||
この温度センサLM35DZは、0℃で0V、1℃当たり10mVの出力が得られます。25℃だと250mV、100℃だと1000mV(1V)の出力が得られます。Arduinoのアナログ入力最大電圧は5Vなので単純計算で500℃まで計測できる計算になりますが、LM35DZ自体の計測範囲が-55℃〜+150℃なので、ここでは余裕をもって、0℃〜100℃までを計測範囲として回路を考えてみます。 まずは図1のような回路を組んでみます。 回路1 | ||
この場合、LM35DZのVoutを直接Analogピンに入れていますから、 0℃で0V、1℃当たり10mV増加 よって、100℃で1V となります。 Arduinoのアナログ入力最大電圧は5V、取得値は0〜1023(1024段階)の数値として取得できます。 100℃・1Vだと 1024 / 5 で0〜203(204段階)。つまり、 0℃ 〜 100℃ [ 0V 〜 1V ] = 0 〜 203.8(Analog入力値) の範囲の値を取得できます。1℃当たりの分解能は約2.048(上記のAnalog入力値は小数で書きましたが、実際には0〜203)。 | ||
| ||
上記のスケッチをArduinoにアップロードして、シリアルモニタで確認してみます。 PCとArduino はUSB で接続した状態で、スケッチを実行させた後にArduino IDE の一番右上の 『Serial Monitor』ボタンをクリックすると、別ウィンドウでシリアルモニタが表示され、スケッチ中の Serial.print()関数で指定した変数の中身が表示されます。 ちなみに、Serial.print()とSerial.println()の違いは、改行するかしないかです。 | ||
温度が一秒毎に出力されています。
xV : 取得した電圧値 aVal : 取得したアナログ値(0〜1023) とすると、 xV : 5V = aVal : 1024 となり、 xV = ( 5V × aVal ) / 1024 これを×100した数値が温度になります。 画像の温度値をみてもらうとわかるように、18.55℃、19.04℃、15.63℃を行ったり来たりしています。この中間の値(例えば15.3℃など)は、計測できても表示はできません。最大1Vを出力する温度センサの値に対して、Arduinoは最大5Vまで感知できます。1Vには204まで、5Vには1023までの値を取得できます。最大1Vまでしか感知しないような回路を組んでいたので、0℃〜100℃までの温度を、たった204段階でしか表現できないことになります。 100℃ / 204 = 0.4901... つまり、取得するアナログ値1は0.49℃単位となるため、18.55℃〜19.04℃の中間の温度は表示できません。もっと精密に温度を計測するには、 0℃〜100℃ 0〜203(204段階)...Arduinoの感知電圧範囲0V〜1V を、 0℃〜100℃ 0〜1023(1024段階)...Arduinoの感知電圧範囲0V〜5V と、アナログ値1に対する分解能を上げてやります。 オペアンプを使って、温度センサの最大出力電圧1Vを5V、五倍に引き上げてみます。 |
1 コメント:
LM35温度センサをキャリブレーションしたいのですが、どういった方法がありますか?
コメントを投稿