黃昊,劉俊靈,胡騰達,石軍鋒
(西南大學工程技術學院,重慶市,400716)
豬肉在我國肉類產品消耗中一直占據主導地位,近兩年由于新冠疫情和豬瘟的影響,我國養殖豬存欄量銳減,豬肉價格漲幅明顯。并且我國生豬養殖業機械化水平僅為30%,傳統人工飼喂的效率不高,盡管國家出臺相關政策使得價格有所回落,但是仍明顯高于往年肉價[1-2]。相較于美國、加拿大和歐盟等發達國家地區,我國的現代化養殖業才剛剛起步。目前國外眾多高校研究所以及大型公司已廣泛開展了現代化母豬養殖的研究,包括豬臉識別、豬的行為跟蹤、母豬的發情狀況監測等[3-5]。在國外的智能母豬飼喂系統中,較為完備且被廣泛使用的有荷蘭Velos系統、美國Osborne全自動母豬飼喂站(TEAM)和加拿大的Gestal哺乳母豬管理系統等[6-7]。
自精準農業、智慧農業提出以來,我國在智能養豬方面涌現出許多成果。王衡等[8]使用STM32作為主控,與方波發生器電路、雙極板系統和LCD顯示屏構成了一種豬食槽剩余量的監測設備,將銅板之間的間距轉化為電容大小的變化來采集飼料余量的數據;楊亮等[9]以RFID、壓力傳感模塊和紅外傳感模塊等多個傳感器為基礎,通過檢測發情母豬對公豬的主動靠近次數來對發情母豬進行實時標記;杜虹等[10]設計了一款智能小車,通過PLC軟件系統與觸摸屏配合控制,給總共四個飼喂槽進行飼料的補充;張澤峰[11]設計了一款母豬體溫紅外監測系統,應用AGC、多種濾波和二維數組溫度處理的方法,對不同時期的母豬進行實時體溫監控,防止其出現異常升溫;潘松[12]、李喜武等[13]在幼豬培育上進行試驗研究,保證了新生小豬飲水和生長環境。除此之外,國內也已經有多家公司開始研發并推出商業化的母豬飼喂系統[14-15],但是在功能上只是較為簡單地下料下水,缺少對動作執行是否可靠進行回執以及對母豬體征狀態的監控,相比于市面上應用已久的國外同類型產品缺乏競爭力。
本研究設計的智能母豬飼喂系統,除實現了按需精確下料下水功能以外,還增加了由流量計、漫反射光電傳感器組成的下料下水可靠性檢測系統以及非接觸式測溫系統,旨在提高智能化母豬飼喂系統的可靠性和實用性,降低人工飼喂中由于飼料浪費而損失的成本,實時監測母豬的體溫狀態,從而實現母豬的智能飼喂。
智能化母豬飼喂系統主要由控制系統和機械結構兩部分組成。其中控制系統主要包括硬件模塊(控制板、傳感器和執行機構)以及相應的控制軟件組成,整體結構如圖1所示。

圖1 智能化母豬飼喂控制系統整體結構Fig. 1 Whole structure of intelligent sowfeeding control system
控制板包括控制母板和接口板兩部分。控制母板以Exynos4412作為主控,負責向下級發送動作指令,處理反饋的電平信號以及和云端通信;接口板作為轉換電路,接收到主控的信號后通過調壓電阻、繼電器開關以及功能芯片的作用調度傳感器、執行機構進行工作,并將其反饋的電信號——GPIO以及IRQ傳輸給母板,由主控進行再處理。其中傳感器包括進出口門接近開關、下料光電開關、下水流量計、ABSD-01A非接觸式溫度計和RFID耳標閱讀器,執行機構包括進門推桿電機、下料電機和下水電磁閥。
控制軟件部分以嵌入式Linux作為操作系統,向上下層提供主要的API接口;底層驅動負責激活初始化相關硬件,以platform虛擬總線的形式在系統中注冊設備號、生成設備節點以及向上層提供相應的硬件操作接口函數;最后由應用層承擔整個飼喂邏輯,調用系統和驅動提供的API對硬件進行操控,完成對硬件動作的指令發送、底層反饋信息的處理和數據的云端交互[16]。
飼喂控制系統硬件部分需要完成進門控制、下水下料控制以及監測、RFID耳標識別、溫度采集和出門信號采集等基本功能。具體傳感器和執行機構分類與功能說明如表1所示。
光電開關、接近開關和流量計均為PNP型,工作模式采用高電平觸發。在門開閉、電機落料和水閥注水時通過信號線向接口板發送電信號,接口板對信號進行電平轉換后發送給MCU,最后由MCU中運行的主程序進行統一處理;RFID耳標閱讀器為ISO11784/11785標準,采集模式為主動上傳,讀取距離45 cm±10%。裝置位于飼喂系統的食槽右側,當豬將頭伸到食槽里面時,便可讀取耳標信息,通過與后臺記錄進行核對就能知道相應母豬的今日飼喂量;溫度傳感器采用工業級非接觸式紅外測溫儀,安裝在食槽的正上方,在豬吃食時能夠準確測量到豬的體溫。

