張 偉,宋梓源,王明茜
(咸陽師范學(xué)院 計(jì)算機(jī)學(xué)院,陜西 咸陽 712000)
隨著生活水平的提高,人們?cè)谏钯|(zhì)量方面也有了更高的需求。在家庭及工作場(chǎng)所養(yǎng)殖綠植已成為人們改善室內(nèi)環(huán)境的主要方式,但由于生活節(jié)奏的加快人們時(shí)常忘記按時(shí)澆灌綠植,從而導(dǎo)致綠植枯萎死亡的現(xiàn)象時(shí)有發(fā)生。為了提高盆栽綠植澆水的智能化,設(shè)計(jì)一款基于STM32的盆花自動(dòng)澆水系統(tǒng),該系統(tǒng)可以檢測(cè)綠植生長(zhǎng)環(huán)境的溫濕度以及土壤濕度情況,當(dāng)檢測(cè)到環(huán)境參數(shù)值低于設(shè)定的閾值時(shí),自動(dòng)啟動(dòng)盆花澆水功能,從而減輕了人們養(yǎng)護(hù)綠植的工作量。
智能灌溉系統(tǒng)設(shè)計(jì)的主要目的是為了解決澆水不及時(shí)、養(yǎng)護(hù)不當(dāng)而導(dǎo)致綠植枯萎死亡的問題。系統(tǒng)選用DHT11[1]傳感器檢測(cè)室內(nèi)溫濕度數(shù)據(jù),土壤濕度傳感器實(shí)時(shí)監(jiān)測(cè)綠植的土壤濕度情況,從而實(shí)現(xiàn)對(duì)綠植環(huán)境參數(shù)的監(jiān)測(cè)。
系統(tǒng)的整體設(shè)計(jì)思想是:將溫濕度傳感器檢測(cè)到的室內(nèi)溫濕度數(shù)據(jù)顯示在串口調(diào)試工具上;利用土壤濕度傳感器采集土壤濕度數(shù)據(jù),并將數(shù)據(jù)傳送給主控板并顯示在OLED顯示屏上;水泵及電機(jī)驅(qū)動(dòng)通過獲取到的土壤濕度數(shù)據(jù)來控制水泵的開關(guān),并在OLED顯示屏上顯示澆水狀態(tài)。系統(tǒng)的主控板選用的是STM32F407[2],主要對(duì)溫濕度傳感器、土壤濕度傳感器、OLED及水泵進(jìn)行控制,以實(shí)現(xiàn)自動(dòng)澆水功能。系統(tǒng)的設(shè)計(jì)分硬件與軟件兩部分,系統(tǒng)總體框架如圖1所示。
圖1 系統(tǒng)框架
土壤濕度傳感器[3]由土壤探頭和濕度處理模塊組成,通過杜邦線將它們相連。將土壤探頭插入土壤當(dāng)中檢測(cè)數(shù)據(jù),濕度處理模塊將土壤探頭檢測(cè)到的信息進(jìn)行分析得到具體數(shù)據(jù),然后將數(shù)據(jù)傳送給主控板,主控板將接收到數(shù)據(jù)與設(shè)置的土壤閾值比較,如果數(shù)據(jù)小于設(shè)定的閾值,啟動(dòng)水泵以實(shí)現(xiàn)自動(dòng)澆水的功能。藍(lán)色電位器在模塊中可以調(diào)節(jié)土壤濕度閾值,順時(shí)針旋轉(zhuǎn)濕度閾值變大,逆時(shí)針旋轉(zhuǎn)時(shí)濕度閾值變小,模擬量輸出D0可以與繼電器相連,直接控制繼電器的轉(zhuǎn)動(dòng),模擬量輸出AO可以和STM32的ADC轉(zhuǎn)換接口相連,通過ADC轉(zhuǎn)換,獲得具體的土壤濕度數(shù)值。土壤濕度傳感器引腳接口如圖2所示,GND為電源接地,VCC為電源正極(3.3 V),A0接ADC1通道5的PA3引腳,D0置空。
圖2 土壤濕度傳感器引腳定義
該系統(tǒng)選擇的是YL-69[4]土壤濕度傳感器,該濕度傳感器是由不銹鋼探針和防水探頭構(gòu)成的,土壤檢測(cè)探頭感應(yīng)面積大大提高了導(dǎo)電性,表面鍍鎳防止生銹,可長(zhǎng)期埋置于土壤內(nèi)使用。
系統(tǒng)中選用STM32F407開發(fā)板上自帶的DHT11溫濕度傳感器,其連電路連接如圖3所示。引腳PG9用于處理器與DHT11間的同步和通訊,數(shù)據(jù)格式為單總線方式,通信時(shí)間約為4 ms,一次傳輸40個(gè)bit,格式定義如下[5]:
圖3 溫濕度傳感器電路連接圖
數(shù)據(jù)格式:濕度(8位整數(shù))+濕度(8位小數(shù))+溫度(8位整數(shù))+溫度(8位小數(shù))+8位校驗(yàn)和。
發(fā)送開始信號(hào)后,先設(shè)置為輸出模式,然后拉低電平,持續(xù)至少18 ms,然后再拉高電平,持續(xù)20 μs~40 μs,在設(shè)置為輸入模式時(shí),檢查DHT11的響應(yīng)信號(hào),低電平持續(xù)80 μs,高電平持續(xù)80 μs,即DHT11有響應(yīng),如果沒有響應(yīng),就一直為高電平。保持輸入模式時(shí),識(shí)別低電平為50 μs時(shí),高電平26 μs~28 μs,就為bit0;當(dāng)識(shí)別低電平50 μs,高電平70 μs,就為bit1。然后繼續(xù)識(shí)別低電平50 μs,再變?yōu)檩敵瞿J剑敵龈唠娖?,一次?shù)據(jù)采集完成,當(dāng)沒有接收到下一次開始信號(hào)時(shí),保持原狀態(tài)不變。
由于在系統(tǒng)中各模塊之間電壓大小不同,所以需要一個(gè)驅(qū)動(dòng)來調(diào)節(jié)電壓,使系統(tǒng)電路電壓穩(wěn)定,因此選擇L298N電機(jī)驅(qū)動(dòng)作電壓調(diào)節(jié)器。L298N的主要功能:提供了12 V的電源輸入,5 V的電源輸出;邏輯控制輸入電路,設(shè)置IN1和IN2的電位能夠控制電機(jī)正反轉(zhuǎn)和停止;該驅(qū)動(dòng)器可以使能2個(gè)電機(jī),ENA、ENB使能兩個(gè)輸出端口。L298N引腳接口[6]如圖4所示,接上跳線帽,采用5 V板載使能,將外部12 V電源供電給模塊,并輸出5 V電源到STM32開發(fā)板,IN1接PE5引腳,IN2接PB6引腳,輸出端口out3、out4接上水泵。
圖4 L298N引腳定義
由于OLED[7]具有自發(fā)光功能,且其反應(yīng)速度快,厚度小于LCD屏幕,視角寬,對(duì)比度高,同時(shí)可以使用柔性面板,模塊溫度檢測(cè)范圍大,構(gòu)造簡(jiǎn)單及高分辨率等特點(diǎn)。因此,系統(tǒng)中選擇OLED顯示屏來顯示數(shù)據(jù)。本次設(shè)計(jì)采用的是0.96寸OLED顯示屏,其主要特征如下:
0.96英寸OLED提供三種顏色,即黃色、白色和藍(lán)色;黃色光占前面1/4,藍(lán)色光占后面3/4;OLED屏幕的固定區(qū)域顯示固定顏色,顏色和顯示區(qū)域不能被修改,OLED分辨率為128*64。
本設(shè)計(jì)中OLED屏采用IIC接線形式,引腳接口如圖5所示,GND接地,VCC接電源正極(3 V~5.5 V),OLED的D0(SDA)引腳,在IIC通信協(xié)議中為數(shù)據(jù)管腳,這里接上開發(fā)板的PB8引腳,OLED的D1(SCL)引腳,在IIC通信協(xié)議中為時(shí)鐘管腳,這里接上開發(fā)板的PB9引腳,RES接PC7引腳,DC接PC11引腳,CS接PC8引腳。
圖5 L298N接口引腳
系統(tǒng)中水泵是用來實(shí)現(xiàn)澆水的設(shè)備,本次開發(fā)中選用的是小型水泵,它的工作電壓為2 V~16 V,工作電流為1 A,系統(tǒng)使用12 V電壓供電,利用L298N電壓放大模塊進(jìn)行電壓控制[8]。儲(chǔ)水設(shè)備使用瓶子裝水,便于加水及水泵抽水。
該系統(tǒng)軟件部分是在Keil C51[9]環(huán)境下開發(fā)完成的,主要包括環(huán)境溫濕度、土壤濕度、自動(dòng)澆水功能以及顯示等模塊的軟件設(shè)計(jì)與配置,其系統(tǒng)操作流程如圖6所示。
圖6 系統(tǒng)操作流程
土壤濕度模塊軟件設(shè)計(jì)分為三個(gè)部分,其主要步驟如下:
(1)模擬信息輸出端口的配置。
對(duì)YL-69的接口初始化進(jìn)行配置,GPIO A端口[10]為PA3,設(shè)置為模擬輸入模式,獲取采集到的模擬信號(hào),模擬信息輸出端口配置如下:
RCC_AHB1_PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能端口A時(shí)鐘
RCC_APB2_PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1時(shí)鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; //配置ADC1的3號(hào)通道模擬輸出
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN; //設(shè)置引腳具有模擬輸入或輸出功能。
(2)ADC初始化,設(shè)置ADC的相關(guān)參數(shù)。
采用獨(dú)立工作模式[11],在當(dāng)前的通道5只采用ADC硬件工作,ADC的工作時(shí)鐘設(shè)置42 MHz,禁止DMA;ADC的工作模式設(shè)置為12位精度,不需要連續(xù)掃描,模數(shù)轉(zhuǎn)換器連續(xù)工作,禁止觸發(fā)檢測(cè),不需要PWM脈沖觸發(fā)工作,存儲(chǔ)ADC的結(jié)果值采用右對(duì)齊,執(zhí)行一次轉(zhuǎn)換結(jié)果,最后使能ADC1。
ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div2;//設(shè)置ADC掃描方式
ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;//精度設(shè)置
指定ADC1常規(guī)通道5的采樣時(shí)間,3個(gè)ADC時(shí)鐘時(shí)間,采樣時(shí)間計(jì)算方法:采樣時(shí)間=3個(gè)ADC時(shí)鐘時(shí)間=3*(1/42 MHz)。
(3)采集轉(zhuǎn)換電壓。
最后讀取傳感器的值,根據(jù)該電壓數(shù)值轉(zhuǎn)換為百分比的形式返回,讀取到的是濕度的百分比值,將float型轉(zhuǎn)換為int型輸出。計(jì)算方法:電壓百分比=采集到的電壓值/最大電壓值,具體如下[12]:
percent_float=((a-min)/(max-min))*100%
(1)
將采集到的數(shù)據(jù)轉(zhuǎn)換為電壓值數(shù)據(jù),ADC設(shè)置為12精度工作模式,計(jì)數(shù)范圍為0~4 095,供電電壓為3.3 V,計(jì)算方法:電壓=采集到的數(shù)值/4 095*3.3,具體如下:
adc_vol=(float)adc_vol*3.3/4 095
(2)
DHT11溫濕度模塊軟件設(shè)計(jì)部分,先對(duì)GPIO輸入輸出進(jìn)行配置,然后判斷DHT11工作與否,若正常工作,則獲取所讀8位字節(jié)數(shù)據(jù),將所獲取的字節(jié)數(shù)據(jù)轉(zhuǎn)換為溫室度數(shù)據(jù),并對(duì)讀取數(shù)據(jù)進(jìn)行校驗(yàn)和。
(1)對(duì)DHT11的GPIO口進(jìn)行初始化,使能GPIOG時(shí)鐘源,PG9為輸出模式。
RCC_AHB1_PeriphClockCmd(RCC_AHB1_Periph_GPIOG, ENABLE);// G組端口初始化
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;//配置PE5
(2)調(diào)用uint32_t dht_start()函數(shù)[13]開啟DHT11工作,并將其設(shè)置為輸出模式,PG9輸出低電平并延時(shí)20 ms,接著PG9輸出高電平并延時(shí)25 ms,再將輸出模式調(diào)為輸入模式,檢測(cè)引腳電平、模塊響應(yīng)信號(hào)。
(3)調(diào)用dht_read_byte()函數(shù)獲取8位數(shù)據(jù),調(diào)用dht_read_data(data)函數(shù)獲取溫濕度數(shù)據(jù),通過數(shù)組依次獲取濕度的小數(shù)、整數(shù),溫度的小數(shù)、整數(shù),并計(jì)算校驗(yàn)和,最終將獲取的溫濕度數(shù)據(jù)輸出顯示。
L298N電機(jī)驅(qū)動(dòng)模塊軟件設(shè)計(jì)主要是為了進(jìn)行電壓轉(zhuǎn)換及供電,將水泵與L298N進(jìn)行連接,只需對(duì)兩個(gè)引腳進(jìn)行配置,然后對(duì)開啟關(guān)閉電機(jī)條件進(jìn)行判斷。
對(duì)L298N的GPIO口進(jìn)行初始化,初始化B、E組端口,使能GPIOB時(shí)鐘源、GPIOE時(shí)鐘源,配置PE5,PB6為輸出模式,作為IN1,IN2的使能引腳,設(shè)置如下:
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_5;//配置PE5,PB6為輸出模式
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//設(shè)置為輸出模式
當(dāng)濕度低于設(shè)定值之時(shí),把IN1置0,IN2置1,驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng);當(dāng)濕度高于設(shè)定值之時(shí),將IN1置0,IN2置0,停止電機(jī)轉(zhuǎn)動(dòng),并調(diào)用OLED_ShowString()函數(shù)進(jìn)行水泵開關(guān)顯示。
OLED模塊軟件設(shè)計(jì)部分需要配置IIC接口[14]以及對(duì)OLED進(jìn)行寄存器初始化,在頭文件中對(duì)漢字顯示進(jìn)行點(diǎn)陣配置等。
(1)設(shè)置OLED的開關(guān)狀態(tài)。
在OLED_WR_Byte()函數(shù)中進(jìn)行開啟關(guān)閉配置,當(dāng)?shù)谝粋€(gè)參數(shù)為0X14時(shí)為開啟OLED顯示,當(dāng)?shù)谝粋€(gè)參數(shù)為0X10時(shí)為關(guān)閉OLED顯示,通過調(diào)用void OLED_Display_On()函數(shù)開啟OLED顯示,調(diào)用void OLED_Display_Off()函數(shù)關(guān)閉OLED顯示。
(2)配置IIC接口,初始化B、C組端口,使能GPIOB、GPIOC時(shí)鐘源,配置PB8,PB9為輸出模式,PB8引腳作為IIC的SDA,PB9引腳[15]作為IIC的SCL,具體操作如下:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOB、GPIOC時(shí)鐘源
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; //配置PB8,PB9為輸出模式
做題要根據(jù)具體的題目進(jìn)行具體的分析,首先要分析帶電粒子在復(fù)合場(chǎng)中的運(yùn)動(dòng)狀態(tài),因此偏重點(diǎn)研究帶電粒子在電磁場(chǎng)中的運(yùn)動(dòng)規(guī)律,就不考慮重力場(chǎng)對(duì)粒子的影響。
(3)對(duì)OLED相關(guān)寄存器進(jìn)行初始化,使用OLED_WR_Byte()函數(shù)對(duì)OLED寄存器進(jìn)行初始化配置。
調(diào)用void OLED_ShowString()函數(shù)顯示英文,調(diào)用void OLED_ShowCHinese()函數(shù)顯示中文。函數(shù)中設(shè)置三個(gè)參數(shù)分別為u8 x,u8 y,u8 *chr,第1個(gè)參數(shù)為x軸分辨率,第2個(gè)參數(shù)為y軸頁碼,64分辨率分為8個(gè)頁碼,第3個(gè)參數(shù)為需要顯示的字符串信息,使用時(shí)要強(qiáng)制轉(zhuǎn)換為無符號(hào)短整型。
在對(duì)濕度傳感器特性進(jìn)行測(cè)試時(shí)測(cè)量的是模擬量輸出電壓值,根據(jù)輸出情況對(duì)傳感器的特性進(jìn)行分析。當(dāng)測(cè)試環(huán)境參數(shù)低于設(shè)定閾值時(shí),將通過串口1中斷服務(wù)程序?qū)⑵錅y(cè)試結(jié)果顯示在串口調(diào)試助手上,經(jīng)過多次測(cè)試,測(cè)試結(jié)果為濕度數(shù)據(jù)會(huì)隨著電壓值的增大而減小,總體變化波動(dòng)不大,電壓值、濕度數(shù)據(jù)基本穩(wěn)定。
對(duì)DHT11檢測(cè)到室內(nèi)的溫濕度數(shù)據(jù)進(jìn)行測(cè)試,data數(shù)據(jù)由8 bit組成,每?jī)蒪it組成一個(gè)字符,共四字符,前兩位字符組成溫度數(shù)據(jù)值,后兩位字符組成濕度數(shù)據(jù)值,同樣通過串口1中斷服務(wù)程序?qū)⑵錅y(cè)試結(jié)果顯示在串口調(diào)試助手上。經(jīng)過多次檢測(cè)結(jié)果可知,該DHT11傳感器檢測(cè)結(jié)果準(zhǔn)確,溫度值相比濕度值更加穩(wěn)定,總體變化波動(dòng)不大。
自動(dòng)澆水部分由水泵和電機(jī)驅(qū)動(dòng)組成,水泵接收到電平信號(hào)從而控制開關(guān),測(cè)試中用紙杯裝滿水來提高環(huán)境濕度,土壤濕度設(shè)定的最低濕度閾值為30 RH,最高為50 RH,經(jīng)過系統(tǒng)多次測(cè)試,當(dāng)?shù)陀?0 RH時(shí),水泵自動(dòng)澆水,當(dāng)高于50 RH時(shí),顯示濕度正常,自動(dòng)澆水模塊測(cè)試成功,如圖7所示。
圖7 水泵工作測(cè)試
圖8 系統(tǒng)實(shí)物圖
基于STM32的智能灌溉系統(tǒng)以STM32F407為主控板,通過在其上搭建土壤溫濕度傳感器、溫濕度傳感器、電機(jī)驅(qū)動(dòng)及OLED顯示屏等以實(shí)現(xiàn)硬件功能;在KeilC51環(huán)境下開發(fā)完成各軟件功能模塊的設(shè)計(jì)及配置。經(jīng)測(cè)試,系統(tǒng)運(yùn)行穩(wěn)定,可根據(jù)不同綠植設(shè)置的閾值自動(dòng)啟動(dòng)盆花澆水的功能,達(dá)到了預(yù)期設(shè)計(jì)目標(biāo),提
高了綠植養(yǎng)護(hù)過程中的自動(dòng)化和智能化水平。