一、ds18b20概述
DS18B20是一款數字溫度傳感器,由美國獨立半導體公司研製生產。其特點是一線式結構、數字化輸出、精度高、抗干擾能力強等。DS18B20提供的數字輸出,能夠節省傳感器到微控制器之間的CAN控制資源,並具有傳輸距離遠、干擾小、成本低等優點。
二、ds18b20工作原理
DS18B20數字溫度傳感器是基於熱電阻元件(PTC)的數字溫度傳感器。在DS18B20的核心部件中,有一塊名為“溫度傳感器”(Temperature Sensor)的芯片。其內部結構如下圖所示:
_______ | | GND------|______ |-| | | | DQ--------|——CHIP——|-| | |_____| VCC--------|
其中,“溫度傳感器”由一根金屬導線(鎳、鉻合金)構成,即作為Pt電阻元件,同時還起到振動元件的作用。當外界溫度變化時,它的電阻值也隨之變化。具體地,當溫度升高時,它的電阻值也增大。
當程序啟動時,微控制器將引腳DQ輸出初始化為輸出高電平,然後再將其設置為輸入模式,在這種模式下,DS18B20將輸出其唯一的ROM代碼,這個代碼被用來在單個腳上識別和區別多個DS18B20。
三、ds18b20連接方式
DS18B20與微處理器或其他數字IC的連接方式如下圖所示,其中VCC、GND、DQ為三根線,這是一根單線(總線)連接器。
__________ | | VCC----|1 3|----DQ GND----|2 4|----NC(Not Connected) |__________|
其中VCC為芯片正極,GND為芯片負極,DQ為芯片數據線,NC用於測試,暫時沒有使用。
四、ds18b20程序設計
下面的代碼是利用Python語言寫的,可以實現讀取DS18B20模塊輸出的溫度值。其中DS18B20的數據線連接到了GPIO4引腳處,使用的是W1協議庫文件,代碼如下:
import os import glob import time # 單總線接口路徑 os.system('modprobe w1-gpio') # 一個總線下的多個DS18B20的通信串口 os.system('modprobe w1-therm') # 定義傳感器的數據文件路徑 base_dir = '/sys/bus/w1/devices/' # 獲取所有的DS18B20的路徑信息 device_folder = glob.glob(base_dir + '28*')[0] # 獲取DS18B20數據文件所對應的文件路徑 device_file = device_folder + '/w1_slave' def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 return temp_c while True: print(read_temp()) time.sleep(1)
五、ds18b20傳感器的應用
DS18B20數字溫度傳感器最常見的應用場合是在家庭和辦公室中進行溫度和濕度測量,以及在工業設備上進行溫度監測等領域內,如下使用DS18B20測量溫度的代碼:
#include <OneWire.h> #include <DallasTemperature.h> // 定義總線變量Pin為2號針腳 #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); sensors.begin(); } void loop(void) { sensors.requestTemperatures(); Serial.println(sensors.getTempCByIndex(0)); delay(1000); }
原創文章,作者:AJJH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148654.html