焦嘉偉,劉華,常若葵
(天津農(nóng)學(xué)院 工程技術(shù)學(xué)院,天津西青,300380)
隨著我國(guó)社會(huì)經(jīng)濟(jì)的快速發(fā)展,人們休閑消費(fèi)和情感寄托方式呈多樣化發(fā)展,因此許多家庭都會(huì)飼養(yǎng)寵物作為自己或孩子休閑的玩伴,寵物業(yè)也成了一種新興的產(chǎn)業(yè)。生活和工作的快節(jié)奏讓人們無法有充裕的時(shí)間照顧自己的寵物,甚至是無法按時(shí)喂養(yǎng)寵物,使得寵物出現(xiàn)食源性疾病[1]。特別是當(dāng)人們出差在外或者是旅游度假時(shí),經(jīng)常不能及時(shí)地對(duì)家中的寵物給予很好的照顧,因此寵物的規(guī)律飲食成為困擾人們的主要問題。
2019 年楊琳、李媛等人[2]設(shè)計(jì)了一款自動(dòng)、定時(shí)、定量喂養(yǎng)寵物的喂食器,但需要按鍵手動(dòng)控制喂食時(shí)間。2021 年白亞梅[3]設(shè)計(jì)了一款控制電機(jī)運(yùn)行時(shí)間來控制喂食量的寵物喂食器,但容易造成過量從而浪費(fèi)。2022 年謝澤健[4]運(yùn)用物聯(lián)網(wǎng)技術(shù)和單片機(jī)技術(shù)設(shè)計(jì)了遠(yuǎn)程寵物智能喂養(yǎng)系統(tǒng),但功能單一。本文將以實(shí)際需求為根本,人性化設(shè)計(jì)為理念化,設(shè)計(jì)一款寵物喂養(yǎng)遠(yuǎn)程控制系統(tǒng),為需要外出的寵物飼養(yǎng)者解決后顧之憂。
系統(tǒng)由傳感器采集溫濕度、重量、水位等信息,發(fā)送到STM32F103ZET6 單片機(jī),單片機(jī)將數(shù)據(jù)打包成TLINK 平臺(tái)設(shè)定的協(xié)議格式,通過ATK-ESP8266 發(fā)送到TLINK 平臺(tái)。達(dá)到設(shè)定的時(shí)間后,TLINK 平臺(tái)向單片機(jī)發(fā)送指令,控制舵機(jī)及水泵工作以達(dá)到出食及出水的效果。本系統(tǒng)結(jié)構(gòu)框圖如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
本系統(tǒng)選用STM32F103ZET6 最小系統(tǒng)板作為核心控制單元。相較于Arduino、51 系列單片機(jī),STM32 系列單片機(jī)性價(jià)比高、功能豐富。STM32F103ZET6 微處理器為L(zhǎng)QFP 封裝的通用型144 引腳的芯片,其工作溫度區(qū)間為-40℃~85℃,主頻72MHz。
稱重模塊選用的是全橋式電路搭配24 位高精度A/D 轉(zhuǎn)換器芯片HX711 稱重。傳感器的上下表面各有兩個(gè)電阻,當(dāng)外界載荷作用到承壓面時(shí),電阻兩端電壓會(huì)發(fā)生變化,由于變化非常小[5],因此使用高精度A/D 轉(zhuǎn)換芯片HX711 放大信號(hào)并將其轉(zhuǎn)換為數(shù)字信號(hào)。與同類型其他模數(shù)轉(zhuǎn)換芯片相比,HX711 芯片內(nèi)部嵌入了包括穩(wěn)壓電源、片內(nèi)時(shí)鐘振蕩器等器件,減少了系統(tǒng)對(duì)外部資源的需求,具有集成度高、響應(yīng)速度快、抗干擾性能強(qiáng)等優(yōu)點(diǎn)[6]。
水位檢測(cè)模塊使用液位傳感器,其實(shí)物如圖2所示。
圖2 液位傳感器實(shí)物圖
該模塊利用三極管電流放大原理,當(dāng)液位足夠高時(shí),電源正極與三極管基極導(dǎo)通,三極管的基極和發(fā)射極之間會(huì)產(chǎn)生一定大小的電流,此時(shí)三極管的集電極和發(fā)射極之間會(huì)產(chǎn)生一定放大倍數(shù)的電流,該電流經(jīng)發(fā)射極電阻產(chǎn)生電壓供AD 轉(zhuǎn)換器采集[7]。
溫濕度采集模塊使用的是DHT11 溫濕度傳感器模塊,該模塊優(yōu)點(diǎn)有:
(1)同時(shí)測(cè)量相對(duì)溫濕度;
(2)可靠性強(qiáng)、性能高、抗干擾、功耗低;
(3)獨(dú)立性高,體積??;
(4)無需AD 轉(zhuǎn)換,直接獲取溫濕度數(shù)據(jù)。該模塊被廣泛應(yīng)用于氣象、家電、醫(yī)療、室內(nèi)環(huán)境檢測(cè)等領(lǐng)域,圖3為DHT11 模塊實(shí)物圖。
圖3 DHT11 實(shí)物圖
語音模塊使用的是JQ9800-16P,該模塊選用SOC 方案,內(nèi)部集成了16 位的MCU 及具有音頻解碼功能的ADSP,保證了系統(tǒng)的音質(zhì)及穩(wěn)定性[8]。模塊具有內(nèi)部存儲(chǔ)功能,使用數(shù)據(jù)線連接電腦即可將需要播放的音頻傳入模塊。模塊共7 個(gè)I/O 口,可支持觸發(fā)播放19 段語音,使用時(shí),只需為對(duì)應(yīng)I/O 口輸出低電平即可播放指定語音。
本系統(tǒng)的執(zhí)行機(jī)構(gòu)包括兩部分,分別是舵機(jī)和繼電器控制的水泵。舵機(jī)用于喂食,一般需要20ms 的時(shí)基脈沖控制,該脈沖的高電平部分一般為0.5ms~2.5ms 范圍內(nèi)的角度控制脈沖部分。當(dāng)需要供水時(shí),STM32 向繼電器發(fā)送信號(hào),控制繼電器閉合進(jìn)而控制水泵出水。
聯(lián)網(wǎng)模塊使用的是高性能UART-WiFi 模塊ATKESP8266,該模塊網(wǎng)絡(luò)標(biāo)準(zhǔn)支持IEEE 802.11b/g/n,頻率可達(dá)2.484GHz 工作模式有三種,分別是WiFi STA 模式、WiFi AP 模式、WiFi STA+WiFi AP 模式。ATK-ESP8266 實(shí)物如圖4 所示。本設(shè)計(jì)使用了ATK-ESP8266 模塊的RX、TX 引腳,用于ESP8266 芯片與STM32 芯片之間串口通信。
按一般大田進(jìn)行田間調(diào)查和統(tǒng)計(jì)。在小麥成熟后,每小區(qū)隨機(jī)選取10株進(jìn)行考種,測(cè)量其株高、整齊度、穗長(zhǎng)、穗粒數(shù)、分蘗數(shù)等指標(biāo)。同時(shí),將每個(gè)小區(qū)分開,單收、單脫、單計(jì)產(chǎn)。
圖4 ATK-ESP8266 實(shí)物圖
系統(tǒng)主程序流程圖如圖5 所示。
圖5 主程序流程圖
首先對(duì)STM32 的系統(tǒng)時(shí)鐘進(jìn)行初始化,確保其正常運(yùn)行。其次對(duì)串口1 和串口2 初始化,并配置中斷優(yōu)先級(jí),確保其正常接收數(shù)據(jù)。然后對(duì)定時(shí)器3 初始化,確保其可以正常發(fā)出PWM 波控制舵機(jī)旋轉(zhuǎn)。再依次初始化HX711、DHT11、ADC1 和ESP8266,確保各部分功能正常使用。然后向ESP8266 發(fā)送AT 指令,使其連接WiFi 及TLINK 物聯(lián)網(wǎng)平臺(tái)。再控制舵機(jī)回到初始位置,獲取毛皮重量。最后一步進(jìn)入循環(huán):稱重—>液位檢測(cè)—>溫濕度檢測(cè)—>發(fā)送數(shù)據(jù)—>延時(shí)。
(1)HX711 數(shù)據(jù)采集
HX711 完整的獲取數(shù)據(jù)需經(jīng)過以下幾個(gè)步驟,首先使能PB 端口時(shí)鐘,其次將SCK 和DOUT 對(duì)應(yīng)的PB0 和PB1端口進(jìn)行配置,設(shè)置為推挽輸出。讀取一次重量,將該重量設(shè)為毛皮重量,再次讀取時(shí),判斷該重量是否大于毛皮重量,若是,則將該重量減毛皮重量即可得到實(shí)物重量,若不是,則繼續(xù)讀取數(shù)據(jù)。
(2)液位傳感器數(shù)據(jù)采集
當(dāng)液位高度到達(dá)一定值時(shí),集電極和發(fā)射極產(chǎn)生的一定放大倍數(shù)的電流經(jīng)過發(fā)射極電阻會(huì)產(chǎn)生電壓,想得到液位傳感器的數(shù)據(jù)只需要進(jìn)行AD 采集即可。ADC 進(jìn)行采集時(shí),首先要使能端口,對(duì)其用到的端口進(jìn)行配置,將其優(yōu)先級(jí)分組設(shè)為1。其次要配置ADC,過程包括:使用軟件開啟連續(xù)轉(zhuǎn)換模式,設(shè)置轉(zhuǎn)換通道為1,分頻因子為8,72MHz/8 即9MHz,并將轉(zhuǎn)換結(jié)果右對(duì)齊,設(shè)置采樣周期為55.5 個(gè)時(shí)鐘周期,校準(zhǔn)ADC。最后進(jìn)行數(shù)據(jù)的采集及處理,完成后清楚標(biāo)志位,中斷返回。
(3)DHT11 數(shù)據(jù)采集
DHT11 傳感器采用單總線數(shù)據(jù)格式,因此程序需嚴(yán)格按照時(shí)序要求設(shè)計(jì)。配置完端口后,主機(jī)需向DHT11 發(fā)送開始信號(hào),DHT11 只有接收到主機(jī)發(fā)送的開始信號(hào)后才會(huì)觸發(fā)溫濕度采集。接收到信號(hào)后,拉高電平等待DHT11 響應(yīng)。響應(yīng)后,共需接收5 次數(shù)據(jù),最后一次數(shù)據(jù)接收完畢后,DHT11 需拉低總線55μs,隨后上拉電阻拉高總線進(jìn)入空閑狀態(tài),等待下一次傳輸數(shù)據(jù)。接受完數(shù)據(jù)后,與檢驗(yàn)位對(duì)比,檢查數(shù)據(jù)準(zhǔn)確性。
STM32接收到云平臺(tái)發(fā)出的指令后控制執(zhí)行機(jī)構(gòu)工作。執(zhí)行機(jī)構(gòu)工作流程圖如圖6 所示。
圖6 執(zhí)行機(jī)構(gòu)流程圖
“111”指令是控制出食的指令,當(dāng)單片機(jī)接收到該指令后,首先給語音模塊引腳一個(gè)低電平,使其播放吸引寵物進(jìn)食的語音,然后定時(shí)器輸出PWM 波,控制舵機(jī)旋轉(zhuǎn)出食。
“222”指令是控制出水的指令,單片機(jī)接收到指令后,給繼電器引腳輸出電平,繼電器工作后控制水泵出水。
STM32 與ATK-ESP8266 連接及發(fā)送數(shù)據(jù)都需要使用串口2,因此需要對(duì)串口2 進(jìn)行配置。首先配置USART2 和GPIO 時(shí)鐘,將PA2 設(shè)置為推挽輸出,速率50MHz,用于發(fā)送,PA3 設(shè)置為浮空輸入,用于接收。然后對(duì)串口2 進(jìn)行設(shè)置,波特率設(shè)為115200,8 個(gè)數(shù)據(jù)為,1 個(gè)停止位,沒有奇偶校驗(yàn)位,不使用硬件流控,只能發(fā)送和接收。向串口發(fā)送字符串使用sendString(USART_TypeDef *USARTx,char *str)函數(shù),USARTx 中的x 為目標(biāo)串口(1~3),str為字符串指針,例如sendString(USART2,"AT+RST ");的意思就是向串口2 發(fā)送AT+RST。
TLINK 是一個(gè)開放并且專注于物聯(lián)網(wǎng)服務(wù)的物聯(lián)網(wǎng)接入云平臺(tái),目的是服務(wù)所有的工業(yè)、農(nóng)業(yè)、環(huán)境類傳感器使用者,使傳感器數(shù)據(jù)的接入、存儲(chǔ)和展現(xiàn)變得簡(jiǎn)單[9]。ATK-ESP8266 配置完成連接云平臺(tái)后,向云平臺(tái)發(fā)送專屬序列號(hào),即可連接設(shè)備。
本系統(tǒng)僅需一個(gè)設(shè)備即可展示各項(xiàng)參數(shù),因此將添加的設(shè)備命名為“Pet Feeding”,鏈接協(xié)議選擇“TCP”,同時(shí)可以設(shè)置掉線延時(shí),當(dāng)TLINK 平臺(tái)1000 秒內(nèi)無數(shù)據(jù)接收,自動(dòng)斷開連接。
STM32 要向云平臺(tái)上傳的數(shù)據(jù)有食物剩余量、食物投喂量、剩余水量、溫度、濕度。云平臺(tái)可向單片機(jī)發(fā)送指令,分別是開始喂食和開始喂水。編輯好設(shè)備后需要配置TLINK 的連接協(xié)議,TLINK 的IP 為“tcp.tlink.io”或“112.74.142.132”,TCP 連接的端口號(hào)為8647。用戶可以在TLINK 平臺(tái)使用“協(xié)議標(biāo)簽”自由編輯應(yīng)用協(xié)議,STM32 根據(jù)應(yīng)用協(xié)議發(fā)送數(shù)據(jù),TLINK 平臺(tái)即可根據(jù)協(xié)議解析需要的數(shù)據(jù)。數(shù)據(jù)頭標(biāo)簽和結(jié)束符標(biāo)簽用于數(shù)據(jù)包的開頭和結(jié)尾,數(shù)據(jù)標(biāo)簽用于傳輸有效數(shù)據(jù),每個(gè)數(shù)據(jù)標(biāo)簽后需緊跟一個(gè)分隔符標(biāo)簽。本系統(tǒng)使用的協(xié)議標(biāo)簽為[H:PF][S::][D?][S:;][D?][S:;][D?][S:;][D?][S:;][D?][S:;][D?][S:;][D?][S:;][T:#]。如收到的協(xié)議為PF:1864;120;50;1;0;52;25;#,代表此時(shí)系統(tǒng)對(duì)應(yīng)的各項(xiàng)參數(shù)為:食物剩余1864g,食物投喂120g,剩余水量50%,開始喂食,停止喂水,濕度52%RH,溫度25℃。
TLINK 平臺(tái)為設(shè)備事件觸發(fā)機(jī)制提供了觸發(fā)器功能,當(dāng)某個(gè)傳感器數(shù)據(jù)觸發(fā)設(shè)定閾值時(shí),TLINK 云平臺(tái)根據(jù)用戶設(shè)置的報(bào)警方式自動(dòng)發(fā)送報(bào)警信息給用戶,平臺(tái)共四種報(bào)警方式,分別是:短信、微信、郵箱、語音。在本系統(tǒng)中,需添加三個(gè)觸發(fā)器,用于監(jiān)測(cè)食物剩余量、剩余水量及溫度,方便主人根據(jù)報(bào)警信息采取下一步措施。當(dāng)剩余食物少于100g、水量低于20%、溫度高于30℃時(shí),觸發(fā)報(bào)警,通過微信公眾號(hào)發(fā)送報(bào)警信息。
除觸發(fā)器功能外,TLINK 平臺(tái)還提供定時(shí)任務(wù)功能,本系統(tǒng)可使用此功能實(shí)現(xiàn)定時(shí)喂食的功能。原理是當(dāng)達(dá)到設(shè)定時(shí)間時(shí),TLINK 會(huì)發(fā)送設(shè)定的指令給STM32 單片機(jī),單片機(jī)接收到指令后,即可控制執(zhí)行機(jī)構(gòu)工作。
系統(tǒng)整體測(cè)試方案:將模塊整合到一起,整體驗(yàn)證系統(tǒng)功能,檢驗(yàn)云平臺(tái)中數(shù)據(jù)是否準(zhǔn)確,云平臺(tái)下發(fā)的指令執(zhí)行機(jī)構(gòu)是否正常工作。
當(dāng)某項(xiàng)數(shù)據(jù)超出閾值時(shí),平臺(tái)會(huì)向用戶發(fā)送報(bào)警信息。數(shù)據(jù)超出閾值時(shí)顯示界面及報(bào)警信息如圖7 所示。
圖7 數(shù)據(jù)超出閾值時(shí)顯示界面及報(bào)警信息
經(jīng)過各個(gè)模塊的分別測(cè)試及整體測(cè)試后,最終成功實(shí)現(xiàn)了在物聯(lián)網(wǎng)平臺(tái)查看數(shù)據(jù)、平臺(tái)控制喂食、喂水的功能,系統(tǒng)長(zhǎng)時(shí)間運(yùn)行后,各項(xiàng)傳感器數(shù)據(jù)正常。
本文介紹了一種寵物喂養(yǎng)遠(yuǎn)程控制系統(tǒng),以ATKESP8266WIFI 模塊為橋梁,實(shí)現(xiàn)STM32 單片機(jī)與TLINK云平臺(tái)的交互,可以通過手機(jī)或網(wǎng)頁實(shí)時(shí)查看喂食裝置中食物和水的剩余量、當(dāng)前環(huán)境的溫濕度,并控制執(zhí)行機(jī)構(gòu)喂食、出水。經(jīng)過一系列地調(diào)試與優(yōu)化,最終設(shè)計(jì)圓滿完成,解決了用戶離家時(shí)的寵物喂養(yǎng)問題,系統(tǒng)穩(wěn)定可靠,具有良好的應(yīng)用前景。