ESP8266 でIoT その2 温度測定

アナログ入力を使って温度測定

 ESP8266にはアナログ入力端子A0があります。一つだけです。入力電圧範囲は0~1Vです。電源電圧は3.3Vなので、いくつかのマイコン・ボードでは、分圧回路が入っていて、3.3Vを端子につないでも最大約1Vを超えないように制限されています。

 入力電圧が3.3Vとすると、ESP8266 A0は次の電圧が入ります。

  3.3V * 100k/(100k+220k) = 1.031V

アナログ入力のスケッチ

 スケッチ例からAnalogReadSerialを読み込みます。

 ボードの設定は、次のように変更します。

 スケッチでは、初期化部分のシリアルモニタのスピードを9600から115200へ変更します。

アナログ出力の温度センサLM35DZ

 小信号用のトランジスタの形状をした温度センサLM35DZが安価に入手できます。電源電圧が4V以上必要なので、5V電源が取れる環境で利用します。3.3Vしかない場合は、別の温度センサを選びます。マイナスの温度も手軽に測定できるLM60がよいかもしれません。

 LM35DZは、20℃のとき出力は200mVです。21℃では210mVと温度に比例して電圧が変化します。1℃が10mVに対応します。

 次のようにマイコン・ボードに接続しました。LM35DZの文字が見える方向に置いて配線していますが、裏返したほうが配線しやすいです。

 マイコン・ボードへ書き込むボタンをクリックし、書き込みが完了したら、シリアルモニタを開きます。右下のデータ転送速度が9600であれば、115200に変更します。

 このデータは、A-D変換された生データです。入力には分圧回路が入っているので、逆数を掛けます。A-D変換時の基準電圧Vrefは1.00Vです。10ビットなので2^10=1024で値を割ります。10mVが1℃なので、100倍します。順序は入れ替えましたが、温度は下記のプログラムで得られます。

Serial.println(sensorValue*100.0 /0.3125/1024*1.00);

 けれど、抵抗値が回路図通りの値だとは限りません。また、Vrefも1.00ではないかもしれません。実際にセンサの出力電圧をテスタで測り、補正をします。今回使ったボードでは、下記の分圧比にすると、テスタの値とほぼ同じになりました。

Serial.println(sensorValue*100.0 /0.295/1024*1.00);

 実行した様子です。小数点以下2桁を出力していますが、LM35DZの確度はここまでありません。あくまでも計算値です。

 シリアルモニタを閉じて、メニュー->ツールからシリアルプロッタを開きます。