表1 傳感器與執行機構功能Tab. 1 Sensor and actuator functions
進口門使用推桿電機鎖定,正向供電推桿伸出即可將門鎖死,反向供電推桿收回門可正常開閉;下料電機為五線制雨刮電機,將轉動部分連接傳動軸,再在軸上外加傳動螺紋,通過螺旋旋轉的方式給母豬下料;下水閥使用四分口徑電磁閥,僅通過電流的通斷即可控制水的開閉。
各個傳感器即執行機構在飼喂站的安裝位置如圖2所示。

圖2 飼喂站傳感器/執行機構安裝位置示意圖Fig. 2 Diagram of sensor/actuator installationlocation in feeding station1.進門接近開關 2.進門推桿電機 3.RFID耳標閱讀器4.非接觸式溫度傳感器 5.落料光電開關 6.下料電機7.下水閥、流量計 8.出門接近開關
控制母板采用Exynos4412作為主控MCU,工作主頻為1.5 GHz。母板的基本電路包括串口電路、RS485電路、網口電路、電源管理電路、USB-HUB電路、EMMC電路和DDR3電路。其主要功能為承載操作系統、電源管理、內存分配、命令下發、定時器啟動、GPIO以及IRQ中斷號的申請、處理和設備號注冊,還負責與底層設備進行RS232、RS485和網絡通信。相關引腳如圖3所示。
為控制執行機構與收集傳感器信號,本設計一共用到了主控芯片的18路GPIO和2路AD轉換引腳。其中AD轉換用來處理溫度信號與流量計脈沖;GPIO一部分用來控制執行機構進行下料下水,另一部分用來對傳感器反饋的高電平進行計數。

圖3 Exynos4412部分引腳圖Fig. 3 Partial pin diagram of Exynos4412
接口板電路設計目的主要包括:(1)對輸入電壓進行調制,確保執行機構在額定電壓下運行;(2)轉換MCU的GPIO信號,使得主程序能夠通過繼電器對電機進行控制;(3)通過運算放大器和電阻調壓電路對傳感設備的反饋數據進行轉換。
2.3.1 電阻調壓以及其他雜項電路
前三個基礎模塊為:電壓轉換電路——負責將24 V輸入調制到傳感器和執行機構額定的工作電壓,由于轉換前后壓差較大,所以選用DCDC來進行調制,如圖4(a)所示。其中XL2596S-5.0固定輸出5 V電壓,XL2596S-ADJ根據兩個反饋電阻分別輸出6 V和15 V電壓,在輸出端由肖特基二極管、屏蔽電感和濾波電容進行整流即可得到波形規律的直流電。

(a) DC-DC

(b) 三色共陽LED指示燈

