年 賀,肖志剛,索雪松,滕桂法
(1.河北農(nóng)業(yè)大學(xué) 機(jī)電工程學(xué)院,河北 保定 071001;2.河北農(nóng)業(yè)大學(xué) 信息科學(xué)與技術(shù)學(xué)院, 河北 保定 071001)
在實(shí)際生產(chǎn)中,設(shè)施農(nóng)業(yè)種植作物多為果蔬,收獲時(shí)間較為集中,果蔬易于腐爛變質(zhì)[1-2]。目前棚種果蔬采摘后先運(yùn)輸?shù)脚锿?,利用地秤稱重后售賣(mài)給菜商,數(shù)據(jù)記錄在紙質(zhì)賬薄上,工作過(guò)程比較繁瑣且工作效率低[3-6]。通過(guò)在運(yùn)輸車(chē)上加裝稱重系統(tǒng)不僅可以省卻一次搬運(yùn)過(guò)程,提高勞動(dòng)效率,還可以將果蔬的產(chǎn)量信息發(fā)送給云平臺(tái),為智慧農(nóng)業(yè)系統(tǒng)的建立提供有力的數(shù)據(jù)支持[7-9]。為此本文設(shè)計(jì)了1 種基于STM32 的設(shè)施農(nóng)業(yè)果蔬運(yùn)輸車(chē)稱重系統(tǒng)。
稱重系統(tǒng)搭載在電動(dòng)運(yùn)輸車(chē)上,通過(guò)加裝稱重傳感器的方式改裝車(chē)體載物臺(tái),使原本只具有運(yùn)輸功能的運(yùn)輸車(chē)兼具稱重功能。系統(tǒng)主要由STM32、人機(jī)交互模塊、稱重模塊、GPRS 模塊等組成,并由軟件編程實(shí)現(xiàn)預(yù)期功能。人機(jī)交互模塊用于顯示所稱量果蔬重量以及對(duì)果蔬種類(lèi)和大棚號(hào)的選擇;稱重模塊完成對(duì)果蔬重量的稱量,并將數(shù)據(jù)傳輸?shù)絊TM32 中;GPRS 模塊將設(shè)備接入網(wǎng)絡(luò),傳輸果蔬信息至云服務(wù)器。系統(tǒng)的框圖如圖 1 所示。
圖1 系統(tǒng)框圖Fig.1 System block diagram
硬件電路連接圖如圖2 所示。
圖2 系統(tǒng)硬件連接圖Fig.2 System hardware connection diagram
硬件部分主要包括供電模塊、STM32 主控制器模塊、GPRS 模塊、稱重模塊、人機(jī)交互模塊。
供電電源采用運(yùn)輸車(chē)24 V 動(dòng)力電源,通過(guò)LM2596S 型降壓模塊降壓至5 V,直接與人機(jī)交互模塊、稱重模塊、GPRS 模塊電源端連接供電,與STM32 主控制器模塊5 V 電源輸入端連接,通過(guò)開(kāi)發(fā)板內(nèi)置AMS1117-3.3 型線性穩(wěn)壓芯片將5 V 電壓轉(zhuǎn)換為3.3 V 供電[10]。
主控制器模塊采用ALIENTEK MiniSTM32 開(kāi)發(fā)板,板載芯片為STM32F103RTC6 型。
GPRS 模塊采用Air800 模塊,通過(guò)串口方式進(jìn)行通信,將Air800 模塊的TXD、RXD 引腳分別接到STM32 的PA3、PA2 引腳。
稱重模塊采用YCD-100 kg 壓阻應(yīng)變式壓力傳感器與HX711 型24 位A/D 轉(zhuǎn)換芯片。
壓力傳感器的電阻應(yīng)變片將被測(cè)件上的應(yīng)變信息轉(zhuǎn)換為電信號(hào), A/D 轉(zhuǎn)換芯片接受電信號(hào)并將其轉(zhuǎn)換為二進(jìn)制數(shù)字信號(hào)傳輸給STM32 主控制 器[11-13]。YCD-100 kg 壓力傳感器主要技術(shù)參數(shù):綜合誤差0.02% F.S;安全過(guò)載范圍150%;使用溫度范圍 -20 ℃~ +80 ℃。
稱重傳感器個(gè)數(shù)根據(jù)稱重系統(tǒng)用途、秤體需要的支撐點(diǎn)數(shù)確定,秤體的支撐點(diǎn)與傳感器應(yīng)具有一一對(duì)應(yīng)關(guān)系[14]。對(duì)本系統(tǒng)中的長(zhǎng)方形載物臺(tái),考慮載物臺(tái)機(jī)械結(jié)構(gòu)的穩(wěn)定性,設(shè)計(jì)4 個(gè)支撐點(diǎn),采用4 個(gè)稱重傳感器,按中心對(duì)稱和軸對(duì)稱原則安裝在稱重臺(tái)面下方實(shí)現(xiàn)稱重[15],傳感器擺放位置如圖 3 所示。
圖3 傳感器安裝位置Fig.3 Sensor installation location
將4 片HX711 的SCK 引腳分別接在單片機(jī)的PB1、PB13、PB5、PB7 引腳,DOUT 分別接在PB2、PB14、PB6、PB8 引腳。
人機(jī)交互模塊使用5 寸基本型USART HMI 智能串口屏。該屏為800×480 像素4 線精密電阻式觸摸屏,并添加了GB312 型字庫(kù)以及相應(yīng)背景圖片與各種組態(tài)控件,設(shè)計(jì)人機(jī)交互界面。利用STM32 的USART1 實(shí)現(xiàn)串口屏與主控模塊的信息交互,將串口屏的TXD、RXD 引腳分別接到STM32 的PA9、PA10 引腳完成硬件連接。
軟件設(shè)計(jì)包括主控芯片STM32 嵌入式的軟件設(shè)計(jì)和人機(jī)交互模塊USART HMI串口屏的軟件設(shè)計(jì)。串口屏軟件設(shè)計(jì)在USART HMI 開(kāi)發(fā)環(huán)境中進(jìn)行,實(shí)現(xiàn)數(shù)據(jù)顯示與信息輸入等人機(jī)交互功能。STM32軟件設(shè)計(jì)采用C 語(yǔ)言在keil5 集成環(huán)境下進(jìn)行基于標(biāo)準(zhǔn)庫(kù)的開(kāi)發(fā),通過(guò)移植FreeRTOS 操作系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理和實(shí)時(shí)控制任務(wù)。
稱重系統(tǒng)使用壓阻應(yīng)變式壓力傳感器,對(duì)所稱量物品的重量值進(jìn)行數(shù)據(jù)采樣。采集過(guò)程是先將壓力信號(hào)轉(zhuǎn)換為電信號(hào),再將電信號(hào)轉(zhuǎn)換為數(shù)字信 號(hào)[16]。在信號(hào)轉(zhuǎn)換過(guò)程中由于硬件電路本身或多或少存在不可避免的電磁干擾[17],以及隨機(jī)噪聲的存在都會(huì)影響測(cè)量結(jié)果的準(zhǔn)確性。使用數(shù)字濾波算法排除噪聲信號(hào)的干擾不但能降低設(shè)備的硬件成本[18],而且只要適當(dāng)改變?yōu)V波算法的參數(shù)就能改變?yōu)V波特性[19]。
本系統(tǒng)采用防脈沖干擾平均濾波法。此方法是連續(xù)采集H個(gè)數(shù)據(jù),將這H個(gè)數(shù)據(jù)按大小排序,取其中間段h個(gè)值進(jìn)行算數(shù)平均,把得到的算數(shù)平均值作為本次采集到的數(shù)據(jù)值。既可以剔除噪聲信號(hào),又可以對(duì)采樣數(shù)據(jù)進(jìn)行平滑加工[20-21]。原理表示如下:
主控芯片采集4 片HX711 A/D 轉(zhuǎn)換芯片的數(shù)據(jù),對(duì)所采集數(shù)據(jù)進(jìn)行軟件數(shù)字濾波與計(jì)算得到稱重傳感器初始值。進(jìn)入程序循環(huán),再次采集稱重傳感器數(shù)據(jù),利用軟件進(jìn)行數(shù)字濾波與計(jì)算,本次計(jì)算值減去初始值即為當(dāng)前所稱量物品重量值。
串口屏模塊實(shí)現(xiàn)的功能:設(shè)備上電,時(shí)間欄顯示當(dāng)前時(shí)間表示串口屏初始化完成。點(diǎn)擊屏幕中棚號(hào)區(qū)域出現(xiàn)數(shù)字鍵盤(pán)輸入當(dāng)前棚號(hào),種類(lèi)選擇區(qū)用點(diǎn)選按鈕來(lái)選擇果蔬種類(lèi)。重量顯示區(qū)顯示所稱量果蔬重量,當(dāng)重量超出本系統(tǒng)準(zhǔn)確量程(75 kg)時(shí),系統(tǒng)將調(diào)出超重頁(yè)面提示用戶。產(chǎn)量統(tǒng)計(jì)界面用來(lái)顯示當(dāng)日所稱量每種果蔬的統(tǒng)計(jì)值。點(diǎn)擊“確定”按鈕將本次稱重結(jié)果累加至統(tǒng)計(jì)值中,同時(shí)給STM32 主控芯片發(fā)送數(shù)據(jù)上傳命令。
使用Air800 模塊自帶的TCP 協(xié)議與網(wǎng)絡(luò)連接,GPS 導(dǎo)航系統(tǒng)進(jìn)行坐標(biāo)定位。數(shù)據(jù)傳輸報(bào)文格式為:標(biāo)識(shí) 4 字節(jié);車(chē)ID 3 字節(jié);棚ID 2 字節(jié);品種 3 字節(jié);重量 5 字節(jié);時(shí)間 14 字節(jié);地理坐標(biāo) 13 字節(jié),其中標(biāo)識(shí):000 1 開(kāi)機(jī) 、000 2 果蔬信息傳輸。
傳輸過(guò)程為:
①終端登錄向服務(wù)端發(fā)送數(shù)據(jù)報(bào)文,除標(biāo)識(shí)、車(chē)ID、時(shí)間,地理坐標(biāo)其他字段均填默認(rèn)值。服務(wù)端返回登錄確認(rèn)信息“888”。
②確認(rèn)收到重量,服務(wù)端向終端返回“999”。
③當(dāng)用戶點(diǎn)擊屏幕上確定鍵,確定記錄此次稱重?cái)?shù)據(jù)時(shí)STM32 主控芯片通過(guò)調(diào)用Air800 模塊將此數(shù)據(jù)傳送至云平臺(tái)。
通過(guò)對(duì)每個(gè)壓力傳感器分別施加不同的重量值讀取HX711 芯片A/D 轉(zhuǎn)換后的輸出值,分析所施加重量值與輸出值之間的關(guān)系得出每個(gè)壓力傳感器的特性。本稱重系統(tǒng)量程設(shè)定為75 kg,稱重臺(tái)面將所稱量物品的重量分散到各個(gè)傳感器,重量值從0 kg開(kāi)始每隔1 kg 逐次累加至50 kg。為避免硬件可能產(chǎn)生的噪聲信號(hào)或?qū)嶒?yàn)過(guò)程中其他偶然因素產(chǎn)生的噪聲信號(hào)影響實(shí)驗(yàn)結(jié)果,對(duì)每個(gè)重量值的輸出信號(hào)采樣60 次,用防脈沖干擾平均濾波法處理采樣值后確定HX711 芯片A/D 轉(zhuǎn)換后的輸出值。利用實(shí)驗(yàn)所得數(shù)據(jù)擬合出傳感器的輸出特性,各個(gè)傳感器所承載重量值與輸出值為線性關(guān)系如圖4 所示,得出由傳感器輸出值轉(zhuǎn)換為重量值的計(jì)算參數(shù)如表1 所示。
表1 擬合參數(shù)Table.1 Fitting parameters
圖4 擬合曲線Fig.4 Fitted curve
由于本稱重系統(tǒng)是由4 個(gè)壓力傳感器共同完成重量信號(hào)的采集,每個(gè)傳感器的輸入輸出特性均為線性,由原始數(shù)據(jù)獲取重量值的方式可有2 種。方式一,先濾波后線性變換。各傳感器分別使用濾波算法處理所采集到的原始數(shù)據(jù),將濾波后所得數(shù)據(jù)值代入各傳感器的特性方程進(jìn)行線性變換,然后將各傳感器所獲取的重量值相加得到本次稱量物品的重量值。方式二,先線性變換后濾波。將各傳感器采集到的原始數(shù)據(jù)代入各傳感器的特性方程進(jìn)行線性變換,然后相加進(jìn)行數(shù)字濾波,最后得出本次稱量物品的重量值。此法只進(jìn)行了一次總的數(shù)字濾波,較方式一中每個(gè)傳感器都進(jìn)行一次數(shù)字濾波節(jié)約了3 次濾波時(shí)間,又由下式(1)可知各線性變換公式中的常數(shù)b,合并為1 個(gè)總的常數(shù)B。在線性變換時(shí)暫時(shí)略去常數(shù)b,只對(duì)采集到的原始數(shù)值進(jìn)行乘系數(shù)的線性變換,將此過(guò)程稱之為擬線性變換。待到濾波結(jié)束后,再在濾波所得結(jié)果上加總常數(shù)B 得到本次稱量物品的重量值,這樣又節(jié)約3 次加常數(shù)的時(shí)間。
主控芯片STM32 為單線程控制器,順序查詢接收A/D 轉(zhuǎn)換器芯片HX711 傳輸?shù)臄?shù)字信號(hào)。采樣過(guò)程為輪詢4 片HX711 A/D 轉(zhuǎn)換芯片H次(即定義的采樣次數(shù)),將每次輪詢結(jié)果均存入4 行H列的二維數(shù)組中(4 片A/D 轉(zhuǎn)換芯片H次輪詢)。對(duì)于濾波流程方式一(先濾波后線性變換),先將二維數(shù)組的每個(gè)行向量數(shù)值排序、取h個(gè)中間值(即剔除噪聲信號(hào)后剩下的采樣值)的算數(shù)平均值,再對(duì)每個(gè)行向量所得算數(shù)平均值進(jìn)行線性變換,然后將4 個(gè)經(jīng)線性變換的算數(shù)平均值相加得重量值。在實(shí)際稱量物品時(shí)4 個(gè)壓力傳感器共同承載重物,但并不能保證重量均分到每個(gè)壓力傳感器,并且可能存在所稱量物品輕微晃動(dòng)的情況。這樣在1 個(gè)行向量中存在的最大值或最小值并不是噪聲信號(hào),而方式一的濾波流程會(huì)將這樣的采樣值剔除出去,從而降低了測(cè)量值的真實(shí)性。濾波流程方式二(先線性變換后濾波),將行向量中數(shù)據(jù)根據(jù)每個(gè)傳感器的特性先做擬線性變換,然后將二維數(shù)組中擬線性變換后的列向量數(shù)值對(duì)應(yīng)相加。對(duì)每次輪詢結(jié)果求和后再進(jìn)行數(shù)字濾波,可彌補(bǔ)方式一中可能剔除有效數(shù)據(jù)的缺陷,因此本系統(tǒng)采用方式二濾波流程。濾波流程圖如圖5 所示。
圖5 濾波流程圖Fig.5 Filter flow chart
稱重范圍是0 ~75 kg,精度為0.05 kg,車(chē)體如圖6 所示。將采樣點(diǎn)數(shù)設(shè)定為30,濾波后剩余采樣點(diǎn)設(shè)定為10。在實(shí)際應(yīng)用場(chǎng)景中進(jìn)行測(cè)試并與標(biāo)準(zhǔn)秤進(jìn)行對(duì)比,測(cè)試結(jié)果如表2 所示,最大絕對(duì)誤差為 0.04 kg,滿足精度要求。
圖6 運(yùn)輸車(chē)Fig.6 Carrier vehicle
表2 稱重模塊測(cè)試Table 2 Weighing module test
人機(jī)交互模塊能夠?qū)崿F(xiàn)與STM32 主控模塊的通訊功能,完成交互任務(wù)。人機(jī)交互模塊測(cè)試結(jié)果如圖7 所示。 打開(kāi)服務(wù)器數(shù)據(jù)接收軟件監(jiān)聽(tīng)端口,通過(guò)Air800 模塊將本系統(tǒng)與服務(wù)器連接,在本系統(tǒng)與服務(wù)器達(dá)成握手協(xié)議后進(jìn)行通訊測(cè)試,數(shù)據(jù)成功傳輸至服務(wù)器,數(shù)據(jù)接收軟件監(jiān)聽(tīng)端口接收結(jié)果如圖8 所示。
圖7 人機(jī)交互界面Fig.7 Interactive interface
圖8 網(wǎng)絡(luò)上傳測(cè)試Fig.8 Network upload test
本文設(shè)計(jì)了1 套與運(yùn)輸車(chē)相結(jié)合的果蔬稱重系統(tǒng)。該系統(tǒng)以STM32 控制器為核心,以24 位A /D轉(zhuǎn)換芯片采集稱重傳感信號(hào)。根據(jù)傳感元件的線性特性確定濾波流程,采用防脈沖干擾平均濾波算法進(jìn)行數(shù)字濾波。該稱重系統(tǒng)可實(shí)現(xiàn)果蔬重量數(shù)據(jù)的實(shí)時(shí)顯示與數(shù)據(jù)上傳至云平臺(tái)等功能。通過(guò)在設(shè)施溫室大棚現(xiàn)場(chǎng)試驗(yàn)驗(yàn)證,所設(shè)計(jì)的系統(tǒng)安全可靠,滿足實(shí)際精度需求??稍谠O(shè)施農(nóng)業(yè)中進(jìn)行推廣應(yīng)用。