Arduino DS18B20溫度傳感器測溫實(shí)驗(yàn)
1.1 介紹:?
這是一個(gè)常用的18B20溫度傳感器,它主要采用DS18B20傳感器元件。該元件是美國DALLAS公司生產(chǎn)的總線數(shù)字溫度感測元件。它支持多點(diǎn)組網(wǎng)功能,即多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)測溫。DS18B20 的核心功能是直接數(shù)字測溫,分辨率是 9,10,11,12 位,用戶可配置的,對(duì)應(yīng)的溫度分度分別是 0.5°C, 0.25°C, 0.125°C, 和0.0625°C,上電后的默認(rèn)分辨率是 12 位。它的測量結(jié)果以9-12位數(shù)字量方式串行傳送,測溫范圍是55℃~+125℃。
1.2 模塊相關(guān)資料:
程序例程前往下載鏈接:https://sourl.cn/WMrUjV

1.3連接圖 ?

1.4測試代碼 ????
Arduino IDE測試程序
#include <OneWire.h>
int DS18S20_Pin = 3; //定義數(shù)字口3
OneWire ds(DS18S20_Pin);
void setup(void) {
??Serial.begin(9600); //設(shè)置波特率
}
void loop(){
??float temperature = getTemp(); //調(diào)用函數(shù)計(jì)算溫度值
??Serial.println(temperature); //顯示溫度值,并自動(dòng)換行
??delay(100); //延遲0.1S?
?
}
float getTemp() {
??//returns the temperature from one DS18S20 in DEG Celsius
??byte data[12];
??byte addr[8];
??if (!ds.search(addr)) {
????//no more sensors on chain, reset search
????ds.reset_search();
????return -1000;
??}
??if ( OneWire::crc8(addr,7)!=addr[7]) {
????Serial.println("CRC is not valid!");
????return -1000;
??}
??if ( (addr[0] !=0x10) && (addr[0] != 0x28)){
????Serial.print("Device is not recognized");
????return -1000;
??}
??ds.reset();
??ds.select(addr);
??ds.write(0x44, 1); // start conversion, with parasite power on at the end
??byte present = ds.reset();
??ds.select(addr);
??ds.write(0xBE); // Read Scratchpad??
??for (int i = 0; i < 9; i++) { // we need 9 bytes
????data[i] = ds.read();
??}
??ds.reset_search();
??byte MSB = data[1];
??byte LSB = data[0];
??float tempRead = ((MSB << 8) | LSB); //using two's compliment
??float TemperatureSum = tempRead / 16;
??return TemperatureSum;
}
Mixly測試程序
?

scartch測試程序
?

1.5測試結(jié)果
按照上圖接好線,燒錄好代碼,上電后,通電后,我們可在軟件串口監(jiān)視器中看到當(dāng)前環(huán)境溫度值,如下圖。

?
?