David Lin

David Lin

一個軟體工程師的隨意筆記

13 Jul 2021

37 Sensors Kit - 001 溫度感測器

這次使用 DS18B20 溫度感測 IC 測量溫度,測量範圍為 -10 C 到 +85 C。我不禁讚嘆半導體技術之進步,用很小的 IC 就可以做好溫度測量,不像以前那樣需要接熱敏電阻與一狗票東西。

Overview

外觀看起來真的很像電晶體,只有三隻接腳:

pinout

PinDescription
GNDGround
DQData In/Out
VDDPower Supply (3.0V ~ 5.5V)

咦,訊號接腳只有一條,而且還是可以 IN/OUT,我蠻好奇要怎麼做訊號同步… 這個通訊協定叫做 1-Wire,可以傳輸 CLK 與 DATA,但速率會比 I2C 與 SPI 慢很多。 另一個特點是可以做到不用透過額外的 VDD 供應電力,只要由訊號線供應電力就好了(會整合一個電容來實現)。

安裝 Libraries

在這裡已經有別人寫好的 Arduino Libraries,所以不用自己重新發明輪子。 首先安裝所需要的 Libraries,這次我不用透過 Arduino IDE 的 Library Manager, 而是自己從 Github 上抓下來,安裝到正確的位置去。

# 切換到 Arduino Library 所在的資料夾 (依系統與設定而異)
# 建議去官網文件看看 https://www.arduino.cc/en/guide/libraries
cd ~/Documents/Arduino/libraries
# 下載 OneWire Library
git clone git@github.com:PaulStoffregen/OneWire.git
# 下載 DS18B20 Library
git clone git@github.com:matmunk/DS18B20.git

連接 Arduino Board

  1. GND 接到 Arduino 上的 GND pin
  2. DQ 接到 Arduino 上的 D2 pin
    • 注意 digital pin 必須有 pull-up resistor
    • 可以自己接一個 4.7K 電阻
  3. VDD 接到 Arduino 上的 5V pin

然而,因為 KY-001 模組的接腳並不是照著上述順序排列, 而是照著 GND, VCC, DQ 排列 (從 -S), 原本的說明書太爛並沒有清楚畫出接腳的定義,害我接錯而燒壞了 IC, 而且是看了 ArduinoModules.info 才知道接錯…

◢▆▅▄▃ 崩╰(〒皿〒)╯潰▃▄▅▆◣

我後來直接買一個新的 IC,接法如下:

circuit

其中 S 代表訊號端,要接上一個 4.7K pull-up 電阻。

photo

執行程式

在 Arduino IDE 的選單上打開範例 File/Examples/DS18B20/Alarm

screenshot

然後把範例程式碼編譯上傳到 Arduino 上去, 並且打開 Tools/Serial Monitor 看看它的 print 輸出:

Alarm Low: 20 C
Alarm High: 25 C
Temperature: 28.12 C

看來有成功把溫度讀出來了,我用手捏那個 IC 就可以看到溫度持續上升到體溫。

References

comments powered by Disqus