(c) 電阻調壓電路圖4 基礎模塊電路圖Fig. 4 Basic module circuit
LED信號燈電路——通過GPIO將基極電壓拉高,集電極與發射極導通,進而點亮LED。選用三色共陽LED指示燈,每次只亮一種燈色,以三種不同的信號燈以及閃爍頻率來表示整個控制系統的工作狀態,如圖4(b)所示。電阻調壓電路——由于傳感器的信號電壓與母板GPIO電壓差距較大,直接通信高電壓沖擊會損壞處理器,所以在信號輸出端需要串聯電阻負責將進出門接近開關和下料光電開關的高電平信號轉換到主控芯片GPIO規定的1.8 V,如圖4(c)所示。
2.3.2 繼電器控制模塊
繼電控制模塊的主控芯片采用了ULN2003集成達林頓管IC芯片,每一對達林頓管都串聯一個2.7 K的基極電阻,可以直接與負載連接,對于繼電器類型的感性負載則需要將COM端連接到VCC處避免反向擊穿。
整個控制由主控芯片與24 V常開繼電器配合完成,集電極控制線圈的開閉,防止由于電流較小而達林頓管無法完全導通的情況(圖5)。首先由MCU發出GPIO信號使得左側控制引腳變為高電平,晶體管飽和導通,繼電器控制端與地連通形成回路,進而彈片從常開端撥到常閉端,向電機供電。
2.3.3 運算放大電路
運算放大電路負責處理流量計和溫度計的模擬信號,由4運放LM324芯片和高精度OPA234芯片組成,如圖6所示。
對于溫度信號,由于ABSD-01A的輸出信號為4~20 mA電流信號,而主控MCU的AD轉換采用電壓信號,并且其最佳采集區間為0~1.8 V,所以在輸出端并聯一個高精度250 Ω電阻將其轉換為電壓信號,以電阻的電壓為測量值進行計算。4~20 mA對應溫度計的-20 ℃~80 ℃量程,轉換后為1~5 V,當采集對象為豬時,所需實際測溫范圍約在10 ℃~40 ℃。因此設計采用加法器、減法器和跟隨器,將運算放大后的電壓移動至0~2 V區間,與MCU的最佳采集對應,由此來獲得準確的溫度數字信號。
流量計的輸出為5 V方波信號,可以直接將信號縮放,所以對于流量計的電平信號只需要將5 V電壓轉換到0~1.8 V區間,再交給主控進行計數處理即可。通過計數,將實際下水量與處理器統計的脈沖數一一對應,用函數進行擬合,即可得到對應關系進而控制并監測下水量。

圖5 繼電器控制電路Fig. 5 Relay control circuit

圖6 運算放大電路Fig. 6 Operational amplifier circuit
本文設計的控制系統軟件基于Linux開發,采用了platform虛擬總線的驅動注冊方式。引入driver-bus與device-bus兩條鏈表,將驅動信息與設備信息分離實現去耦合化。在一個完整的字符設備驅動中,需要完善file_operations和platform_driver兩個函數。file_operations向內核申請設備功能,然后向上傳遞API,提供給應用層操縱硬件的接口;platform_driver在內核中注冊設備,初始化相關的功能引腳,將其設定為指定高電平或者低電平,最后實現設備注銷釋放函數,當不再使用對應設備時釋放該驅動的所有接口[17]。
驅動結構如圖7所示。
在驅動注冊時,會隱式調用內核中的platform_match函數,此時總線探針(detector,如圖8所示)分別檢查driver_bus和device_bus上的name和id_table。當兩者對應時,則驅動中probe函數執行,注冊設備號、生成設備節點并初始化設備。

圖7 驅動結構

圖8 總線探針Fig. 8 Bus detector
3.1.1 執行機構驅動
整個電路共有5個繼電器,一共控制4個電機,其中前兩個繼電器協作控制進口門推桿電機,分別與電機的正負極相連。由于需要正反接來實現推桿的伸縮,所以要求兩個繼電器在同一時刻進行反相操作完成正負極調換,具體實現邏輯如圖9所示。

圖9 電機驅動邏輯Fig. 9 Motor driven logic
在驅動層每個繼電器的控制引腳分配一個GPIO,通過ioctl來拉低拉高引腳電平,借助三極管的導通特性進行控制。對于其他的三個電機,工作需求只有電路的開閉所以只需要一個繼電器即可,每次對單個繼電器進行操作就能夠達到對下料電機、下水電磁閥的控制。
3.1.2 傳感器驅動
傳感器以采集信號為全部工作任務,通過信號線反饋電平信號。
接近開關、光電開關和流量計的底層驅動僅向上層提供poll接口,通過申請設備節點對文件描述符進行監聽。當沒有事件發生時則掛起設備減少對CPU的占用,一旦有電平變化則喚醒監聽對事件進行計數處理。
溫度傳感器的底層實現相對復雜,包括通用的讀、ioctl和poll接口,還需要鎖、系統等待隊列、內核定時器以及中斷的支持。首先在系統初始化時申請溫度采集的專用隊列(s3c24xx_adc_read),然后將溫度傳感器的溫度采集動作通過ioctl與內核定時器綁定,每過一定時間進行一次采集,在采集前后附加互斥鎖的上鎖與解鎖。并在驅動層設定對應閾值,當超過閾值時則觸發中斷,中斷動作為上報當前溫度對應的AD值并重載定時器。
應用層負責整個系統的邏輯,包括對信號的處理、控制豬的飼喂量、收集底層機構的狀態、處理傳感器傳遞的信號、對執行結構下發命令以及向后臺提交飼喂狀況等。其整體邏輯如圖10所示。

