基于Protues的Arduino學(xué)習(xí)07-DS18B20與數(shù)字式溫度測量的實現(xiàn)
作者:我不是奔跑哥 來源:我不是奔跑哥的blog 點擊數(shù):
… 更新時間:2014年06月08日 【字體:
大 中 小】
這次我們使用數(shù)字式溫度傳感器DS18B20實現(xiàn)溫度測量,并且串口輸出溫度測量值。
DS18B20是美國DALLAS半導(dǎo)體公司的數(shù)字化單總線智能溫度傳感器,與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。從DS18B20讀出信息或?qū)懭胄畔H需要一根線(單總線)讀寫,總線本身也可以向所掛接的設(shè)備供電,而無需額外電源。
DS18B20的性能特點如下:
(1)單線接口方式實現(xiàn)雙向通訊;
(2)供電電壓范圍:+3.0V~+5.5V,可用數(shù)據(jù)線供電;
(3)測溫范圍:-55~+125℃。固有測溫分辨率為0.5℃。
(4)通過編程可實現(xiàn)9~12位的數(shù)字讀數(shù)方式;
(5)支持多點的組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的單總線上,實現(xiàn)多點測溫。
DS18B20的外形及管腳排列如圖1所示,DS18B20引腳定義:(1)DQ為數(shù)字信號輸入/輸出端;(2)GND為電源地;(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
圖1 DS18B20封裝圖
首先,我們需要proteus仿真里面添加DS18B20數(shù)字式溫度傳感器,在元器件搜索欄中輸入“DS18B20”,并添加至元器件選擇欄中,如圖2所示。并將其DQ管腳接至數(shù)字口2腳,也就是ATmega328P的4管腳,同時接10kΩ的上拉電阻,VCC接至+5V,GND接至地端,修改后的Arduino
UNO仿真圖如圖3所示。
圖2
添加DS18B20傳感器
圖3 修改后的Arduino
UNO仿真板
雙擊DS18B20、右擊選擇編輯參數(shù)屬性(第二項)如圖4所示、或者左擊選中DS18B20然后按下ctrl+E,會彈出如圖5所示的DS18B20設(shè)置框。設(shè)置框里有內(nèi)部序列號【注】、當(dāng)前溫度值、調(diào)節(jié)的最小變化量。
【注】內(nèi)部序列號用于單總線上掛有多個DS18B20的情況下,甄別不同的傳感器。只有內(nèi)部序列號相同的DS18B20才會響應(yīng)單總線上的命令并作出相應(yīng)的響應(yīng)。
圖4 選擇“編輯屬性”一項
圖5
DS18B20傳感器參數(shù)設(shè)置欄
DS18B20設(shè)置完成后,下面進入Arduino編程部分。首先,在網(wǎng)上下載DallasTemperature的庫文件,然后解壓放置在arduino的libraries文件夾下面,啟動arduino
IDE,進入example中的DallasTemperature中選擇simple文件并打開,如圖6所示。
圖6
打開DS18B20例子
Arduino代碼清單:
#include
<OneWire.h>
#include
<DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire
devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas
Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC
Control Library Demo");
// Start up the library
sensors.begin();
}
void loop(void)
{
// call sensors.requestTemperatures() to
issue a global temperature
// request to all devices on the bus
Serial.print("Requesting
temperatures...");
sensors.requestTemperatures(); // Send the
command to get temperatures
Serial.println("DONE");
Serial.print("Temperature for the device 1
(index 0) is: ");
Serial.println(sensors.getTempCByIndex(0));
}
編譯成功之后,導(dǎo)入proteus仿真軟件進行仿真。通過調(diào)節(jié)DS18B20的溫度值,可以看到串口輸出的溫度數(shù)值,以及與DS18B20設(shè)置的標準值之間的誤差。【注】溫度為0℃、25℃、50℃和100℃的仿真圖如圖7、8、9、10所示。
【注】由于仿真環(huán)境為理想環(huán)境,傳感器為理想模型,僅能驗證能否對傳感器進行讀寫操作,初步地驗證程序的正確性。實際測量過程中,測量溫度與實際溫度會有一定的誤差,誤差大小和傳感器、環(huán)境等都有關(guān)系。
圖7 溫度為0℃時的情況
圖8
溫度為25℃時的情況
圖9
溫度為50℃時的情況
圖10
溫度為100℃時的情況