「Arduino Mega 2560 LESSON:23 LCD1602 LCDモジュールとThermometer」の版間の差分

提供:yonewiki
編集の要約なし
編集の要約なし
230行目: 230行目:


\[ T=\frac1{A+BL+CL^3} \]
\[ T=\frac1{A+BL+CL^3} \]
今回のプログラムにある、
\[
\begin{aligned}
A&=0.001129148\\
B&=0.000234125\\
C&=0.0000000876741
\end{aligned}
\]
という値は、サーミスタの抵抗値と温度の関係を表すための近似係数です。


 
 


[[Arduino Mega 2560]]に戻る。
[[Arduino Mega 2560]]に戻る。

2026年11月2日 (月) 23:46時点における版

Arduino Mega 2560に戻る。

概要

 ThermometerとLCD1602 LCDモジュールを接続するレッスンです。


 完成図は以下のとおりです。


完成図


 PCB図は以下のようなものです。


PCB図


 3Dプレビュー図は以下のようなものです。


3Dプレビュー図


 コードは以下のようなものです。

//www.elegoo.com
//2016.12.9

#include <LiquidCrystal.h>
int tempPin = 0;
//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup()
{
  lcd.begin(16, 2);
}
void loop()
{
  int tempReading = analogRead(tempPin);
  // This is OK
  double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK );       //  Temp Kelvin
  float tempC = tempK - 273.15;            // Convert Kelvin to Celcius
  float tempF = (tempC * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
  /*  replaced
    float tempVolts = tempReading * 5.0 / 1024.0;
    float tempC = (tempVolts - 0.5) * 10.0;
    float tempF = tempC * 9.0 / 5.0 + 32.0;
  */
  // Display Temperature in C
  lcd.setCursor(0, 0);
  lcd.print("Temp         C  ");
  // Display Temperature in F
  //lcd.print("Temp         F  ");
  lcd.setCursor(6, 0);
  // Display Temperature in C
  lcd.print(tempC);
  // Display Temperature in F
  //lcd.print(tempF);
  delay(500);
}

NTCサーミスタの抵抗値は近似的に次の式で表せます。

\[ R=R_0 e^{B\left(\frac1T-\frac1{T_0}\right)} \]


記号     意味
R        現在の抵抗値
R_0      基準温度での抵抗値
T        現在の絶対温度(K)
T_0      基準絶対温度(K)
B        サーミスタ固有のB定数
e        自然対数の底(約2.71828)


まず、両辺を \(R_0\) で割ります。


\[ \frac{R}{R_0}=e^{B\left(\frac1T-\frac1{T_0}\right)} \]


両辺の自然対数を取ると、


\[ \ln\left(\frac{R}{R_0}\right)=B\left(\frac1T-\frac1{T_0}\right) \]


指数関数が消えました。


さらに温度 \(T\) について整理すると、


\[\boxed{ T=\frac{1}{\frac1{T_0}+\frac1B\ln\left(\frac{R}{R_0}\right) }} \]


これで、抵抗値から温度を計算できるようになりました。


より柔軟に温度特性を近似できるSteinhart–Hart式です。


\[ \frac1T=A+B\ln(R)+C[\ln(R)]^3 \]


この式でも、抵抗値の自然対数が重要な役割を果たします。


サーミスタのB定数式をもう一度見てみましょう。


\[ R=R_0 e^{B\left(\frac1T-\frac1{T_0}\right)} \]


ここで両辺の自然対数を取ります。


\[ \ln R=\ln\left(R_0 e^{B\left(\frac1T-\frac1{T_0}\right)}\right) \]


ここで、対数の重要な性質、


\[ \boxed{\ln(ab)=\ln a+\ln b} \]


を使うと、


\[ \ln R=\ln R_0+\ln\left(e^{B\left(\frac1T-\frac1{T_0}\right)}\right) \]


となります。さらに、


\[ \ln(e^x)=x \]


という性質を使うことで、


\[ \boxed{\ln R=\ln R_0+B\left(\frac1T-\frac1{T_0}\right)} \]


となります。


① 抵抗値 \(R\) を求める


\[ R=10000\left(\frac{1024}{\mathrm{tempReading}}-1\right) \]


② 抵抗値の自然対数 \(L\) を求める


\[ L=\ln R \]


③ 絶対温度 \(T\) を求める


\[ T=\frac1{A+BL+CL^3} \]


今回のプログラムにある、


\[ \begin{aligned} A&=0.001129148\\ B&=0.000234125\\ C&=0.0000000876741 \end{aligned} \]


という値は、サーミスタの抵抗値と温度の関係を表すための近似係数です。

 

Arduino Mega 2560に戻る。