# Arduino 教學 11:LM35 溫度感測器
> 作者:王一哲
> 日期:2020/11/20
## 元件基本資料
LM35 是一種相當便宜的溫度感測器,從[資料表](https://www.ti.com/lit/ds/symlink/lm35.pdf)中可以看到它又細分為幾個不同的型號,基本上測量範圍是 2°C - 120°C,輸出訊號的電壓值是 10 mV/°C,室溫下測量精度為 ±0.25°C。每面對 LM35 有字的那一面,由左至右的接腳功能分別為**電源**、**訊號**、**接地**,分別將三者接到 Arduino 開發板上的 **5V**、**類比輸入**、**GND**。
<img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/MBWj16I.png">
<div style="text-align:center">LM35 電路圖</div>
<br />
<img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/4SKg88X.jpg">
<div style="text-align:center">LM35 裝置照片</div>
<br />
## 測試用程式碼
```arduino=
#define SENSOR A0
float temp, val;
void setup() {
pinMode(SENSOR, INPUT);
Serial.begin(9600);
Serial.println("t (ms), T(°C)");
}
void loop() {
val = analogRead(SENSOR);
temp = (val/1024.0*5.0)/0.01;
Serial.print(millis());
Serial.print(", ");
Serial.println(temp);
delay(10000);
}
```
<br />
若將 LM35 輸出接腳接到開發板上的 A0,由於使用 analogRead 讀取的數值為 0 - 1023,因此測量數值 val 與攝氏溫度 temp 的換算方法為
$$
temp = (val/1024.0*5.0)/0.01
$$
使用以上的程式碼可以每隔一段時間測量一次溫度,如果配合 putty 這類的軟體將輸出資料存成文字檔,就可以自動測量並記溫度隨時間變化的資料。
<br />
## 測量水溫
若將 LM35 溫度感測器用夾鏈袋包起來,放到熱水裡每隔10秒測量一次溫度,輸出的紀錄檔及測量結果如下。
<img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/KBVgaFH.jpg">
<div style="text-align:center">使用 LM35 測量水溫</div>
<br />
```csv
t (ms), T(°C)
0, 71.29
10000, 71.29
20000, 71.29
30002, 70.80
40002, 70.80
50002, 70.31
60004, 69.82
70004, 69.82
80005, 69.82
90006, 69.34
100006, 69.34
...
```
<br />
<img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/0zebIPq.jpg
">
<div style="text-align:center">水溫 T - 時間 t 關係圖</div>
<br />
## 參考資料
LM35 資料表:https://www.ti.com/lit/ds/symlink/lm35.pdf
---
###### tags:`Physics`、`Arduino`