《基于STM32F103C8T6單片機(jī)的觀賞魚養(yǎng)護(hù)系統(tǒng)設(shè)計(jì)》14000字(論文)_第1頁
《基于STM32F103C8T6單片機(jī)的觀賞魚養(yǎng)護(hù)系統(tǒng)設(shè)計(jì)》14000字(論文)_第2頁
《基于STM32F103C8T6單片機(jī)的觀賞魚養(yǎng)護(hù)系統(tǒng)設(shè)計(jì)》14000字(論文)_第3頁
《基于STM32F103C8T6單片機(jī)的觀賞魚養(yǎng)護(hù)系統(tǒng)設(shè)計(jì)》14000字(論文)_第4頁
《基于STM32F103C8T6單片機(jī)的觀賞魚養(yǎng)護(hù)系統(tǒng)設(shè)計(jì)》14000字(論文)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于STM32F103C8T6單片機(jī)的觀賞魚養(yǎng)護(hù)系統(tǒng)設(shè)計(jì)摘要根據(jù)對(duì)市場(chǎng)現(xiàn)在的分析和研究,本文提出了一套多功能的智能魚缸設(shè)計(jì)方案。本設(shè)計(jì)以STM32F103C8T6單片機(jī)為核心,添加多個(gè)傳感器,實(shí)現(xiàn)自動(dòng)換水、自動(dòng)喂食、溫度檢測(cè)、渾濁度檢測(cè)等功能。整個(gè)系統(tǒng)可分為兩個(gè)部分:第一部分是以芯片為核心的控制電路,包括溫度傳感器、水位檢測(cè)電路、喂食電路、換水電路等,可以對(duì)溫度、水位、渾濁度等數(shù)據(jù)進(jìn)行存儲(chǔ)和處理。第二部分是手機(jī)APP部分,通過無線WIFI與上位機(jī)通信,將相關(guān)數(shù)據(jù)傳輸給手機(jī)APP,實(shí)現(xiàn)顯示和控制功能。同時(shí),相關(guān)溫度數(shù)據(jù)、水位數(shù)據(jù)、喂食狀態(tài)、換水狀態(tài)都會(huì)顯示在液晶屏上,更為直觀。通過傳感器的相互作用和手機(jī)APP的遠(yuǎn)程操作,本系統(tǒng)能更好的實(shí)現(xiàn)對(duì)觀賞性魚類的養(yǎng)護(hù),形成了一套可完成渾濁度檢測(cè)、溫度檢測(cè)、自動(dòng)換水、自動(dòng)喂食等功能的智能魚缸系統(tǒng)。關(guān)鍵詞:STM32F103C8T6,無線WIFI模塊,TFT觸摸彩屏模塊,水深檢測(cè),光敏電阻,渾濁度檢測(cè)電路。目錄第一章緒論 11.1背景和意義 11.2國(guó)內(nèi)外研究現(xiàn)狀 11.3本文主要工作 31.4論文組織結(jié)構(gòu) 3第二章系統(tǒng)方案分析 52.1系統(tǒng)需求分析 52.2系統(tǒng)整體框架 52.3主控模塊的選型和論證 62.4無線遙控模塊的選型和論證 72.5顯示模塊的選型和論證 8第三章系統(tǒng)硬件設(shè)計(jì) 93.1系統(tǒng)總體硬件電路圖的設(shè)計(jì) 93.2STM32F103C8T6最小系統(tǒng)設(shè)計(jì) 93.3TFT彩屏顯示電路的設(shè)計(jì) 93.4無線WIFI模塊的設(shè)計(jì) 103.5溫度檢測(cè)模塊的設(shè)計(jì) 103.6水深檢測(cè)模塊的設(shè)計(jì) 113.7渾濁度檢測(cè)模塊的設(shè)計(jì) 123.8舵機(jī)模塊的設(shè)計(jì) 123.9按鍵模塊的設(shè)計(jì) 133.10水位控制模塊的設(shè)計(jì) 14第四章系統(tǒng)軟件設(shè)計(jì) 154.1程序整體設(shè)計(jì)和實(shí)現(xiàn) 154.2溫度監(jiān)測(cè)實(shí)現(xiàn) 164.3渾濁度監(jiān)測(cè)實(shí)現(xiàn) 174.4喂食設(shè)計(jì) 204.5換水設(shè)計(jì) 214.6報(bào)警提示系統(tǒng) 234.7APP的設(shè)計(jì) 24第五章系統(tǒng)實(shí)物調(diào)試 285.1系統(tǒng)初始化調(diào)試 285.2APP控制演示 295.3測(cè)溫演示 305.4喂食演示 325.5換水演示 335.6渾濁度演示 36第六章總結(jié)與展望 386.1課題總結(jié) 386.2進(jìn)一步開發(fā)的展望 38=緒論背景和意義現(xiàn)在物質(zhì)生活已經(jīng)逐漸豐富,人們對(duì)于生活的追求早已擺脫了酒足飯飽等簡(jiǎn)單的需求,現(xiàn)在的人們?cè)絹碓阶非缶裆畹拿罎M。大部分人對(duì)室內(nèi)養(yǎng)魚有著巨大的興趣,但是魚缸養(yǎng)魚技術(shù)有著很大的學(xué)習(xí)成本,溫度、濕度、喂食時(shí)間對(duì)魚的成活都有著很大的影響,但大部分并沒有那么多的學(xué)習(xí)時(shí)間去研究,這時(shí)候智能魚缸的出現(xiàn)極大的拉低了魚缸養(yǎng)魚技術(shù)的學(xué)習(xí)成本,所以有更多的養(yǎng)魚愛好者愿意購買一個(gè)智能魚缸去檢測(cè)自己魚的生活狀態(tài),因此,在這樣的背景下,本設(shè)計(jì)的完成了一款基于STM32芯片的智能魚缸開發(fā)和設(shè)計(jì)。水族箱起初是為了公共場(chǎng)所所涉及的,隨著經(jīng)濟(jì)的發(fā)展,科技的提高,水族箱成為了普通家庭的家居裝飾,越來越多的家庭喜歡家里安排一個(gè)魚缸去點(diǎn)綴自己的生活,是自己更多的去親近自然。但很多人可能時(shí)間有限,無法對(duì)水族箱進(jìn)行很好的維護(hù),往往最后的結(jié)局便是“草桔魚亡”。針對(duì)智能水族箱的設(shè)計(jì)有很多,主要集中在水溫控制,氧氣控制,換水加水等相關(guān)系統(tǒng)。但產(chǎn)品的繁雜,且功能也各有不同,使得用戶的挑選也變得困難,且如果自己進(jìn)行多個(gè)功能的組裝,無法形成有效的配合,也存在一定的資源浪費(fèi)。給用戶造成了多余的經(jīng)濟(jì)負(fù)擔(dān)又無法達(dá)成其預(yù)期的效果。因此,在市場(chǎng)的需求催促下,一個(gè)集合多個(gè)功能的智能魚缸的出現(xiàn),成了用戶們的迫切需求。本設(shè)計(jì)不僅解決了魚類日常養(yǎng)護(hù)問題,同時(shí)對(duì)智能化家居進(jìn)入百姓家中的發(fā)展有著重大的意義。國(guó)內(nèi)外研究現(xiàn)狀本文對(duì)市面上已經(jīng)有的智能魚缸裝置進(jìn)行了調(diào)研,發(fā)現(xiàn)了很多公司在智能魚缸方面的研究已經(jīng)非常的深入。下面,就是本文在調(diào)研了相關(guān)的文獻(xiàn)之后,得到的一些研究現(xiàn)況。發(fā)展了多年的嵌入式技術(shù)如今已經(jīng)十分成熟,而且用嵌入式技術(shù)配合傳感器做成的智能魚缸可以很好的實(shí)現(xiàn)溫濕度的控制,對(duì)于水位的檢測(cè),渾濁度的檢測(cè)有著很好的精度控制,加上無線技術(shù)的突破,現(xiàn)在的魚缸能實(shí)現(xiàn)遠(yuǎn)程控制進(jìn)行操作等。國(guó)外研究現(xiàn)狀:國(guó)外的一個(gè)團(tuán)隊(duì)在2016年3月推出了一套智能魚缸系統(tǒng),該系統(tǒng)由監(jiān)控器、插座控制器和對(duì)應(yīng)的安卓app組成。該系統(tǒng)雖然把部分功能集成了起來,但集成化程度較低,且使用配置又及其繁瑣,給用戶的上手造成了很大程度的負(fù)擔(dān)。此外,系統(tǒng)售價(jià)過于高昂,很多家庭購買可能需要很大考慮,故推廣過程較為困難。國(guó)內(nèi)研究現(xiàn)狀:國(guó)內(nèi)的智能魚缸主要由森森公司在研發(fā)生產(chǎn)。有一款2000多元的低端產(chǎn)品集成度不夠高,很多附屬設(shè)配需要用戶自行購買加裝,非誠(chéng)的不方便。另外一款售價(jià)約為4000元左右的智能控制系統(tǒng)則是利用了一個(gè)類似于電視數(shù)字機(jī)頂盒大小的控制設(shè)備,包含了插座功能、顯示功能以及網(wǎng)絡(luò)通訊功能,可以與手機(jī)app連接進(jìn)行遠(yuǎn)程控制,但與設(shè)備匹配的app端用戶數(shù)有限制,且設(shè)備集成度較低,占用空間較多,不夠簡(jiǎn)潔,影響美觀,并且價(jià)格高昂,智能程度低,與普通大眾的消費(fèi)能力不匹配。還有一家魚樂多品牌的廠家生產(chǎn)的智能魚缸,雖然產(chǎn)品價(jià)格只有600多元,但產(chǎn)品沒有遠(yuǎn)程控制系統(tǒng),智能程度只有顯示屏控制,只能顯示基礎(chǔ)的溫度調(diào)節(jié)和燈光調(diào)節(jié),連喂食系統(tǒng)也還是依靠手動(dòng)旋鈕組成,智能程度水平比較低。最近國(guó)內(nèi)知名品牌小米也推出了自己的智能魚缸,該魚缸采用畫法幾何C系智能魚缸Pro版的缸體為橢圓形,看起來圓潤(rùn)小巧,提供了全方位的視角,且采用的玻璃耐磨防破裂,安全性較高。供電采用USB供電,做了低壓和斷電保護(hù)。同時(shí)該魚缸可以使用小米自家的語音識(shí)別系統(tǒng)—小愛同學(xué)進(jìn)行語音識(shí)別控制。相比上面兩家的設(shè)計(jì),小米的智能魚缸更撐得上是一個(gè)智能產(chǎn)品,可以很好的進(jìn)行遠(yuǎn)控控溫,APP操作,自動(dòng)投喂食。但對(duì)于自動(dòng)換水等操作還是沒有實(shí)現(xiàn),并且魚缸的體積比較小,水容量只有8-9L,只能養(yǎng)殖小型魚或者中型魚,無法實(shí)現(xiàn)大部分市場(chǎng)的需求。目前國(guó)內(nèi)的智能魚缸市場(chǎng)存在空白很大,僅有的幾款產(chǎn)品也都不夠完善,故本設(shè)計(jì)有著較高的研究?jī)r(jià)值和應(yīng)用價(jià)值。本文主要工作本設(shè)計(jì)主要基于STM32F103C8T6芯片,由兩個(gè)光敏電阻組成的電路對(duì)水進(jìn)行渾濁度的檢測(cè),利用防水溫度傳感器對(duì)水的溫度實(shí)行實(shí)時(shí)采集,利用WIFI模塊實(shí)現(xiàn)上位機(jī)和單片機(jī)的相互通訊,處理器將采集到的相關(guān)數(shù)據(jù)進(jìn)行處理放到TFT液晶屏上顯示。這樣做的優(yōu)點(diǎn)是成本低廉,較容易實(shí)現(xiàn),同時(shí)可以更好的實(shí)現(xiàn)遠(yuǎn)程操控。主要功能:(1) 通過兩個(gè)光敏電阻探測(cè)水的渾濁度,如果渾濁度超過設(shè)定值,手機(jī)和液晶同時(shí)提示“換水”;(2) 液晶和手機(jī)實(shí)時(shí)顯示所有數(shù)據(jù)參數(shù);(3) 單片機(jī)內(nèi)部自我計(jì)時(shí),超過設(shè)定時(shí)間自動(dòng)喂食,也可通過手機(jī)實(shí)時(shí)查看看喂食間隔,手動(dòng)喂食;(4) 單片機(jī)自動(dòng)檢測(cè)溫度,將溫度值實(shí)時(shí)傳送給液晶屏和手機(jī)軟件進(jìn)行顯示;(5) 實(shí)時(shí)檢測(cè)水位高低,超過上下限液晶提示,同時(shí)可通過手機(jī)和液晶屏觀察水位高低通過手機(jī)輸入指令或者按鍵的控制進(jìn)行操作。技術(shù)指標(biāo):(1) 溫度檢測(cè)的誤差在±0.5度之間;(2) 渾濁度通過兩光敏電阻實(shí)現(xiàn),將兩光敏所得值相減取絕對(duì)值,如果值小于20為正常,大于20則液晶提醒換水;(3) 自動(dòng)喂食控制在24小時(shí)一次。一次投喂量4-5顆魚食;(4) 顯示屏和移動(dòng)端在進(jìn)行相應(yīng)操作以后都會(huì)及時(shí)更新目前的數(shù)據(jù)情況。創(chuàng)新點(diǎn):主要?jiǎng)?chuàng)新點(diǎn)通過傳感器和遠(yuǎn)程操作,實(shí)現(xiàn)更好的魚類養(yǎng)殖。論文組織結(jié)構(gòu)本論文的組織結(jié)構(gòu)包括:第一章闡明課題的研究背景,介紹課題的研究現(xiàn)狀和來源,并概述設(shè)計(jì)(論文)的主要工作和創(chuàng)新點(diǎn)。第二章論文的方案分析和進(jìn)行零件的選型辯證。第三章硬件的主要介紹和電路圖。第四章軟件的工作流程和設(shè)計(jì),以及上位機(jī)的實(shí)現(xiàn)。第五章系統(tǒng)的實(shí)物調(diào)試及數(shù)據(jù)分析。第六章對(duì)系統(tǒng)未來的拓展和升級(jí)闡述。系統(tǒng)方案分析系統(tǒng)需求分析此次課題所制作的智能魚缸其主要功能應(yīng)具有采集魚缸內(nèi)的溫度、濕度、光照強(qiáng)度,能自己進(jìn)行換水,喂食等基本操作,可以遠(yuǎn)程控制進(jìn)行通信,系統(tǒng)監(jiān)測(cè)到的溫濕度數(shù)據(jù)、光照強(qiáng)度數(shù)據(jù)皆由WIFI模塊傳至APP上顯示,且環(huán)境監(jiān)測(cè)系統(tǒng)也需有個(gè)液晶顯示器顯示監(jiān)測(cè)系統(tǒng)所監(jiān)測(cè)到的數(shù)據(jù)。由此,本次課題需要有STM32F103C8T6微控制器、溫濕度傳感器、光敏電阻模塊、液晶顯示模塊、WIFI模塊以及換水所需要的水泵系統(tǒng)等。系統(tǒng)整體框架智能魚缸基于STM32F103C8T6作為主控芯片,對(duì)各個(gè)電路模塊進(jìn)行操作以實(shí)現(xiàn)相應(yīng)的功能,硬件電路模塊主要包括:溫度監(jiān)測(cè)模塊、水位檢測(cè)模塊、液晶顯示模塊、無線WIFI通訊模塊、渾濁度檢測(cè)模塊、喂食模塊、按鍵模塊、換水模塊以及電源模塊等。(1)溫度監(jiān)測(cè)模塊:DS18B20是常用的數(shù)字溫度傳感器,可以直接輸出數(shù)字信號(hào),少了轉(zhuǎn)換的步驟,所以使用起來較為方便,且體積小,精度高,有著眾多的優(yōu)點(diǎn)。該溫度傳感器測(cè)溫范圍在-55℃~+125℃之間,測(cè)溫誤差在上下一攝氏度之間,可以很好的完成魚缸的溫度檢測(cè)功能。(2)水位檢測(cè)模塊:本設(shè)計(jì)使用的是SS水深檢測(cè)傳感器模塊,該傳感器簡(jiǎn)單易用,發(fā)出的模擬電壓較低,可以直接接入單片機(jī)引腳,利用單片機(jī)的ADC進(jìn)行模數(shù)轉(zhuǎn)換,完成水位的檢測(cè)。該方案成本低廉的同時(shí)很好的完成了單片機(jī)的檢測(cè)要求,符合預(yù)期的設(shè)計(jì)要求。(3)液晶顯示模塊:本設(shè)計(jì)采用TFT觸摸彩屏1.44寸模塊,其優(yōu)點(diǎn)非常的明顯,亮度、對(duì)比度展示效果好,但也有著高功耗的缺點(diǎn)。但對(duì)比于其所存在的質(zhì)量上乘的優(yōu)點(diǎn),這些缺點(diǎn)也是可以接受的。(4)無線WIFI通訊模塊:本設(shè)計(jì)使用的是ESP8266-01無線WIFI模塊,其超低功耗的優(yōu)點(diǎn)是我們選擇它的最大原因,極大的減少了設(shè)備功耗負(fù)擔(dān)。擁有業(yè)內(nèi)最富競(jìng)爭(zhēng)力的封裝設(shè)計(jì)和低功耗技術(shù),是專為移動(dòng)設(shè)備和物聯(lián)網(wǎng)設(shè)計(jì)的WIFI模塊,為設(shè)備實(shí)現(xiàn)聯(lián)網(wǎng)功能,進(jìn)行上位機(jī)的交流通信。(5)渾濁度檢測(cè)模塊:本設(shè)計(jì)的渾濁度檢測(cè)模塊是利用兩個(gè)光敏電阻完成的,將一個(gè)光敏電阻置于水面上方,一個(gè)光敏電阻置于水面下方,利用兩個(gè)光敏電阻引起的電流的變化進(jìn)行渾濁度的判定。(6)喂食模塊:喂食模塊是由一個(gè)SG90舵機(jī)完成的,預(yù)先將所要的食物置于喂食盒中,當(dāng)達(dá)到預(yù)先設(shè)定的喂食時(shí)間,或者按鍵或上位機(jī)發(fā)出喂食指令以后,給舵機(jī)通電,打開閥門進(jìn)行喂食。SG90舵機(jī)轉(zhuǎn)速快、耗電小,質(zhì)量輕盈,是很好的選擇。(7)按鍵模塊:這是人機(jī)交互的一種手段,通過按鍵控制,可以對(duì)發(fā)出換水,喂食,等指令,達(dá)到控制的多樣化。(8)換水模塊:整個(gè)換水模塊由水泵,水位傳感器和排水舵機(jī)組成。由排水舵機(jī)先將水排出,當(dāng)水位感應(yīng)器感應(yīng)到水位排到一定程度以后關(guān)閉排水閥門,打開水泵注入新的水資源。本設(shè)計(jì)上采用的是一個(gè)5V水泵。(9)電源模塊:給整個(gè)電路供電5V。本設(shè)計(jì)的硬件組成方案,如圖2.1所示。圖2.1系統(tǒng)框架圖主控模塊的選型和論證本設(shè)計(jì)在單片機(jī)芯片的選型上有兩種選擇,分別是MSP430芯片和STM32F103芯片。方案一:MSP430芯片MSP430系列單片機(jī)是美國(guó)某公司在1996年研發(fā)的一種混合處理器,有著16位超低功耗、精簡(jiǎn)指令集的特點(diǎn),目前MSP430市場(chǎng)占有量大,型號(hào)多樣。如果選擇MSP430芯片,其強(qiáng)大的處理能力可以很好的控制和協(xié)調(diào)各個(gè)模塊,不會(huì)出現(xiàn)對(duì)模塊控制的延遲。而且MSP430芯片對(duì)塵埃的防范能力具有非常出色的表現(xiàn),日常的使用可以很大程度的降低對(duì)芯片的維護(hù)保養(yǎng)工作,所以MSP430芯片無疑是很好的選擇。但利弊總是伴行的,MSP430強(qiáng)大的處理能力及其各項(xiàng)優(yōu)點(diǎn)伴隨的其成本的高昂,相比于同類型的芯片,MSP430芯片的售價(jià)足足高了50%,因此在各項(xiàng)權(quán)衡和成本控制下,不得不放棄該芯片的選擇。方案二:STM32F103芯片STM32F系列是一款32位ARM微控制器的產(chǎn)品,有著三種不同的閃存種類。雖然STM32F103芯片的處理能力不如MSP430芯片的強(qiáng)大,但此芯片的價(jià)格優(yōu)勢(shì)相比于MSP430芯片好了不少,使用這款嵌入式芯片,在本設(shè)計(jì)中對(duì)各個(gè)模塊的處理,包括:采集溫度、水位的數(shù)據(jù)、判斷換水條件、接受按鍵、上位機(jī)指令、對(duì)液晶屏信息的顯示等方面也可以很好的完成這些任務(wù)。在大幅度降低成本的同時(shí),略微犧牲處理器的性能無疑是個(gè)很好的選擇,自古以來,魚和熊掌不可兼得,所以最后選擇了STM32F103芯片作為本設(shè)計(jì)的主控芯片。無線遙控模塊的選型和論證伴隨著科技的飛速發(fā)展,無線遙控模塊已經(jīng)是非常成熟的技術(shù)了,無線遙控是指通過非接觸式的方法對(duì)被控目標(biāo)發(fā)出指令,使得實(shí)施控制人員可以更加靈活的對(duì)被控目標(biāo)進(jìn)行掌控,目前無線遙控模塊應(yīng)用及其廣泛,在工業(yè)控制中、航天事業(yè)、家庭電器領(lǐng)域都有涉及。相比于以前的電纜連線的方法,無線遙控技術(shù)安裝成本低廉,無需對(duì)連接設(shè)備進(jìn)行布線,無需大規(guī)模的地下工程,也不會(huì)占用空間上的資源,極大的提高了控制的靈活性和降低了維護(hù)的成本。目前無線控制的主要方法有紅外線遙控、WIFI模塊、藍(lán)牙模塊、GSM模塊。方案一:紅外遙控紅外遙控是一種應(yīng)用廣泛的無線控制技術(shù),功耗小,成本低,較為容易實(shí)現(xiàn),所以為廣泛應(yīng)用于手機(jī)電腦等產(chǎn)品上。紅外載波的頻率是38KHZ,理論的遙控距離在8到10米之間,但容易受障礙物的影響,如果中間有障礙物遮擋,那么遙控距離會(huì)進(jìn)一步的下降,由于本設(shè)計(jì)需要實(shí)現(xiàn)長(zhǎng)距離的遠(yuǎn)程控制,所以這里不使用紅外遙控模塊。方案二:無線WIFI模塊使用WIFI模塊覆蓋性強(qiáng),傳輸距離遠(yuǎn),使得智能魚缸脫離的網(wǎng)線的布線麻煩性,提高了本設(shè)計(jì)的靈活性,實(shí)現(xiàn)了本設(shè)備的遠(yuǎn)程控制。方案三:藍(lán)牙模塊如果使用藍(lán)牙模塊進(jìn)行本系統(tǒng)的無線數(shù)據(jù)傳輸,可以代替很多便攜式的電纜,但相比于WIFI模塊,藍(lán)牙模塊對(duì)場(chǎng)景的要求比較高,必須是固定場(chǎng)景下餐能使用,也沒有WIFI模塊覆蓋的范圍廣,藍(lán)牙的短距離傳輸無法滿足本設(shè)計(jì)的設(shè)計(jì)要求,故在此不使用藍(lán)牙模塊作為無線傳輸模塊。方案四:GSM模塊GSM模塊的使用依賴于移動(dòng)卡,需要插上移動(dòng)卡才可以進(jìn)行通訊。本設(shè)計(jì)魚缸并不需要頻繁的更換環(huán)境,或者頻繁的移動(dòng),再考慮到目前每家每戶基本都配備有無線網(wǎng)絡(luò)的覆蓋,故本設(shè)計(jì)不使用GSM模塊作為無線數(shù)據(jù)傳輸模塊。顯示模塊的選型和論證本設(shè)計(jì)為智能魚缸,需要及時(shí)的顯示魚缸當(dāng)前的狀態(tài)及時(shí)的給使用者反饋信息,所以顯示模塊也是及其重要的組成部分。所謂顯示模塊,就是將傳感器采集到的數(shù)據(jù)通過芯片的加工傳輸給顯示模塊顯示出來,本文選取的顯示模塊是TFT觸摸彩屏1.44寸模塊。本設(shè)計(jì)采用TFT觸摸彩屏1.44寸模塊,其優(yōu)點(diǎn)非常的明顯,亮度、對(duì)比度展示效果好,但也有著高功耗的缺點(diǎn)。但對(duì)比于其所存在的質(zhì)量上乘的優(yōu)點(diǎn),這些缺點(diǎn)也是可以接受的。。系統(tǒng)硬件設(shè)計(jì)系統(tǒng)總體硬件電路圖的設(shè)計(jì)系統(tǒng)的總體硬件由STM32核心芯片、TFT彩屏顯示電路模塊、無線控制模塊、水深檢測(cè)模塊、溫度監(jiān)測(cè)模塊、水泵控制模塊、渾濁度檢測(cè)電路、獨(dú)立按鍵模塊、舵機(jī)喂食模塊以及舵機(jī)排水模塊組成。STM32F103C8T6最小系統(tǒng)設(shè)計(jì)本設(shè)計(jì)是基于嵌入式芯片完成對(duì)整個(gè)魚缸系統(tǒng)的控制,使用的核心器件也就是本設(shè)計(jì)所完成的單片機(jī)部分的設(shè)計(jì)。如圖3.1所示,芯片所具有的引腳已經(jīng)全部展示出來了。后面的其它模塊,都需要按照芯片手冊(cè),將其和本芯片進(jìn)行交互,從而完成基于單片機(jī)的控制,指令信號(hào)的下達(dá)等動(dòng)作。圖3.1芯片模塊TFT彩屏顯示電路的設(shè)計(jì)本設(shè)計(jì)為智能魚缸,需要及時(shí)的顯示魚缸當(dāng)前的狀態(tài)及時(shí)的給使用者反饋信息,所以顯示模塊也是及其重要的組成部分。所謂顯示模塊,就是將傳感器采集到的數(shù)據(jù)通過芯片的加工傳輸給顯示模塊顯示出來,本文選取的顯示模塊是TFT觸摸彩屏1.44寸模塊。模塊連接上將TFT液晶顯示模塊的的BL、CS、DS、RES、SDA、SCL引腳連接到STM32的PB15、PB14、PB13、PB12、PB11、PB10引腳。如圖3.2所示。圖3.2TFT彩屏模塊電路連接圖無線WIFI模塊的設(shè)計(jì)ESP8266是一款超低功耗的UART-WiFi透?jìng)髂K,該模塊功耗低,是一款專門為物體聯(lián)網(wǎng)設(shè)計(jì)的WIFI模塊。WIFI模塊連接由STM32內(nèi)部的SPI引腳控制,模塊連接上將ESP8266的TXD、RXD引腳連接到STM32的PA9、PA10引腳。ESP8266電路圖如圖3.3所示。圖3.3無線WIFI電路連接圖溫度檢測(cè)模塊的設(shè)計(jì)魚缸對(duì)于溫度的檢測(cè)需要的是一種靈敏的、高精度、高可靠的溫度傳感器,因此,在這選擇的是數(shù)字型傳感器,DS18B20是一種很好的選擇。DS18B20是常用的數(shù)字溫度傳感器,可以直接輸出數(shù)字信號(hào),少了轉(zhuǎn)換的步驟,所以使用起來較為方便,且體積小,精度高,有著眾多的優(yōu)點(diǎn)。該溫度傳感器測(cè)溫范圍在-55℃~+125℃之間,測(cè)溫誤差在上下一攝氏度之間,可以很好的完成魚缸的溫度檢測(cè)功能。DS18B20擁有很多的引腳,GND負(fù)責(zé)進(jìn)行接地,DQ引腳負(fù)責(zé)信號(hào)的輸入輸出,VDD負(fù)責(zé)供電,完整的實(shí)現(xiàn)了溫度傳感器的自身的功能。DS18B20溫度傳感器溫度轉(zhuǎn)換的最大精度時(shí)間為750毫秒,用戶可自定義報(bào)警設(shè)置,很好的符合本設(shè)計(jì)的實(shí)驗(yàn)要求。DS18B20溫度傳感器采用的單線接口方式,所以只需要將它的DQ引腳連接上芯片的PC13口,就能實(shí)現(xiàn)其和芯片的雙向通訊,其他的1號(hào)引腳接地,3號(hào)引腳接電源即可。其電路圖如圖3.4所示。圖3.4DS18B20溫度監(jiān)測(cè)模塊電路連接圖水深檢測(cè)模塊的設(shè)計(jì)本設(shè)計(jì)使用的是SS水深檢測(cè)傳感器模塊,利用水平導(dǎo)線檢測(cè)水滴大小進(jìn)行水位的檢測(cè)判斷。該方案成本低廉的同時(shí)很好的完成了預(yù)期檢測(cè)要求,符合設(shè)計(jì)需求。并且此模塊輸出電壓為0~4.2V,而芯片的PA5引腳作為I/O輸入最大電壓為5.5V,所以我們可以直接將其連接在芯片上,通過芯片的ADC進(jìn)行模數(shù)的轉(zhuǎn)換。將取到的AD采樣值轉(zhuǎn)換到0-99的數(shù)之間作為水位深度值,水位深度值、值的計(jì)算公式如公式3.1所示。水位深度值=(AD采樣值?200)?99/(450?200)此模塊也是比較容易連接的,將2號(hào)引腳和1號(hào)引腳分別接電源的正負(fù)極,3號(hào)引腳連接PA5,便可以把模擬信號(hào)傳輸給芯片。其電路圖如圖3.5所示。圖3.5水位檢測(cè)電路連接圖渾濁度檢測(cè)模塊的設(shè)計(jì)本設(shè)計(jì)的渾濁度檢測(cè)模塊是利用兩個(gè)光敏電阻完成的,將一個(gè)光敏電阻置于水面上方,一個(gè)光敏電阻置于水面下方,利用兩個(gè)光敏電阻引起的電壓的變化取其兩者的差值進(jìn)行渾濁度的判定。將取到的AD采樣值轉(zhuǎn)換到0-100的數(shù)之間作為電壓值,電壓值的計(jì)算公式如公式3.2所示。電壓值=99?AD采樣值?99/4096(3.2渾濁度值計(jì)算公式如3.3所示。渾濁度=電壓值1?電壓值2(3.3)將光敏電阻上和一個(gè)10KΩ的電阻進(jìn)行串聯(lián),可以很方便地把輸出電流轉(zhuǎn)變?yōu)殡妷?。因選用的光敏電阻亮阻為10K歐左右,故給其串聯(lián)一個(gè)10K歐的電阻,然后將兩組電路分別接入芯片的PA1和PA0引腳,獲取模擬信號(hào)。其電路圖如圖3.6所示。圖3.6渾濁度檢測(cè)模塊舵機(jī)模塊的設(shè)計(jì)舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,目前,被廣泛應(yīng)用于各種高檔的玩具模型中。舵機(jī)在模型中主要用來控制方向,不同類型的模型需要的舵機(jī)種類也不一樣。舵機(jī)的組成部分有外殼、電路板、馬達(dá)、減速器和定位器構(gòu)成,主要是通過接受信號(hào)后由馬達(dá)對(duì)力臂進(jìn)行擺動(dòng),通過改變電阻值的大小,來確定力臂是否轉(zhuǎn)動(dòng)到固定位置。本設(shè)計(jì)中,舵機(jī)的主要作用是打開排水閥門或者打開喂食閥門。SG90舵機(jī)轉(zhuǎn)速快、耗電小,質(zhì)量輕盈,工作電壓在4.2-6V之中,溫度范圍:0℃--55℃,運(yùn)行速度:0.3秒/60度,扭矩為1.5kg/cm,無論是電壓上還是溫度上,都符合魚缸正常環(huán)境,所以在此選中此舵機(jī)。舵機(jī)的功率計(jì)算公式如3.4所示。P=T?W=1.5?0.3=0.45式中,T為扭矩,W為角速度。在連接上,將1號(hào)引腳數(shù)據(jù)寫入位連接單片機(jī),2號(hào)、3號(hào)分別接入電源和接地,其電路圖如圖3.7所示。圖3.7舵機(jī)電路連接圖按鍵模塊的設(shè)計(jì)在本設(shè)計(jì)中總共使用了4個(gè)機(jī)械式獨(dú)立按鍵,通過4個(gè)按鍵協(xié)同工作來完成指令的發(fā)布。每一個(gè)按鍵會(huì)有一個(gè)獨(dú)立的IO,使得按鍵的狀態(tài)會(huì)被實(shí)時(shí)的檢測(cè)。這是人機(jī)交互的一種手段,通過按鍵控制,可以對(duì)發(fā)出換水,喂食,等指令,達(dá)到控制的多樣化。連接上,將每個(gè)按鍵分別接在芯片的PB0、PB1、PB3、PB4上,另一端統(tǒng)一接地,電路圖如圖3.8所示。圖3.8按鍵電路連接圖水位控制模塊的設(shè)計(jì)本設(shè)計(jì)使用了一個(gè)5V的水泵,主要是完成換水任務(wù)的注水功能。由于本設(shè)計(jì)本身使用的是USB轉(zhuǎn)DC2.0mm小口圓孔數(shù)據(jù)線進(jìn)行供電,該數(shù)據(jù)線能提供的電壓有限,只有5V,故選擇這個(gè)工作電壓為4.5V,工作電流為0.18A,額定功率為0.91W的小水泵,該水泵可以提供的流量為100L/H,同時(shí)有著IP68級(jí)的防水等級(jí),可以很好的滿足這個(gè)模擬的小魚缸環(huán)境。因?yàn)樵陔娐分写嬖谝粋€(gè)IB=50mA時(shí),其VBE=1.2V的三極管,其基極限流電阻值計(jì)算過程如3.4所示。R=V?VBEI式中:V為輸入電壓,VBE為基極與發(fā)射極之間的電壓差,IB為基極電流。所以至少要76Ω的電阻,所以給其串聯(lián)一個(gè)100Ω的電阻進(jìn)行電路的保護(hù)。連接上將電阻段引腳接入PA8,其他引腳分別接地和接入電路,其電路圖如圖3.9所示。圖3.9水泵控制電路連接圖基于STM32單片機(jī)的智能魚缸系統(tǒng)系統(tǒng)軟件設(shè)計(jì)本系統(tǒng)主要針對(duì)主芯片STM32F103C8T6進(jìn)行編譯,主要使用Keil軟件完成程序的編寫。綜合單片機(jī)程序主要分為六部分,分別是針對(duì)溫度傳感器、水位檢測(cè)傳感器、無線WIFI模塊、渾濁度檢測(cè)模塊、液晶顯示模塊和按鍵模塊的程序進(jìn)行編譯。程序整體設(shè)計(jì)和實(shí)現(xiàn)本章就要對(duì)智能魚缸的整體功能進(jìn)行整體邏輯代碼的開發(fā)和實(shí)現(xiàn)。主要控制流程設(shè)計(jì)如圖4.1所示。圖4.1軟件整體流程圖本設(shè)計(jì)的主要功能是一項(xiàng)具有多個(gè)功能的智能魚缸,主要有溫度檢測(cè)、渾濁度檢測(cè)、液晶屏顯示功能、自動(dòng)或手動(dòng)喂食、換水模塊和無線信號(hào)發(fā)送幾個(gè)模塊。每個(gè)模塊都有對(duì)應(yīng)的庫函數(shù),最后通過主函數(shù)對(duì)各個(gè)庫函數(shù)中子函數(shù)的調(diào)用完成所有功能的整合。本設(shè)計(jì)的主要的代碼,主函數(shù)、子函數(shù)、庫函數(shù)如圖4.2所示。圖4.2主要程序圖.c結(jié)尾的文件,都是其中的邏輯代碼,.h則是定義了一些引腳,為庫函數(shù),大多是傳感器廠家所提供的,直接調(diào)用即可。溫度監(jiān)測(cè)實(shí)現(xiàn)本設(shè)計(jì)選擇的傳感器是DS18B20防水型溫度傳感器。溫度傳感器的高速暫存存儲(chǔ)器是9個(gè)字節(jié)組成,當(dāng)要進(jìn)行溫度轉(zhuǎn)換的時(shí)候,轉(zhuǎn)換得到的溫度值以二字節(jié)補(bǔ)碼的形式放在高速緩存器的0和1字節(jié)。單片機(jī)可通過數(shù)據(jù)接口直到讀到該數(shù)據(jù),再對(duì)應(yīng)溫度進(jìn)行計(jì)算,不同的符號(hào)對(duì)應(yīng)讀取到的數(shù)據(jù)不一樣。溫度傳感器主要是采集魚缸內(nèi)水的溫度,傳遞給芯片進(jìn)行處理后再由芯片傳輸給液晶屏進(jìn)行顯示,給使用者提供一個(gè)參考。程序會(huì)先初始化溫度傳感器的IO口,接著去接收傳感器傳來的一個(gè)字節(jié)數(shù)據(jù),將讀取到的值寫入芯片,由于DS18B20防水型溫度傳感器本身就是傳遞的數(shù)字信號(hào),所以只要進(jìn)行補(bǔ)碼的轉(zhuǎn)換就可以得到單片機(jī)需要的溫度。其流程圖如圖4.3所示。圖4.3溫度檢測(cè)流程圖渾濁度監(jiān)測(cè)實(shí)現(xiàn)本設(shè)計(jì)的渾濁度檢測(cè)模塊是利用兩個(gè)光敏電阻完成的,將一個(gè)光敏電阻置于水面上方,一個(gè)光敏電阻置于水面下方,當(dāng)兩個(gè)光敏電阻的光照值產(chǎn)生差別時(shí),會(huì)產(chǎn)生兩個(gè)不同的電壓,取兩個(gè)電壓的差值作為水渾濁度的判定。其水深監(jiān)測(cè)工作流程如圖4.4所示。圖4.4渾濁度檢測(cè)流程圖本系統(tǒng)設(shè)計(jì)的渾濁度閾值為20,兩個(gè)光敏電路差值大于20的時(shí)候液晶提示換水,如果小于20則正常顯示渾濁度。光敏電阻組成的渾濁度檢測(cè)電路生產(chǎn)的模擬電壓輸出需要通過使用AD轉(zhuǎn)換器進(jìn)行模數(shù)的轉(zhuǎn)換,所以要想采集到光敏電阻的數(shù)據(jù),首先要設(shè)置好ADC。初始化ADC,并設(shè)置好工作模式,設(shè)置完之后進(jìn)行一次采樣,將采樣的值傳遞給轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換,最后進(jìn)行電壓值的計(jì)算。ADC的部分代碼如下。//初始化ADC

