今回はサーミスタのサンプルプログラムです。
サーミスタは温度によって抵抗値が変化する半導体です。
使用するのはNTCサーミスタです。周辺温度が高くなると抵抗値が減少します。
サーミスタの抵抗値は次の計算式で求めることができます。
Rt=R*EXP[B*(\frac{1}{T2}-\frac{1}{T1})]
Rt・・・ T2温度下でのサーミスタの抵抗値
R ・・・ T1温度(273.15+25℃)下でのサーミスタの抵抗値(10KΩ)
B ・・・ サーミスタの固有値(3950)
回路上ではR(10KΩ)とサーミスタを直列でつないで、その間の電圧を測ることでサーミスタの抵抗値を求めることができます。
最終的にT2の値を求める式は次のようになります。
T2=1/(\frac{1}{T1}+ln(\frac{Rt}{R})/B)
ハードウェア
・Freenove ESP32-S3-WROOM Board or Espressif ESP32-S3-DevKitC
・NTCサーミスタ
・ブレッドボード
・10kΩ レジスタ
・ジャンパーワイヤ
配線
導入パッケージ
・nanoFramework.System.Device.Adc
・nanoFramework.System.Math
プログラミング
Program.cs
using System;
using System.Device.Adc;
using System.Diagnostics;
using System.Threading;
namespace ESP32S3_Thermistor
{
public class Program
{
public static void Main()
{
AdcController controller = new AdcController();
AdcChannel channel = controller.OpenChannel(0);
while (true)
{
int value = channel.ReadValue();
double voltage = value / 4095.0 * 3.3;
double rt = 10 * voltage / (3.3 - voltage);
double tempk = (1.0 / (1.0 / (273.15 + 25.0) + (Math.Log(rt / 10.0)) / 3950.0));
double tempc = tempk - 273.15;
Debug.Write("value = " + value.ToString());
Debug.Write(", voltage = " + voltage.ToString("F2"));
Debug.WriteLine(", temp = " + tempc.ToString("F2"));
Thread.Sleep(1000);
}
}
}
}
プログラムを実行するとデバッグウィンドウにアナログ値、電圧、温度が表示されます。
サーミスタに指を当てて温めると電圧とともに温度が上昇するのを観察できます。