圖10 飼喂邏輯流程圖Fig. 10 Flow chart of feeding
整個流程的正常飼喂邏輯大致可以分為以下4個階段。
1) 豬打開進口門進入飼喂站,將入口門鎖死防止多頭豬同時進入。
2) 豬走過過道,將頭伸入食槽,耳標閱讀器讀取耳標信息,與后臺數據庫交互、比對獲得每日飼喂量和今日飼料余量,同時溫度傳感器記錄母豬體溫并上報。若在一定時間內只有溫度信號無耳標信號則臨時作為無耳標豬飼喂。
3) 下料電機下料,每次下料間隔1 min保證母豬能將上一次的飼料吃完,避免堆積浪費或腐敗發霉。
4) 豬吃完飼料,從出口門離開飼喂系統,出口門鎖死取消。
正常的飼喂邏輯作為主線程在應用層運行,除此之外還有后臺通信線程,發送心跳包保證服務器與本地客戶端的正常socket連接;飼喂上傳進程,實時同步本地、云端的飼喂數據,確保飼喂量的精確;信號處理線程,處理底層反饋的所有信號;異常處理線程,處理正常流程以外的異常情況;定時器中斷,對所有的執行機構、信號采集機構增加一個或多個定時器,在規定時間內監測動作是否可靠執行,各線程邏輯如圖11所示。

(a) 后臺通信線程

(b) 飼喂上傳線程

(c) 信號處理線程

(d) 定時器中斷

(e) 異常處理函數圖11 飼喂控制各線程邏輯Fig. 11 Feed control’s logic of each thread
但是在實際飼喂中,可能會有異常情況產生,總體可分為機械故障和豬只異常行為導致的故障。機械故障為豬走進飼喂站后,下料電機沒有正常進行下料。豬只行為異常包括:(1)豬拱開進口門但是未進入,導致門鎖死但飼喂站內并沒有豬在進食;(2)當前豬長時間在飼喂站內停留導致其他豬只無法進食。以上兩大類異常均由定時器來處理,對于機械異常,當下料電機下料時光電開關會進行信號采集,若在一定時間內沒有收到光電開關反饋的信息則判定下料出錯,點亮飼喂站的紅色指示燈示意飼養員進行故障排查;對于豬只異常行為錯誤,設定了每頭母豬的最大進食時間和判定飼喂站里是否有豬的最大等待時間——最大進食時間指每一頭母豬最多能在飼喂站內停留的最長時間,當超過這個時間時還沒有觸發開門的標志量,那么控制系統會強制打開進口門放下一頭母豬將前一頭豬拱出飼喂站;最大等待時間在進口門鎖死時啟動,當一定時間內沒有采集到任何豬的信息(耳標號和溫度),那么則視為門打開后沒有豬進入飼喂站,此時也會打開進口門。
設備安裝在重慶市合川區龍市鎮某豬場,圖12為試驗場景圖片。選取了5頭母豬作為試驗對象,時間為2020年12月—2021年2月,5頭豬的飼喂計劃根據其生產周期、體型及季節確定[18-20]。飼喂邏輯遵循控制進食量但不限制進食時間的機制,下料配比參照豬場飼養員提供的料水比5∶2進行配制。飼喂量重置時間為每天零點。

