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の確度はここまでありません。あくまでも計算値です。
シリアルモニタを閉じて、メニュー->ツールからシリアルプロッタを開きます。