ARDUINO, 進階篇

【Arduino進階】 第一篇:溫度感測器 DS18B20

實驗說明:

  • DS18B20是很常用且易用的溫度感測元件,溫度感測範圍-55°C到+125°C,在元件上的接線也非常簡單(全部只要三根線) ,它使用1-Wire(One-Wire)資料傳輸協定,顧名思義,資料傳輸只需一條線即可,所以在一般狀況下,需要三個腳位(電源、資料、接地) 。
  • 1-Wire資料傳輸協定是Maxim子公司達拉斯半導體的專利技術,僅用單一訊號線就可像I²C、SPI一樣,傳輸時鐘(clock)又傳輸資料(data),並且資料傳輸是雙向的。1-Wire使用較低的資料傳輸速率,通常是用來溝通小型裝置,如數位溫度計( DS18B20 )。在每個1-Wire裝置擁有一個序號,所以在同一條匯流排上連接多個1-Wire裝置仍可分別彼此。

 

 

材料:

  • Arduino Uno R3
  • USB 傳輸線
  • DS18B20
  • 4.7kΩ直插電阻
  • 麵包板
  • 麵包板跳線

購買網址:https://shop.mirotek.com.tw/product/400098/

購買網址:https://shop.mirotek.com.tw/product/100030/

 

接線說明:

 

安裝程式庫:

解壓縮後得到目錄OneWire,放到Arduino目錄下的libraries目錄裡(媒體櫃/文 件/Arduino/libraries/OneWire )。

  • 下載DallasTemperature程式庫

點選草稿碼 → 匯入程式庫 →→ 程式庫管理員,會出現已安裝或可以安裝的程式庫清單,搜尋『DallasTemperatur』進行安裝即可。

 

程式:

//注意:此程式只適用於一台Arduino連接一個DS18B20的狀況
#include <OneWire.h> 
#include <DallasTemperature.h> 

#define DQ_Pin 2  

OneWire oneWire(DQ_Pin);
DallasTemperature sensors(&oneWire);

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

void loop(void)
{
  Serial.print("Temperatures --> ");
  sensors.requestTemperatures();
  Serial.println(sensors.getTempCByIndex(0));
  delay(2000);
}

 

程式說明:

  • 第 7 列首先將引用程式庫,並設定DQ 數位接口為pin 2。
  • 第 8 列建立 DS18B20 物件。
  • 第 19 列要求Pin上所有的DS18B20進行溫度轉換。
  • 第 20 列取得溫度讀數(攝氏)並輸出,參數0代表匯流排上第0個1-Wire裝置。

由於 1–Wire Bus 上可以有超過一顆以上的 DS18B20,每一顆 DS18B20 在出廠前都會在晶片上設定一個獨一無二的序號,因此接在同一個 Bus 上的 DS18B20 還是可以被 MCU 識別為不同的 IC,只要改變讀取指令中的index,就能讀取不同顆 DS18B20 的溫度。

 

輸出結果如下,可拿吹風機吹向DS18B20讓溫度上升。

 

 

 

相關文章