voidMy_ADC_PreInit(ADC_TypeDef*ADCx,u32trigger,boolenableDMA)

{

*******

if(ADCx==ADC1)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

}

elseif(ADCx==ADC2)

{

******

}

elseif(ADCx==ADC3)

{

*******

}

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

for(i=0;i<ArrayCount(Pins_ADC);i++)

{

GPIO_Pin_Init(Pins_ADC[i],GPIO_Mode_AIN);

}

ADC_DeInit(ADCx);

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;

ADC_InitStructure.ADC_ScanConvMode=enableDMA?ENABLE:DISABLE;

ADC_InitStructure.ADC_ContinuousConvMode=enableDMA?ENABLE:DISABLE;

ADC_InitStructure.ADC_ExternalTrigConv=trigger;

ADC_Init(ADCx,&ADC_InitStructure);

if(enableDMA)

{

*******

for(i=0;i<ArrayCount(Pins_ADC);i++)

{

ADC_RegularChannelConfig(ADCx,My_ADC_GetADCChannel(ADCx,Pins_ADC[i]),i+1,ADC_SampleTime_239Cycles5);

}

*******

}

********

}//獲得ADC值

//ch:通道值0~3

u16My_ADC_GetValue(ADC_TypeDef*ADCx,u8ch)

{

ADC_RegularChannelConfig(ADCx,ch,1,ADC_SampleTime_239Cycles5);

ADC_SoftwareStartConvCmd(ADCx,ENABLE);

while(!ADC_GetFlagStatus(ADCx,ADC_FLAG_EOC));

returnADC_GetConversionValue(ADCx);

}//ADC的值轉(zhuǎn)換u8My_ADC_GetPercent(ADC_TypeDef*ADCx,u8ch,u8times,floatadcVlaueMin,floatadcValueMax)

