Basic Tutorial for Arduino, 感測器 Sensor, 進階篇

【Arduino進階教學】LM35 溫度感測器實作:原理、接線與電壓轉換公式完整解析

black and silver digital device

在單片機與 Arduino 專案中,LM35 溫度感測器 是一款非常經典且易於使用的類比溫度感測元件。與需要複雜通訊協定的數位感測器(如 DS18B20)不同,LM35 直接輸出與攝氏溫度成正比的線性電壓訊號,非常適合用來學習 Arduino 的 類比輸入(Analog Input / ADC) 應用。

本篇文章將手把手帶你了解 LM35 的運作原理,並提供完整的接線說明與 Arduino 程式碼。

什麼是 LM35 溫度感測器?

LM35(常見封裝版本為 LM35DZ)是一款精密的攝氏溫度感測器,其輸出電壓與攝氏溫度(°C)成 絕對線性關係

LM35 核心規格與特點:

  1. 線性輸出: 溫度每升高 ,輸出電壓增加 (即 )。

  2. 零度基準: 時,輸出電壓為

  3. 工作電壓廣: 支援 DC 供電(常用 )。

  4. 測量範圍與精度: 典型量測範圍為 ,在室溫 下精度高達

  5. 低功耗: 工作電流小於 ,自我發熱極低(在靜止空氣中小於 )。

LM35 溫度計算公式推導

Arduino Uno 的類比輸入腳位(A0~A5)具有 10 位元(10-bit)的模數轉換器(ADC),能將 的電壓轉為 的數位數值:

  1. 讀取電壓值(V):

  2. 換算為毫伏特(mV):

  3. 計算攝氏溫度(°C): 由於每 ,因此:

實驗所需硬體材料

進行本實作前,請準備以下電子零件(可前往商店選購):

  • Arduino Uno R3 開發板 x 1

  • USB 傳輸線 x 1

  • LM35 / LM35DZ 溫度感測器 x 1

  • 麵包板與杜邦跳線 若干

🛍️ 準備好你的硬體工具了嗎?

推薦選購:點擊連結可直接前往商城選購

 

硬體電路接線說明

將 LM35 的 有字平坦面(TO-92 封裝)朝向自己,腳位由左至右依序為 Pin 1 (VCC)Pin 2 (Out)Pin 3 (GND)

LM35 腳位功能描述Arduino Uno 接線位置
Pin 1(左)電源 VCC ()5V 引腳
Pin 2(中)類比訊號輸出 (Vout)A3(或任意類比引腳 A0~A5)
Pin 3(右)接地 GNDGND 引腳

⚠️ 重要提醒: 請務必確認接線方向!如果 VCC 與 GND 接反,LM35 會迅速發熱甚至燒毀。

 

完整 Arduino 程式碼範例

這裡提供兩種程式寫法:一種為精準浮點數寫法(推薦),另一種為使用位移運算優化的高效寫法

推薦寫法:高精度浮點數讀取範例

// 定義 LM35 接在 Arduino 的類比腳位 A3
const int lm35Pin = A3;

void setup() {
  // 初始化序列埠通訊,鮑率設定為 9600
  Serial.begin(9600);
  Serial.println("LM35 溫度感測器初始化完成!");
}

void loop() {
  // 讀取 A3 腳位的類比數值 (0 ~ 1023)
  int val = analogRead(lm35Pin);

  // 根據公式計算攝氏溫度 (5.0V / 1024 / 0.01V)
  float tempC = (val * 500.0) / 1024.0;

  // 輸出結果至序列埠監控視窗
  Serial.print("目前環境溫度: ");
  Serial.print(tempC, 1); // 保留一位小數
  Serial.println(" °C");

  // 每 0.5 秒更新一次資料
  delay(500);
}

 

 

進階寫法:位移運算優化寫法(適合記憶體受限專案)

利用 的位移計算,可在不調用浮點數運算庫的情況下快速算出整數溫度:

void setup()
{
  Serial.begin(9600);
}

void loop()
{ 
  unsigned int val; //定義變數val
  unsigned int dat;//定義變數dat
  val=analogRead(3);//將val設置為讀取到的A3的數值
  dat=(125*val)>>8;//計算當前溫度數字dat
  Serial.print("Temp:"); //顯示 Temp: 
  Serial.print(dat);  //顯示計算的温度值
  Serial.println("C");//顯示C,並自動換行
  delay(500); //延遲0.5S
}

成果驗證與測試

  1. 將 Arduino Uno 經由 USB 線連接至電腦並上傳程式。

  2. 開啟 Arduino IDE 的 序列埠監控視窗(Serial Monitor),並選擇 9600 baud

  3. 視窗會每隔 0.5 秒印出當前環境溫度。

  4. 測試方式: 用手指輕輕按壓 LM35 表面,體溫會使感測器輸出電壓上升,序列埠呈現的溫度數值便會隨之升高。

常見問題與除錯(FAQ)

Q1:為什麼讀取到的溫度數值一直浮動跳動?

類比訊號容易受到電源噪訊影響。建議處理方式:

  1. 多重採樣取平均值: 在程式中連續讀取 10 次並計算平均值。

  2. 加上濾波電容: 在 LM35 的 VCC 與 GND 之間並聯一個 (104)瓷片電容。

Q2:LM35 與 DS18B20、DHT11 有什麼不同?該如何選擇?

  • LM35: 類比輸出,不需安裝第三方程式庫,反應快速,適合基礎學習與簡單溫度監控。

  • DS18B20: 數位單線(1-Wire)傳輸,抗干擾能力強,支援防水探頭與多點串接。

  • DHT11: 同時支援溫度與濕度量測,但溫度精確度較低。

延伸學習與推薦教學

 

 

相關文章