孫 濤
(1.湖南省高鐵運(yùn)行安全保障工程技術(shù)研究中心,湖南 株洲 412005;2.湖南鐵路科技職業(yè)技術(shù)學(xué)院,湖南 株洲 412005)
隨著鄉(xiāng)村振興的深入推進(jìn),基于新技術(shù)的智能化產(chǎn)品不斷在農(nóng)業(yè)生產(chǎn)領(lǐng)域中使用,溫室大棚作為種植農(nóng)業(yè)果蔬的主要地點(diǎn),在我國(guó)農(nóng)業(yè)生產(chǎn)體系中發(fā)揮著越來越重要的作用[1]。環(huán)境監(jiān)控系統(tǒng)主要對(duì)相對(duì)密閉環(huán)境中的物理環(huán)境參數(shù)和運(yùn)行參數(shù),如濕度、溫度、水浸、玻璃破碎等各種環(huán)境變量進(jìn)行實(shí)時(shí)監(jiān)測(cè),并對(duì)各種超過監(jiān)測(cè)數(shù)據(jù)的危險(xiǎn)信號(hào)進(jìn)行迅速報(bào)警。實(shí)時(shí)監(jiān)測(cè)設(shè)備還需要診斷采集的環(huán)境數(shù)據(jù)、處理各種故障和分析相關(guān)的數(shù)據(jù),從而保證溫室大棚在無人值守的情況下正常運(yùn)行。
傳統(tǒng)意義上的環(huán)境監(jiān)控系統(tǒng)大都采用分散監(jiān)控和維護(hù)的方式,不僅浪費(fèi)物力、財(cái)力和人力,而且系統(tǒng)的可靠性相對(duì)較差[2]。因此,本文提出基于嵌入式技術(shù)的智能化農(nóng)業(yè)溫室大棚環(huán)境監(jiān)控系統(tǒng),不僅降低了系統(tǒng)監(jiān)控成本,而且使設(shè)備維護(hù)管理更為便捷,極大地提高了工作效率。
1)遵循GB/T 19165—2003《日光溫室和塑料大棚結(jié)構(gòu)與性能要求》等相關(guān)標(biāo)準(zhǔn)[3]。
2)監(jiān)控系統(tǒng)上位機(jī)具有直觀友好的圖形顯示界面,且易于觀察、方便操作。
3)監(jiān)控系統(tǒng)是完全獨(dú)立的,若監(jiān)控系統(tǒng)發(fā)生故障,不會(huì)對(duì)農(nóng)業(yè)生產(chǎn)設(shè)備的正常運(yùn)行產(chǎn)生影響。
4)監(jiān)控系統(tǒng)具有實(shí)時(shí)報(bào)警功能,且任何時(shí)刻都可以關(guān)閉報(bào)警。
5)監(jiān)控系統(tǒng)具有數(shù)據(jù)回放和數(shù)據(jù)記錄功能,便于查看歷史數(shù)據(jù)。
6)監(jiān)控系統(tǒng)具有各類常見的通信接口,便于與其他設(shè)備進(jìn)行數(shù)據(jù)交換。
7)監(jiān)控系統(tǒng)能根據(jù)實(shí)際情況控制空調(diào)、加濕器等設(shè)備,對(duì)環(huán)境進(jìn)行調(diào)節(jié)。
8)監(jiān)控系統(tǒng)除了可應(yīng)用于本研究中的農(nóng)業(yè)溫室大棚環(huán)境中,還適用于不同領(lǐng)域的較密閉的空間中[4]。
本研究主要對(duì)農(nóng)業(yè)溫室大棚環(huán)境參數(shù)、溫度、濕度等進(jìn)行監(jiān)測(cè),并設(shè)計(jì)實(shí)現(xiàn)了對(duì)空調(diào)和加濕器的控制,實(shí)現(xiàn)與預(yù)設(shè)環(huán)境參數(shù)的匹配,即實(shí)現(xiàn)了集監(jiān)督與控制功能于一體。本監(jiān)控系統(tǒng)分為上位機(jī)子系統(tǒng)和下位機(jī)子系統(tǒng),系統(tǒng)拓?fù)鋱D如圖1所示。
圖1 系統(tǒng)拓?fù)鋱D
上位機(jī)負(fù)責(zé)對(duì)采集到的數(shù)據(jù)進(jìn)行處理,然后把結(jié)果直觀地顯示在界面上。用戶可通過界面了解環(huán)境情況,并進(jìn)行簡(jiǎn)單控制。除此之外,上位機(jī)還需實(shí)現(xiàn)報(bào)警功能、數(shù)據(jù)記錄功能、數(shù)據(jù)回放功能。
下位機(jī)采集環(huán)境的各項(xiàng)數(shù)據(jù),采集的數(shù)據(jù)可由下位機(jī)簡(jiǎn)單處理或者直接傳到上位機(jī),借助上位機(jī)強(qiáng)大的處理能力處理數(shù)據(jù)。下位機(jī)還可接收上位機(jī)傳來的控制命令,對(duì)空調(diào)等設(shè)備進(jìn)行控制,其結(jié)構(gòu)圖如圖2所示。上位機(jī)與下位機(jī)通過串口或者工業(yè)常用的CAN總線進(jìn)行數(shù)據(jù)通信。
圖2 下位機(jī)結(jié)構(gòu)圖
不同于傳統(tǒng)的采用熱敏電阻的溫度檢測(cè)系統(tǒng),現(xiàn)在越來越多的系統(tǒng)采用專用的溫度傳感器,這類芯片一般輸出數(shù)字信號(hào),與熱敏電阻相比,它具有簡(jiǎn)單、可靠、精度高等特點(diǎn)[5]。本設(shè)計(jì)的溫度檢測(cè)模塊采用美國(guó)達(dá)拉斯公司生產(chǎn)的DS18B20溫度傳感器。
3.1.1 溫度模塊硬件設(shè)計(jì)
DS18B20傳感器(TO-92封裝)只有三個(gè)引腳[6]:1-GND、3-VCC、2-DQ。它和單片機(jī)只通過DQ引腳連接,通信為單總線通信。單總線在一根信號(hào)線上進(jìn)行數(shù)據(jù)和時(shí)鐘信號(hào)的雙向數(shù)據(jù)傳輸,線路簡(jiǎn)單,成本低,還便于擴(kuò)展。通過單總線傳輸時(shí)一般先初始化器件,再識(shí)別器件,最后進(jìn)行數(shù)據(jù)交換。溫度模塊電路原理如圖3所示。
圖3 溫度模塊電路原理
溫度模塊連接至AVR單片機(jī)的PD1引腳,單片機(jī)通過對(duì)此引腳寫0/1或者讀取此引腳來模擬單總線。通過單總線訪問DS18B20的過程如下:初始化—操作ROM的命令—操作存儲(chǔ)器的命令—傳輸數(shù)據(jù)。
3.1.2 溫度模塊軟件設(shè)計(jì)
單片機(jī)讀取溫度的函數(shù):U16 readTemperature (void)。此函數(shù)不需要傳遞參數(shù),返回值為16位溫度寄存器的值,當(dāng)返回0xFFFF時(shí),表示讀DS18B20出錯(cuò),此數(shù)據(jù)無效。DS18B20采集溫度需要先發(fā)出啟動(dòng)溫度轉(zhuǎn)化的命令,然后才能讀取數(shù)據(jù),讀取溫度的流程如圖4所示。
圖4 讀取溫度流程
測(cè)量濕度的傳感器有很多種,包括濕漲式、電容式、電阻式等,它們是根據(jù)空氣中的濕度變化引起其化學(xué)或物理性質(zhì)改變而工作的。其中,電容式濕度傳感器由于具有反應(yīng)速度快、精確度高、可靠性高、穩(wěn)定性強(qiáng)等諸多優(yōu)點(diǎn)而被廣泛采用[7]。本設(shè)計(jì)采用MHS1101濕敏電容來設(shè)計(jì)濕度檢測(cè)模塊。
3.2.1 濕度模塊硬件設(shè)計(jì)
MHS1101濕敏電容基于獨(dú)特的濕敏分子而設(shè)計(jì),可被用于大批量、成本敏感的產(chǎn)品,如工控領(lǐng)域、辦公自動(dòng)化和家具產(chǎn)品等所有需要濕度檢測(cè)的場(chǎng)合。它的工作溫度在-40 ℃~+125 ℃之間,相對(duì)濕度測(cè)試范圍為0%~100%。
濕敏電容就是對(duì)濕度敏感的電容,它的電容會(huì)隨著濕度的變化而變化,所以用MHS1101測(cè)試濕度,就相應(yīng)地轉(zhuǎn)化為了測(cè)試電容的大小,然后根據(jù)電容大小和MHS1101的濕度/電容變化曲線計(jì)算濕度。測(cè)電容可以用555振蕩電路,將電容容量的變化轉(zhuǎn)化為頻率的變化,然后測(cè)試頻率。
555芯片用作振蕩器使用時(shí),可以通過兩個(gè)外部電阻和電容來控制輸出頻率。用MHS1101做555芯片的外圍電容器件,電容的變化可以反映出輸出頻率。具體的電路設(shè)計(jì)如圖5所示。這個(gè)電路是555穩(wěn)態(tài)電路,MHS1101可變電容一端接地,一端連接THR(6)和TRIG(2)引腳。其中,R23電阻用作內(nèi)部溫度補(bǔ)償,由它引入的溫度效應(yīng)來匹配MHS1101的溫度效應(yīng)。
圖5 濕度測(cè)量模塊電路設(shè)計(jì)
濕度模塊連接到AT90CAN128的PD2引腳,此引腳可作普通輸入輸出端口,也可以作外部中斷引腳。由于本設(shè)計(jì)的下位機(jī)同時(shí)采集環(huán)境溫度,所以可以用采集到的溫度對(duì)濕度進(jìn)行修正,使采集的濕度數(shù)據(jù)更加準(zhǔn)確。
3.2.2 濕度模塊軟件設(shè)計(jì)
濕度檢測(cè)模塊與單片機(jī)的連接只有一個(gè)頻率輸出線,AT90CAN128可以通過PD2引腳采集濕度模塊輸出的頻率,由此計(jì)算濕度值。PD2引腳可以用作外部中斷(外部中斷2),也可用作普通輸入輸出,采集信號(hào)頻率時(shí)用中斷方式比較合適。配置外部中斷2為下降沿或者上升沿觸發(fā),一個(gè)振蕩周期產(chǎn)生一次中斷,單位時(shí)間內(nèi)中斷發(fā)生的次數(shù)就是頻率。本設(shè)計(jì)讀取頻率的方式是:用單片機(jī)的定時(shí)器1定時(shí)1 s,用外部中斷采集振蕩的輸出頻率。
單片機(jī)讀取濕度的函數(shù):U16 readHs1101Fre(void)。此函數(shù)不需要傳遞參數(shù),返回值為16位頻率值,當(dāng)返回0xFFFF時(shí),表示此次采集頻率出錯(cuò),數(shù)據(jù)無效。此函數(shù)讀一次濕度大概用時(shí)1 s,函數(shù)流程如圖6所示。
圖6 讀取濕度頻率的函數(shù)流程
在讀函數(shù)的過程中,首先設(shè)置外部中斷2為下降沿中斷,打開外部中斷,為了防止其他中斷干擾,可關(guān)閉其他外部中斷。由于限定讀取1 s由定時(shí)器1實(shí)現(xiàn),所以還要打開定時(shí)器1的溢出中斷。然后,初始化定時(shí)器1的初始值、時(shí)鐘源,再讓定時(shí)器開始計(jì)時(shí)。此時(shí),讀函數(shù)進(jìn)入死循環(huán),直到發(fā)生定時(shí)器溢出中斷。最后,當(dāng)計(jì)時(shí)1 s后,讀出頻率變量中存儲(chǔ)的頻率值。可以根據(jù)頻率值查找頻率/濕度對(duì)照表,從表中查到對(duì)應(yīng)的濕度值。若濕度值超出允許范圍則報(bào)警,否則,函數(shù)返回當(dāng)前的濕度值。
在外部中斷2的中斷函數(shù)中,只需要把頻率變量增加1即可。在定時(shí)器1的溢出中斷中,需要關(guān)閉定時(shí)器的溢出中斷,并且關(guān)閉外部中斷2,最后設(shè)置定時(shí)器溢出標(biāo)志變量,從而使讀函數(shù)從死循環(huán)中跳出。
本研究基于QT Designer[8]開發(fā)上位機(jī)人機(jī)界面,上位機(jī)界面屬于上層應(yīng)用程序,它不需關(guān)心底層的硬件實(shí)現(xiàn),只需要通過設(shè)備文件的操作來收發(fā)CAN總線的數(shù)據(jù)即可。根據(jù)驅(qū)動(dòng)部分的設(shè)計(jì),控制設(shè)備文件的步驟如下:
1)調(diào)用open( )函數(shù)打開設(shè)備,此時(shí)會(huì)初始化SJA1000。
2)調(diào)用read( )函數(shù)讀出收到的總線數(shù)據(jù)包。
3)通過write( )函數(shù)向總線發(fā)送數(shù)據(jù)。
4)最終調(diào)用close( )函數(shù)關(guān)閉設(shè)備驅(qū)動(dòng)文件。
界面應(yīng)用程序初始化時(shí),首先,繪制背景(包括文字等)和組件(按鈕等),繪制完成后啟動(dòng)一個(gè)定時(shí)器(定時(shí)刷新界面用)。然后,主程序進(jìn)入循環(huán)。在定時(shí)器函數(shù)中,程序會(huì)讀取CAN總線收到的數(shù)據(jù),然后根據(jù)讀到的溫度、濕度等數(shù)據(jù)值刷新界面。
CAN總線的驅(qū)動(dòng)電路如圖7所示,由于SJA1000芯片沒有集成總線驅(qū)動(dòng)器,所以需要通過PC82C250芯片擴(kuò)展[9],PC82C250的1腳為TX發(fā)送引腳,4腳為RX接收引腳,6腳為CANL,7腳為CANH,CANH、CANL經(jīng)過5 Ω電路接到總線,并且用30 pF電容過濾高頻干擾。
圖7 總線驅(qū)動(dòng)電路
溫度傳感器DS18B20采用單總線和單片機(jī)通信,單總線對(duì)時(shí)序的要求是很精確的。Saleae中可以放大采集到的數(shù)據(jù)時(shí)序,并觀察通過串口上傳的溫度數(shù)據(jù)。從波形上可以看到,主機(jī)最后發(fā)出的命令字節(jié)為0xBE(讀溫度值),隨后總線上傳遞出溫度寄存器的值0x6D和0x01,與串口收到的數(shù)據(jù)一致。按照程序設(shè)計(jì)部分介紹的計(jì)算方法,此時(shí)的溫度值應(yīng)為正值,T=0x16D×0.062 5=22.812 5 ℃。
濕度采集模塊輸出頻率,測(cè)試頻率是用單片機(jī)的定時(shí)器定時(shí)1 s[10],用外部中斷的方式記脈沖下降沿的個(gè)數(shù),最終得出頻率。測(cè)試過程中可以用串口接收濕度數(shù)據(jù),用Saleae采集輸出的波形,濕度模塊采集到的數(shù)據(jù)如圖8所示。
圖8 濕度模塊采集到的數(shù)據(jù)
界面的調(diào)試主要是測(cè)試界面的顯示效果和各項(xiàng)功能,以隨機(jī)24 h內(nèi)溫度、濕度數(shù)據(jù)回放的畫面為例,如圖9所示。在畫面中,大棚濕度以圖像上部黃色曲線配合右側(cè)數(shù)值顯示,溫度以圖像下部綠色曲線配合左側(cè)數(shù)值顯示,當(dāng)前時(shí)間以倒三角形式紅色線條指出。
圖9 數(shù)據(jù)回放圖
本文詳細(xì)分析了農(nóng)業(yè)溫室大棚環(huán)境監(jiān)控系統(tǒng)的溫度、濕度信號(hào)采集模塊硬件電路設(shè)計(jì)和程序設(shè)計(jì),并對(duì)上位機(jī)擴(kuò)展CAN總線做了介紹,在上位機(jī)上實(shí)現(xiàn)了功能強(qiáng)大的用戶界面。仿真結(jié)果表明,基于嵌入式技術(shù)的農(nóng)業(yè)溫室大棚環(huán)境監(jiān)控系統(tǒng)實(shí)現(xiàn)了以下功能:
1)采用帶Linux操作系統(tǒng)的上位機(jī),功能非常強(qiáng)大。
2)上位機(jī)界面非常友好、直觀,方便了用戶進(jìn)行人機(jī)交互。
3)監(jiān)控系統(tǒng)的上位機(jī)和下位機(jī)功能獨(dú)立。下位機(jī)既可以獨(dú)立工作,也可以組成監(jiān)控網(wǎng)絡(luò),并且監(jiān)控網(wǎng)絡(luò)中一個(gè)下位機(jī)節(jié)點(diǎn)損壞不會(huì)影響其他節(jié)點(diǎn)。
4)監(jiān)控網(wǎng)絡(luò)中可以有多個(gè)下位機(jī),也可以有多個(gè)上位機(jī),便于大范圍監(jiān)控和分級(jí)監(jiān)視。
5)采用流行的總線通信技術(shù),并制定了應(yīng)用層的通信協(xié)議,與遵循相同協(xié)議的產(chǎn)品可互連。
6)下位機(jī)預(yù)留了擴(kuò)展接口,便于以后擴(kuò)展其他模塊。
7)監(jiān)控系統(tǒng)應(yīng)用范圍廣,適用于所有需要環(huán)境監(jiān)控的地方。