{

*******

if(percent<adcVlaueMin)

{

return0;

}

if(percent>adcValueMax)

{

return100;

}

else

{

percent=(percent-adcVlaueMin)*100/(adcValueMax-adcVlaueMin);

}

returnpercent;

}//電壓值的計(jì)算floatMy_ADC_GetCurrent_ASC712(ADC_TypeDef*ADCx,u8ch,u8times,floatscale)

{

floatvolt=My_ADC_GetVoltage(ADCx,ch,times,scale);

if(volt<Volt_ACS712_ZERO)

{

volt=0;

}

else

{

volt=(volt-Volt_ACS712_ZERO)/0.185;

}

returnvolt;

}喂食設(shè)計(jì)本設(shè)計(jì)的喂食設(shè)計(jì)分為兩種情況,一種是手動(dòng)喂食,由使用者進(jìn)行按鍵操作或者通過上位機(jī)發(fā)出對(duì)應(yīng)指令,芯片解析指令打開喂食閥門。另外一種是自動(dòng)喂食,由使用者提前設(shè)置好喂食間隔,當(dāng)達(dá)到固定的時(shí)間間隔,系統(tǒng)自動(dòng)打開喂食舵機(jī),完成喂食操作,同時(shí)自動(dòng)重新計(jì)時(shí)。本模塊的使用流程如圖4.5所示。圖4.5喂食流程圖舵機(jī)的驅(qū)動(dòng)通過PWM實(shí)現(xiàn),舵機(jī)的伺服系統(tǒng)主要由脈沖信號(hào)的寬度進(jìn)行實(shí)現(xiàn)的,控制線主要傳輸脈沖信號(hào),舵機(jī)的基準(zhǔn)信號(hào)周期為20ms。當(dāng)舵機(jī)接收到一個(gè)大于1.5ms的脈沖,輸出軸會(huì)順時(shí)針旋轉(zhuǎn)一定角度。接收到的脈沖大于1.5ms時(shí)候,輸出軸會(huì)逆時(shí)針旋轉(zhuǎn)對(duì)應(yīng)的角度。脈沖信號(hào)寬度及舵機(jī)轉(zhuǎn)動(dòng)角度關(guān)系如圖4.6所示。圖4.6脈沖寬度及舵機(jī)轉(zhuǎn)動(dòng)角度關(guān)系圖具體控制代碼如下所示。voidMy_PWM_SetDuty(TIM_TypeDef*TIMx,TIM_Channelch,floatpercent)

