李政庭 吳偉雄 吳俊超 溫志凱
【摘? 要】本文以Arduino UNO為控制單元,以基于I2C總線的HDC1080為溫濕度測(cè)量單元,并通過1602顯示模塊實(shí)現(xiàn)數(shù)據(jù)顯示,設(shè)計(jì)了一款數(shù)字式溫濕度計(jì),可實(shí)現(xiàn)對(duì)溫度、濕度信息的數(shù)字化采集,文章給出了系統(tǒng)的整體設(shè)計(jì)方案和原理框圖,并從硬件和軟件兩方面對(duì)溫濕度檢測(cè)系統(tǒng)的設(shè)計(jì)做了詳細(xì)說明。該溫濕度檢測(cè)系統(tǒng)精度高、功耗低、體積小、成本低。
【關(guān)鍵詞】Arduino UNO;I2C總線;HDC1080;溫濕度
溫度與濕度與人們的生活息息相關(guān)。尤其是在工農(nóng)業(yè)生產(chǎn)、氣象、科研等部門,必須精確的對(duì)環(huán)境溫度進(jìn)行檢測(cè)。傳統(tǒng)的干濕球溫度計(jì)的顯示方法,不僅復(fù)雜,測(cè)量精度也不高,響應(yīng)速度慢,已不能滿足工農(nóng)業(yè)生產(chǎn)和人們生活需求。而選用單片機(jī)和專用溫濕度數(shù)字芯片對(duì)溫濕度進(jìn)行檢測(cè),可以大大提高溫濕度檢測(cè)的精度。用顯示屏顯示溫度和濕度值,看起來也更直觀。本文設(shè)計(jì)了一種基于I2C總線數(shù)字式溫濕度芯片的溫濕度計(jì)。該溫濕度計(jì)采用一種新型的數(shù)字式溫濕度傳感器HDC1080,對(duì)溫濕度信號(hào)進(jìn)行采集,并采用單片機(jī)Arduino UNO和1602液晶顯示屏組成電路,不需要復(fù)雜的A/D轉(zhuǎn)換電路就能直接完成數(shù)據(jù)采集,實(shí)現(xiàn)方便、精度高,可根據(jù)不同需要應(yīng)用于各種場(chǎng)合。
1.系統(tǒng)結(jié)構(gòu)
本系統(tǒng)主要由單片機(jī)系統(tǒng)模塊、數(shù)字式溫濕度采集芯片、LCD顯示模塊、報(bào)警模塊、電源模塊、通信模塊以及上位機(jī)系統(tǒng)組成。本系統(tǒng)設(shè)計(jì)的原理方框圖如圖1所示,由傳感器HDC1080與單片機(jī)Arduino UNO通過I2C總線連接組成測(cè)量電路,能夠?qū)崟r(shí)檢測(cè)周圍環(huán)境的溫度和濕度,并把采集數(shù)據(jù)顯示在LCD1602液晶顯示屏上,當(dāng)檢測(cè)溫度或濕度超過所設(shè)定的數(shù)值時(shí)報(bào)警模塊報(bào)警。同時(shí),上位機(jī)對(duì)數(shù)據(jù)進(jìn)行保存及發(fā)布。
2.I2C總線工作原理
I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成可發(fā)送和接收數(shù)據(jù)的串行總線,SCL時(shí)鐘線用于控制數(shù)據(jù)傳輸速率,SDA用于收發(fā)數(shù)據(jù)及尋址,可進(jìn)行雙向傳送,最高傳送速率可達(dá)400kbps。所有被控電路均并聯(lián)在總線上,每個(gè)電路和模塊都有唯一的地址,需要通過SDA發(fā)送的地址信號(hào)尋址。根據(jù)I2C串行總線規(guī)范,本文中HDC1080溫濕度傳感器的地址碼為0x40,LCD1604 I2C模塊的地址碼為0x27。
在時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA上的電平被拉低(即負(fù)跳變),定義為I2C總線總線的開始信號(hào),它標(biāo)志著一次數(shù)據(jù)傳輸?shù)拈_始。在時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA被釋放,使得SDA返回高電平(即正跳變),稱為I2C總線的結(jié)束信號(hào),它標(biāo)志著一次數(shù)據(jù)傳輸?shù)慕K止。I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個(gè)應(yīng)答信號(hào)。應(yīng)答信號(hào)為低電平時(shí),規(guī)定為有效應(yīng)答位,表示接收器已經(jīng)成功地接收了該字節(jié);應(yīng)答信號(hào)為高電平時(shí),規(guī)定為非應(yīng)答位,一般表示接收器接收該字節(jié)沒有成功。起始和停止信號(hào)圖如圖2所示。
在I2C總線上傳送的每一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng),即在SCL串行時(shí)鐘的配合下,在SDA上逐位地串行傳送每一位數(shù)據(jù)。進(jìn)行數(shù)據(jù)傳送時(shí),在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,低電平為數(shù)據(jù)0,高電平為數(shù)據(jù)1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。邏輯0的電平為低電壓,而邏輯1的電平取決于器件本身的正電源電壓VDD(當(dāng)使用獨(dú)立電源時(shí))。數(shù)據(jù)位的傳輸是邊沿觸發(fā)。時(shí)序圖如圖3所示。
采用I2C總線傳輸?shù)碾娐方Y(jié)構(gòu)簡(jiǎn)單,編程容易,通信速率高,易于實(shí)現(xiàn)用戶系統(tǒng)軟硬件的模塊化和標(biāo)準(zhǔn)化?;贗2C總線的優(yōu)點(diǎn),本文采用I2C總線的元器件對(duì)溫濕度值進(jìn)行讀取及顯示,并且該設(shè)計(jì)方案可在I2C總線上掛多只傳感器,便于組網(wǎng)應(yīng)用。
3.系統(tǒng)硬件設(shè)計(jì)
3.1 溫濕度測(cè)量電路
單片機(jī)是整個(gè)檢測(cè)系統(tǒng)的核心,它可以接收傳感器采集到的數(shù)據(jù),將這些數(shù)據(jù)與程序中設(shè)定的溫濕度的范圍進(jìn)行比較,得出溫濕度值。如果在這個(gè)范圍內(nèi),則會(huì)顯示環(huán)境中的溫濕度值,方便使用用戶進(jìn)行觀測(cè);但是,如果超出其安全范圍,則會(huì)觸發(fā)報(bào)警電路,告知用戶采取有效措施降低環(huán)境中溫濕度,保持環(huán)境中溫濕度的穩(wěn)定。本設(shè)計(jì)采用Arduino UNO單片機(jī)作為控制器。Arduino單片機(jī)具有豐富的接口,有數(shù)字I/O口,模擬I/O口,同時(shí)支持I2C串口通信。并且能通過各種各樣的傳感器來感知環(huán)境,具有簡(jiǎn)便的編程環(huán)境IDE,極大的自由度,可拓展性能也非常高。
溫濕度測(cè)量模塊采用HDC1080傳感器。HDC1080是一款使用I2C協(xié)議的數(shù)字式溫濕度傳感器,該傳感器將溫度感測(cè)、濕度感測(cè)、信號(hào)變換、A/D轉(zhuǎn)換和加熱器等功能集成到一個(gè)芯片上,其內(nèi)部結(jié)構(gòu)如圖4所示。HDC1080中的兩個(gè)敏感元件分別將溫度和濕度轉(zhuǎn)換成電信號(hào),該電信號(hào)首先進(jìn)入信號(hào)放大器進(jìn)行放大,然后進(jìn)入A/D轉(zhuǎn)換器,最后經(jīng)過二線串行總線接口輸出數(shù)字信號(hào)。此外,校準(zhǔn)系數(shù)存儲(chǔ)在寄存器中,在測(cè)量過程中,校準(zhǔn)系數(shù)會(huì)自動(dòng)校準(zhǔn)來自傳感器的信號(hào)。
該傳感器不需要其他外加電路,直接輸出數(shù)字量,可直接與Arduino單片機(jī)連接,具有線路簡(jiǎn)單、性能穩(wěn)定、體積小的特點(diǎn)。并且該傳感器擁有±2%的典型濕度測(cè)量精度和±0.2℃的典型溫度測(cè)量精度,支持較寬的工作電源電壓范圍,以超低功耗提供出色的測(cè)量精度,具有低成本和低功耗的優(yōu)勢(shì)。溫濕度傳感器HDC1080的I2C總線串行數(shù)據(jù)接口線SDA和串行時(shí)鐘接口線SCL是由單片機(jī)進(jìn)行控制,以單片機(jī)作為主機(jī),HDC1080作為從機(jī)并支持I2C總線協(xié)議的讀/寫操作命令。一條I2C總線可連接多個(gè)HDC1080,可實(shí)現(xiàn)多點(diǎn)的溫度測(cè)量系統(tǒng)。由于Arduino UNO單片機(jī)接口較少,可連接擴(kuò)展板增加接口。
3.2 LCD顯示電路
目前,常見的顯示器分別為L(zhǎng)ED數(shù)碼管和LCD液晶顯示器。相比LCD顯示質(zhì)量高,功耗低。因此,本設(shè)計(jì)采用液晶顯示器??紤]到該款數(shù)字式溫濕度計(jì)涉及溫度和濕度兩類數(shù)據(jù),故本設(shè)計(jì)采用雙行顯示的1602字符型LCD。
3.3 報(bào)警電路
報(bào)警電路采用最簡(jiǎn)單的嗡鳴方式,構(gòu)造簡(jiǎn)單,經(jīng)濟(jì)實(shí)用性強(qiáng),當(dāng)檢測(cè)數(shù)值超過設(shè)定的安全的范圍值時(shí),報(bào)警電路就會(huì)啟動(dòng),提醒用戶采取措施來調(diào)節(jié)溫濕度。
4.系統(tǒng)軟件設(shè)計(jì)
4.1主程序
首先,單片機(jī)通過I2C總線讀寫程序?qū)貪穸葦?shù)據(jù)從HDC1080中讀取出來。然后,根據(jù)溫濕度補(bǔ)償公式計(jì)算出當(dāng)前溫濕度值并送到LCD1602顯示。接著,單片機(jī)將溫濕度上下限與當(dāng)前溫濕度值進(jìn)行比較,若當(dāng)前溫濕度值超出限值,單片機(jī)驅(qū)動(dòng)蜂鳴器開始報(bào)警。
4.2溫濕度采集子程序
HDC1080上電時(shí)是無法主動(dòng)測(cè)量的,要先對(duì)HDC1080進(jìn)行初始化設(shè)置。設(shè)置HDC1080將先執(zhí)行溫度測(cè)量,后進(jìn)行濕度測(cè)量。首先,在寄存器地址0x02中配置采集參數(shù),將位[12]設(shè)置為1,使采集模式設(shè)置為測(cè)量溫度和濕度,再設(shè)置所需的溫度和濕度測(cè)量分辨率。其次,通過執(zhí)行指針寫入事務(wù)并將地址指針設(shè)置為0x00來觸發(fā)測(cè)量,將地址指針設(shè)置為0x00進(jìn)行溫度測(cè)量,設(shè)置為0x01進(jìn)行濕度測(cè)量。根據(jù)轉(zhuǎn)換時(shí)間等待測(cè)量完成,可讀取輸出數(shù)據(jù)。
本設(shè)計(jì)中單片機(jī)首先對(duì)連接在總線上的元器件進(jìn)行地址識(shí)別。如果地址匹配,單片機(jī)向HDC1080發(fā)出啟動(dòng)傳輸命令,然后通過寫總線子程序?qū)囟葴y(cè)量指令和濕度測(cè)量指令寫入HDC1080。HDC1080正確接收到溫濕度測(cè)量命令后,就會(huì)進(jìn)行數(shù)據(jù)采集。等到測(cè)量完成,HDC1080向單片機(jī)傳送兩字節(jié)測(cè)量數(shù)據(jù)(MSB和LSB),單片機(jī)則通過讀總線子程序?qū)貪穸葦?shù)據(jù)讀取出來。
4.3溫濕度顯示子程序
本設(shè)計(jì)采用1602液晶顯示溫濕度值,當(dāng)剛開始上電時(shí)1602液晶不顯示任何數(shù)據(jù),等待HDC1080的監(jiān)測(cè)數(shù)據(jù),雙行顯示在1602液晶上。第一行顯示:Temperature:--’C,第二行顯示:Humidity:-- %(子程序流程圖略)。
5.結(jié)語
為了實(shí)現(xiàn)對(duì)所處環(huán)境中溫濕度的測(cè)量,經(jīng)過研究設(shè)計(jì)出了以Arduino單片機(jī)為中心處理系統(tǒng)的溫濕度檢測(cè)系統(tǒng),實(shí)現(xiàn)了單片機(jī)與各個(gè)I2C接口元器件的數(shù)據(jù)傳輸,并給出了相應(yīng)的子程序。此系統(tǒng)以數(shù)字式溫濕度傳感器HDC1080為檢測(cè)器件,電路結(jié)構(gòu)簡(jiǎn)單、運(yùn)行可靠,能夠準(zhǔn)確進(jìn)行溫濕度的測(cè)量,測(cè)量數(shù)據(jù)準(zhǔn)確性高。由于單片機(jī)程序只要載入就可以一直工作下去,測(cè)量周期長(zhǎng),使用壽命久,能夠一直實(shí)現(xiàn)對(duì)溫濕度的檢測(cè)。并且本設(shè)計(jì)在現(xiàn)有的基礎(chǔ)上可以根據(jù)用戶的需求在單片機(jī)模塊中增加數(shù)據(jù)存儲(chǔ)模塊、通信接口等,實(shí)現(xiàn)數(shù)據(jù)保存和上位計(jì)算機(jī)實(shí)現(xiàn)數(shù)據(jù)交換,作為智能儀表運(yùn)用于工業(yè)生產(chǎn)和家用電器中,如洗衣機(jī)、烘干機(jī)等中。還可以連接Arduino擴(kuò)展板增加檢測(cè)傳感器,從而提高系統(tǒng)應(yīng)用的廣泛性。
參考文獻(xiàn):
[1]李光忠.基于單片機(jī)的溫濕度檢測(cè)系統(tǒng)的設(shè)計(jì)[D].山東大學(xué),2007.
[2]李群林.基于多傳感器的溫濕度檢測(cè)系統(tǒng)[J].中國(guó)儀器儀表,2006,11.
[3]趙娜等.基于51單片機(jī)的溫度測(cè)量系統(tǒng)[J].微計(jì)算機(jī)信息,2007,11.
作者簡(jiǎn)介:
李政庭(1998.11-),男,漢族,江蘇省泰州市人,嘉興學(xué)院南湖學(xué)院本科在讀,主要研究方向:電氣工程及其自動(dòng)化。
基金項(xiàng)目:
嘉興學(xué)院南湖學(xué)院大學(xué)生創(chuàng)新項(xiàng)目(編號(hào):NH85179202)。
(作者單位:嘉興學(xué)院南湖學(xué)院)