2022/02/27

ESP32とMCP9701で温度測定

今回も前回に引続きESP32に挑戦していきます。
今回はスタートブックの3章からです。

書籍に記載あった温度センサは我が家の在庫に無かったので
家にあった似たような温度センサMCP9701を使います。

前回のLED同様にESP32の25Pinに温度センサの出力を接続します。
本来はノイズ対策にコンデンサ0.1μFを挟むべきとのことですが今回は無しです。

作成したコードは以下の通りですが、
スタートブックは温度のみを出力する仕様でしたが、
私はセンサ出力値(AD変換後生値)、センサ電圧値(計算値)、温度(計算値)を出力します。

//ESP32とMCP9701(温度センサ)で温度測定
#define sensor 25 //"sensor"を25に固定

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);   //シリアル通信の初期設定
  while(!Serial);         //シリアル通信が可能になるまで繰り返す
  pinMode(sensor,INPUT);  //sensor(25)を入力モードに切替える

}

void loop() {
  // put your main code here, to run repeatedly:
  int e = analogRead(sensor);   //センサからのアナログ値を読取り
 
  float Vout = 3.3 / 4095 * e + 0.1132;    //補正式から電圧を補正:分解能の読取り最大値 ÷ ESP32の分解能 × センサ入力値 + ESP32の補正値 
 
  float temp = (Vout - 0.5) / 0.01;          //電圧から温度に変換:
 
  Serial.print("V =");
  Serial.println(e);                     //補正前の電圧を出力
  Serial.print("Volt =");
  Serial.println(Vout);                     //補正後の電圧を出力
  Serial.print("tenmp =");
  Serial.println(temp);                     //温度を出力
  delay(1000);

}

コードは以上です。

出力を温度以外にもしたのは、何故か温度が正しく出力させなかったのです。
(-30℃くらい出力されました。。。)

原因はセンサ値から電圧+補正の計算を書籍通り
float Vout = e / 4095 * 3.3 + 0.1132;で実施したところ
何故か計算を実施しなかった点です。
そのため計算式を下記のようのに書換えました。
float Vout = 3.3 / 4095 * e + 0.1132;
順番を変えただけですが、上手くいきました。
なぜでしょうね?
まぁ、動いたからヨシッ!

次回はついにネットワークへの接続に挑戦です。

0 件のコメント:

コメントを投稿

 NT金沢 2023に出展&見学に行きました! 久しぶりの更新です。。。 イメージ書道&あきにゃんさんの作品 書家さんが書かれた作品を3Dプリンタ等した作品。 面白いものから関心するものまで色々あります。 個人的には「頭をひねる」がツボです。 写真では分かりづらいですが、...