{

u16per;

if(percent>100){

percent=100;

}

switch((u32)TIMx)

{

case(u32)TIM1:per=Pwm_Per[0];break;

case(u32)TIM2:per=Pwm_Per[1];break;

case(u32)TIM3:per=Pwm_Per[2];break;

case(u32)TIM4:per=Pwm_Per[3];break;

default:break;

}

if(ch&TIM_CH_1)TIM_SetCompare1(TIMx,per*percent/100);

if(ch&TIM_CH_2)TIM_SetCompare2(TIMx,per*percent/100);

if(ch&TIM_CH_3)TIM_SetCompare3(TIMx,per*percent/100);

if(ch&TIM_CH_4)TIM_SetCompare4(TIMx,per*percent/100);

}換水設(shè)計(jì)整個(gè)換水模塊由水泵,水位傳感器和排水舵機(jī)組成。由排水舵機(jī)先將水排出,當(dāng)水位感應(yīng)器感應(yīng)到水位排到一定程度以后關(guān)閉排水閥門,打開水泵注入新的水資源。本設(shè)計(jì)上采用的是一個(gè)5V水泵。如圖4.7所示。圖4.7換水流程圖此處的L和H為水位的低水位和高水位的設(shè)定,分別為10和70。系統(tǒng)收到換水指令以后會(huì)打開換水舵機(jī),打開閥門將水排出,水位檢測(cè)傳感器協(xié)助換水。當(dāng)水位傳感器檢測(cè)到水位低于L值以后,便會(huì)關(guān)閉排水閥門,同時(shí)打開水泵進(jìn)行注水。當(dāng)水位傳感器檢測(cè)到水位高于H值以后,系統(tǒng)將自動(dòng)關(guān)閉水泵,停止注水,此時(shí),整個(gè)換水流程便完成了。電路中水泵的控制是通過PWM的方式進(jìn)行控制,程序上電的同時(shí)對(duì)PWM進(jìn)行初始化,初始化TIM1定時(shí)器、TIM_CH通道和設(shè)定周期為2000,當(dāng)水位降低到設(shè)置值時(shí),因?yàn)楸旧淼乃玫墓ぷ麟妷菏?.5V的,所以需要給其設(shè)置45%的占空比進(jìn)行電壓的調(diào)整,通過PWM的方式可以更加精準(zhǔn)的達(dá)到對(duì)水泵電路的控制。PWM的初始化代碼。//PWM初始化函數(shù)voidMy_PWM_Init(TIM_TypeDef*TIMx,TIM_Channelch,u16period)

