一種基于STM32的溫室遠(yuǎn)程監(jiān)測(cè)和控制系統(tǒng)的設(shè)計(jì)
引言
傳統(tǒng)農(nóng)業(yè)需要消耗大量的勞動(dòng)力,生產(chǎn)效率低,急需要向現(xiàn)代農(nóng)業(yè)的轉(zhuǎn)變。溫室技術(shù)作為現(xiàn)代農(nóng)業(yè)的重要代表將作物的生長從自然環(huán)境獨(dú)立出來,形成一個(gè)可以進(jìn)行人工控制的半封閉系統(tǒng)。我國從20世紀(jì)90年代開始向溫室技術(shù)發(fā)達(dá)的荷蘭、美國等國學(xué)習(xí),但是由于我國農(nóng)業(yè)生產(chǎn)條件與國外情況不同,不能直接照搬國外的模式,而需要研發(fā)適合我國各地區(qū)生產(chǎn)條件的溫室控制系統(tǒng)。
針對(duì)上述情況設(shè)計(jì)了一套溫室的遠(yuǎn)程監(jiān)測(cè)和控制系統(tǒng)。由于在各個(gè)環(huán)境因素中,空氣溫濕度對(duì)作物的生長具有較大的影響,所以系統(tǒng)選擇對(duì)溫室內(nèi)空氣溫濕度進(jìn)行監(jiān)測(cè)和控制。傳統(tǒng)的51系列單片機(jī)控制系統(tǒng)運(yùn)算能力以及功能擴(kuò)展能力差,PLC控制系統(tǒng)成本太高,所以選擇了外設(shè)豐富、擴(kuò)展性強(qiáng)以及成本較低的STM32單片機(jī)作為溫室內(nèi)的控制器。
1、系統(tǒng)總體設(shè)計(jì)
文中開發(fā)了一套基于STM32的溫室遠(yuǎn)程監(jiān)測(cè)和控制系統(tǒng)。通過利用STM32單片機(jī)作為溫室內(nèi)的控制器以及MFC編寫的遠(yuǎn)程控制軟件可以實(shí)現(xiàn)對(duì)溫室內(nèi)溫濕度遠(yuǎn)程監(jiān)測(cè)和控制。在STM32控制器設(shè)計(jì)中加入ENC28J60模塊,使控制器可以接入網(wǎng)絡(luò),同時(shí)在STM32的程序設(shè)計(jì)中移植LwIP協(xié)議,使控制器可以通過TCP/IP協(xié)議與遠(yuǎn)程控制軟件進(jìn)行數(shù)據(jù)通信。
STM32控制器直接控制DHT11傳感器和繼電器模塊,DHT11負(fù)責(zé)測(cè)量溫室內(nèi)溫濕度,繼電器模塊負(fù)責(zé)控制溫室內(nèi)的加熱系統(tǒng)和濕簾系統(tǒng),改變溫室內(nèi)的溫濕度。在VC6.0平臺(tái)下利用MFC設(shè)計(jì)了簡單易用的遠(yuǎn)程控制界面,可以遠(yuǎn)程監(jiān)測(cè)溫室內(nèi)的溫濕度,并對(duì)溫室內(nèi)設(shè)備進(jìn)行控制,將控制過程中產(chǎn)生的數(shù)據(jù)保存到數(shù)據(jù)庫中,系統(tǒng)整體框架如圖1所示。
圖1系統(tǒng)整體框圖
2、系統(tǒng)硬件設(shè)計(jì)
2.1、核心處理器的選擇
STM32具有豐富的外圍設(shè)備,內(nèi)置64K的靜態(tài)RAM和512K字節(jié)的閃存存儲(chǔ)器,多達(dá)112個(gè)GPIO端口,可以按要求配置成輸入或輸出各四種模式,共有7路通用DMA,負(fù)責(zé)存儲(chǔ)器之間以及存儲(chǔ)器和外設(shè)之間的直接數(shù)據(jù)傳輸,內(nèi)嵌3個(gè)12位的模擬/數(shù)字轉(zhuǎn)換器,1條I2C總線連接控制器和外圍設(shè)備,2條SPI總線,負(fù)責(zé)一個(gè)主設(shè)備和多個(gè)從設(shè)備之間進(jìn)行數(shù)據(jù)交換,可以外接以太網(wǎng)接口,3個(gè)USART串口,1個(gè)SDIO接口進(jìn)行存儲(chǔ)器擴(kuò)展以及1個(gè)JTAG接口可以用于連接計(jì)算機(jī)進(jìn)行程序調(diào)試。
2.2、溫濕度傳感器的選擇
對(duì)于溫室內(nèi)的空氣溫濕度測(cè)量,本系統(tǒng)采用的是DHT11傳感器。DHT11中集成了數(shù)字采集模塊,包括1個(gè)測(cè)溫元件和1個(gè)電阻式感濕元件,它的抗干擾能力強(qiáng)、價(jià)格便宜、體積小、功耗低,使用方便,工作電壓為3.5V。其主要參數(shù)如表1所示。
DHT11采用的是單總線數(shù)據(jù)格式,可以通過一個(gè)引腳進(jìn)行數(shù)據(jù)的發(fā)送和命令的接收,本次設(shè)計(jì)采用STM32的GPIO_Pin_7引腳來連接DHT11。在STM32中央控制器向DHT11發(fā)送開始信號(hào)以后,DHT11從低功耗模式喚醒,進(jìn)入高速模式狀態(tài),并對(duì)STM32的開始信號(hào)進(jìn)行響應(yīng),雙方確認(rèn)以后,DHT11把測(cè)得的數(shù)據(jù)封裝在數(shù)據(jù)包中發(fā)送到STM32控制器,發(fā)送完以后會(huì)觸發(fā)采集信號(hào)繼續(xù)進(jìn)行數(shù)據(jù)的采集。在STM32中央控制器向DHT11發(fā)送結(jié)束信號(hào)后,DHT11停止測(cè)量數(shù)據(jù),重新進(jìn)入低功耗模式,DHT11和STM32之間通信一次的時(shí)間最大為3ms左右。
2.3、繼電器模塊的設(shè)計(jì)
設(shè)計(jì)中執(zhí)行設(shè)備的狀態(tài)是“二位”形式,即只有“打開”和“關(guān)閉”2種狀態(tài),可以通過繼電器進(jìn)行控制。本次設(shè)計(jì)采用的是電磁繼電器,型號(hào)為歐姆龍G2R-1A-E。電磁繼電器的組成部分有鐵芯、線圈、銜鐵和簧片,利用電磁效應(yīng)通過在線圈兩端加電壓產(chǎn)生電流繼而產(chǎn)生電磁力,對(duì)銜鐵產(chǎn)生吸引力,控制開關(guān)。本次設(shè)計(jì)為每個(gè)執(zhí)行設(shè)備連接一個(gè)電磁繼電器。
2.4、網(wǎng)絡(luò)接口設(shè)計(jì)
設(shè)計(jì)中采用STM32外接以太網(wǎng)控制器ENC28J60與遠(yuǎn)程控制軟件進(jìn)行通信。ENC28J60是美國微芯科技公司開發(fā)的,共有28個(gè)引腳,體積小、使用方便,價(jià)格便宜[9]。該芯片帶有SPI接口,可以通過SPI接口與STM32控制器進(jìn)行連接。ENC28J60的工作頻率是25MHz,工作電壓為3.3V。ENC28J60中的存儲(chǔ)器以靜態(tài)RAM方式實(shí)現(xiàn)。STM32通過使用SPI接口對(duì)ENC28J60芯片的寄存器寫入控制參數(shù)和接收數(shù)據(jù),實(shí)現(xiàn)以太網(wǎng)功能。
3、系統(tǒng)軟件設(shè)計(jì)
3.1、LwIP協(xié)議的移植
LwIP協(xié)議是一種主要應(yīng)用于嵌入式系統(tǒng)中的輕量級(jí)的TCP/IP協(xié)議。LwIP協(xié)議源碼開放,在保持了TCP/IP協(xié)議的基本功能的前提下代碼盡量精簡、占用內(nèi)存小、方便裁剪和調(diào)試[10,11]。LwIP在STM32上的移植工作主要包含2方面內(nèi)容:一是修改文件etherneTIf.c和文件sys_arch.c;二是編寫網(wǎng)絡(luò)驅(qū)動(dòng)程序。
設(shè)計(jì)中采用ENC28J60在LwIP中用neTIf結(jié)構(gòu)體來描述網(wǎng)絡(luò)接口,通過對(duì)neTIf結(jié)構(gòu)體中的各個(gè)成員進(jìn)行賦值來實(shí)現(xiàn)網(wǎng)。neTIf結(jié)構(gòu)體中定義了指向下個(gè)網(wǎng)絡(luò)接口的指針、IP地址、網(wǎng)絡(luò)掩碼、網(wǎng)關(guān)以及用于實(shí)現(xiàn)以太網(wǎng)接收、發(fā)送數(shù)據(jù)包的函數(shù)等內(nèi)容。在驅(qū)動(dòng)中所要完成的任務(wù)就是實(shí)現(xiàn)網(wǎng)絡(luò)的初始化、數(shù)據(jù)的接收發(fā)送以及終端等任務(wù),最終通過硬件接口函數(shù)可以實(shí)現(xiàn)對(duì)硬件的驅(qū)動(dòng)。
3.2、測(cè)量程序的設(shè)計(jì)
DHT11發(fā)送的數(shù)據(jù)包大小為40bit,包括測(cè)得的空氣溫度的整數(shù)部分8bit,空氣溫度小數(shù)部分為8bit,空氣濕度整數(shù)部分8bit,空氣濕度小數(shù)部分8bit,還有8bit是進(jìn)行數(shù)據(jù)校驗(yàn),大小為前面4個(gè)字節(jié)的和。
當(dāng)DHT11進(jìn)行接收主機(jī)命令和向主機(jī)發(fā)送數(shù)據(jù)時(shí),GPIO_Pin_7引腳分別被配置成和上拉輸入模式和推挽輸入模式。其中STM32從DHT11讀取數(shù)據(jù)的程序如下所示。
8DHT11_Read_Data(u8*temp,u8*humi)
{
u8buf[5];
8i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)
buf[i]=DHT11_Read_Byte();
if((buf[0]+buf[1]+buf[2]+buf[3])=
=buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}
elsereturn1;
return0;
}
3.3、控制程序的設(shè)計(jì)
加熱系統(tǒng)和濕簾系統(tǒng)通過繼電器控制通斷,兩個(gè)繼電器分別通過GPIOB的7和8兩個(gè)引腳進(jìn)行控制。引腳的輸出模式配置為通用推挽輸出模式,速率配置為2MHz。GPIO_SetBits函數(shù)使引腳輸出高電平,繼電器導(dǎo)通,控制相應(yīng)的執(zhí)行設(shè)備運(yùn)行,GPIO_ResetBits函數(shù)使引腳輸出低電平,將繼電器斷開,控制相應(yīng)的執(zhí)行設(shè)備關(guān)閉。STM32中的程序執(zhí)行過程如圖2所示。
圖2 STM32程序執(zhí)行過程
3.4、遠(yuǎn)程控制軟件的設(shè)計(jì)
文中設(shè)計(jì)的遠(yuǎn)程控制軟件是在美國微軟公司發(fā)行的VC6.0平臺(tái)上利用MFC進(jìn)行開發(fā)的,設(shè)計(jì)的主控制界面如圖3所示。
圖3主控制界面
從圖3中可以看出主控界面主要包括實(shí)時(shí)監(jiān)測(cè)模塊和設(shè)備控制模塊兩大部分,實(shí)時(shí)監(jiān)測(cè)模塊主要包括對(duì)溫室內(nèi)溫濕度進(jìn)行上限和下限的設(shè)置,以及STM32控制器傳送的實(shí)時(shí)數(shù)據(jù)的顯示,可以選擇將測(cè)得的數(shù)據(jù)保存到數(shù)據(jù)庫中,并進(jìn)行歷史數(shù)據(jù)的查詢。設(shè)備控制模塊的主要功能是對(duì)溫室內(nèi)進(jìn)行環(huán)境調(diào)節(jié)的執(zhí)行設(shè)備進(jìn)行控制,可以選擇手動(dòng)控制和自動(dòng)控制2種模式。遠(yuǎn)程控制軟件與STM32F103VET6中央控制器之間采用TCP/IP協(xié)議進(jìn)行通信,規(guī)定了設(shè)備之間進(jìn)行數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)格式。2個(gè)設(shè)備在進(jìn)行數(shù)據(jù)傳輸時(shí)會(huì)建立起一條虛擬的網(wǎng)絡(luò)通道,數(shù)據(jù)和控制命令封裝成數(shù)據(jù)包的形式在這條通道上進(jìn)行傳輸。遠(yuǎn)程控制軟件與STM32通信的過程如圖4所示。
圖4 遠(yuǎn)程控制軟件與STM32通信過程
設(shè)計(jì)中采用SQLSever2008數(shù)據(jù)庫保存系統(tǒng)運(yùn)行過程中產(chǎn)生的溫室環(huán)境數(shù)據(jù)和執(zhí)行設(shè)備控制信息等數(shù)據(jù)。用戶可以對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行保存、查詢、刪除和維護(hù)操作,準(zhǔn)確快速地獲取所需要的數(shù)據(jù)。
4、結(jié)束語
文中利用STM32單片機(jī)作為溫室內(nèi)的控制器,實(shí)現(xiàn)了通過網(wǎng)絡(luò)對(duì)溫室內(nèi)溫濕度的遠(yuǎn)程測(cè)量和控制。由于溫室內(nèi)的CO2濃度和光照強(qiáng)度對(duì)植物的生長也有影響,所以可以對(duì)系統(tǒng)進(jìn)行功能擴(kuò)展,控制更多的環(huán)境變量,使系統(tǒng)可以更好地營造植物生長的環(huán)境。