帶有Arduino的DS18B20溫度傳感器程序流程圖和原理

2021-05-2721:06:45帶有Arduino的DS18B20溫度傳感器程序流程圖和原理已關閉評論

 

DS18B20 1-Wire溫度傳感器的原理

DS18B20是由Maxim Integrated(以前的Dallas Semiconductor)生產的數字溫度傳感器。它是市場上最受歡迎的溫度傳感器之一,在較大的溫度范圍(-55°C至+ 125°C)內提供相當高的精度(±0.5°C)。由于傳感器的工作電壓為3.0至5.5 V,因此您可以將其與Arduino(以5 V工作)一起使用,也可以與具有3.3 V GPIO引腳的ESP32和Raspberry Pi等設備一起使用。

該傳感器的主要優點之一是,它僅需要Arduino的一個數字引腳即可進行通信。使用Dallas Semiconductor的傳感器連通的1-Wire??協議。該協議的工作方式與I2C相似,但數據速率較低,范圍更廣。

另一個優點是,每個DS18B20傳感器都有一個唯一的64位串行代碼,該代碼允許多個傳感器在同一1-Wire總線上工作。因此,您可以從僅用一個Arduino引腳連接在一起的多個傳感器讀取數據(請參見下面的代碼示例)。

傳感器的分辨率可以通過編程方式設置為9、10、11或12位。這分別對應于0.5°C,0.25°C,0.125°C和0.0635°C的溫度增量。上電時的默認分辨率為12位。

您可以在下表中找到更多規格。

DS18B20數字溫度傳感器規格

電源電壓3.0至5.5 V
待機電流1微安
有功電流1.5毫安
測量范圍-55°C至+ 125°C(-67°F至+257°F)
精度
(溫度計誤差)
從-10°C到+85°C
為±0.5°C從-30°C到+100°C為
±1°C從-55°C到+125°C為±2°C
解析度9位至12位(可編程)
轉換時間<750毫秒(12位分辨率)
通訊協議1-Wire?總線協議
包裹3針TO-92
制造商Maxim Integrated
成本查看價格

有關更多信息,您也可以在此處查看數據表:

DS18B20傳感器的類型

傳感器通常以三種形式出現。最常見的類型是3引腳TO-92封裝,看起來就像一個晶體管。

 

這種類型的傳感器有時安裝在分線板上,該分線板上可以包括電源LED和所需的4.7kΩ上拉電阻。始終確保檢查PCB上的標記,因為引腳的順序可能因制造商而異。

 

最后,您可以購買已連接電纜的防水探頭型傳感器。如果要測量遠處,水下或地下的物體,則此樣式很有用。

 

請注意,防水傳感器的電纜通常使用PVC護套,因此建議將其保持在100°C以下。


接線–將DS18B20連接到Arduino

將DS18B20連接到Arduino相當容易,因為您只需要連接3個引腳即可。首先將GND引腳接地,并將V?DD引腳連接至Arduino的5 V輸出。

接下來,將中間引腳(DQ)連接到Arduino的任何數字引腳。在這種情況下,我使用了數字引腳2。您還必須在DQ引腳和5 V之間添加一個4.7kΩ的上拉電阻。這將使1-Wire總線的空閑狀態保持高電平。

DS18B20數字溫度傳感器與Arduino的連接接線圖原理圖電路教程
具有Arduino Uno的DS18B20數字溫度傳感器接線圖

下表中也提供了連接。

DS18B20-數字溫度傳感器引腳排列

請注意,當傳感器的平坦側面(上面印有文字)朝向您時,引腳1(GND)是最左側的引腳。

DS18B20數字溫度傳感器連接

