張鵬


摘 要: 隨著科技進(jìn)步及農(nóng)業(yè)生產(chǎn)的需求,越來(lái)越多的農(nóng)業(yè)大棚開(kāi)始引入智能化監(jiān)測(cè)系統(tǒng),這些系統(tǒng)通過(guò)各類(lèi)傳感器實(shí)時(shí)獲取監(jiān)測(cè)大棚內(nèi)的環(huán)境參數(shù),如溫度、濕度、光照等,并將獲取到的數(shù)據(jù)傳輸?shù)絾纹瑱C(jī)控制系統(tǒng)進(jìn)行分析和處理。同時(shí),農(nóng)民通過(guò)無(wú)線終端設(shè)備相關(guān)App軟件遠(yuǎn)程查看大棚各環(huán)境參數(shù),高效幫助其進(jìn)行農(nóng)業(yè)大棚管理和決策。智慧農(nóng)業(yè)大棚檢測(cè)系統(tǒng)的應(yīng)用可以大大提高農(nóng)作物的產(chǎn)量和質(zhì)量,減少資源的浪費(fèi),快速提高農(nóng)業(yè)生產(chǎn)的效益。
關(guān)鍵詞:智慧農(nóng)業(yè);傳感器;環(huán)境;系統(tǒng)
中圖分類(lèi)號(hào):TP311? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)09-0053-04
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID)
0 引言
隨著人口的增加和資源的有限性,傳統(tǒng)的農(nóng)業(yè)生產(chǎn)方式已經(jīng)無(wú)法滿足人們對(duì)食品的需求,因此,引入智能化技術(shù)來(lái)監(jiān)測(cè)和控制農(nóng)業(yè)生產(chǎn)過(guò)程,成為解決這一問(wèn)題的有效途徑。本論文旨在設(shè)計(jì)一種基于單片機(jī)的智慧農(nóng)業(yè)大棚檢測(cè)系統(tǒng),通過(guò)傳感器采集環(huán)境參數(shù),并通過(guò)單片機(jī)進(jìn)行數(shù)據(jù)處理和控制,實(shí)現(xiàn)人為對(duì)大棚環(huán)境的實(shí)時(shí)監(jiān)測(cè)和調(diào)控。該系統(tǒng)具有實(shí)時(shí)性、精確性和自動(dòng)化的特點(diǎn),可以提高農(nóng)作物的生長(zhǎng)質(zhì)量和產(chǎn)量,并減少資源的浪費(fèi)。通過(guò)本論文的研究,將為智慧農(nóng)業(yè)的發(fā)展提供有力的技術(shù)參考。
1 系統(tǒng)設(shè)計(jì)主要目標(biāo)
本項(xiàng)目是基于單片機(jī)芯片設(shè)計(jì)一款智慧農(nóng)業(yè)大棚檢測(cè)系統(tǒng),以實(shí)時(shí)監(jiān)測(cè)大棚環(huán)境的關(guān)鍵參數(shù),進(jìn)而更好地管理農(nóng)業(yè)大棚植物生長(zhǎng)。具體功能如下[1]:
1) 環(huán)境溫度和濕度檢測(cè):系統(tǒng)采用SHT30溫濕度傳感器,能夠?qū)崟r(shí)監(jiān)測(cè)大棚內(nèi)的溫度和濕度,并將數(shù)據(jù)傳送給單片機(jī)進(jìn)行處理。
2) 光照強(qiáng)度檢測(cè):系統(tǒng)采用BH1750光照傳感器,能夠?qū)崟r(shí)監(jiān)測(cè)大棚內(nèi)的光照強(qiáng)度,并將數(shù)據(jù)傳送給單片機(jī)進(jìn)行處理。
3) 報(bào)警閥值設(shè)置:系統(tǒng)支持按鍵操作,用戶可以通過(guò)按鍵調(diào)整報(bào)警閥值,以適應(yīng)不同的農(nóng)業(yè)環(huán)境需求。
4) 報(bào)警聲音提示:當(dāng)溫度、濕度或光照強(qiáng)度超過(guò)設(shè)定的閥值時(shí),系統(tǒng)將觸發(fā)報(bào)警,連接的蜂鳴器發(fā)出聲音,提醒用戶注意。
5) 數(shù)據(jù)顯示和管理:系統(tǒng)從單片機(jī)端通過(guò)藍(lán)牙模塊將數(shù)據(jù)接收,用戶通過(guò)智能手機(jī)特定App軟件查看當(dāng)前的溫度、濕度和光照強(qiáng)度數(shù)據(jù),同時(shí)也可以設(shè)置報(bào)警閥值,在手機(jī)上進(jìn)行實(shí)時(shí)監(jiān)控和管理。
2 硬件電路設(shè)計(jì)
2.1 整體設(shè)計(jì)流程
2.2 主控芯片連接
STM32F103RCT6是一款高性能、低功耗的32位嵌入式集成單片機(jī)芯片,本設(shè)計(jì)將其作為主控芯片負(fù)責(zé)整個(gè)系統(tǒng)的控制和數(shù)據(jù)處理,并與其他模塊通過(guò)相關(guān)引腳進(jìn)行數(shù)據(jù)的接收和發(fā)送。
2.3 溫濕度傳感器連接
主控芯片上的I2C接口引腳(SDA和SCL) 與溫濕度傳感器SHT30上I2C總線對(duì)應(yīng)引腳相連。
2.4 光照傳感器連接
主控芯片上的I2C接口引腳與光照傳感器BH1750上I2C總線對(duì)應(yīng)引腳相連。
2.5 報(bào)警蜂鳴器連接
報(bào)警蜂鳴器通過(guò)一個(gè)GPIO引腳與主控芯片相連。當(dāng)報(bào)警條件觸發(fā)時(shí),主控芯片控制該引腳輸出高電平信號(hào),以激活蜂鳴器發(fā)出聲音提示。
2.6 HC05藍(lán)牙模塊連接
HC05藍(lán)牙模塊用于實(shí)現(xiàn)單片機(jī)與Android手機(jī)App之間的數(shù)據(jù)傳輸。它通過(guò)串口通信與主控芯片相連,主控芯片上的對(duì)應(yīng)串口引腳(UART_TX和UART_RX) 與藍(lán)牙模塊的對(duì)應(yīng)引腳相連[2]。
3 軟件程序設(shè)計(jì)
主控芯片(STM32F103RCT6) 負(fù)責(zé)整個(gè)系統(tǒng)的控制和數(shù)據(jù)處理,它與其他硬件模塊相連接,接收傳感器數(shù)據(jù),進(jìn)行數(shù)據(jù)處理和報(bào)警判斷。
3.1 溫濕度傳感器模塊
溫濕度傳感器(SHT30) 通過(guò)I2C總線與主控芯片相連,負(fù)責(zé)實(shí)時(shí)監(jiān)測(cè)大棚內(nèi)的溫度和濕度,并將采集到的數(shù)據(jù)傳輸給主控芯片進(jìn)行處理。
以下是驅(qū)動(dòng)SHT30傳感器讀取溫濕度主要程序設(shè)計(jì),并將數(shù)據(jù)通過(guò)串口打印出來(lái)。
1) 定義宏和函數(shù):
#define SHT30_ADDR 0x44;
void I2C1_Init(void);void I2C1_Start(void);void I2C1_Stop(void);
void I2C1_WriteByte(uint8_t byte);uint16_t I2C1_ReadByteAck(void);
以上三行定義地址和用于控制I2C總線的函數(shù)。
void SHT30_Init(void);
void SHT30_Measure(float *temperature, float *humidity);
以上兩行定義SHT30傳感器初始化和測(cè)量溫濕度的函數(shù)。
void USART1_Init(void);void USART1_SendChar(char ch);
int fputc(int ch, FILE *f);
以上兩行定義初始化USART1串口和發(fā)送字符的函數(shù),以及重定向標(biāo)準(zhǔn)輸出流的函數(shù)。
2) 初始化函數(shù):
void I2C1_Init(void)
該函數(shù)用于初始化I2C1總線和相關(guān)的引腳,使能I2C1和GPIOB的時(shí)鐘,并配置I2C1的引腳,包括引腳的速度、模式、占空比、從機(jī)地址等參數(shù)。
void USART1_Init(void)
該函數(shù)用于初始化USART1串口和相關(guān)的引腳,使能USART1和GPIOA的時(shí)鐘,配置USART1的引腳,包括引腳的速度和模式等,在USART1配置中包括波特率、字長(zhǎng)、停止位、校驗(yàn)位等參數(shù)。
3) I2C總線控制函數(shù):
void I2C1_Start(void);void I2C1_Stop(void);
void I2C1_WriteByte(uint8_t byte);uint16_t I2C1_ReadByteAck(void);
以上兩行函數(shù)定義用于控制I2C總線的起始、停止、寫(xiě)數(shù)據(jù)和讀數(shù)據(jù)操作。
4)SHT30傳感器初始化和測(cè)量函數(shù):
void SHT30_Init(void);
void SHT30_Measure(float *temperature, float *humidity);
SHT30_Init函數(shù)用于初始化SHT30傳感器,在該函數(shù)中,首先需要發(fā)送軟件復(fù)位指令給傳感器,再延時(shí)一段時(shí)間等待傳感器重置。SHT30_Measure函數(shù)用于測(cè)量溫濕度數(shù)據(jù),在該函數(shù)中,發(fā)送測(cè)量指令給傳感器,再延時(shí)等待傳感器完成測(cè)量,最后從傳感器讀取溫濕度數(shù)據(jù),并通過(guò)指針參數(shù)返回給主程序。
5) 串口控制函數(shù):
void USART1_SendChar(char ch);int fputc(int ch, FILE *f)
USART1_SendChar函數(shù)用于通過(guò)USART1串口發(fā)送一個(gè)字符,在該函數(shù)中,通過(guò)輪詢USART狀態(tài)寄存器的空閑標(biāo)志位,判斷發(fā)送緩沖區(qū)是否為空,再把字符寫(xiě)入數(shù)據(jù)寄存器進(jìn)行發(fā)送。fputc函數(shù)是C庫(kù)函數(shù)的重定向函數(shù),用于將標(biāo)準(zhǔn)輸出的字符發(fā)送到USART1串口。說(shuō)明,對(duì)于每個(gè)調(diào)用printf函數(shù)輸出的字符,都通過(guò)USART1_SendChar函數(shù)發(fā)送出去。
3.2 光照傳感器模塊
光照傳感器(BH1750) 通過(guò)I2C總線與主控芯片相連,負(fù)責(zé)實(shí)時(shí)監(jiān)測(cè)大棚內(nèi)的光照強(qiáng)度。如下是主要程序設(shè)計(jì),用以驅(qū)動(dòng)BH1750讀取環(huán)境光照強(qiáng)度[3]。
1) 定義BH1750的地址BH1750_ADDR為0x23(默認(rèn)地址)。
2) 調(diào)用I2C1_Init()函數(shù),并初始化I2C1總線和相關(guān)的GPIO引腳。其中,通過(guò)RCC_APB1PeriphClockCmd和RCC_APB2PeriphClockCmd函數(shù)使能I2C1和GPIOB時(shí)鐘,然后配置GPIOB的引腳輸出模式。其次,使用I2C_Init函數(shù)初始化I2C1,并設(shè)置其工作模式、占空比、禁止應(yīng)答、地址模式以及通信速率。最后,通過(guò)I2C_Cmd函數(shù)使能I2C1。
3) 調(diào)用I2C1_Start()函數(shù)用于發(fā)送I2C總線的起始信號(hào),同時(shí),調(diào)用I2C_GenerateSTART函數(shù)和I2C_CheckEvent函數(shù)共同作用發(fā)送起始信號(hào)和等待起始信號(hào)完成發(fā)送。
4) 調(diào)用I2C1_Stop()函數(shù)用于發(fā)送I2C總線的停止信號(hào),同時(shí),調(diào)用I2C_GenerateSTOP函數(shù)發(fā)送停止信號(hào)。
5) 調(diào)用I2C1_WriteByte()函數(shù)用于向I2C設(shè)備發(fā)送一個(gè)字節(jié)的數(shù)據(jù),同時(shí),通過(guò)I2C_SendData函數(shù)發(fā)送數(shù)據(jù),并使用I2C_CheckEvent函數(shù)等待發(fā)送完成。
6) BH1750_ReadData()函數(shù)用于讀取光照強(qiáng)度數(shù)據(jù),該函數(shù)發(fā)送啟動(dòng)測(cè)量指令和模式設(shè)置指令(連續(xù)高分辨率測(cè)量模式),并通過(guò)兩次讀取數(shù)據(jù)寄存器的方式獲取光照強(qiáng)度數(shù)據(jù),將其拼接為一個(gè)16位的無(wú)符號(hào)整數(shù)。
7) USART1_Init()函數(shù)用于初始化USART1串口和相關(guān)的GPIO引腳,同時(shí),使用RCC_APB2PeriphClockCmd函數(shù)使能USART1和GPIOA時(shí)鐘,并配置GPIOA的引腳9為復(fù)用推挽輸出模式(GPIO_Mode_AF_PP) 。在調(diào)用USART_Init函數(shù)中需要初始化USART1,設(shè)置波特率、數(shù)據(jù)位長(zhǎng)度、停止位、奇偶校驗(yàn)、硬件流控制。
8) USART1_SendChar()函數(shù)用于發(fā)送一個(gè)字符到USART1串口,同時(shí),使用USART_SR寄存器的USART_FLAG_TXE標(biāo)志位檢查發(fā)送緩沖區(qū)是否為空,再通過(guò)USART_SendData函數(shù)發(fā)送字符數(shù)據(jù)。
9) 調(diào)用fputc()函數(shù)重定向輸出流,并用printf函數(shù)打印字符發(fā)送到USART1串口,在該函數(shù)中同時(shí)調(diào)用USART1_SendChar函數(shù)發(fā)送字符數(shù)據(jù),并返回該字符。
10) 最后在main()函數(shù)中,依次調(diào)用I2C1_Init()和USART1_Init()函數(shù)進(jìn)行初始化操作,并通過(guò)printf函數(shù)向串口發(fā)送初始信息。
3.3 報(bào)警蜂鳴器模塊
報(bào)警蜂鳴器通過(guò)一個(gè)GPIO引腳與主控芯片相連。當(dāng)報(bào)警條件滿足時(shí),主控芯片控制該引腳輸出高電平信號(hào),以激活蜂鳴器發(fā)出聲音提示。
如下是主要程序設(shè)計(jì),使用STM32F103標(biāo)準(zhǔn)庫(kù)編寫(xiě)的蜂鳴器控制代碼。
1) 定義BEEP_Init函數(shù)用于初始化蜂鳴器引腳,將其配置推挽輸出模式。
2) 定義BEEP_On和BEEP_Off函數(shù)分別用于開(kāi)啟和關(guān)閉蜂鳴器。
3) 最后調(diào)用main函數(shù),通過(guò)循環(huán)控制蜂鳴器以500ms的間隔進(jìn)行開(kāi)啟和關(guān)閉操作。
3.4 HC05藍(lán)牙模塊
HC05藍(lán)牙模塊通過(guò)串口通信與主控芯片相連,負(fù)責(zé)實(shí)現(xiàn)與智能手機(jī)App之間的數(shù)據(jù)傳輸和通信,它接收主控芯片發(fā)送的數(shù)據(jù),并通過(guò)藍(lán)牙與智能手機(jī)App進(jìn)行交互。
如下是主要程序設(shè)計(jì),通過(guò)串口驅(qū)動(dòng)HC05模塊,進(jìn)行配置和數(shù)據(jù)通信。
1) 定義宏和函數(shù):
#define AT_CMD_MODE? ? ?"AT+CMODE=0\r\n"
#define AT_CMD_PW? ? ? ?"AT+PSWD=1234\r\n"
void USART2_Init(void);
void USART2_SendChar(char ch);? void USART2_SendString(char* str);
char USART2_Receive(void);
以上五行定義用于配置HC05模塊的AT指令,以及用于初始化USART2串口、發(fā)送字符和字符串、接收字符的函數(shù)。
2) USART2串口初始化函數(shù):
void USART2_Init(void)
該函數(shù)用于初始化USART2串口和相關(guān)引腳,其中,包括使能USART2和GPIOA的時(shí)鐘,配置USART2的引腳。同時(shí),還需要USART2進(jìn)行配置,包括波特率、數(shù)據(jù)位長(zhǎng)度、停止位、奇偶校驗(yàn)位等參數(shù),最后使能USART2串口。
3) 發(fā)送字符和字符串函數(shù):
void USART2_SendChar(char ch);void USART2_SendString(char* str)
以上兩個(gè)函數(shù)定義用于通過(guò)USART2串口發(fā)送字符和字符串。對(duì)于USART2_SendChar函數(shù),它會(huì)等待發(fā)送緩沖區(qū)為空,然后將字符寫(xiě)入數(shù)據(jù)寄存器進(jìn)行發(fā)送。對(duì)于USART2_SendString函數(shù),它會(huì)遍歷字符串中的每個(gè)字符,并調(diào)用USART2_SendChar函數(shù)進(jìn)行發(fā)送。
4) 接收字符函數(shù):
char USART2_Receive(void)
該函數(shù)用于從USART2串口接收一個(gè)字符。其功能是等待接收緩沖區(qū)非空時(shí),讀取數(shù)據(jù)寄存器的值并返回接收到的字符。說(shuō)明,此函數(shù)在主循環(huán)中可以用于接收HC05模塊發(fā)送的數(shù)據(jù)。
4 程序調(diào)試測(cè)試
4.1 硬件測(cè)試
1) 檢查主控芯片STM32F103RCT6、傳感器模塊SHT30和BH1750以及藍(lán)牙模塊HC05的是否連接正確,并使用示波器或多用途測(cè)試儀檢測(cè)各個(gè)模塊的電源供應(yīng)和信號(hào)線連接是否正常。
2) 測(cè)試溫濕度傳感器(SHT30) 和光照強(qiáng)度傳感器(BH1750) 是否能夠正確采集環(huán)境數(shù)據(jù)[4]。
3) 測(cè)試蜂鳴器是否能夠發(fā)出合適的聲音提示。
4.2 固件程序測(cè)試
1) 在STM32開(kāi)發(fā)環(huán)境中編譯程序,將固件程序燒錄到主控芯片STM32F103RCT6上,并使用串口調(diào)試助手等工具,與STM32建立通信連接,檢查數(shù)據(jù)的傳輸和接收是否正常。
2) 對(duì)溫濕度傳感器和光照強(qiáng)度傳感器進(jìn)行數(shù)據(jù)采集測(cè)試,觀察是否能夠準(zhǔn)確讀取傳感器數(shù)據(jù)。
3) 設(shè)置閾值并測(cè)試報(bào)警功能,確保報(bào)警觸發(fā)條件和報(bào)警提示的準(zhǔn)確性。
4.3 智能手機(jī)App測(cè)試
1) 打開(kāi)App,并與藍(lán)牙模塊進(jìn)行連接,觀察是否能夠成功建立通信。
2) 測(cè)試數(shù)據(jù)的傳輸和接收功能,確保從STM32接收到的數(shù)據(jù)能夠在App界面上正確顯示。
3) 設(shè)置閾值并觸發(fā)報(bào)警測(cè)試,確認(rèn)報(bào)警提示是否按照設(shè)定的條件正常工作。
5 結(jié)束語(yǔ)
本項(xiàng)主要通過(guò)傳感器采集數(shù)據(jù)、主控芯片處理和判斷、藍(lán)牙通信與智能手機(jī)App交互,以及報(bào)警蜂鳴器的控制,實(shí)現(xiàn)了對(duì)溫度、濕度和光照強(qiáng)度等參數(shù)的實(shí)時(shí)監(jiān)測(cè)和報(bào)警功能。總的來(lái)說(shuō),本項(xiàng)目的設(shè)計(jì)與實(shí)施過(guò)程對(duì)軟硬件的協(xié)同工作、數(shù)據(jù)處理、用戶體驗(yàn)等方面有了更深入的理解,成功地將智能農(nóng)業(yè)大棚監(jiān)測(cè)系統(tǒng)帶入實(shí)際應(yīng)用,并為農(nóng)業(yè)生產(chǎn)者提供了一種方便、高效且可靠的解決方案。
參考文獻(xiàn):
[1] 李海,朱雁鋒,李媛瓊,等.智慧農(nóng)場(chǎng)環(huán)境溫濕度信標(biāo)智能檢測(cè)系統(tǒng)[J].信息記錄材料,2019,20(8):193-194.
[2] 孫繼梅.淺談土壤墑情的及時(shí)監(jiān)測(cè)預(yù)報(bào)對(duì)農(nóng)業(yè)生產(chǎn)的意義[J].農(nóng)業(yè)與技術(shù),2019,39(23):112-113.
[3] 馬佳力,謝婭婭.基于物聯(lián)網(wǎng)的智慧農(nóng)業(yè)大棚系統(tǒng)的研究與實(shí)現(xiàn)[J].信息通信,2019,32(1):134-135.
[4] 劉岑松,羅小巧,洪習(xí)歡.基于物聯(lián)網(wǎng)的智能澆花系統(tǒng)[J].電子測(cè)量技術(shù),2020,43(1):176-180.
【通聯(lián)編輯:朱寶貴】