楊寅坤,陳麗瓊
(湖南科技學(xué)院 智能制造學(xué)院,湖南 永州 425199)
溫濕度采集系統(tǒng)對(duì)大家而言都不陌生,被廣泛應(yīng)用于工業(yè)和農(nóng)業(yè)的生產(chǎn)。通過傳感器將現(xiàn)場(chǎng)的溫度和濕度等不確定因素實(shí)時(shí)準(zhǔn)確直觀地反饋給科研工作者,讓科研工作者做出更合適的調(diào)整。另外,伴隨著技術(shù)的發(fā)展與進(jìn)步,數(shù)據(jù)采集在人們的生活中隨處可見,而這些數(shù)據(jù)采集大部分是利用無(wú)線通信進(jìn)行的[1]。
此次設(shè)計(jì)采用了工作于2.4 GHz頻段nRF24L01射頻芯片。該芯片相對(duì)滿足工業(yè)控制的背景,內(nèi)置硬件CRC檢錯(cuò),其中的頻道數(shù)可以達(dá)到126個(gè),能夠完全滿足多點(diǎn)通信。nRF24L01射頻芯片還有很多其他優(yōu)點(diǎn),比如能夠有效屏蔽環(huán)境的特殊干擾,采用的調(diào)制是高效的GFSK,是專門為工業(yè)上的控制環(huán)境設(shè)置的,還內(nèi)置了點(diǎn)對(duì)點(diǎn)通信地址控制。該系統(tǒng)具有兩個(gè)最大的特點(diǎn),一是滿足基本要求,在通信上能夠相對(duì)穩(wěn)定,保證通信質(zhì)量;二是在軟件設(shè)計(jì)上模塊及模塊之間的關(guān)系相對(duì)簡(jiǎn)單[2]。為了滿足以上設(shè)計(jì)的要求,筆者選擇89C52RC作為整個(gè)系統(tǒng)的核心控制芯片。該報(bào)警器系統(tǒng)分為交付和接管兩個(gè)部分,在交付部分,設(shè)計(jì)溫濕度采集的芯片是DHT11,這種芯片是一種實(shí)時(shí)采集方式,傳輸無(wú)線數(shù)據(jù)主要是通過nRF24L01進(jìn)行;在接管部分,需要在接管端的數(shù)碼管上進(jìn)行數(shù)據(jù)讀取并做出正確的顯示。
STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8K字節(jié)系統(tǒng),可編程Flash存儲(chǔ)器。STC89C52都是ISP的,在線用串口編程,只需要接三四根線即可。而AT89S52需要取下編程器,在操作上比較麻煩。STC有很多集成的其他功能,內(nèi)帶EEPROM,可以斷電后保存資料。比如溫度告警的上下限,當(dāng)然也可以不用這些功能,而AT則沒有。AT若要實(shí)現(xiàn)斷點(diǎn)保存就得另外擴(kuò)展存儲(chǔ)器[3],比如24C02。帶ADC的STC可以直接連接模擬的溫度探頭,AT還要外置ADC。因此本系統(tǒng)選用STC89C52為主控芯片[4]。
51單片機(jī)的I/O口輸出為5 V,而nRF24L01的電源輸入為1.9~3.6 V,如果直接接入單片機(jī)的電源會(huì)燒壞模塊,因而要對(duì)單片機(jī)的電源接口進(jìn)行壓降,這里筆者選用3V降壓。要用nRF24L01進(jìn)行通信首先要清楚它的發(fā)送和接收流程。筆者在使用nRF24L01的時(shí)候有一個(gè)頭文件,是關(guān)于nRF24L01的寄存器定義和相關(guān)函數(shù)的編寫,只需要按照它的發(fā)送和接收流程調(diào)用相關(guān)函數(shù)配置寄存器即可。
程序中通過讀取寄存器STATUS,FIFO來(lái)判斷發(fā)射部分的狀態(tài),如果發(fā)射成功,則寄存器的數(shù)值就會(huì)發(fā)生改變。同理,在接收端,也讀取了寄存器CD的值。如果接收端收到載波,則寄存器的值就會(huì)變成1,如果沒有檢測(cè)到任何載波信號(hào),那么寄存器的值就為0。通過檢測(cè)寄存器的狀態(tài)就可以判斷兩個(gè)模塊是否正常工作。例如,如果發(fā)射端的兩個(gè)寄存器的值正常改變,那么說(shuō)明發(fā)生端是正常工作的。接收端如果CD的值始終為0,那么說(shuō)明接收端的模塊出現(xiàn)問題,就這樣可以縮小排錯(cuò)的范圍。正常情況下,如果發(fā)射和接收都正常,通過函數(shù)nRF24L01_RxPacket(RxBuf)就可以讀取接收端緩沖區(qū)的值,這個(gè)數(shù)組值的大小與發(fā)送的數(shù)值大小一樣。
DHT11傳感器用于濕度和溫度測(cè)量。用1602做顯示,單總線控制的器件,基本上沒有指令,只有一個(gè)啟動(dòng)信號(hào),然后連續(xù)讀出40bit的數(shù)據(jù)。隨后加上了防死循環(huán)的檢測(cè),元器件的精度是溫度±2 ℃,濕度±5%,精度相對(duì)不高,但是應(yīng)用于當(dāng)前系統(tǒng)已足夠。元件測(cè)出溫度值與18B20相比大約差1 ℃,考慮到18B20的誤差,基本上精度在其所標(biāo)示的±2 ℃內(nèi)。濕度與家用電子濕度計(jì)比較,基本一致。
程序思路:與紅外解碼基本相似,需要主機(jī)發(fā)送一個(gè)啟動(dòng)信號(hào),然后等待器件響應(yīng)后,連續(xù)讀出40位數(shù)據(jù),每位數(shù)據(jù)以低電平50 us開頭,然后維持高電平26~28 us或70 us以區(qū)分?jǐn)?shù)據(jù)0或1,以讀取高電平發(fā)生后第38 us電平高低來(lái)判斷。數(shù)據(jù)以高位在前低位在后分別讀取,最后一個(gè)為校驗(yàn)數(shù)據(jù),作為相應(yīng)的校驗(yàn)后顯示數(shù)值。這里設(shè)計(jì)的關(guān)注點(diǎn)主要集中在以下幾個(gè)方面。
元器件整個(gè)讀取操作需要一次完成,時(shí)間約需要4 ms,加上啟動(dòng)指令最少18 ms,則一次操作需要約22 ms。雖然不長(zhǎng),但在一些場(chǎng)合應(yīng)用中,需要分時(shí)分步執(zhí)行一些固定程序時(shí),比如數(shù)碼管動(dòng)態(tài)掃描顯示,則在讀取過程中要么造成數(shù)據(jù)丟失,要么顯示屏閃動(dòng)。據(jù)資料顯示該元器件內(nèi)部集成8位MCU處理數(shù)據(jù),如果增加指令,除啟動(dòng)指令外還增加一個(gè)讀數(shù)據(jù)指令,并調(diào)整指令長(zhǎng)度。比如以主機(jī)拉低500 us則視為啟動(dòng)指令,以300 us視為讀數(shù)據(jù)指令,這樣在發(fā)起啟動(dòng)指令后,元件內(nèi)部完成數(shù)據(jù)轉(zhuǎn)換,然后等待外部讀數(shù)據(jù)指令。每一個(gè)讀指令則輸出一個(gè)8位數(shù)據(jù),這樣處理后,有利于在程序中分步讀取數(shù)據(jù),每次讀取1字節(jié)數(shù)據(jù)最多不超過500 us。則在動(dòng)態(tài)顯示中采用分步讀取,不會(huì)影響動(dòng)態(tài)掃描。
本系統(tǒng)是一個(gè)報(bào)警器系統(tǒng),所以筆者設(shè)計(jì)了溫濕度不在設(shè)置范圍內(nèi)時(shí)應(yīng)當(dāng)發(fā)出報(bào)警的聲音。通過報(bào)警,讓用戶及時(shí)發(fā)現(xiàn)不適宜的溫濕度,從而做出合適的判斷和相應(yīng)的操作。該報(bào)警設(shè)備主要的電路是由蜂鳴器組成。
第一步,本系統(tǒng)需要進(jìn)行初始化操作,該操作主要包括兩個(gè)方面,分別是DHT11和nRF24L01無(wú)線模塊。從DHT11讀取溫濕度數(shù)據(jù),然后交付端通過無(wú)線傳輸將數(shù)據(jù)進(jìn)行傳輸,最后接管端接收到數(shù)據(jù)以后,需要在液晶顯示模塊上顯示出來(lái)。
對(duì)DHT11進(jìn)行操作,首先通過調(diào)用void COM(void)函數(shù)對(duì)DHT11進(jìn)行復(fù)位,然后調(diào)用void RH(void)向DHT11發(fā)送一條ROM指令,只有按照這樣的操作步驟才能實(shí)現(xiàn)預(yù)定的設(shè)計(jì)。
在單片機(jī)應(yīng)用領(lǐng)域,數(shù)據(jù)采集被廣泛應(yīng)用于工農(nóng)業(yè)生產(chǎn),本設(shè)計(jì)就是一個(gè)典型案例。本設(shè)計(jì)通過一種直接數(shù)字輸入式的溫濕度傳感芯片DHT11實(shí)現(xiàn)對(duì)非電信號(hào)的采集?;贒HT11數(shù)字溫濕度傳感器的實(shí)時(shí)監(jiān)控系統(tǒng)確實(shí)具有精度高、抗干擾能力強(qiáng)等特點(diǎn)。另外,本設(shè)計(jì)使用nRF24L01無(wú)線傳輸模塊完成了無(wú)線傳輸?shù)倪^程。通過無(wú)線傳輸模塊可以省去有線帶來(lái)的布線麻煩,能夠?qū)崿F(xiàn)多點(diǎn)動(dòng)態(tài)采集。