DS18B20Arduino的
引腳1(GND)地線
針腳2(DQ)Pin 2 Arduino并通過4.7kΩ電阻器達到5V
PIN 3(V?DD5伏

防水DS18B20傳感器的連接方法相同。但是,導線的顏色可能會因制造商而異。地線(GND)通常為黑色或藍色,電源線(VDD)通常為紅色,信號線(DQ)通常為黃色或白色。如果不確定,我強烈建議您始終檢查傳感器的數據表。

防水DS18B20數字溫度傳感器連接

防水DS18B20Arduino的
黑線(GND)地線
黃線(DQ)Pin 2 Arduino并通過4.7kΩ電阻器達到5V
紅線(V?DD5伏

 


安裝DallasTemperature和OneWire Arduino庫

1-Wire通信協議有些復雜,需要一堆代碼才能解析出該通信。因此,我們將使用Miles Burton的DallasTemperature Arduino庫來簡化這些傳感器的編程。

該庫允許您發出簡單的命令以從傳感器中讀取溫度數據。

您可以在GitHub上找到此庫的源代碼。

要安裝庫,請在Arduino IDE中轉到“工具”>“管理庫”(在Windows上為Ctrl + Shift + I)??。庫管理器將打開并更新已安裝庫的列表。

安裝Arduino庫步驟1打開Library Manager

您可以搜索“?ds18b20?”,并通過Miles Burton查找DallasTemperature庫。選擇最新版本,然后單擊“安裝”。

DallasTemperature庫依賴于您還需要安裝的OneWire Arduino庫。該庫負責1-Wire通信協議。

搜索“ onewire”,然后查找Jim StudtOneWire庫。

 


具有Arduino示例代碼的DS18B20溫度傳感器

使用以下示例代碼,您可以從DS18B20傳感器讀取溫度并將其顯示在串行監視器中。

您可以使用Arduino IDE將示例代碼上傳到?Arduino。

要復制代碼,請單擊代碼字段右上角的按鈕。

/ * DS18B20 1-Wire數字溫度傳感器,帶有Arduino示例代碼。更多信息:https://www.makerguides.com * /
//包括所需的Arduino庫:
#include <OneWire.h>
#include <DallasTemperature.h>
//定義1-Wire總線連接到Arduino的哪個引腳:
#定義ONE_WIRE_BUS 2
//創建一個oneWire類的新實例以與任何OneWire設備通信:
OneWire oneWire ONE_WIRE_BUS ;
//將oneWire引用傳遞給DallasTemperature庫:
達拉斯溫度傳感器&oneWire ;
無效設置(){
//以9600的波特率開始串行通信:
序列號。開始9600 ;
//啟動庫:
傳感器。開始();
}
無效循環(){
//向總線上的所有設備發送命令以執行溫度轉換:
傳感器。requestTemperatures ();
//獲取以攝氏度為單位的溫度以獲取設備索引:
浮動溫度=傳感器。getTempCByIndex 0 ; //索引0指向第一個設備
//獲取以華氏度為單位的溫度以獲取設備索引:
float tempF =傳感器。getTempFByIndex 0 ;
//在串行監視器中以攝氏度為單位打印溫度:
序列號。打印“溫度:” ;
序列號。打印tempC ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。打印“ C |” ;
//以華氏度打印溫度
序列號。打印tempF ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。println “ F” ;
//等待1秒鐘:
延遲1000 ;
}

您應該在“串行監視器”中看到以下輸出(Ctrl + Shift + M)。

串行監視器輸出

確保串行監視器的波特率也設置為9600。

代碼如何工作

第一步是包括所需的Arduino庫:

//包括所需的Arduino庫:
#include <OneWire.h>
#include <DallasTemperature.h>

接下來,我定義了傳感器的DQ引腳連接到Arduino的哪個引腳。語句#define可用于為常數指定名稱。編譯程序時,編譯器將使用定義的值替換對此常量的所有引用。因此,在您提到的所有地方ONE_WIRE_BUS,編譯程序時,編譯器都會將其替換為值2。

//定義1-Wire總線連接到Arduino的哪個引腳:
#定義ONE_WIRE_BUS 2

此后,我創建了OneWire類的新對象,并將DQ引腳傳遞給其構造函數。您還需要創建DallasTemperature類的對象,并將oneWire對象作為參數傳遞。

請注意,我將DallasTemperature對象稱為“傳感器”,但您也可以使用其他名稱。

OneWire oneWire ONE_WIRE_BUS ;
達拉斯溫度傳感器&oneWire ;

在代碼的設置部分,我們以9600的波特率開始串行通信。接下來,我使用函數初始化總線begin()

無效設置(){
//以9600的波特率開始串行通信:
序列號。開始9600 ;
//啟動庫:
傳感器。開始();
}

在代碼的循環部分,我們從總線上所有傳感器的命令開始,開始溫度轉換。

//向總線上的所有設備發送命令以執行溫度轉換:
傳感器。requestTemperatures ();

接下來,我使用這些函數getTempCByIndex(deviceIndex)getTempFByIndex(deviceIndex)分別獲取以攝氏度和華氏度為單位的溫度。在這種情況下,我們只有1個傳感器連接到總線。因為計數從零開始,所以我將傳感器的索引設置為0。

//獲取以攝氏度為單位的溫度以獲取設備索引:
浮動溫度=傳感器。getTempCByIndex 0 ; //索引0指向第一個設備
//獲取以華氏度為單位的溫度以獲取設備索引:
float tempF =傳感器。getTempFByIndex 0 ;

最后,溫度在串行監視器中打?。?/p>

//在串行監視器中以攝氏度為單位打印溫度:
序列號。打印“溫度:”
序列號。打印tempC ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。打印“ C |” ;
//以華氏度打印溫度
序列號。打印tempF ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。println “ F”

由于12位模式下的溫度轉換最多需要750 ms,因此我在每次測量之間增加了1秒的延遲。


在Arduino上使用多個DS18B20傳感器

正如我在簡介中提到的那樣,您可以僅使用Arduino的一個引腳就可以從多個DS18B20傳感器讀取溫度。您可以在下面找到兩個示例代碼。在第一個示例中,您可以通過連接的傳感器的索引讀取溫度。因為所有傳感器都連接到相同的1-Wire總線,所以第一個傳感器的索引為0,第二個索引為1,依此類推。

在第二個示例中,我將向您展示如何讀取每個傳感器的唯一64位地址。然后可以使用該地址單獨讀取每個傳感器。

接線–將多個DS18B20傳感器連接到Arduino

將多個DS18B20傳感器連接到Arduino就像連接一個一樣簡單。所有傳感器都并聯連接,即所有相同的引腳都連接在一起。就像以前一樣,GND引腳接地,V?DD引腳連接到5 V,DQ引腳連接到Arduino的引腳2。不要忘記DQ引腳和5 V之間的4.7kΩ上拉電阻。

請注意,我使用了一塊面包板將所有引腳連接在一起。如果您不熟悉面包板的工作原理,請在此處找到說明。

多個DS18B20 1-Wire數字溫度傳感器連接到Arduino

多個帶Arduino示例代碼的DS18B20傳感器

在下面的示例中,您可以按索引讀取每個傳感器的溫度,并將其顯示在串行監視器中。

/ *多個帶Arduino示例代碼的DS18B20 1-Wire數字溫度傳感器。更多信息:https://www.makerguides.com * /
//包括所需的Arduino庫:
#include <OneWire.h>
#include <DallasTemperature.h>
//定義1-Wire總線連接到Arduino的哪個引腳:
#定義ONE_WIRE_BUS 2
//創建一個oneWire類的新實例以與任何OneWire設備通信:
OneWire oneWire ONE_WIRE_BUS ;
//將oneWire引用傳遞給DallasTemperature庫:
達拉斯溫度傳感器&oneWire ;
int deviceCount = 0;
浮動溫度
浮動溫度
無效設置(){
//以9600的波特率開始串行通信:
序列號。開始9600 ;
//啟動庫:
傳感器。開始();
//找到總線上的設備:
序列號。println “定位設備...” ;
序列號。打印“找到” ;
deviceCount =傳感器。getDeviceCount ();
序列號。打印deviceCount ;
序列號。println “設備” ;
}
無效循環(){
//向總線上的所有設備發送命令以執行溫度轉換:
傳感器。requestTemperatures ();
//顯示每個傳感器的溫度
for int i = 0; i < deviceCount; i ++ {
序列號。打印“傳感器” ;
序列號。打印i + 1 ;
序列號。打印“:” ;
tempC =傳感器。getTempCByIndex i ;
tempF =傳感器。getTempFByIndex i ;
序列號。打印tempC ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。打印“ C |” ;
序列號。打印tempF ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。println “ F”
}
序列號。println ();
延遲1000 ;
}

串行監視器中的輸出應如下所示:

多個DS18B20溫度傳感器串行監控器輸出
多個DS18B20傳感器串行監視器輸出

代碼如何工作

此示例中的代碼與之前的代碼基本相同。

在設置部分,我添加了一個額外的功能,該功能可以計算連接到1-Wire總線的設備數量。

//找到總線上的設備:
序列號。println “定位設備...” ;
序列號。打印“找到” ;
deviceCount =傳感器。getDeviceCount ();
序列號。打印deviceCount ;
序列號。println “設備”

在代碼的循環部分中,我使用了for循環來循環遍歷代碼的一部分,該部分通過其索引為連接到總線的每個傳感器獲取溫度。

//顯示每個傳感器的溫度
for int i = 0; i < deviceCount; i ++ {
序列號。打印“傳感器” ;
序列號。打印i + 1 ;
序列號。打印“:” ;
tempC =傳感器。getTempCByIndex i ;
tempF =傳感器。getTempFByIndex i ;
序列號。打印tempC ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。打印“ C |” ;
序列號。打印tempF ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。println “ F” ;
}

 


按地址讀取傳感器

為了按傳感器的單個地址讀取傳感器,我們首先需要知道每個傳感器的地址是什么。為此,您可以使用下面的示例草圖。

草圖在串行監視器中打印連接的傳感器的地址。為了知道哪個傳感器,您可以一次僅連接一個傳感器,也可以依次添加一個新傳感器。然后,您可以標記連接到1-Wire總線的每個傳感器。

DS18B20地址查找器

/ *多個帶Arduino示例代碼的DS18B20 1-Wire數字溫度傳感器。
//包括所需的Arduino庫:
#include <OneWire.h>
#include <DallasTemperature.h>
//定義1-Wire總線連接到Arduino的哪個引腳:
#定義ONE_WIRE_BUS 2
//創建一個oneWire類的新實例以與任何OneWire設備通信:
OneWire oneWire ONE_WIRE_BUS ;
//將oneWire引用傳遞給DallasTemperature庫:
達拉斯溫度傳感器&oneWire ;
//創建變量:
int deviceCount = 0; //變量以存儲連接的設備數
DeviceAddress設備地址;//變量以存儲設備地址
無效設置(){
//以9600的波特率開始串行通信:
序列號。開始9600 ;
//啟動庫:
傳感器。開始();
//找到總線上的設備:
序列號。println “定位設備...” ;
序列號。打印“找到” ;
deviceCount =傳感器。getDeviceCount ();
序列號。打印deviceCount ;
序列號。println “設備” ;
序列號。println “打印地址...”
for int i = 0; i < deviceCount; i ++ {
序列號。打印“傳感器” ;
序列號。打印i + 1 ;
序列號。打印“:” ;
傳感器。getAddress deviceAddress,i ;
printAddress deviceAddress ;
}
}
無效循環(){
}
void printAddress DeviceAddress deviceAddress {
對于uint8_t i = 0; i < 8; i ++ {
序列號。打印“ 0x” ;
如果deviceAddress [ i ] < 0x10 {
序列號。打印“ 0” ;
}
序列號。打印deviceAddress [ i ] ,HEX ;
如果i < 7 {
序列號。打印“,” ;
}
}
序列號。println ();
}

串行監視器中的輸出應如下所示:

DS18B20-地址查找器

現在記下所有傳感器的地址,因為在下一個示例中將需要它們。

通過地址Arduino示例代碼讀取傳感器

在以下示例中,您可以通過指定每個傳感器的唯一地址來讀取它們的溫度。

/ *通過地址讀取多個DS18B20 1-Wire數字溫度傳感器。
//包括所需的Arduino庫:
#include <OneWire.h>
#include <DallasTemperature.h>
//定義1-Wire總線連接到Arduino的哪個引腳:
#定義ONE_WIRE_BUS 2
//創建一個oneWire類的新實例以與任何OneWire設備通信:
OneWire oneWire ONE_WIRE_BUS ;
//將oneWire引用傳遞給DallasTemperature庫:
達拉斯溫度傳感器&oneWire ;
//連接到1-Wire總線的DS18B20傳感器的地址
字節傳感器1 [ 8 ] = { 0×28 為0x18 0xB4 ,×49 ,0x0C 0×00 ,0×00 0x7C } ;
字節傳感器2 [ 8 ] = { 0×28 ,的0xCC 0x19 ,×49 ,0x0C 0×00 ,0×00 ,為0xBB } ;
字節傳感器3 [ 8 ] = { 0×28 ,0x19 0xEF 0x48 ,0x0C ,0×00 0×00 0×21 } ;
無效設置(){
//以9600的波特率開始串行通信:
序列號。開始9600 ;
//啟動庫:
傳感器。開始();
}
無效循環(){
//向總線上的所有設備發送命令以執行溫度轉換:
傳感器。requestTemperatures ();
序列號。打印“傳感器1:” ;
printTemperature sensor1 ; //以sensor1的地址作為輸入調用printTemperature函數
序列號。打印“傳感器2:” ;
printTemperature sensor2 ;
序列號。打印“傳感器3:” ;
printTemperature sensor3 ;
序列號。println (); //打印一個空行
延遲1000 ;
}
void printTemperature DeviceAddress address {
//獲取以攝氏溫度為單位的設備地址:
浮動溫度=傳感器。getTempC 地址;
//獲取以華氏度為單位的設備地址的溫度:
float tempF =傳感器。getTempF 地址;
序列號。打印tempC ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。打印“ C |” ;
//以華氏度打印溫度
序列號。打印tempF ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。println “ F” ;
}

請注意,您必須用在前面的示例代碼中找到的地址替換第17至19行中的地址。

//連接到1-Wire總線的DS18B20傳感器的地址
字節傳感器1 [ 8 ] = { 0×28 ,為0x18 ,0xB4 ×49 ,0x0C 0×00 0×00 0x7C } ;
字節傳感器2 [ 8 ] = { 0×28 的0xCC ,0x19 ,×49 0x0C 0×00 0×00 ,為0xBB } ;
字節傳感器3 [ 8 ] = { 0×28 ,0x19 0xEF 0x48 0x0C ,0×00 ,0×00 ,0×21 } ;

您應該在串行監視器中看到以下輸出。

代碼說明

每個傳感器的地址由64位組成。在代碼中,我們將地址指定為八個8位字節的數組。

//連接到1-Wire總線的DS18B20傳感器的地址
字節傳感器1 [ 8 ] = { 0×28 ,為0x18 0xB4 ,×49 ,0x0C 0×00 ,0×00 0x7C } ;
字節傳感器2 [ 8 ] = { 0×28 的0xCC 0x19 ,×49 ,0x0C ,0×00 0×00 ,為0xBB } ;
字節傳感器3 [ 8 ] = { 0×28 ,0x19 ,0xEF ,0x48 ,0x0C 0×00 0×00 ,0×21 } ;

該代碼的設置部分與前面的示例相同。

在循環中,我們調用該printTemperature(DeviceAddress address)函數。在此自定義函數中,我們使用getTempC(address)getTempF(address)從地址作為參數傳遞的傳感器中獲取溫度。

void printTemperature DeviceAddress address {
//獲取以攝氏溫度為單位的設備地址:
浮動溫度=傳感器。getTempC 地址;
//獲取以華氏度為單位的設備地址的溫度:
float tempF =傳感器。getTempF tempC ;
序列號。打印tempC ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。打印“ C |” ;
//以華氏度打印溫度
序列號。打印tempF ;
序列號。打印“ \ xC2 \ xB0” ; //顯示度數符號
序列號。println “ F”
}

 


DallasTemperature Arduino庫的其他功能

DallasTemperature庫具有一些其他有用的內置函數,而我在上面的示例中尚未介紹。因此,我在下面列出了其中一些:

setResolution()

此功能可用于設置溫度數字轉換的分辨率。正如我在引言中提到的那樣,可以將其設置為9、10、11或12位,分別對應于0.5°C,0.25°C,0.125°C和0.0625°C的增量。

您可能想知道為什么要更改分辨率,不是總是越高越好嗎?選擇較低分辨率的一個優勢是,溫度數字轉換所需的時間要少得多。這意味著您可以在相同的時間內獲取更多的溫度讀數。

從數據表中,我獲得了以下信息:

解析度溫度增量最長轉換時間
9位0.5°攝氏度93.75毫秒
10位0.25°C187.5毫秒
11位0.125°攝氏度375毫秒
12位0.0625°C750毫秒

DallasTemperature庫允許您使用函數設置分辨率setResolution()??梢詫⒋斯δ芴砑拥酱a的設置或循環部分。

您可以如下設置所有連接的傳感器的分辨率:

//將所有設備的分辨率設置為9、10、11或12位:
傳感器。setResolution 9 ;

或者,您可以通過指定其地址為特定傳感器單獨設置它:

//連接到1-Wire總線的DS18B20傳感器的地址
字節傳感器1 [ 8 ] = { 0×28 ,為0x18 0xB4 ,×49 0x0C ,0×00 0×00 ,0x7C } ;
//將特定設備的分辨率設置為9、10、11或12位:
傳感器。setResolution sensor1,9 ;

toFahrenheit()

此功能可用于將以攝氏度為單位的溫度轉換為華氏溫度。

浮動溫度=傳感器。getTempCbyIndex 0 ;
float tempF = DallasTemperature :: toFahrenheit tempC ;

setHighAlarmTemp()和setLowAlarmTemp()

此功能以攝氏度為單位設置設備的內部高溫和低溫警報。

布爾hasAlarm()

當設備出現警報情況時,此函數返回true。您可以在此處找到這些功能的示例。

 


在I2C LCD上顯示DS18B20溫度讀數

如果您想創建一個不需要計算機的獨立項目,那么最好知道如何在LCD顯示屏上顯示溫度讀數。

使用下面的示例代碼,您可以在16×2字符的I2C LCD上顯示溫度讀數。

如下面的接線圖所示,連接I2C LCD非常容易。您可以在下面查看我的詳細教程以獲取更多信息。

  • 如何使用Arduino控制字符I2C LCD

如果要使用標準的非I2C LCD,請看一下本文:

  • 如何在Arduino上使用16×2字符LCD
具有16×2字符I2C LCD和Arduino的DS18B20

下表中也提供了連接:

I2C LCD連接

I2C字符LCDArduino的
地線地線
VCC5伏
SDAA4
SCLA5

要使用I2C LCD,您將需要安裝LiquidCrystal_I2C?Arduino庫。

在Arduino IDE中打開庫管理器,然后搜索“ liquidcrystal_i2c”?,F在向下滾動并查找Frank de Brabander的圖書館。選擇最新版本,然后單擊“安裝”。

安裝LiquidCrystal_I2C Arduino庫

具有I2C LCD的DS18B20示例代碼

/ * DS18B20 1-Wire數字溫度傳感器,帶有16x2 I2C LCD和Arduino示例代碼。
//包括所需的Arduino庫:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
//定義1-Wire總線連接到Arduino的哪個引腳:
#定義ONE_WIRE_BUS 2
//創建一個oneWire類的新實例以與任何OneWire設備通信:
OneWire oneWire ONE_WIRE_BUS ;
//將oneWire引用傳遞給DallasTemperature庫:
達拉斯溫度傳感器&oneWire ;
LiquidCrystal_I2C LCD 0×27 ,16,2 ;
//度數符號:
字節度[] = {
B00111,
00
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
} ;
無效設置(){
//啟動庫:
傳感器。開始();
//啟動LCD并打開背光燈:
液晶顯示器 初始化() ;
液晶顯示器 背光();
//創建一個自定義字符:
液晶顯示器 createChar 0,Degree ;
}
無效循環(){
//向總線上的所有設備發送命令以執行溫度轉換:
傳感器。requestTemperatures ();
//獲取以攝氏度為單位的溫度以獲取設備索引:
浮動溫度=傳感器。getTempCByIndex 0 ; //索引0指向第一個設備
//在LCD上打印溫度;
液晶顯示器 setCursor 0,0 ;
液晶顯示器 打印“溫度:”
液晶顯示器 setCursor 0,1 ;
液晶顯示器 打印tempC ;
液晶顯示器 0 ; //打印自定義字符
液晶顯示器 打印“ C”
//等待1秒鐘:
延遲1000 ;
}

您應該在LCD上看到以下輸出:

DS18B20-16x2-I2C-LCD-輸出

結論

在本教程中,我向您展示了如何在Arduino上使用DS18B20 1-Wire數字溫度傳感器。希望您覺得它有用且有用。如果您這樣做了,請分享這篇文章與同樣喜歡電子產品和制作東西的朋友。

我很想知道您計劃使用這些傳感器構建(或已經構建)哪些項目。如果您有任何疑問,建議或認為本教程中缺少任何內容,?請在下面留下評論。

請注意,保留注釋是為了防止垃圾郵件。

這項工作已根據?知識共享署名-非商業性-相同方式共享4.0國際許可進行了許可。