圖12 母豬飼喂試驗場景Fig. 12 Sow feeding experiment scene
下料電機帶動螺旋輸送器旋轉從而將飼料投喂給母豬,由于機械結構上螺旋導程已經固定,所以每一次轉動產生的下料量是固定的。將每圈投送的飼料進行單獨稱重,測量其波動范圍。圖13統計了20次單圈下料,其中實際下料量為每次稱重得到的示數,根據趨勢線最終將單圈下料量確定為22 g,而實際下料在22 g 上下波動,主要是由于粉料堆積容易形成空洞,導致螺旋輸送器每個導程空間內的飼料量有一定的誤差。計算可得,最大下料誤差為3.6%,下料精度高于95%,能夠實現精確下料要求。

圖13 單圈實際下料量Fig. 13 Actual feeding quantity in one turn
水量檢測傳感器為渦輪式脈沖流量計,當水流經過渦輪會帶動其轉動,轉動時信號線產生4.3 V方波脈沖信號。標定試驗多次進行下水,每次下水時使用100 mL規格量筒測得當次下水的水量大小x,再通過程序收集脈沖數y,將x和y采用較為平滑的冪函數來擬合得到5~75 mL范圍內水流量和脈沖數之間的函數關系式。水量定標如圖14所示。

圖14 脈沖數與實際水量標定Fig. 14 Number of pulses calibrated withactual amount of water
將擬合之后的公式寫入主程序,通過程序直接設定下水命令,運行程序后再次測量實際下水量與程序設定值的誤差。在5~40 mL區間內每5 mL進行一次對比,由圖15可知,下水誤差最大值為3.75%,并且當水量要求較小時系統能夠達到精準輸出,符合下水要求。

圖15 實際下水量與程序設定值誤差Fig. 15 Error between actual water flow and program set value
紅外溫度傳感器進行模數轉換后,在內核中的示數為16進制AD值,為方便管理人員監測,需要將其轉換成實際溫度。通過人工定標確定AD值與實際溫度之間的轉換公式,定標儀器選用06A-FLIRT62101紅外相機(圖16)。

圖16 高精度紅外相機標定Fig. 16 High precision infrared camera calibration
由于溫度傳感器監測的溫度為體表溫度,并且豬在吃食過程中會晃動身體、每頭豬體型不一,所以進行測量時的測溫位置會有所不同,實際測溫位置包括豬頭后側、豬后頸、豬前腿根部和豬背。又因為本試驗時間跨度較大、室溫晝夜差距懸殊等因素,造成了豬的體表溫度變化較大。在整個試驗過程中,豬的體表溫度在20 ℃~35 ℃范圍內波動。
定標試驗采集豬身體表溫度后與AD值一一對應,使用一次函數進行擬合,具體數據如圖17所示。通過數據擬合后將函數關系式寫入程序,由程序直接將MCU處理后的AD值轉換為溫度并上傳。采集、對比AD轉換后的溫度值與定標儀器顯示的溫度值之間的差異。由圖18可以看出,定標求得的函數關系式推導出的溫度與實際溫度誤差為±0.2 ℃,能夠達到精準測溫的要求。

圖17 溫度函數定標Fig. 17 Temperature function scaling

圖18 溫度測量誤差Fig. 18 Temperature measurement error
本文設計了一種全自動化智能母豬飼喂控制系統,從硬件電路、核心板引腳分配、驅動調用和應用層邏輯框架搭建這四個方面進行研究。設計制作了硬件與核心板通信的接口板,并基于Linux-API編寫相關的驅動,通過IRQ中斷、poll輪詢和內核定時器保證底層執行機構和傳感器的正常運行;進行試驗之前,對下料電機、下水閥的執行精度進行校準,確保有效、準確的對母豬進行飼喂;在應用層,制定喂豬流程以及異常處理邏輯,并通過socket重連和心跳包提供穩定的網絡連接,實時與后臺通信同步當前飼喂量。
試驗結果表明,該控制系統能夠實現無人化母豬智能飼喂,通過數據采集和線性擬合之后,控制系統下料誤差小于3.6%,下水誤差小于3.75%;能夠實時監測豬只的體溫信號,重復測溫誤差為±0.2 ℃;而且借助接近開關、光電開關以及流量計等傳感器,可以保證系統可靠的完成飼喂任務。與傳統人工飼喂相比,智能母豬飼喂控制系統能夠節省人力資源,提高母豬飼喂效率以及降低飼料的浪費,促進豬只的生長并,進一步減緩我國目前面臨的豬肉壓力。