Arduinoで温度計(LM35DZ)
2011/05/24
ガイガーカウンターもいいところまできたのでpachubeにでも、と思ったのですが知識が足りずまったくうまくいきません…。
百葉箱を目指すべく温度計、湿度計、気圧計、照度計、UV計は先人たちのものを参考に単体動作を一通りすませてありました。
が、ほぼほぼそのまま利用させていただいているため、動作を把握し切れていない部分がほとんど。基本的には後に記載する先人たちの紹介記事のままの内容となりますが、一部加筆修正させていただきながら自分の復習のためにメモしていきます。
まずは基本の温度計。この先LM61CIZに変更しますが、参考にさせていただいている「projects : Biotope」さん・「建築発明工作ゼミ」さんの流れの通りLM35DZを使います。
LM35DZは温度を測ることができるセンサーで、Voutから温度に応じた電圧を出力してくれます。これを換算することで温度を計測することができます。
LM35DZは0℃で0V、1℃当たり10mVの出力が得られます。25℃だと250mV、100℃だと1000mV(1V)の出力が得られます。LM35DZ自体の計測範囲が-55℃~+150℃ですが、氷点下を計るためには負電源が必要であるため(これが理由で後にLM61CIZに変更します)、計測は0℃~100℃までとします。
Arduinoのアナログ入力最大電圧は5V、取得値は0~1023(1024段階)の数値として取得できます。100℃・1Vだと1024/5で0〜203(204段階)となります。つまり、
0℃~100℃[0V~1V] = 0~203
の範囲の値を取得できます。
# 1℃当たりの分解能は約2.048となり、約0.5℃刻みで計測できるということになります。
LM35DZから出力される電圧をxV、Arduinoの基準電圧をv、analogReadで読み取った値をA_valとすると、
xV : v = A_val : 1024
xV = (v * A_val) / 1024
となります。
先にもあったように LM35DZは10mVで1℃であることから、1mV当たり0.1℃となる。これを踏まえ上記のxVから温度を求めると、
℃ = xV * 1000 / 10
= xV * 100
= ((v * A_val) / 1024) * 100
となる。
/* LM35DZを用いた温度測定(0℃~100℃) シリアルモニターに摂氏で表示させる */ int A_inPin = 0; // アナログ入力ピン番号 float A_val; // アナログ入力値(0~203) float tempC = 0; // 摂氏値( ℃ ) void setup() { // シリアル通信速度 Serial.begin(9600); } void loop() { A_val = analogRead( A_inPin ); tempC = ((v * A_val) / 1024) * 100; Serial.println( tempC ); delay(1000); }
これでArduinoに書き込み、シリアルモニターを見ると温度が表示されます。