【說明】
使用溫度感測器 (DS18B20) 測量周遭環境的溫度。
產品介紹
相信要是我們接觸過 Arduino 那麼對 DS18B20 這款神奇的數字測溫晶片一般都不會陌生吧,它能讓你隨時瞭解你周邊的環境溫度。

Temperture Sensor
由於以往的溫度感測器輸出的是類比量,我們還要增加額外的 A/D 和 D/A 晶片進行轉換,那麼對於 Arduino 外部介面資源並不豐富是一大挑戰同時利用率不高,那麼我們新推出的 DS18B20 Temperature Sensor Module 就很好的解決了這個問題,一線匯流排獨特而且經濟的特點,完全適用 Arduino 平臺,使用戶可輕鬆地組建傳感器網路。
技術參數
- 該模組使用的是單匯流排數位溫度感測器 DS18B20,外界供電電壓範圍為0 V 至 5.5 V,無需備用電源。 測量溫度範圍為-55 ° C 至+125 ℃ , 華氏相當於是67 ° F 到 257° F, -10 ° C 至+85 ° C 範圍內精度為±0.5 ° C 。
- 溫度感測器可程式設計的解析度為 9~12 位元 溫度轉換為 12 位元數位格式最大值為 750 毫秒 ,用戶可定義的非易失性溫度報警設置。
- 每一個 DS18B20 包含一個獨特的序號,多個 DS18b20 可以同時存在於一條匯流排。溫度感測器可同時放置在多個不同的地方檢測溫度。
注意事項
- 由於 DS18B20 和普通的三極管長相相似,我們再使用時千萬要注意不要把它當成了普通三極管使用,以免造成損害;
- 為了防止損壞 DS18B20 而使得它工作不正常,我們應保證其電源線和地線不要接反。
- 相關技術資料中並未提及單匯流排上所能掛 DS18B20 數量多少,但在實際應用中並不是任意多個的,我們要注意。
- 連接 DS18B20 匯流排是有長度限制,在長距離通信中應當考慮匯流排分佈電容和阻抗的影響。
使用說明
找出 DS18B20 Temperature Sensor Module 電源線, 地線和數據線,電源線,地線分連到 Arduino 實驗板的+5V,GND 埠,數據匯流排連至數位埠。
模組功能測試
連接電路非常的簡單,只要連接好模組的電源,地線,再將模組的資料匯流排與 Arduino 數字端 D2 引腳相連便可,連上 USB 資料通信線這樣整個測試電路就完成了,DS18B20 測試結果我們將顯示於序列埠監控視窗。
我們將測試代碼編譯後下載到實驗板上,打開序列埠監控視窗便可知道我們是處在什麼樣的溫度中了,在做實驗時候這裡的氣溫是 29 攝氏度左右,用手摸 DS18B20 以後,可以看到串口通信模組的溫度有明顯變化。
【零件表】
| No. | 零件名稱 | 數量 |
| 1 | 溫度感測器 (DS18B20) | 1 |
【零件接腳】
| No. | 零件接腳 | UNO R3 接腳 |
| 1 | DS18B20 (-) | GND |
| 2 | DS18B20 (+) | Vcc |
| 3 | DS18B20 (S) | D2 |
【按線圖】
本範例採用 Keyes 的轉板模組,直接依上述【零件接腳】接線即可,若你使用 DS18B20 IC 可以下列圖接線(需另接 4.7KΩ 電阻)。

Temperture Sensor
【程式碼】
/*
* 示範溫度感測模組 (DS18B20) 的應用
* 利用模組接收環境溫度,將溫度值顯示於 LCD1602 上。
*/
#include <LiquidCrystal_I2C.h> // 引用 LCD1602_I2C 程式庫
#include <OneWire.h> // 引用 OneWire 程式庫
#include <DallasTemperature.h> // 引用 DallasTemperature 程式庫
#define ONE_WIRE_BUS 2 // 定義 DS18B20 資料腳位(數位腳 D2)
LiquidCrystal_I2C lcd(0x27,16,2); // 定義 LCD 元件(位置 0x27 及 16x2 的顯示)
OneWire oneWire(ONE_WIRE_BUS); // 定義 oneWire 物件類型
DallasTemperature sensors(&oneWire); // 定義溫度感測器物件
// 程式初化設定
void setup(void)
{
lcd.begin(); // 開啟 LCD 元件
lcd.backlight(); // 開啟 LCD 背光
}
// 主程式迴圈
void loop(void)
{
sensors.requestTemperatures(); // 下指令要求取得溫度感測器的溫度值
lcd.setCursor(0, 0); // 設定游標位置
lcd.print("Temp: ");
lcd.print(sensors.getTempCByIndex(0)); // 顯示溫度值
lcd.print(" ");
}