{

/*SetTIM3andTIM4forPWMmode*/

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

TIM_OCInitTypeDefTIM_OCInitStructure;

switch((u32)TIMx)

{

case(u32)TIM1:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

if(ch&TIM_CH_1)GPIO_Pin_Init(PA8,GPIO_Mode_AF_PP);

if(ch&TIM_CH_2)GPIO_Pin_Init(PA9,GPIO_Mode_AF_PP);

if(ch&TIM_CH_3)GPIO_Pin_Init(PA10,GPIO_Mode_AF_PP);

if(ch&TIM_CH_4)GPIO_Pin_Init(PA11,GPIO_Mode_AF_PP);

Pwm_Per[0]=period;

break;

case(u32)TIM2:

******

case(u32)TIM3:

*******

case(u32)TIM4:

******

default:break;

}

TIM_TimeBaseStructure.TIM_Period=period-1;

TIM_TimeBaseStructure.TIM_Prescaler=71;

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIMx,&TIM_TimeBaseStructure);

if(ch&TIM_CH_1)TIM_OC1Init(TIMx,&TIM_OCInitStructure);

if(ch&TIM_CH_1)TIM_SetCompare1(TIMx,0);

********

TIM_CtrlPWMOutputs(TIMx,ENABLE);

if(ch&TIM_CH_1)TIM_OC1PreloadConfig(TIMx,TIM_OCPreload_Enable);

