溫度傳感器DS18B20代碼,溫度傳感器DS18B20實驗
chanong
作為“一線器件”,DS18B20 單線數(shù)字溫度傳感器具有獨特的優(yōu)勢:
(1) 當使用單總線接口連接微處理器時,只需一根端口線即可實現(xiàn)微處理器與DS18B20 之間的雙向通信。單總線具有經濟性好、抗干擾性強、適合惡劣環(huán)境下的現(xiàn)場測溫、使用方便等優(yōu)點,可以讓用戶輕松搭建傳感器網絡和測量系統(tǒng),可以為傳感器網絡的建設引入新的理念。
(2)測量溫度范圍寬,測量精度高DS18B20的測量范圍為-55至+125,在-10至+85范圍內精度為0.5。
(3) 支持多點網絡功能將多個DS18B20并聯(lián)在一根線上,實現(xiàn)多點測溫。
(4)靈活的供電方案DS18B20可以通過內部寄生電路從數(shù)據線獲取電源。因此,如果數(shù)據線時序滿足一定要求,則無需連接外部電源,使得系統(tǒng)配置更簡單、更可靠。
(5) 測量參數(shù)可設置DS18B20 的測量分辨率可通過程序設置為9 至12 位。
DS18B20的小尺寸、擴展的電壓范圍、提高的經濟性、可選的小封裝和擴展的電壓范圍使其適合構建您自己的經濟型溫度測量系統(tǒng),使其成為設計人員的最愛,實屬難得。
產品包裝
時序圖
典型應用電路
寄生供電方式
支持命令集
復位時序
讀寫時序
具體操作:
1. 打開IDE,進入Project > Load Libraries > Manage Libraries查找、下載并安裝對應的庫。否則程序創(chuàng)建后編譯時會報錯。
搜索18B20,瀏覽到18B20相關庫,然后單擊安裝。
打開剛剛安裝第三方庫的File-Examples,找到第一個例子Alarm。
驗證除了DallasTemperature.h 之外,您還需要另一個庫OneWire.h,然后按照前面的步驟查找并安裝OneWire。 ONE_WIRE_BUS 2 表示開發(fā)版本中數(shù)據端口連接到引腳2。
2、將Arduino開發(fā)版通過USB連接到電腦,選擇對應的開發(fā)版本和端口,編譯、上傳、寫入。
3、接線時需要加電阻,沒有電阻就無法檢測到設備。
引腳定義:面向印刷面,左側為GND,右側為VCC,中間為數(shù)字輸出引腳(必須接4.7K至10K上拉電阻)。
物料清單表
Arduino Uno*1
18B20溫度傳感器1
4.7K電阻*1
接線
Arduino Uno ------ 18B20 溫度傳感器顏色
引腳2 ------ DO 白色
5V ------ VCC 紅色
GND ------ GND 黃色
Arduino接線圖
4. 連接線后,通過USB 連接計算機并打開串行監(jiān)視器以查看結果。
報警案例代碼。您可以根據您的需要更改它。
#include //引用單總線頭文件
#include //引用18b20驅動文件
//數(shù)據線連接到Arduino的2號端口
#define ONE_WIRE_BUS 2//定義引腳2為數(shù)據引腳
//設置OneWire 實例以與任何OneWire 設備通信(不僅僅是Maxim/Dallas 溫度IC)
OneWire oneWire(ONE_WIRE_BUS);
//將oneWire 引用傳遞給達拉斯溫度。
達拉斯溫度傳感器(oneWire);
//保存設備地址的數(shù)組
設備地址內部溫度計、外部溫度計。
禁用設置(禁用)
{
//啟動串口
串行.開始(9600);
Serial.println(\'達拉斯溫度IC控制庫演示\');
//啟動庫
sensors.begin();//初始化設備
//查找總線上的設備
Serial.print(\'找到\');
Serial.print(sensors.getDeviceCount(), DEC);//DEC表示串口數(shù)據以十進制格式打印
Serial.println(\'設備。\');
//在總線上查找設備并根據其索引對其進行分配。
if (!sensors.getAddress(insideThermometer, 0))
Serial.println(\'未找到設備0地址\');
if (!sensors.getAddress(outsideThermometer, 1))
Serial.println(\'未找到設備1地址\');
//顯示總線上找到的地址
Serial.print(\'設備0地址:\');
printAddress(溫度計);
串行.println();
Serial.print(\'設備0 報警: \');
printAlarms(溫度計);
串行.println();
Serial.print(\'設備1地址:\');
printAddress(溫度計之外);
串行.println();
Serial.print(\'設備1報警:\');
printAlarms(外部溫度計);
串行.println();
Serial.println(\'設置報警溫度.\');
//溫度超過30時報警
sensors.setHighAlarmTemp(內部溫度計, 30);
//溫度低于-10時發(fā)出警報
sensors.setLowAlarmTemp(內部溫度計,-10);
//溫度超過31則發(fā)出警報
傳感器.setHighAlarmTemp(outsideThermometer, 31);
//如果溫度低于27則發(fā)送警報
傳感器.setLowAlarmTemp(outsideThermometer, 27);
Serial.print(\'新設備0報警:\');
printAlarms(溫度計);
串行.println();
Serial.print(\'新設備1報警:\');
printAlarms(外部溫度計);
串行.println();
}
//輸出設備地址的函數(shù)
void printAddress(設備地址設備地址)
{
for (uint8_t i=0; i 8; i++)
{
if (設備地址[i] 16) Serial.print(\'0\');
Serial.print(設備地址[i], HEX);
}
}
//輸出設備溫度的函數(shù)
void printTemperature(設備地址設備地址)
{
float tempC=Sensors.getTempC(deviceAddress);
Serial.print(\'臨時C: \');
串行打印(tempC);
Serial.print(\'溫度F: \');
Serial.print(達拉斯溫度:to華氏度(tempC));
}
void printAlarms(uint8_t 設備地址[])
{
焦化溫度。
temp=Sensors.getHighAlarmTemp(deviceAddress);
Serial.print(\'高位警報:\');
Serial.print(temp, DEC);
Serial.print(\'C/\');
Serial.print(達拉斯溫度:to華氏度(溫度));
Serial.print(\'F | 低警報: \');
temp=Sensors.getLowAlarmTemp(deviceAddress);
Serial.print(temp, DEC);
Serial.print(\'C/\');
Serial.print(達拉斯溫度:to華氏度(溫度));
Serial.print(\'F\');
}
//打印設備信息的主函數(shù)
void printData(設備地址設備地址)
{
Serial.print(\'設備地址:\');
printAddress(設備地址);
串口.print(\' \');
printTemperature(設備地址);
串行.println();
}
void checkAlarm(設備地址設備地址)
{
if (sensors.hasAlarm(deviceAddress))
{
Serial.print(\'ALARM: \');
printData(設備地址);
}
}
虛空循環(huán)(虛空)
{
//調用sensors.requestTemperatures()發(fā)出地球溫度
//請求總線上的所有設備
Serial.print(\'請求溫度.\');
傳感器.requestTemperatures();
Serial.println(\'完成\');
//方法1:
//分別檢查每個地址的報警情況
checkAlarm(溫度計);
checkAlarm(外部溫度計);
/*
//替代方法:
//搜索總線并迭代有警報的設備的地址。
//報警設備地址空間
設備地址報警地址;
Serial.println(\'正在搜索警報.\');
//調用alarm search()之前必須先調用重置alarm search()
傳感器.resetAlarmSearch();
//如果沒有設備有鬧鐘,則alarmSearch()返回0
while (sensors.alarmSearch(alarmAddr))
{
Serial.print(\'ALARM: \');
打印數(shù)據(alarmAddr);
}
*/
}








