




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于STM32的貓咪健康管理監(jiān)護(hù)系統(tǒng)設(shè)計(jì)[18]。現(xiàn)如今現(xiàn)代科學(xué)技術(shù)的發(fā)展和智能技術(shù)的不斷進(jìn)步,貓咪健康監(jiān)護(hù)系統(tǒng)越來越智能化,功能也越來越多樣化,監(jiān)測(cè)精度也越來越高。不斷提高貓咪健康監(jiān)測(cè)參數(shù)控制的精度,有助于監(jiān)護(hù)貓咪的健康狀態(tài),從而更好的幫助貓咪的健康成長(zhǎng)。1.4主要研究?jī)?nèi)容本系統(tǒng)主要設(shè)計(jì)個(gè)貓咪健康管理監(jiān)護(hù)系統(tǒng)?;赟TM32單片機(jī)通過溫度傳感器、心率血氧傳感器、加速度傳感器、藍(lán)牙模塊、GPS模塊對(duì)貓咪進(jìn)行檢測(cè),完成具有能檢測(cè)體溫、心率血氧、定位等信息以及數(shù)據(jù)上傳至手機(jī)APP控制,顯示屏模塊顯示監(jiān)測(cè)數(shù)據(jù),數(shù)據(jù)異常時(shí)蜂鳴器進(jìn)行報(bào)警等功能的設(shè)計(jì),實(shí)現(xiàn)的成果為實(shí)物,并通過測(cè)試并運(yùn)行。圖1-1內(nèi)容框架第2章系統(tǒng)的總體結(jié)構(gòu)2.1設(shè)計(jì)方案本系統(tǒng)主要是開發(fā)一款基于STM32的貓咪健康管理監(jiān)護(hù)系統(tǒng)設(shè)計(jì)。本系統(tǒng)首先對(duì)情感這一理論進(jìn)行了細(xì)致的分析,然后對(duì)貓咪的監(jiān)測(cè)需求進(jìn)行深入的分析并發(fā)放相關(guān)問卷調(diào)查,總結(jié)寵物在監(jiān)測(cè)過程中的相關(guān)需求;其次通過研究,結(jié)合當(dāng)前已有的技術(shù),對(duì)于貓咪健康管理監(jiān)護(hù)系統(tǒng)的設(shè)計(jì)有了更進(jìn)一步的了解,將調(diào)研到的相關(guān)需求與前期的理論分析進(jìn)行融合,根據(jù)相關(guān)的設(shè)計(jì)要素與設(shè)計(jì)原則來進(jìn)行實(shí)踐,總結(jié)出貓咪在監(jiān)測(cè)過程中存在的問題,從而完成最終的設(shè)計(jì)方案。2.2預(yù)期結(jié)果通過對(duì)系統(tǒng)的布設(shè)和完善,最終完成的基于STM32的貓咪健康管理監(jiān)護(hù)系統(tǒng)設(shè)計(jì)預(yù)期有如下成果:1.體溫檢測(cè),溫度過高時(shí)進(jìn)行警告;2.心率檢測(cè),防止貓咪心率過快或異常跳動(dòng);3.通過加速度傳感器,當(dāng)速度過快時(shí)發(fā)出示警信號(hào);4.GPS模塊,實(shí)時(shí)監(jiān)控貓咪的位置信息,并發(fā)送到移動(dòng)端;5.監(jiān)控一次貓咪的心率血氧、體溫等參數(shù),設(shè)定其閾值并實(shí)時(shí)上傳至移動(dòng)端;6.系統(tǒng)可實(shí)時(shí)監(jiān)控貓咪的心率血氧、體溫,當(dāng)貓咪的心率血氧、體溫與所規(guī)定的值差距過大,蜂鳴器示警;7.系統(tǒng)將統(tǒng)計(jì)好的參數(shù)上傳至移動(dòng)端,手機(jī)APP進(jìn)行遠(yuǎn)程控制,顯示屏顯示各項(xiàng)參數(shù)。2.3單片機(jī)型號(hào)選擇方案一:51單片機(jī)是一種基于Intel8051架構(gòu)的8位微控制器芯片,但由于其處理能力和存儲(chǔ)能力較低,運(yùn)算能力有限,再加上51單片機(jī)的外設(shè)接口和協(xié)議相對(duì)較少。方案二:STM32系列單片機(jī)是一系列高性能、功能強(qiáng)大的微控制器。它們常被廣泛應(yīng)用于嵌入式應(yīng)用程序,特別適用于那些對(duì)成本、性能和功耗要求較低的場(chǎng)景。這些單片機(jī)在功耗和集成度方面表現(xiàn)出色,并且結(jié)合了便捷的開發(fā)工具和簡(jiǎn)潔的結(jié)構(gòu),因此在業(yè)界非常受歡迎。經(jīng)比較選擇方案二。本實(shí)驗(yàn)采用的主控制芯片是STM32F103C8T6,它是一款基于STM32系列ARMCortex-M內(nèi)核的32位微控制器,由意法半導(dǎo)體集團(tuán)開發(fā)。該芯片具有64KB的程序存儲(chǔ)器。在工作時(shí),它需要2V至3.6V的電壓,并且能夠在-40°C至85°C的環(huán)境溫度下正常運(yùn)行。它集成了豐富的功能,可滿足實(shí)驗(yàn)的需求。無論是在低成本、高性能還是低功耗方面,STM32F103C8T6都能夠提供出色的性能。因此,它是進(jìn)行該實(shí)驗(yàn)的理想選擇。通過選擇STM32F103C8T6作為主控制芯片,本實(shí)驗(yàn)?zāi)軌虺浞职l(fā)揮其先進(jìn)的特性和可靠性,實(shí)現(xiàn)所需的功能。無論是在嵌入式應(yīng)用程序開發(fā)、性能優(yōu)化還是電源管理方面,STM32F103C8T6都能夠滿足要求,并為實(shí)驗(yàn)提供可靠的基礎(chǔ)。圖2-1STM32芯片圖2.4顯示模塊選擇方案一:LED顯示屏是一種平板顯示器,由一個(gè)個(gè)小的LED模塊面板組成。LED面板里面存在一個(gè)發(fā)光層,它是利用液晶層的分子偏轉(zhuǎn)來顯示不同的圖像。LED顯示屏是一種通過控制半導(dǎo)體發(fā)光二極管的顯示方式,通過燈亮滅的結(jié)果顯示字符。其本身不發(fā)光,需要背光源。方案二:OLED顯示屏是有機(jī)發(fā)光二極管,是不需要背光源,OLED是不需要發(fā)光層的,它的每一個(gè)像素點(diǎn)都可以通過電流驅(qū)動(dòng)有機(jī)薄膜來進(jìn)行發(fā)光的。因?yàn)槠漭p薄、省電等特性,廣泛應(yīng)用于數(shù)碼產(chǎn)品中。OLED屏與LED屏相比,OLED屏顯示圖像的細(xì)膩度會(huì)更高,柔和度也會(huì)高一些,對(duì)比度會(huì)更高,特別就是在播放視屏還有一些數(shù)據(jù)信息的時(shí)候,有著明顯的差異。OLED屏節(jié)能省電,因?yàn)镺LED顯示屏的功耗是相當(dāng)?shù)偷模驗(yàn)镺LED屏是自發(fā)光的,不需要背光源,所以在節(jié)能方面更勝一籌,更加的環(huán)保。如果是長(zhǎng)時(shí)間開機(jī)運(yùn)行使用,OLED屏也會(huì)更加的省電,也是選擇的理由之一。圖2-2OLED顯示屏2.5通訊模塊選擇藍(lán)牙和Zigbee是現(xiàn)代無線通信技術(shù)的代表,它們被廣泛應(yīng)用于各種場(chǎng)景,包括智能家居、物聯(lián)網(wǎng)和無線傳感器網(wǎng)絡(luò)等。在選擇這兩種技術(shù)中,我認(rèn)為藍(lán)牙是更好的選擇。以下是詳細(xì)的介紹。方案一:藍(lán)牙技術(shù)是一種短距離無線通信技術(shù),它使用2.4GHz頻段進(jìn)行無線通信。這種技術(shù)的最大特點(diǎn)是低功耗、低成本,所以被廣泛應(yīng)用于智能家居、智能手表和智能手機(jī)等場(chǎng)景。藍(lán)牙技術(shù)具有高傳輸速度、廣泛的設(shè)備兼容性以及簡(jiǎn)單易用的特點(diǎn),成為市場(chǎng)上最受歡迎的無線通信技術(shù)之一。方案二:Zigbee技術(shù)是一種低功耗、低速率和低成本的短距離無線通信技術(shù),它通常用于物聯(lián)網(wǎng)或無線傳感器網(wǎng)絡(luò)中。與藍(lán)牙不同,Zigbee使用不同的頻譜頻段進(jìn)行無線通信,通常使用2.4GHz或低頻段。Zigbee技術(shù)具有一些優(yōu)點(diǎn),比如支持更長(zhǎng)的傳輸距離、更低的功耗和更高的網(wǎng)絡(luò)容量。但是,Zigbee的設(shè)備兼容性較差,使用起來比較復(fù)雜REF_Ref22201\r\h[7]。對(duì)比后藍(lán)牙技術(shù)是更好的選擇。雖然藍(lán)牙和Zigbee在某些方面有著相似之處,但在多數(shù)方面,藍(lán)牙技術(shù)是更好的選擇。首先,藍(lán)牙具有更高的數(shù)據(jù)傳輸速率,可以滿足更高的帶寬需求。其次,藍(lán)牙設(shè)備更加普及,市面上各種類型的設(shè)備都支持藍(lán)牙,這對(duì)設(shè)備應(yīng)用的廣泛性和兼容性非常重要。此外,藍(lán)牙技術(shù)還具有更簡(jiǎn)單、更易于使用的特點(diǎn)。據(jù)我們了解,對(duì)于多數(shù)應(yīng)用場(chǎng)景而言,藍(lán)牙是更優(yōu)秀的選擇。在智能家居、智能手表、智能手機(jī)等場(chǎng)景中,使用藍(lán)牙可以滿足快速的數(shù)據(jù)傳輸和設(shè)備之間的通信。相比之下,Zigbee所適用的物聯(lián)網(wǎng)和無線傳感器網(wǎng)絡(luò)等應(yīng)用場(chǎng)景中的設(shè)備對(duì)數(shù)據(jù)傳輸速率和帶寬要求較低,且其中涉及的設(shè)備兼容性較差,使用起來更加繁瑣。總之,在現(xiàn)代通訊技術(shù)中,藍(lán)牙和Zigbee都是非常重要的無線通信技術(shù),它們具有各自的優(yōu)點(diǎn)和應(yīng)用場(chǎng)景。但是,我們選擇藍(lán)牙作為本文推薦的通信技術(shù),是因?yàn)樗{(lán)牙具有更廣泛的應(yīng)用領(lǐng)域、更高的數(shù)據(jù)傳輸速率和更多的設(shè)備兼容性。對(duì)于大多數(shù)用戶而言,使用藍(lán)牙能夠提供更好的用戶體驗(yàn),這也是我們選擇藍(lán)牙的原因。本設(shè)計(jì)采用HC05藍(lán)牙模塊BH-HC05是秉火科技推出的藍(lán)牙串口模塊,它采用藍(lán)牙2.0協(xié)議,可與任何版本的藍(lán)牙兼容通訊,包括與具有藍(lán)牙功能的電腦、藍(lán)牙主機(jī)、手機(jī)、PDA、PSP等終端配對(duì),可實(shí)現(xiàn)串口透?jìng)鞴δ?。?qū)動(dòng)HC05模塊時(shí)只需要使用TTL電平標(biāo)準(zhǔn)的串口即可(5V/3.3V電壓均可),支持的波特率范圍為4800~1382400,非常適合用于單片機(jī)系統(tǒng)擴(kuò)展藍(lán)牙特性。圖2-3藍(lán)牙模塊
第3章系統(tǒng)的硬件設(shè)計(jì)3.1系統(tǒng)總體設(shè)計(jì)采用溫度傳感器,可以完成對(duì)貓咪的體溫監(jiān)測(cè),當(dāng)貓咪體溫出現(xiàn)異常,可以發(fā)出相應(yīng)的指示;通過血氧心率傳感器測(cè)量貓咪的心率血氧情況,如果心率血氧偏離正常范圍,那么會(huì)發(fā)出警報(bào);通過加速度傳感器測(cè)量貓咪的速度情況,了解貓咪的運(yùn)動(dòng)狀態(tài)。經(jīng)過這些傳感器的監(jiān)測(cè),可以及時(shí)的了解當(dāng)前貓咪的健康狀況,對(duì)于貓咪的監(jiān)護(hù)起到重要作用,可以避免貓咪因?yàn)槟承﹩栴}而死亡。接著對(duì)寵物的監(jiān)測(cè)蓋求進(jìn)行深入的分析并發(fā)放相關(guān)問卷調(diào)查,總結(jié)出寵物在監(jiān)測(cè)過程中的相關(guān)需求;其次通過研究,結(jié)合當(dāng)前已有的技術(shù),對(duì)于貓咪健康管理監(jiān)護(hù)系統(tǒng)的設(shè)計(jì)有更進(jìn)一步的了解,將調(diào)研到的相關(guān)需求與前期的理論分析相融合,根據(jù)相關(guān)的設(shè)計(jì)要素與設(shè)計(jì)原則進(jìn)行實(shí)踐,總結(jié)出貓咪監(jiān)測(cè)過程中存在的問題。3.2系統(tǒng)的主要功能模塊設(shè)計(jì)3.2.1OLED顯示屏模塊設(shè)計(jì)OLED顯示屏是利用有機(jī)電自發(fā)光制成的顯示屏。由于同時(shí)具備自發(fā)光有機(jī)電激發(fā)光二極管,不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制成較簡(jiǎn)單等優(yōu)異之特性。有機(jī)發(fā)光技術(shù)由非常薄的有機(jī)材料涂層和玻璃基板構(gòu)成。當(dāng)有電荷通過時(shí)這些有機(jī)材料就會(huì)發(fā)光。OLED發(fā)光的顏色取決于有機(jī)發(fā)光層的材料,故廠商可由改變發(fā)光層的材料而得到所需之顏色。有源陣列有機(jī)發(fā)光顯示屏具有內(nèi)置的電子電路系統(tǒng),因此每個(gè)像素都由一個(gè)對(duì)應(yīng)的電路獨(dú)立驅(qū)動(dòng)。OLED具備有構(gòu)造簡(jiǎn)單、自發(fā)光不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣等優(yōu)點(diǎn),技術(shù)提供了瀏覽照片和視頻的最佳方式而且對(duì)相機(jī)的設(shè)計(jì)造成的限制較少。圖3-1顯示屏模塊設(shè)計(jì)3.2.2蜂鳴器模塊設(shè)計(jì)蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H或“HA(舊標(biāo)準(zhǔn)用“FM”“ZZG”“LB”、“JD”等)表示。單片機(jī)對(duì)蜂鳴器的驅(qū)動(dòng)方式,系統(tǒng)有兩個(gè)他激蜂鳴器,頻率都為100HZ,一個(gè)由I/O口進(jìn)行控制,另一個(gè)由PWM輸出口進(jìn)行控制,系統(tǒng)還有兩個(gè)按鍵,一個(gè)按鍵為PORT按鍵,I/O口控制的蜂鳴器不鳴叫時(shí)按次按鍵I/O口控制的蜂鳴器鳴叫,再按一次停止鳴叫,另一個(gè)按鍵為PWM按鍵,PWM口控制的蜂鳴器不鳴叫時(shí)按一次按鍵PWM輸出口控制的蜂鳴器鳴叫,再按一次停止鳴叫蜂鳴器是不能用做礦石收音機(jī)的,因?yàn)?,蜂鳴器內(nèi)部有一個(gè)振蕩電路,通上電源后就會(huì)驅(qū)動(dòng)內(nèi)部的一個(gè)微型喇叭發(fā)出蜂鳴聲。蜂鳴器可不是一個(gè)單純的小喇叭。另外,蜂鳴器有兩種。一種是,內(nèi)部自帶振蕩器的;一種是,需要外接一個(gè)振蕩器的,也就是一個(gè)普通的微型喇叭。對(duì)于不帶振蕩器的那種,也是不能用的,因?yàn)樗碾娮枰话銥?2歐姆左右,也有8歐或16歐的。這些都屬于低阻抗的,所以不能用。圖3-2蜂鳴器模塊原理圖3.2.3藍(lán)牙模塊設(shè)計(jì)藍(lán)牙模塊,是一種集成藍(lán)牙功能的PCBA板,用于短距離無線通訊,按功能分為藍(lán)牙數(shù)據(jù)模塊和藍(lán)牙語音模塊。藍(lán)牙模塊是指集成藍(lán)牙功能的芯片基本電路集合,用于無線網(wǎng)絡(luò)通訊,大致可分為三大類型:模塊、藍(lán)牙音頻模塊、藍(lán)牙音頻+數(shù)據(jù)二合一模塊等。一般模塊具有半成品的屬性,是在芯片的基礎(chǔ)上進(jìn)行過加工,以使后續(xù)應(yīng)用更為簡(jiǎn)單。藍(lán)牙設(shè)備采用無線電波?連接手?機(jī)和計(jì)?算機(jī)???。藍(lán)牙產(chǎn)品含有一塊兒小小藍(lán)牙模塊及其支撐聯(lián)接的藍(lán)牙無線電和軟件。當(dāng)兩個(gè)藍(lán)牙設(shè)備要想互相溝通時(shí),他們需要進(jìn)行配對(duì)。藍(lán)牙設(shè)備相互間的通信在短程(被稱作微微網(wǎng),指設(shè)備采用藍(lán)牙技術(shù)聯(lián)接而成的網(wǎng)絡(luò))的臨時(shí)性網(wǎng)絡(luò)中進(jìn)行。這類網(wǎng)絡(luò)可容下兩至8臺(tái)設(shè)備進(jìn)行聯(lián)接。當(dāng)網(wǎng)絡(luò)環(huán)境創(chuàng)建完成,1臺(tái)設(shè)備作為主設(shè)備,而很多其他設(shè)備作為從設(shè)備。強(qiáng)禾科技在藍(lán)牙設(shè)備添加和離去無線電短程傳感時(shí)動(dòng)態(tài)、自動(dòng)創(chuàng)建。伴隨近些年藍(lán)牙技術(shù)的飛速發(fā)展,在功耗不斷的降低的現(xiàn)狀下,藍(lán)牙的傳輸速率也不斷得到了提升,使藍(lán)牙的運(yùn)用范圍更為普遍。但若要設(shè)計(jì)構(gòu)思一種完整的藍(lán)牙系統(tǒng),就一定要全面熟練掌握藍(lán)牙的有關(guān)技術(shù)專業(yè)知識(shí)。藍(lán)牙模塊可以進(jìn)行串口(SPI、IIC)和MCU控制設(shè)備進(jìn)行數(shù)據(jù)傳輸。藍(lán)牙模塊可以作為主機(jī)和從機(jī)。主機(jī)便是可以搜索其他藍(lán)牙模塊并自動(dòng)創(chuàng)建聯(lián)接,從機(jī)則不可以自動(dòng)創(chuàng)建聯(lián)接,只可以等其他人聯(lián)接自身。圖3-3藍(lán)牙模塊原理圖3.2.4GPS模塊設(shè)計(jì)ATGM336H-5N是一款高精度的GPS模塊。該模塊由一家知名的電子技術(shù)公司設(shè)計(jì)和制造,具有卓越的性能和可靠性REF_Ref22677\r\h[11]。ATGM336H-5N采用了先進(jìn)的導(dǎo)航芯片和接收器技術(shù),為用戶提供準(zhǔn)確的定位和導(dǎo)航功能。該GPS模塊采用了高靈敏度的接收器,能夠快速且可靠地接收全球定位系統(tǒng)(GPS)衛(wèi)星信號(hào)。它支持多種導(dǎo)航系統(tǒng),包括美國的GPS、俄羅斯的GLONASS、中國的北斗衛(wèi)星導(dǎo)航系統(tǒng)等,從而增強(qiáng)了定位的可靠性和準(zhǔn)確性。ATGM336H-5N具有出色的定位精度,能夠在室內(nèi)和城市峽谷等信號(hào)受阻的環(huán)境下提供穩(wěn)定的定位性能。它還支持高達(dá)10Hz的定位更新頻率,使得用戶可以獲得實(shí)時(shí)的位置信息。該GPS模塊具有低功耗設(shè)計(jì),能夠有效延長(zhǎng)設(shè)備的電池壽命。它還采用了小尺寸的封裝,方便集成到各種應(yīng)用中。同時(shí),它還提供了豐富的接口和通信協(xié)議,如UART、SPI和I2C,以便于與主控制器或其他外部設(shè)備進(jìn)行連接和通信。ATGM336H-5N還支持多種導(dǎo)航功能和服務(wù),如導(dǎo)航狀態(tài)指示、速度測(cè)量、航向計(jì)算等。它可以廣泛應(yīng)用于汽車導(dǎo)航、航空航天、船舶定位、無人機(jī)導(dǎo)航、移動(dòng)設(shè)備導(dǎo)航等領(lǐng)域。此外,ATGM336H-5N還具有良好的抗干擾性能和高可靠性。它采用了先進(jìn)的抗干擾技術(shù),能夠有效抵御電磁干擾和多路徑效應(yīng),提供穩(wěn)定可靠的定位結(jié)果。總之,ATGM336H-5N是一款高精度、可靠性強(qiáng)的GPS模塊,具有出色的定位精度、低功耗設(shè)計(jì)和多種導(dǎo)航功能。它適用于各種應(yīng)用場(chǎng)景,為用戶提供準(zhǔn)確可靠的定位和導(dǎo)航服務(wù)。無論是在消費(fèi)電子產(chǎn)品還是工業(yè)領(lǐng)域,ATGM336H-5N都能夠?yàn)橛脩舻膽?yīng)用提供卓越的性能和便利的使用體驗(yàn)。圖3-4GPS模塊電路圖3.2.5溫度傳感器模塊設(shè)計(jì)我們采用DS18B20溫度傳感器,DS18B20有三只引腳,VCC,DQ和VDD。而HJ-2G板子上,采用了外部供電的鏈接方式,而總線必須鏈接上拉電阻。這一目的告訴我們,一線總線在空置狀態(tài)時(shí),都是一直處于高電平。DS18B20的內(nèi)部有64位的ROM單元,和9字節(jié)的暫存器單元。圖3-5DS18B20溫度傳感器模塊電路圖3.2.6加速度傳感器模塊設(shè)計(jì)采用加速度傳感器不間斷的記錄動(dòng)物的行為數(shù)據(jù),在一段時(shí)間內(nèi)的速度變化,實(shí)時(shí)監(jiān)測(cè)貓咪的行為情況,通過藍(lán)牙連接上位機(jī)實(shí)時(shí)數(shù)據(jù)傳輸充分有效了解貓咪的行為狀態(tài)。圖3-6加速度傳感器電路圖3.2.7心率血氧傳感器模塊設(shè)計(jì)MAX30100是一種能夠監(jiān)測(cè)心率、血氧的傳感器,是一種通過IIC進(jìn)行通信的通信方式。它工作原理是通過紅外LED燈進(jìn)行照射,從而得到心率的ADC值。該傳感器其中包含兩個(gè)LED、一個(gè)光電探測(cè)器、經(jīng)過優(yōu)化的光學(xué)器件和低噪聲模擬信號(hào)處理器。測(cè)量用到的方法為光容積法。需注意的是SCL和SDA接4.7K上拉電阻到VCC,這樣可使的總線在空閑時(shí)處于高電平,數(shù)據(jù)傳輸準(zhǔn)確REF_Ref22429\r\h[8]。圖3-7心率血氧傳感器模塊電路圖第4章系統(tǒng)的軟件設(shè)計(jì)4.1軟件的主要流程本系統(tǒng)主要是開發(fā)一款基于STM32的貓咪健康管理監(jiān)護(hù)系統(tǒng)設(shè)計(jì)。本系統(tǒng)采用溫度傳感器,可以完成對(duì)貓咪的體溫監(jiān)測(cè),當(dāng)貓咪體溫出現(xiàn)異常,可以發(fā)出相應(yīng)的指示;通過心率血氧傳感器測(cè)量貓咪的情況,如果閾值偏離正常范圍,那么會(huì)發(fā)出警報(bào);通過加速度傳感器測(cè)量貓咪的速度情況,了解貓咪的運(yùn)動(dòng)狀態(tài)。經(jīng)過這些傳感器的監(jiān)測(cè),可以及時(shí)的了解當(dāng)前貓咪的健康狀況,對(duì)于貓咪的監(jiān)護(hù)起到重要作用,可以避免貓咪因?yàn)槟承﹩栴}而死亡。接著對(duì)貓咪的監(jiān)測(cè)需求進(jìn)行深入的分析并發(fā)放相關(guān)問卷調(diào)查,總結(jié)出貓咪在監(jiān)測(cè)過程中的相關(guān)需求;其次通過研究,結(jié)合當(dāng)前已有的技術(shù),對(duì)于貓咪健康管理監(jiān)護(hù)系統(tǒng)的設(shè)計(jì)有了更進(jìn)一步的了解,將調(diào)研到的相關(guān)需求與前期的理論分析進(jìn)行相融合,并根據(jù)相關(guān)的設(shè)計(jì)要素與設(shè)計(jì)原則來指導(dǎo)設(shè)計(jì)實(shí)踐,總結(jié)出貓咪監(jiān)測(cè)過程中存在的問題。圖4-1主系統(tǒng)流程圖4.2OLED顯示屏軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的程序運(yùn)行,傳感器進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏上顯示出來。圖4-2OLED顯示屏軟件設(shè)計(jì)4.3蜂鳴器模塊軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的的程序運(yùn)行,傳感器進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏上顯示出來。與上位機(jī)之間可以通過藍(lán)牙模塊進(jìn)行連接,采集的數(shù)據(jù)也可以從上位機(jī)上進(jìn)行顯示,也可以從上位機(jī)上進(jìn)行數(shù)據(jù)的設(shè)定,出現(xiàn)異常情況時(shí),系統(tǒng)將會(huì)進(jìn)行報(bào)警提示。圖4-3蜂鳴器模塊軟件設(shè)計(jì)4.4藍(lán)牙模塊軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的程序運(yùn)行,傳感器進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏上顯示出來。與上位機(jī)之間可以通過藍(lán)牙模塊進(jìn)行連接,采集的數(shù)據(jù)也可以從上位機(jī)上進(jìn)行顯示,也可以從上位機(jī)上進(jìn)行數(shù)據(jù)的設(shè)定。圖4-4藍(lán)牙模塊軟件設(shè)計(jì)4.5GPS模塊軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的程序運(yùn)行,GPS定位模塊進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏和上位機(jī)上顯示出來。圖4.5GPS模塊軟件設(shè)計(jì)4.6溫度傳感器模塊軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的程序運(yùn)行,溫度傳感器傳感器進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏和上位機(jī)上顯示出來。圖4-6DS18B20溫度傳感器軟件設(shè)計(jì)4.7加速度傳感器模塊軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的程序運(yùn)行,加速度傳感器進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏和上位機(jī)中顯示出來。圖4-7加速度傳感器軟件設(shè)計(jì)4.8心率血氧傳感器模塊軟件設(shè)計(jì)首先系統(tǒng)進(jìn)行初始化,初始化完成后,單片機(jī)進(jìn)行設(shè)定的程序運(yùn)行,心率血氧傳感器進(jìn)行數(shù)據(jù)的采集,采集的數(shù)據(jù)將會(huì)從我們的OLED顯示屏和上位機(jī)中顯示出來。圖4-8心率血氧傳感器軟件設(shè)計(jì)第5章系統(tǒng)測(cè)試5.1系統(tǒng)實(shí)物測(cè)試第一步:接通實(shí)物電源,按下顯示屏開關(guān)按鈕,初始化信息,各模塊進(jìn)入初始階段;首先從手機(jī)APP上注冊(cè)賬號(hào),注冊(cè)成功后,登錄賬號(hào)。進(jìn)入界面再點(diǎn)擊右上角,連接藍(lán)牙,使實(shí)物和上位機(jī)聯(lián)系在一起。手機(jī)APP上會(huì)顯示時(shí)間和GPS定位經(jīng)緯度信息。第二步:設(shè)置體溫、心率血氧、速度的閾值,根據(jù)貓咪的生理情況,貓咪的體溫正常為38℃~39℃,心率為120~180次,所以體溫設(shè)定為39℃,心率設(shè)定值為180,速度設(shè)定值為40。設(shè)置我們的各項(xiàng)閾值,然后就可以從我們的顯示屏上看到我們?cè)O(shè)置的閾值。圖5-1手機(jī)APP第三步:測(cè)試體溫,用手捏住溫度傳感器,溫度傳感器通過單片機(jī)傳輸?shù)斤@示屏,上位機(jī)通過藍(lán)牙傳輸接受數(shù)據(jù)記錄數(shù)值,當(dāng)體溫超過閾值后,蜂鳴器會(huì)進(jìn)行報(bào)警。圖5-2體溫測(cè)試第四步:測(cè)試速度,用手晃動(dòng)加速度傳感器,當(dāng)超過閾值后蜂鳴器進(jìn)行報(bào)警,手機(jī)APP記錄數(shù)值。圖5-3速度測(cè)試最后是測(cè)試心率血氧,用手捏住心率血氧傳感器,按壓第一個(gè)按鈕,開始監(jiān)測(cè)心率血氧,大約20s后顯示屏上的數(shù)據(jù)會(huì)發(fā)生改變,手機(jī)APP記錄數(shù)值測(cè)試完成。圖5-4心率血氧測(cè)試在整個(gè)測(cè)試過程中,我們首先在手機(jī)APP上進(jìn)行設(shè)置,然后通過實(shí)際操作來模擬不同傳感器的工作情況。我們可以通過觀察顯示屏上的數(shù)據(jù)和聽取蜂鳴器的報(bào)警聲來確認(rèn)傳感器是否正常工作。這種測(cè)試方法的優(yōu)勢(shì)在于,我們可以通過模擬操作來快速檢測(cè)傳感器的功能。通過上位機(jī)的設(shè)置,我們能夠方便地調(diào)整閾值,以適應(yīng)不同的測(cè)試需求。同時(shí),蜂鳴器的報(bào)警功能能夠直觀地告知用戶傳感器是否正常工作或者是否超過了設(shè)定的閾值。通過以上測(cè)試,我們能夠驗(yàn)證體溫傳感器、加速度傳感器和心率血氧傳感器的功能和準(zhǔn)確性。這些傳感器在醫(yī)療監(jiān)測(cè)、運(yùn)動(dòng)設(shè)備和健康管理等領(lǐng)域中具有重要的應(yīng)用價(jià)值。通過對(duì)它們的測(cè)試,我們可以確保它們能夠正常工作,并為用戶提供準(zhǔn)確可靠的數(shù)據(jù)。
第6章總結(jié)與展望6.1總結(jié)貓咪是眾人喜愛的寵物,但是隨著人們對(duì)于健康生活的追求和對(duì)于寵物健康的重視,對(duì)于貓咪的健康檢測(cè)也變得越來越重要了。針對(duì)這種需求,我們?cè)O(shè)計(jì)了一款基于STM32的貓咪健康管理監(jiān)護(hù)系統(tǒng),在設(shè)計(jì)開始之前,首先要明確目標(biāo),我們需要實(shí)現(xiàn)以下幾個(gè)功能:對(duì)貓咪的體溫、心率血氧、速度運(yùn)動(dòng)狀態(tài)等生理參數(shù)進(jìn)行測(cè)量和記錄。將上述數(shù)據(jù)通過藍(lán)牙與手機(jī)連接,并通過APP實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)和管理。在確定目標(biāo)之后,開始著手設(shè)計(jì),考慮到貓咪日常生活中的常規(guī)活動(dòng),設(shè)計(jì)了一款傳感器,通過該傳感器可以獲取貓咪的在其上部活動(dòng)的情況,上還配備了體溫傳感器、心率血氧傳感器、加速度傳感器等傳感器來獲取貓咪生理參數(shù)。傳感器采用STM32作為核心處理器,并配置藍(lán)牙模塊用于數(shù)據(jù)傳輸。在這個(gè)設(shè)計(jì)調(diào)試的過程中,遇到了一些挑戰(zhàn)和問題。雖然經(jīng)歷了一些坎坷,但在指導(dǎo)老師的幫助下,我們成功地發(fā)現(xiàn)了問題的根源,并及時(shí)進(jìn)行了修正。這些問題主要涉及焊接和調(diào)試,在測(cè)試過程中也遇到了一些自己難以察覺的錯(cuò)誤。然而,通過老師的指導(dǎo)和糾正,我們順利解決了這些困難。首先,焊接方面存在一些技術(shù)不足的問題。由于缺乏經(jīng)驗(yàn)和技巧,我們的焊接效果并不理想,需要多次嘗試和修復(fù)。焊接是整個(gè)設(shè)計(jì)中至關(guān)重要的一環(huán),良好的焊接質(zhì)量直接影響設(shè)備的可靠性和性能。在老師的指導(dǎo)下,我們學(xué)到了正確的焊接方法和技巧,逐漸改善了焊接質(zhì)量,并最終得到了滿意的結(jié)果。此外,在調(diào)試過程中也遇到了一些問題。由于設(shè)計(jì)中的復(fù)雜性和各種元件的互相影響,一些錯(cuò)誤可能不易被察覺和發(fā)現(xiàn)。然而,通過老師的指正和專業(yè)知識(shí)的支持,我們能夠發(fā)現(xiàn)并解決這些問題。老師提供了寶貴的經(jīng)驗(yàn)和建議,幫助我們理清了思路,并指導(dǎo)我們進(jìn)行逐步排查和修復(fù)。通過這個(gè)過程,我們學(xué)到了很多調(diào)試技巧和方法,提高了自己的問題解決能力。這個(gè)設(shè)計(jì)調(diào)試過程中所遇到的困難和錯(cuò)誤并沒有阻礙我們的進(jìn)展,相反,它們成為我們成長(zhǎng)和學(xué)習(xí)的機(jī)會(huì)。在指導(dǎo)老師的幫助下,學(xué)會(huì)了如何面對(duì)問題、分析問題,并提出解決方案。也認(rèn)識(shí)到了自身的不足,并通過不斷的努力和實(shí)踐來改善和提高??偨Y(jié)起來,設(shè)計(jì)調(diào)試的過程充滿了挑戰(zhàn)和學(xué)習(xí)。在焊接和調(diào)試過程中遇到的問題是正常的,但通過老師的指導(dǎo)和支持,我們得以發(fā)現(xiàn)并解決這些問題。這個(gè)過程不僅提高了我們的技術(shù)水平,也培養(yǎng)了我們的問題解決能力和團(tuán)隊(duì)合作精神。通過克服困難和錯(cuò)誤,我們成功地完成了設(shè)計(jì)調(diào)試,并為以后的工作積累了寶貴的經(jīng)驗(yàn)和知識(shí)。通過本次設(shè)計(jì),我們成功實(shí)現(xiàn)了一款基于STM32的貓咪健康管理監(jiān)護(hù)系統(tǒng),該系統(tǒng)可以實(shí)時(shí)監(jiān)測(cè)和管理貓咪的生理參數(shù),并對(duì)貓咪的日?;顒?dòng)進(jìn)行監(jiān)測(cè)和記錄,數(shù)據(jù)傳輸距離短,但具有較高的實(shí)時(shí)性。我們相信該系統(tǒng)可以為貓咪榮譽(yù)為主人提供較好的監(jiān)護(hù)服務(wù)。6.2展望展望未來,我們認(rèn)為該貓咪健康管理監(jiān)護(hù)系統(tǒng)具有廣闊的發(fā)展前景。一方面,我們可以將產(chǎn)品連接到物聯(lián)網(wǎng)平臺(tái),實(shí)現(xiàn)云端的控制和監(jiān)測(cè)。這將為用戶提供更便捷的操作和遠(yuǎn)程監(jiān)控功能,使貓主人能夠隨時(shí)關(guān)注和照顧自己的寵物。另一方面,我們可以進(jìn)一步完善系統(tǒng)的功能和性能,例如增加更多的傳感器來監(jiān)測(cè)貓咪的健康指標(biāo),從而實(shí)現(xiàn)更全面的健康管理。除了在貓咪健康管理領(lǐng)域的應(yīng)用,我們也可以將所學(xué)到的知識(shí)和經(jīng)驗(yàn)應(yīng)用于其他領(lǐng)域。比如,我們可以借鑒這個(gè)系統(tǒng)的設(shè)計(jì)思路和方法,開發(fā)其他寵物或動(dòng)物的健康管理監(jiān)護(hù)系統(tǒng)。此外,我們也可以將所學(xué)到的電路設(shè)計(jì)、嵌入式系統(tǒng)開發(fā)等技術(shù)應(yīng)用于其他物聯(lián)網(wǎng)設(shè)備或嵌入式系統(tǒng)的設(shè)計(jì)中,為人們的生活提供更多便利和創(chuàng)新??傊ㄟ^這個(gè)研究項(xiàng)目,我們不僅成功設(shè)計(jì)了一款貓咪健康管理監(jiān)護(hù)系統(tǒng),還獲得了寶貴的知識(shí)和經(jīng)驗(yàn)。我們了解到了焊接的重要性、電路設(shè)計(jì)的關(guān)鍵因素以及良好的軟件編程實(shí)踐。未來,我們將繼續(xù)努力改進(jìn)和擴(kuò)展該系統(tǒng),并將所學(xué)到的技術(shù)應(yīng)用于更廣泛的領(lǐng)域,為人們的生活帶來更多的創(chuàng)新和便利。
參考文獻(xiàn)杜文濤,彭吁軍.寵物健康監(jiān)測(cè)穿戴環(huán)設(shè)計(jì)[J].明日風(fēng)尚,2021.吳超.可穿戴的心率監(jiān)測(cè)設(shè)備設(shè)計(jì)[J].物聯(lián)網(wǎng)技術(shù),2021,11(7):4.鄭春弟,李剛,陳薈慧,等.二次諧波加權(quán)重構(gòu)的77GHzFMCW雷達(dá)心率監(jiān)測(cè)方法[J],西安電子科技大學(xué)學(xué)報(bào),2020.陶毅陽.穿戴式體溫監(jiān)測(cè)設(shè)備的服務(wù)設(shè)計(jì)研究[J/OL].包裝工程,2021.姜艷茹,孟令軍.可穿戴式體溫監(jiān)測(cè)預(yù)警系統(tǒng)設(shè)計(jì)[P].電子測(cè)量技術(shù),2021.李佳,李萬軍,顧俊杰,等.基于藍(lán)牙低功耗技術(shù)的體溫監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[C].北華航天工業(yè)學(xué)院學(xué)報(bào),2020.楊琳琳.基于ZigBee技術(shù)的體溫監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[J].河南師范大學(xué),2021.吳超.可穿戴的心率監(jiān)測(cè)設(shè)備設(shè)計(jì)[C].物聯(lián)網(wǎng)技術(shù),2022.沈健.多功能身體健康監(jiān)測(cè)儀設(shè)計(jì)[P].長(zhǎng)春大學(xué)學(xué)報(bào),2018.高鵬彪.人體生物信息的檢測(cè)與健康監(jiān)測(cè)系統(tǒng)的應(yīng)用[M].吉林大學(xué),2019.湯致遠(yuǎn),沈亮,等.基于北斗的智能定物防丟器設(shè)計(jì)[J].物聯(lián)網(wǎng)技術(shù),2020.(11).%E5%8F%B2%E5%AE%8F%E9%91%AB""史宏鑫,劉超,等.基于藍(lán)牙無線控制的智能寵物穿戴設(shè)備設(shè)計(jì)[J].輕工科技,2018,(1).76-77,111.葛澤勛,曹秒,安志勇.基于距離補(bǔ)償?shù)募t外測(cè)溫系統(tǒng)設(shè)計(jì)[J].長(zhǎng)春理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2019,42(2):57-60,64.劉笑平,曾文芳.基于STM32的身份驗(yàn)證與體溫監(jiān)測(cè)一體化系統(tǒng)[J].湖北理工學(xué)院學(xué)報(bào),2022,38(06):11-14.趙光晶,趙鳴,張友浩,等.基于STC89C52單片機(jī)的心率檢測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].智能計(jì)算機(jī)與應(yīng)用,2021,11(5):4.DOI:10.3969/j.issn.2095-2163.2021.05.018.SaeediMohammad;Rashidy-PourAli.MarsIncorporated;PatentIssuedforPetHealthMonitorWithCollarAttachmentAndCharger(USPTO10,420,401).[P].2021.MarsIncorporated;PatentIssuedforPetHealthMonitorWithCollarAttachmentAndCharger(USPTO10,420,401)[J].JournalofEngineering,2019.MarsIncorporated;ResearchersSubmitPatentApplication,"PetHealthMonitorWithCollarAttachmentAndCharger",forApproval(USPTO20200000183)[J].Politics&GovernmentWeek,2020.JournalofEngineering.PetWireless,Inc.;PatentIssuedforSystems,MethodsandComputerProgramProductsforMonitoringtheBehavior,Health,And/OrCharacteristicsofanAnimal[P].2022.VeterinaryWeek.PetPaceLtd.;"AcousticallyEnhancedPetAnimalCollarforHealth&VitalSignsMonitoring,AlertandDiagnosis"inPatentApplicationApprovalProcess.[C]2021.附錄A電路圖
附錄B源代碼#include"delay.h"#include"sys.h"#include"oled.h"#include"bmp.h"#include"key.h"#include"usart.h"#include"usart2.h"#include"usart3.h"#include"led.h"#include"adc.h"#include"ds18b20.h"#include"bsp_i2c_gpio.h"#include"stm32f10x_i2c.h"#include<stdio.h>#include<math.h>#include"my_adxl345.h"#defineSAMPLE_50//如果定義此宏就是50采樣率否則是100#defineUSR_I2C_USEDI2C1shorttemperature; u8tem[8];u8temperaturedyu=30; u8temperaturehyu=32; u8temgyu[8];u8temdyu[8];u16qingxieyu=40; u8qingxieyus[15];u16co;u8coshu[8];unsignedintcoyu=200;u8coyus[8];unsignedintyayu=150;u16ya;u8yas[8];u8yayus[8];intfragment=0;u8send[40];unsignedintxlyu=120;u16xl;u8xls[8];u8xlyus[8];unsignedintxyyu=90;u16xy;u8xys[8];u8xyyus[8];intjiaodu=0;u8jd[15];intbeepnum=0;intbiaozhi=0;intbiaozhi1=0;intbiaozhi2=0;intbiaozhi3=0;intbiaozhi4=0;intbiaozhi5=0;u16temp_num=0;u16fifo_word_buff[15][2];u16Heart_Rate=0;//心率u16s1_max_index=0;u16s2_max_index=0;u16yuzhi=100;floatsp02_num=0;voidUSART1_Puts(char*str){while(*str){USART1->DR=*str++;while((USART1->SR&0X40)==0);}}voidUSART3_Puts(char*str){while(*str){USART3->DR=*str++;while((USART3->SR&0X40)==0);}}voidUSART2_Puts(char*str){while(*str){USART2->DR=*str++;while((USART2->SR&0X40)==0);}}#if0voidI2C1_Configuration(void){ I2C_InitTypeDefI2C_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /*PB6,7SCLandSDA*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_OD; GPIO_Init(GPIOB,&GPIO_InitStructure); I2C_DeInit(I2C1);I2C_InitStructure.I2C_Mode=I2C_Mode_I2C;I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1=0x30;I2C_InitStructure.I2C_Ack=I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed=100000;//100K速度 I2C_Cmd(I2C1,ENABLE); I2C_Init(I2C1,&I2C_InitStructure); /*允許1字節(jié)1應(yīng)答模式*/ I2C_AcknowledgeConfig(I2C1,ENABLE);printf("I2C1_Configuration\n\r");}voidI2C1_GPIO_Config(void){ GPIO_InitTypeDefGPIO_InitStructure;//GPIO結(jié)構(gòu)體定義 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能I2C的IO口 /*使能與I2C1有關(guān)的時(shí)鐘*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); /*PB6-I2C1_SCL、PB7-I2C1_SDA*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //PIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_OD;//開漏輸出 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化結(jié)構(gòu)體配置}/*I2C工作模式配置*/voidI2C1_Mode_config(void){ /*定義I2C結(jié)構(gòu)體*/ I2C_InitTypeDefI2C_InitStructure; /*配置為I2C模式*/ I2C_InitStructure.I2C_Mode=I2C_Mode_I2C; /*該參數(shù)只有在I2C工作在快速模式(時(shí)鐘工作頻率高于100KHz)下才有意義。*/ I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2; /*設(shè)置第一個(gè)設(shè)備自身地址*/ I2C_InitStructure.I2C_OwnAddress1=0x30; /*使能應(yīng)答*/ I2C_InitStructure.I2C_Ack=I2C_Ack_Enable; /*AT24C02地址為7位所以設(shè)置7位就行了*/ I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;/*時(shí)鐘速率,以HZ為單位的,最高為400khz*/ I2C_InitStructure.I2C_ClockSpeed=20000; /*使能I2C1*/ I2C_Cmd(I2C1,ENABLE); /*I2C1初始化*/ I2C_Init(I2C1,&I2C_InitStructure); }voidI2C2_Configuration(void){ I2C_InitTypeDefI2C_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /*PB10,11SCLandSDA*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_OD; GPIO_Init(GPIOB,&GPIO_InitStructure); I2C_DeInit(I2C2);I2C_InitStructure.I2C_Mode=I2C_Mode_I2C;I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1=0x30;I2C_InitStructure.I2C_Ack=I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed=100000;//100K速度 I2C_Cmd(I2C2,ENABLE); I2C_Init(I2C2,&I2C_InitStructure); /*允許1字節(jié)1應(yīng)答模式*/ I2C_AcknowledgeConfig(I2C2,ENABLE);printf("I2C2_Configuration\n\r");}voidI2C2_GPIO_Config(void){ GPIO_InitTypeDefGPIO_InitStructure;//GPIO結(jié)構(gòu)體定義 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能I2C的IO口 /*使能與I2C1有關(guān)的時(shí)鐘*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE); /*PB10-I2C2_SCL、PB11-I2C2_SDA*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //PIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_OD;//開漏輸出 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化結(jié)構(gòu)體配置}/*I2C工作模式配置*/voidI2C2_Mode_config(void){ /*定義I2C結(jié)構(gòu)體*/ I2C_InitTypeDefI2C_InitStructure; /*配置為I2C模式*/ I2C_InitStructure.I2C_Mode=I2C_Mode_I2C; /*該參數(shù)只有在I2C工作在快速模式(時(shí)鐘工作頻率高于100KHz)下才有意義。*/ I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2; /*設(shè)置第一個(gè)設(shè)備自身地址*/ I2C_InitStructure.I2C_OwnAddress1=0x30; /*使能應(yīng)答*/ I2C_InitStructure.I2C_Ack=I2C_Ack_Enable; /*AT24C02地址為7位所以設(shè)置7位就行了*/ I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;/*時(shí)鐘速率,以HZ為單位的,最高為400khz*/ I2C_InitStructure.I2C_ClockSpeed=100000; /*使能I2C1*/ I2C_Cmd(I2C2,ENABLE); /*I2C1初始化*/ I2C_Init(I2C2,&I2C_InitStructure); }#endifexternvoidtest_max30100_fun(void);//max30100測(cè)試函數(shù)externu8max10300_Bus_Read(u8Register_Address);//max30100讀取數(shù)據(jù)函數(shù)externvoidmax10300_init(void);//max30100初始化函數(shù)u8weidu[15];u8jingdu[15];externfloataccel_X,accel_Y,accel_Z;voiddata_pros()//數(shù)據(jù)處理{shortxang,yang,zang;u8key;ADXL345_Read_Average(10);//讀取3個(gè)方向的加速度10次xang=ADXL345_Get_Angle(accel_X,accel_Y,accel_Z,1); jiaodu=(int)accel_X/10; if(jiaodu>1000)jiaodu=0; jd[0]=jiaodu%1000/100+'0'; jd[1]=jiaodu%100/10+'0'; jd[2]=jiaodu%10+'0'; jd[3]=0; OLED_ShowString(50,32,jd,16); OLED_Refresh(); if(jiaodu>qingxieyu){ biaozhi3=1; }else{ biaozhi3=0; } }intmain(void){ inti,j; delay_init(); NVIC_Configuration(); OLED_Init(); OLED_ColorTurn(0);//0正常顯示,1反色顯示OLED_DisplayTurn(0);//0正常顯示1屏幕翻轉(zhuǎn)顯示 OLED_Refresh(); OLED_Clear(); beep_Init(); beep=0; Adc_Init(); //ADC初始化 usart2_init(9600);usart3_init(9600);uart_init(9600); bsp_InitI2C();//max30100驅(qū)動(dòng)初始化 max10300_init();//max30100初始化 OLED_ShowChinese(0,0,0,16);//系 OLED_ShowChinese(18,0,1,16);//統(tǒng) OLED_ShowString(36,0,":",16);OLED_ShowChinese(0,16,2,16);//系 OLED_ShowChinese(18,16,3,16);//統(tǒng) OLED_ShowString(36,16,":",16);OLED_ShowChinese(0,32,4,16);//系 OLED_ShowChinese(18,32,5,16);//統(tǒng) OLED_ShowString(36,32,":",16); OLED_Refresh();LED1=0;LED2=0;LED3=0; while(DS18B20_Init()) //DHT11初始化 { delay_ms(200);} while(ADXL345_Init()){ delay_ms(200); } weidu[0]='3'; weidu[1]='4'; weidu[2]='.'; weidu[3]='3'; weidu[4]='8'; weidu[5]='1'; weidu[6]='7'; weidu[7]='6'; weidu[8]='6'; weidu[9]=0; jingdu[0]='1'; jingdu[1]='2'; jingdu[2]='2'; jingdu[3]='.'; jingdu[4]='2'; jingdu[5]='4'; jingdu[6]='5'; jingdu[7]='0'; jingdu[8]='1'; jingdu[9]='6'; jingdu[10]=0; KEY_Init(); temdyu[0]=temperaturedyu/10+'0'; temdyu[1]=temperaturedyu%10+'0'; OLED_ShowString(95,0,temdyu,16); xlyus[0]=xlyu/100+'0'; xlyus[1]=xlyu%100/10+'0'; xlyus[2]=xlyu%10+'0'; xlyus[3]=0; OLED_ShowString(95,16,xlyus,16); qingxieyus[0]=qingxieyu/100+'0'; qingxieyus[1]=qingxieyu%100/10+'0'; qingxieyus[2]=qingxieyu%10+'0'; OLED_ShowString(90,32,qingxieyus,16); OLED_ShowString(0,48,weidu,12); OLED_ShowString(55,48,jingdu,12); OLED_Refresh(); while(1) { ya=Get_Adc_Average(ADC_Channel_0,10)/10; temperature=DS18B20_Get_Temp(); tem[0]=temperature/100+'0'; tem[1]=temperature%100/10+'0'; tem[2]='.'; tem[3]=temperature%10+'0'; tem[4]=0; data_pros(); OLED_ShowString(54,0,tem,16); OLED_Refresh(); if(USART3_RX_STA==1) //確定是否收到"GNRMC"這一幀數(shù)據(jù) { USART3_RX_STA=0; if(USART3_RX_BUF[1]=='G'&&USART3_RX_BUF[2]=='N'&&USART3_RX_BUF[3]=='R'&&USART3_RX_BUF[4]=='M'&&USART3_RX_BUF[5]=='C'){ if(USART3_RX_BUF[30]=='N'){ weidu[0]=USART2_RX_BUF[20]; weidu[1]=USART2_RX_BUF[21]; weidu[2]='.'; weidu[3]=USART2_RX_BUF[22]; weidu[4]=USART2_RX_BUF[23]; weidu[5]=USART2_RX_BUF[25]; weidu[6]=USART2_RX_BUF[26]; weidu[7]=USART2_RX_BUF[27]; weidu[8]=USART2_RX_BUF[28]; weidu[9]=0; jingdu[0]=USART2_RX_BUF[32]; jingdu[1]=USART2_RX_BUF[33]; jingdu[2]=USART2_RX_BUF[34]; jingdu[3]=USART2_RX_BUF[37]; jingdu[4]=USART2_RX_BUF[35]; jingdu[5]=USART2_RX_BUF[36]; jingdu[6]=USART2_RX_BUF[38]; jingdu[7]=USART2_RX_BUF[39]; jingdu[8]=USART2_RX_BUF[40]; jingdu[9]=USART2_RX_BUF[41]; jingdu[10]=0; } } } if(USART2_RX_STA==1){ USART2_RX_STA=0; if(USART2_TX_BUF[1]=='1'){ temperaturedyu=(USART2_TX_BUF[2]-'0')*10+USART2_TX_BUF[3]-'0'; xlyu=(USART2_TX_BUF[4]-'0')*100+(USART2_TX_BUF[5]-'0')*10+USART2_TX_BUF[6]-'0'; qingxieyu=(USART2_TX_BUF[7]-'0')*100+(USART2_TX_BUF[8]-'0')*10+USART2_TX_BUF[9]-'0'; temdyu[0]=temperaturedyu/10+'0'; temdyu[1]=temperaturedyu%10+'0'; OLED_ShowString(95,0,temdyu,16); xlyus[0]=xlyu/100+'0'; xlyus[1]=xlyu%100/10+'0'; xlyus[2]=xlyu%10+'0'; xlyus[3]=0; OLED_ShowString(95,16,xlyus,16); qingxieyus[0]=qingxieyu/100+'0'; qingxieyus[1]=qingxieyu%100/10+'0'; qingxieyus[2]=qingxieyu%10+'0'; OLED_ShowString(90,32,qingxieyus,16); OLED_ShowString(0,48,weidu,12); OLED_ShowString(55,48,jingdu,12); OLED_Refresh(); } } if(KEY0==1) { test_max30100_fun(); } if(temperature>temperaturedyu*10){ biaozhi1=1; }else{ biaozhi1=0; } if(biaozhi1==1||biaozhi2==1||biaozhi3==1){ beep=1; delay_ms(500); }else{ delay_ms(500); beep=0; } send[0]='w';send[1]='1'; send[2]=temperature/100+'0'; send[3]=temperature%100/10+'0'; send[4]='.'; send[5]=temperature%10+'0'; send[6]=xl%1000/100+'0'; send[7]=xl%100/10+'0'; send[8]=xl%10+'0'; send[9]=jiaodu%1000/100+'0'; send[10]=jiaodu%100/10+'0'; send[11]=jiaodu%10+'0'; send[12]=weidu[0]; send[13]=weidu[1]; send[14]=weidu[2]; send[15]=weidu[3]; send[16]=weidu[4]; send[17]=weidu[5]; send[18]=weidu[6]; send[19]=weidu[7]; send[20]=weidu[8]; send[21]=jingdu[0]; send[22]=jingdu[1]; send[23]=jingdu[2]; send[24]=jingdu[3]; send[25]=jingdu[4]; send[26]=jingdu[5]; send[27]=jingdu[6]; send[28]=jingdu[7]; send[29]=jingdu[8]; send[30]=jingdu[9]; send[31]=biaozhi1%10+'0'; send[32]=biaozhi2%10+'0'; send[33]=biaozhi3%10+'0'; send[34]='z'; send[35]=0; USART2_Puts(send); }}#definemax10300_WR_address0xAE//max30100芯片地址/**function:max10300_Bus_Write(u8Register_Address,u8Word_Data)*成功返回1,失敗返回0*/u8max10300_Bus_Write(u8Register_Address,u8Word_Data)//向max30100的Register_Address寫一個(gè)Word_Data數(shù)據(jù){ /*第1步:發(fā)起I2C總線啟動(dòng)信號(hào)*/ i2c_Start(); /*第2步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀*/ i2c_SendByte(max10300_WR_address|I2C_WR); /*此處是寫指令*/ /*第3步:發(fā)送ACK*/ if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第4步:發(fā)送字節(jié)地址*/ i2c_SendByte(Register_Address); if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第5步:開始寫入數(shù)據(jù)*/ i2c_SendByte(Word_Data); /*第6步:發(fā)送ACK*/ if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*發(fā)送I2C總線停止信號(hào)*/ i2c_Stop(); return1; /*執(zhí)行成功*/ cmd_fail:/*命令執(zhí)行失敗后,切記發(fā)送停止信號(hào),避免影響I2C總線上其他設(shè)備*/ /*發(fā)送I2C總線停止信號(hào)*/ i2c_Stop(); return0;}/**function:max10300_Bus_Read(u8Register_Address)*成功返回1,失敗返回0*/u8max10300_Bus_Read(u8Register_Address)//向max30100的Register_Address處讀取數(shù)據(jù){ u8data; /*第1步:發(fā)起I2C總線啟動(dòng)信號(hào)*/ i2c_Start(); /*第2步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀*/ i2c_SendByte(max10300_WR_address|I2C_WR); /*此處是寫指令*/ /*第3步:發(fā)送ACK*/ if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第4步:發(fā)送字節(jié)地址,*/ i2c_SendByte((uint8_t)Register_Address); if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第6步:重新啟動(dòng)I2C總線。下面開始讀取數(shù)據(jù)*/ i2c_Start(); /*第7步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀*/ i2c_SendByte(max10300_WR_address|I2C_RD); /*此處是讀指令*/ /*第8步:發(fā)送ACK*/ if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第9步:讀取數(shù)據(jù)*/ { data=i2c_ReadByte(); /*讀1個(gè)字節(jié)*/ i2c_NAck(); /*最后1個(gè)字節(jié)讀完后,CPU產(chǎn)生NACK信號(hào)(驅(qū)動(dòng)SDA=1)*/ } /*發(fā)送I2C總線停止信號(hào)*/ i2c_Stop(); returndata; /*執(zhí)行成功返回data值*/ cmd_fail:/*命令執(zhí)行失敗后,切記發(fā)送停止信號(hào),避免影響I2C總線上其他設(shè)備*/ /*發(fā)送I2C總線停止信號(hào)*/ i2c_Stop(); return0;}staticvoidi2c_Delay(void)//iic的延時(shí)函數(shù){ uint8_ti; /* CPU主頻168MHz時(shí),在內(nèi)部Flash運(yùn)行,MDK工程不優(yōu)化。用臺(tái)式示波器觀測(cè)波形。 循環(huán)次數(shù)為5時(shí),SCL頻率=1.78MHz(讀耗時(shí):92ms,讀寫正常,但是用示波器探頭碰上就讀寫失敗。時(shí)序接近臨界) 循環(huán)次數(shù)為10時(shí),SCL頻率=1.1MHz(讀耗時(shí):138ms,讀速度:118724B/s) 循環(huán)次數(shù)為30時(shí),SCL頻率=440KHz,SCL高電平時(shí)間1.0us,SCL低電平時(shí)間1.2us 上拉電阻選擇2.2K歐時(shí),SCL上升沿時(shí)間約0.5us,如果選4.7K歐,則上升沿約1us 實(shí)際應(yīng)用選擇400KHz左右的速率即可 */ for(i=0;i<30;i++);}#if1voidmax10300_FIFO_Read(u8Register_Address,u16Word_Data[][2],u8count)//讀取max30100已經(jīng)轉(zhuǎn)換好的心率,血氧,溫度的數(shù)據(jù){ u8i=0; u8no=count; u8data1,data2; /*第1步:發(fā)起I2C總線啟動(dòng)信號(hào)*/ i2c_Start(); /*第2步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀*/ i2c_SendByte(max10300_WR_address|I2C_WR); /*此處是寫指令*/ /*第3步:發(fā)送ACK*/ if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第4步:發(fā)送字節(jié)地址,*/ i2c_SendByte((uint8_t)Register_Address); if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第6步:重新啟動(dòng)I2C總線。下面開始讀取數(shù)據(jù)*/ i2c_Start(); /*第7步:發(fā)起控制字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀*/ i2c_SendByte(max10300_WR_address|I2C_RD); /*此處是讀指令*/ /*第8步:發(fā)送ACK*/ if(i2c_WaitAck()!=0) { gotocmd_fail; /*EEPROM器件無應(yīng)答*/ } /*第9步:讀取數(shù)據(jù)*/ while(no) { data1=i2c_ReadByte(); i2c_Ack(); data2=i2c_ReadByte(); i2c_Ack(); Word_Data[i][0]=(((u16)data1<<8)|data2);// data1=i2c_ReadByte(); i2c_Ack(); data2=i2c_ReadByte(); if(1==no) i2c_NAck(); /*最后1個(gè)字節(jié)讀完后,CPU產(chǎn)生NACK信號(hào)(驅(qū)動(dòng)SDA=1)*/ else i2c_Ack(); Word_Data[i][1]=(((u16)data1<<8)|data2); no--; i++; } /*發(fā)送I2C總線停止信號(hào)*/ i2c_Stop();cmd_fail:/*命令執(zhí)行失敗后,切記發(fā)送停止信號(hào),避免影響I2C總線上其他設(shè)備*/ /*發(fā)送I2C總線停止信號(hào)*/ i2c_Stop();}#else/*固件庫函數(shù)操作--讀取max30100已經(jīng)轉(zhuǎn)換好的心率,血氧,溫度的數(shù)據(jù)*/voidmax10300_FIFO_Read(u8Register_Address,u16Word_Data[][2],u8count){ u8i=0; u8no=count; u8data1,data2; while(I2C_GetFlagStatus(USR_I2C_USED,I2C_FLAG_BUSY)) ;//調(diào)用庫函數(shù)檢測(cè)I2C器件是否處于BUSY狀態(tài) I2C_AcknowledgeConfig(USR_I2C_USED,ENABLE);/*允許1字節(jié)1應(yīng)答模式*/ I2C_GenerateSTART(USR_I2C_USED,ENABLE); while(!I2C_CheckEvent(USR_I2C_USED,I2C_EVENT_MASTER_MODE_SELECT)) ;//清除EV5 I2C_Send7bitAddress(USR_I2C_USED,max10300_WR_address,I2C_Direction_Transmitter); while(!I2C_CheckEvent(USR_I2C_USED,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) ;//ADDR=1,清除EV6 I2C_SendData(USR_I2C_USED,Register_Address); while(!I2C_CheckEvent(USR_I2C_USED,I2C_EVENT_MASTER_BYTE_TRANSMITTED)) ;//移位寄存器非空,數(shù)據(jù)寄存器已經(jīng)空,產(chǎn)生EV8,發(fā)送數(shù)據(jù)到DR既可清除
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國無阻力軸向補(bǔ)償器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國數(shù)碼控制箱市場(chǎng)調(diào)查研究報(bào)告
- 2025-2030年中國亞氯酸鈉項(xiàng)目投資風(fēng)險(xiǎn)研究報(bào)告
- 2025至2031年中國絨把手記數(shù)跳繩行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國絕緣油介電強(qiáng)度自動(dòng)測(cè)定儀行業(yè)投資前景及策略咨詢研究報(bào)告
- 小學(xué)一年級(jí)語文下冊(cè)《口語交際:一起做游戲》指導(dǎo)
- 新疆司法警官職業(yè)學(xué)院《畢業(yè)論文寫作與作品設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025-2030年中國4,4′行業(yè)運(yùn)行態(tài)勢(shì)及投資風(fēng)險(xiǎn)評(píng)估報(bào)告
- 新疆伊犁州2025年初三下學(xué)期第一次模擬考試語文試題試卷含解析
- 2025-2030年中國TETRA數(shù)字集群無線電系統(tǒng)行業(yè)發(fā)展現(xiàn)狀分析及投資前景預(yù)測(cè)研究報(bào)告
- 上海2025屆高考模擬數(shù)學(xué)試卷02(解析版)
- 2024年中國光大銀行深圳分行招聘考試真題
- 節(jié)目招商合同協(xié)議
- 甘肅釀皮子制作方法
- 達(dá)夢(mèng)數(shù)據(jù)庫培訓(xùn)
- 食堂節(jié)約管理制度規(guī)范
- 綠化工程安全教育培訓(xùn)
- 漂流免責(zé)協(xié)議書范本
- ISO27001:2022信息安全管理體系全套文件+表單
- 2024-2025學(xué)年人教版四年級(jí)數(shù)學(xué)下冊(cè)期中測(cè)試卷1-4單元(含答案)
- 寶鋼熱鍍鋅鋼板產(chǎn)品手冊(cè)
評(píng)論
0/150
提交評(píng)論