********

TIM_ARRPreloadConfig(TIMx,ENABLE);

TIM_Cmd(TIMx,ENABLE);

}報(bào)警提示系統(tǒng)本設(shè)計(jì)的報(bào)警提示系統(tǒng)主要是對(duì)渾濁度模塊和換水模塊進(jìn)行液晶提示報(bào)警。在渾濁度模塊上,當(dāng)系統(tǒng)檢測(cè)到渾濁度超過了系統(tǒng)設(shè)計(jì)的預(yù)定值20時(shí),會(huì)在液晶屏上提示“渾濁度過高,請(qǐng)換水”。該部分代碼如下所示。if(remupData_02!=nowHzVal)ˉ{remupData_02=nowHzVal;if(nowHzVal>20){FRONT_COLOR=Color16_RED; sprintf(dis2,nowHzVal);}else{FRONT_COLOR=Color16_WHITE; sprintf(dis2,nowHzVal);}MyLCD_Show(X_PLACE,yPlace++,dis2);}else{yPlace++;}在換水模塊中,整個(gè)換水過程都會(huì)有液晶提醒,提示當(dāng)前換水步驟以及水位高低,主要提示包括“開始換水..”、“排水至<L”、“加水至>H”、“換水完成!”。其提醒代碼如下所示。if(runStep==0){sprintf(dis0,"%s開始換水..",dis0);}//發(fā)送數(shù)據(jù)

