DS18B20是常見的溫度感測元件,除了體積小,而且規格也很不錯,檢測溫度範圍:-55℃~+125℃,在-10~+85℃時精度為±0.5℃。更誇張的是,它還有防水的版本,這點就已經打敗天下無敵手了啦!

ds18b20-2.png

在Arduino上使用上也很簡單,它有3根腳,分別是GND、DQ、VDD,GND接GND,DQ是訊號PIN,VDD可接5V,但必須注意的是,DQ腳必須加上4.7K歐姆的電阻才行!

Screenshot 2025-02-12 113030.png

不過這次傑森想讓大家看看防水版本,這可是測量水溫的最佳選擇啊!

Screenshot 2025-02-07 122801.png

購買DS18B20:
https://www.jmaker.com.tw/products/ds18b20-set

感測器前端是一個不銹鋼的部件,尾端有3條線,紅色:VDD,黃色:DQ,黑色:GND,基本上就是DS18B20的三個PIN腳。

如果只是這樣就拿來使用,接法和不防水的版本一模一樣,DQ腳一樣是要接4.7K的電阻。不過這裡有個好東西,就是DS18B20專用的轉接板,它可以直接鎖住3條線,並且在板子上就內建了4.7K的貼片電阻,這樣只要把另3個PIN腳接到UNO板就可以了!

GND >> GND
DAT >> 訊號PIN(本例是接到D4)
VCC >> 5V

ds18b20-1.png

ds18b20-1cd.png

ds18b20-5.png

接下來就可以寫程式囉!首先要安裝兩個函式庫:OneWire和Dallas Temperature。

ds18b20-4.png

因為函式庫已經寫得很完整,所以程式很簡單。只要建立了DallasTemperature物件,就能用getTempCByIndex(0)函式取得攝氏溫度了。


#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(4);  //訊號線接到D4

DallasTemperature sensors(&oneWire); //建立DallasTemperature物件

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

void loop(void){ 

  sensors.requestTemperatures();  //要求測溫
  
  Serial.print("Celsius temperature: "); 
  Serial.println(sensors.getTempCByIndex(0));  //取得攝氏溫度
  delay(1000);
}