elseif(runStep==1){sprintf(dis0,"%s排水至<L",dis0);}//發(fā)送數(shù)據(jù)

elseif(runStep==2){sprintf(dis0,"%s加水至>H",dis0);}//發(fā)送數(shù)據(jù)

elseif(runStep==3){sprintf(dis0,"%s換水完成!",dis0);}//發(fā)送數(shù)據(jù)APP的設(shè)計(jì)本設(shè)計(jì)的APP開發(fā)使用的是安卓系統(tǒng),使用的編譯器為IDEA。安卓系統(tǒng)是在Linux基礎(chǔ)上開發(fā)的開源操作系統(tǒng),現(xiàn)主要使用在手機(jī)上,作為移動(dòng)端的主要操作系統(tǒng),之所以選擇安卓作為開發(fā)平臺(tái)也是因?yàn)槠溟_源的性質(zhì),使開發(fā)的APP可以很好的安裝與手機(jī)上,而蘋果系統(tǒng)的封閉性就無法提供這么高的便捷性。安卓系統(tǒng)的開發(fā)主要用JAVA語言,而JAVA的開發(fā)需要進(jìn)行系統(tǒng)環(huán)境的搭建(圖4.8),安裝JDK來提供JAVA的編譯,環(huán)境搭建完以后就可以開始創(chuàng)建開發(fā)工程。圖4.8開發(fā)環(huán)境變量配置圖單片機(jī)和上位機(jī)的通訊用的是WIFI模塊,所以主要使用的類為Socket類,而Socket類有一個(gè)子類為TcpClient,TcpClient類中封裝了部分簡(jiǎn)單的通訊方法,調(diào)用這些方法我們可以較為方便的實(shí)現(xiàn)網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。所以開發(fā)主要使用TcpClient完成。軟件的工作流程圖如圖4.9所示。圖4.9軟件工作流程圖TCP是面向連接的協(xié)議,服務(wù)器和客戶端進(jìn)行通信直接需要先進(jìn)行連接的建立。因此,TCP的server需依次調(diào)用以下函數(shù):listen():轉(zhuǎn)換套接字狀態(tài)從關(guān)閉轉(zhuǎn)換為監(jiān)聽狀態(tài),是客戶端的請(qǐng)求可以被監(jiān)聽。accept():它在監(jiān)聽到套接字的第一個(gè)請(qǐng)求后,創(chuàng)建一個(gè)新的連接套接字,并返回標(biāo)志信號(hào)。通常情況下,服務(wù)器進(jìn)程在accept調(diào)用中進(jìn)入休眠(sleep)狀態(tài),等到下一次被喚醒。TCP連接使用三次握手來建立連接。TCP的client需調(diào)用以下函數(shù):connect():為一個(gè)套接字分配一個(gè)空閑的端口號(hào),并嘗試去建立一個(gè)新的TCP連接。TCP的交互流程圖如圖4.10所示。圖4.10TCP交互流程圖軟件部分源碼如下所示。

//創(chuàng)建tcp連接,需要提供服務(wù)器信息

publicstaticXTcpClientgetTcpClient(TargetInfotargetInfo){

returngetTcpClient(targetInfo,null);

}

publicstaticXTcpClientgetTcpClient(TargetInfotargetInfo,TcpConnConfigtcpConnConfig){

XTcpClientXTcpClient=TcpClientManager.getTcpClient(targetInfo);

if(XTcpClient==null){

XTcpClient=newXTcpClient();

XTcpClient.init(targetInfo,tcpConnConfig);

TcpClientManager.putTcpClient(XTcpClient);

}

returnXTcpClient;

}//根據(jù)socket創(chuàng)建client端,目前僅用在socketServer接受client之后

publicstaticXTcpClientgetTcpClient(Socketsocket,TargetInfotargetInfo){

returngetTcpClient(socket,targetInfo,null);

}

publicstaticXTcpClientgetTcpClient(Socketsocket,TargetInfotargetInfo,TcpConnConfigconnConfig){

if(!socket.isConnected()){

ExceptionUtils.throwException("socketiscloseed");

}

XTcpClientxTcpClient=newXTcpClient();

xTcpClient.init(targetInfo,connConfig);

xTcpClient.mSocket=socket;

xTcpClient.mClientState=ClientState.Connected;

xTcpClient.onConnectSuccess();

returnxTcpClient;

}

privatevoidinit(TargetInfotargetInfo,TcpConnConfigconnConfig){

this.mTargetInfo=targetInfo;

mClientState=ClientState.Disconnected;

mTcpClientListeners=newArrayList<>();

if(mTcpConnConfig==null&&connConfig==null){

mTcpConnConfig=newTcpConnConfig.Builder().create();

}elseif(connConfig!=null){

mTcpConnConfig=connConfig;

}

}系統(tǒng)實(shí)物調(diào)試系統(tǒng)初始化調(diào)試如圖5.1所示,這是本設(shè)計(jì)初步通電時(shí)候的狀態(tài)。可以看到,此時(shí)WIFI模塊、水位檢測(cè)傳感器和液晶屏顯示模塊,都已經(jīng)呈現(xiàn)相關(guān)的亮度以及閃現(xiàn)的狀態(tài),說明各個(gè)部件通電信號(hào)正常,可以正常使用。圖5.1系統(tǒng)上電效果圖以WIFI模塊為例,WIFI模塊紅燈長(zhǎng)亮,藍(lán)燈閃爍,說明WIFI已經(jīng)處于可連接狀態(tài),此時(shí)可以使用手機(jī)連接上對(duì)應(yīng)的WIFI,再通過APP就可以實(shí)現(xiàn)上位機(jī)對(duì)魚缸的控制。從液晶屏顯示可以看到此時(shí)系統(tǒng)已經(jīng)采集到了魚缸當(dāng)前的基本狀態(tài)信息,以及默認(rèn)情況下自動(dòng)喂食間隔時(shí)間。本系統(tǒng)的程序使用了KEIL軟件對(duì)程序進(jìn)行了仿真,仿真過程如圖5.2所示,當(dāng)點(diǎn)擊程序下一步的時(shí)候,可以發(fā)現(xiàn),寄存器數(shù)據(jù)會(huì)有相應(yīng)的變換,以此說明此軟件的程序運(yùn)行正常。圖5.2KEIL軟件仿真圖APP控制演示本設(shè)計(jì)的WIFI模塊是ESP8266是一款超低功耗的UART-WiFi透?jìng)髂K,該模塊功耗低,是一款專門為物體聯(lián)網(wǎng)設(shè)計(jì)的WIFI模塊。ESP8266是一款使用廣泛的WIFI模塊,在智能家居,工業(yè)控制,電力電網(wǎng),移動(dòng)交通中都有它的身影。它先進(jìn)的封裝技術(shù),保證了它有著更穩(wěn)定的工作狀態(tài)。如圖5.3所示,將手機(jī)連接上系統(tǒng)的WIFI,然后打開APP,選擇連接,就可以看到,在顯示屏上的數(shù)據(jù)就被傳送了過來,此時(shí)可以通過輸入指令FEED或者WATER進(jìn)行喂食操作或者換水操作。接收到的數(shù)據(jù)制作成表格(表5.2),再利用MATLAB畫成了折線圖如圖5.4所示。圖5.3APP演示表5.1單片機(jī)初始化數(shù)據(jù)表時(shí)間s溫度℃水位mm渾濁度126.19900226.19900326.19900426.57812527.19915627.79523727.55629827.05817926.566161026.1454圖5.4各項(xiàng)數(shù)據(jù)折線圖從上到下依次為水溫、水位和渾濁度變化折線圖。從折線圖中可以看出,當(dāng)初始上電的時(shí)候溫度,水位及渾濁度就已經(jīng)被同步到這邊的上位機(jī),然后稍微改變一下各項(xiàng)傳感器的條件,可以發(fā)現(xiàn),上位機(jī)端都可以很好的實(shí)現(xiàn)數(shù)據(jù)的同步,數(shù)據(jù)的接受和發(fā)送的也同步的很好,基本滿足對(duì)上位機(jī)的開發(fā)要求。測(cè)溫演示自然界的水溫不是恒定的,魚對(duì)水溫的要求也會(huì)發(fā)生變化。魚兒在野生的環(huán)境里面,不管是在什么樣的季節(jié),它都會(huì)迅速的適應(yīng)環(huán)境。隨著溫度高低變化,它自身都就會(huì)有調(diào)節(jié)的過程?,F(xiàn)在人工培育繁殖的觀賞魚很多,但是這些魚他們身體里面會(huì)有一個(gè)基因代碼,有一定的抵抗溫度的能力。對(duì)于家里養(yǎng)的觀賞性魚類,魚缸的溫度較為難以把控,夏天炎熱的天氣會(huì)提升魚缸的溫度,冬天寒冷的天氣亦會(huì)對(duì)魚缸的溫度產(chǎn)生影響,所以一個(gè)能夠靈敏反應(yīng)溫度變化的傳感器及時(shí)的將魚缸中的溫度反饋給使用者是必要的。DS18B20是常用的數(shù)字溫度傳感器,可以直接輸出數(shù)字信號(hào),少了轉(zhuǎn)換的步驟,所以使用起來較為方便,且體積小,精度高,有著眾多的優(yōu)點(diǎn)。該溫度傳感器測(cè)溫范圍在-55℃~+125℃之間,測(cè)溫誤差在上下一攝氏度之間,可以很好的完成魚缸的溫度檢測(cè)功能。圖5.5溫度演示如圖5.5所示,可以看到當(dāng)手握住溫度傳感器的時(shí)候,液晶屏上的溫度有著明顯的變化,說明溫度傳感器是正常工作的,而且其靈敏程度是有保證的??匆唤M上位機(jī)收到的數(shù)據(jù)(表5.2),將上位機(jī)采集的數(shù)據(jù)收集到MATLAB中做成折線圖5.6。表5.2溫度數(shù)據(jù)表時(shí)間s溫度℃126.1226.1326.3426.5527.1627.7728.6829.5930.51031.6圖5.6溫度演示折線圖可以看到當(dāng)手握傳感器以后溫度有了明顯的上升,且隨著時(shí)間的增加,溫度的上升程度由慢到快,說明設(shè)計(jì)使用的傳感器工作正常,且靈敏度是符合要求的。喂食演示魚缸養(yǎng)魚的對(duì)喂食的要求也是非常高的,養(yǎng)魚一天要喂一到兩次。雖然魚類的耐餓性比較強(qiáng),幾天喂一次也能養(yǎng)得活,但如果在生長(zhǎng)期沒有提供足夠的養(yǎng)分,魚兒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論