一、前言
1.1 項(xiàng)目介紹
項(xiàng)目設(shè)計(jì)里用到的全部工具軟件都可以在這里下載。
[https://pan.quark.cn/s/145a9b3f7f53]
【1】項(xiàng)目開發(fā)背景
隨著現(xiàn)代生活節(jié)奏的加快,人們對(duì)于健康管理的需求日益增長(zhǎng),尤其是對(duì)于睡眠健康的關(guān)注度顯著提升。良好的睡眠質(zhì)量不僅關(guān)系到個(gè)人的精神狀態(tài),更直接影響著工作和學(xué)習(xí)效率乃至整體生活質(zhì)量。然而,快節(jié)奏的生活壓力、不規(guī)律的生活作息等因素導(dǎo)致越來越多的人遭受睡眠障礙的困擾。傳統(tǒng)的睡眠監(jiān)測(cè)方式通常需要佩戴設(shè)備或接觸式傳感器,這可能會(huì)干擾到用戶的自然睡眠狀態(tài),從而影響監(jiān)測(cè)結(jié)果的準(zhǔn)確性。因此,開發(fā)一種非接觸式的睡眠監(jiān)測(cè)系統(tǒng),成為了提高睡眠質(zhì)量研究的重要方向之一。
非接觸式睡眠監(jiān)測(cè)技術(shù)的發(fā)展,得益于近年來毫米波雷達(dá)技術(shù)的進(jìn)步。毫米波雷達(dá)具有高精度、強(qiáng)穿透力的特點(diǎn),可以在不直接接觸人體的情況下,精準(zhǔn)地捕捉到人體微動(dòng),如呼吸和心跳等細(xì)微動(dòng)作。這種技術(shù)的應(yīng)用,不僅可以避免傳統(tǒng)監(jiān)測(cè)手段可能帶來的不適感,還能在用戶不知情的狀態(tài)下進(jìn)行連續(xù)監(jiān)測(cè),保證了數(shù)據(jù)的真實(shí)性和有效性。與此同時(shí),物聯(lián)網(wǎng)技術(shù)的發(fā)展使得數(shù)據(jù)的遠(yuǎn)程傳輸與分析成為可能,進(jìn)一步推動(dòng)了智能健康監(jiān)測(cè)系統(tǒng)的普及。
本項(xiàng)目正是基于這樣的背景下展開的。它利用了60GHz毫米波雷達(dá)技術(shù),結(jié)合高性能的STM32微控制器,設(shè)計(jì)了一套完整的非接觸式睡眠監(jiān)控系統(tǒng)。該系統(tǒng)不僅能準(zhǔn)確地獲取用戶的睡眠信息,還能通過Wi-Fi連接云端,讓用戶可以通過手機(jī)應(yīng)用程序隨時(shí)查看自己的睡眠報(bào)告。此外,系統(tǒng)還具備異常生理指標(biāo)報(bào)警功能,能夠在第一時(shí)間提醒用戶注意健康狀況,為用戶提供了一個(gè)全方位、智能化的健康管理方案。通過這一創(chuàng)新性的解決方案,期望能夠幫助更多人改善睡眠質(zhì)量,提升生活質(zhì)量。
設(shè)備安裝角度:
【2】設(shè)計(jì)實(shí)現(xiàn)的功能
(1)人體存在感知與運(yùn)動(dòng)感知:通過使用60GHz頻段的毫米波雷達(dá)模塊,系統(tǒng)能夠感知房間內(nèi)是否存在人體以及人體的微小運(yùn)動(dòng),如呼吸和心跳的變化。
(2)睡眠狀態(tài)監(jiān)測(cè):系統(tǒng)能夠根據(jù)睡眠過程中身體的運(yùn)動(dòng)幅度變化和呼吸心率的變化,實(shí)時(shí)判斷目標(biāo)的睡眠狀態(tài),并在睡眠周期結(jié)束后提供一個(gè)綜合的睡眠評(píng)分。
(3)生理指標(biāo)檢測(cè):系統(tǒng)能夠檢測(cè)并記錄睡眠者的心率、呼吸頻率等重要生理指標(biāo),這些數(shù)據(jù)有助于分析睡眠質(zhì)量。
(4)遠(yuǎn)程數(shù)據(jù)上傳與查看:系統(tǒng)集成了Wi-Fi模塊,可以將監(jiān)測(cè)到的睡眠數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺(tái),用戶可以通過智能手機(jī)應(yīng)用程序遠(yuǎn)程查看每天的睡眠質(zhì)量報(bào)告和其他生理指標(biāo)。
(5)異常情況報(bào)警:當(dāng)檢測(cè)到的生理指標(biāo)超出預(yù)設(shè)的安全閾值時(shí),系統(tǒng)會(huì)觸發(fā)報(bào)警機(jī)制,及時(shí)通知用戶或監(jiān)護(hù)人可能存在健康風(fēng)險(xiǎn)。
(6)本地?cái)?shù)據(jù)顯示:系統(tǒng)配備了1.44寸SPI協(xié)議的TFT LCD顯示屏,用于實(shí)時(shí)顯示監(jiān)測(cè)到的生理指標(biāo)及環(huán)境相關(guān)信息,便于用戶即時(shí)查看。
(7)體溫檢測(cè):通過集成MLX90614紅外體溫傳感器,系統(tǒng)能夠檢測(cè)人體體溫,并將其作為一項(xiàng)重要的生理參數(shù)納入睡眠質(zhì)量評(píng)估體系中。
【3】項(xiàng)目硬件模塊組成
(1)主控單元:選用STM32F103RCT6微控制器作為核心處理單元,負(fù)責(zé)接收來自各傳感器的數(shù)據(jù),并處理和控制系統(tǒng)的各項(xiàng)功能。
(2)毫米波雷達(dá)模塊:采用60GHz頻段的R60ABD1毫米波雷達(dá)模塊,用于非接觸式地檢測(cè)人體的存在、呼吸頻率和心率等生理信號(hào)。
(3)無線通信模塊:集成ESP8266-Wi-Fi模塊,實(shí)現(xiàn)數(shù)據(jù)的無線傳輸功能,確保睡眠數(shù)據(jù)能夠?qū)崟r(shí)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。
(4)顯示模塊:采用1.44寸TFT LCD顯示屏,分辨率為128x128像素,通過SPI協(xié)議與主控單元通訊,用于顯示監(jiān)測(cè)到的生理指標(biāo)和環(huán)境信息。
(5)體溫檢測(cè)模塊:采用MLX90614紅外體溫傳感器,用于無接觸地測(cè)量人體體溫,提供額外的健康監(jiān)測(cè)數(shù)據(jù)。
(6)電源管理模塊:采用外置的5V穩(wěn)壓電壓,包括電源轉(zhuǎn)換電路和電池管理電路,確保整個(gè)系統(tǒng)能夠穩(wěn)定運(yùn)行,并為各個(gè)模塊提供所需電壓。
(7)報(bào)警模塊:設(shè)計(jì)蜂鳴器聲音形式的報(bào)警裝置,當(dāng)系統(tǒng)檢測(cè)到異常生理指標(biāo)時(shí),能夠及時(shí)提醒用戶。
【4】需求總結(jié)
項(xiàng)目:基于STM32+微波雷達(dá)設(shè)計(jì)的非接觸式睡眠監(jiān)控系統(tǒng)
?
1. 可以實(shí)現(xiàn) 人體存在感知、人體運(yùn)動(dòng)感知、根據(jù)睡眠過程中的身體運(yùn)動(dòng)幅度變化和呼吸心率變化,對(duì)目標(biāo)的睡眠狀態(tài)、呼吸心跳頻率進(jìn)行實(shí)時(shí)判斷,在一段睡眠過程結(jié)束后輸出睡眠評(píng)分呼吸、能夠檢測(cè)心率、睡眠時(shí)長(zhǎng)、睡眠質(zhì)量等生理指標(biāo)
(此功能采用60GHz頻段的毫波雷達(dá)來實(shí)現(xiàn))
2. 可以實(shí)現(xiàn)能將數(shù)據(jù)通過
ESP8266-WIFI上傳到華為云物聯(lián)網(wǎng)云平臺(tái)、設(shè)計(jì)手機(jī)APP可以遠(yuǎn)程查看每天的睡眠質(zhì)量、生理指標(biāo)、環(huán)境相關(guān)信息。
3. 可以實(shí)現(xiàn)當(dāng)檢測(cè)到的生理指標(biāo)數(shù)據(jù)超過閾值時(shí),系統(tǒng)發(fā)出報(bào)警提醒。
4. 可以實(shí)現(xiàn)能在本地LCD顯示屏顯示監(jiān)測(cè)到的生理指標(biāo)、環(huán)境相關(guān)信息。
5. 支持檢測(cè)人體體溫。
?
硬件選型:
主控芯片選擇 STM32F103RCT6
LCD顯示屏采用1.44寸 SPI協(xié)議的 TFT顯示屏,分辨率是128x128。
人體體溫檢測(cè)采用MLX90614紅外體溫傳感器。
人體的呼吸、心率、采用60G毫米波 生物感知雷達(dá)R60ABD1模塊來實(shí)現(xiàn)檢測(cè)。呼吸睡眠雷達(dá)基于毫米波雷達(dá)體制實(shí)現(xiàn)人體生物存在感知及人體運(yùn)動(dòng)感知,持續(xù)記錄人體存在情況,根據(jù)睡眠
過程中的身體運(yùn)動(dòng)幅度變化和呼吸心率變化,對(duì)目標(biāo)的睡眠狀態(tài)、呼吸心跳頻率進(jìn)行實(shí)時(shí)判斷,在一段睡眠過程結(jié)
束后輸出睡眠評(píng)分,根據(jù)相關(guān)睡眠參數(shù)的輸出結(jié)合到健康康養(yǎng)的應(yīng)用上。
1.2 設(shè)計(jì)思路
設(shè)計(jì)思路源于對(duì)現(xiàn)代人睡眠健康需求的關(guān)注以及對(duì)現(xiàn)有睡眠監(jiān)測(cè)技術(shù)局限性的思考。在設(shè)計(jì)之初,注意到傳統(tǒng)的睡眠監(jiān)測(cè)手段往往依賴于接觸式的穿戴設(shè)備,這種方式雖然能夠提供較為精確的數(shù)據(jù),但卻有可能影響用戶的自然睡眠狀態(tài)。因此,設(shè)計(jì)目標(biāo)是創(chuàng)造一個(gè)非侵入式的睡眠監(jiān)控系統(tǒng),能夠讓用戶在自然的睡眠環(huán)境中得到準(zhǔn)確而有效的監(jiān)測(cè)。
為了實(shí)現(xiàn)這一目標(biāo),選擇了60GHz頻段的毫米波雷達(dá)技術(shù)作為主要的監(jiān)測(cè)手段。毫米波雷達(dá)具有非接觸、高分辨率和強(qiáng)穿透性等特點(diǎn),非常適合用來監(jiān)測(cè)人體微弱的生理信號(hào),如呼吸和心跳。通過算法優(yōu)化,能夠從雷達(dá)回波中提取出穩(wěn)定的呼吸和心跳信號(hào),并據(jù)此評(píng)估睡眠質(zhì)量和生理指標(biāo)。
考慮到用戶體驗(yàn)的重要性,決定將系統(tǒng)與互聯(lián)網(wǎng)技術(shù)相結(jié)合,通過ESP8266-Wi-Fi模塊將睡眠數(shù)據(jù)上傳至云端,方便用戶通過智能手機(jī)應(yīng)用程序隨時(shí)隨地查看自己的睡眠報(bào)告。同時(shí),為了應(yīng)對(duì)突發(fā)狀況,設(shè)計(jì)了閾值報(bào)警機(jī)制,當(dāng)檢測(cè)到異常生理指標(biāo)時(shí),系統(tǒng)能夠立即向用戶發(fā)出警告,以確保用戶的安全。
硬件選型方面,選擇了性能穩(wěn)定且廣泛使用的STM32F103RCT6作為主控芯片,以確保系統(tǒng)的可靠性和可擴(kuò)展性。為了直觀展示數(shù)據(jù),選用了1.44寸的TFT LCD顯示屏,它可以清晰地顯示監(jiān)測(cè)到的各項(xiàng)生理指標(biāo)和環(huán)境信息。此外,還加入了MLX90614紅外體溫傳感器,以便系統(tǒng)能夠監(jiān)測(cè)用戶的體溫變化,進(jìn)一步完善健康監(jiān)測(cè)功能。
總體的設(shè)計(jì)思路是在不干擾用戶正常生活的情況下,利用先進(jìn)的毫米波雷達(dá)技術(shù)和物聯(lián)網(wǎng)平臺(tái),創(chuàng)建一個(gè)能夠全天候監(jiān)測(cè)睡眠狀態(tài)、生理指標(biāo),并及時(shí)反饋給用戶的智能系統(tǒng)。這樣不僅能夠幫助用戶更好地了解自己的睡眠質(zhì)量,還能在出現(xiàn)異常時(shí)提供及時(shí)的幫助,從而提升整體的生活品質(zhì)。
1.3 系統(tǒng)功能總結(jié)
功能類別 | 描述 |
---|---|
人體存在感知 | 利用60GHz毫米波雷達(dá)檢測(cè)房間內(nèi)是否有人存在。 |
運(yùn)動(dòng)感知 | 感知人體的微小運(yùn)動(dòng),如呼吸和心跳。 |
睡眠狀態(tài)監(jiān)測(cè) | 根據(jù)身體運(yùn)動(dòng)幅度變化和呼吸心率變化實(shí)時(shí)判斷睡眠狀態(tài)。 |
生理指標(biāo)檢測(cè) | 記錄并分析心率、呼吸頻率等重要生理指標(biāo)。 |
遠(yuǎn)程數(shù)據(jù)上傳 | 通過ESP8266-Wi-Fi模塊將監(jiān)測(cè)數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。 |
移動(dòng)端查看 | 用戶可以通過手機(jī)應(yīng)用程序遠(yuǎn)程查看睡眠質(zhì)量報(bào)告和其他生理指標(biāo)。 |
異常報(bào)警 | 當(dāng)檢測(cè)到的生理指標(biāo)超過設(shè)定閾值時(shí),系統(tǒng)會(huì)發(fā)出報(bào)警提醒。 |
本地?cái)?shù)據(jù)顯示 | 通過1.44寸TFT LCD顯示屏實(shí)時(shí)顯示監(jiān)測(cè)到的生理指標(biāo)和環(huán)境信息。 |
體溫檢測(cè) | 使用MLX90614紅外體溫傳感器檢測(cè)人體體溫,并將其納入健康監(jiān)測(cè)數(shù)據(jù)中。 |
1.4 開發(fā)工具的選擇
【1】設(shè)備端開發(fā)
STM32的編程語言選擇C語言,C語言執(zhí)行效率高,大學(xué)里主學(xué)的C語言,C語言編譯出來的可執(zhí)行文件最接近于機(jī)器碼,匯編語言執(zhí)行效率最高,但是匯編的移植性比較差,目前在一些操作系統(tǒng)內(nèi)核里還有一些低配的單片機(jī)使用的較多,平常的單片機(jī)編程還是以C語言為主。C語言的執(zhí)行效率僅次于匯編,語法理解簡(jiǎn)單、代碼通用性強(qiáng),也支持跨平臺(tái),在嵌入式底層、單片機(jī)編程里用的非常多,當(dāng)前的設(shè)計(jì)就是采用C語言開發(fā)。
開發(fā)工具選擇Keil,keil是一家世界領(lǐng)先的嵌入式微控制器軟件開發(fā)商,在2015年,keil被ARM公司收購(gòu)。因?yàn)楫?dāng)前芯片選擇的是STM32F103系列,STMF103是屬于ARM公司的芯片構(gòu)架、Cortex-M3內(nèi)核系列的芯片,所以使用Kile來開發(fā)STM32是有先天優(yōu)勢(shì)的,而keil在各大高校使用的也非常多,很多教科書里都是以keil來教學(xué),開發(fā)51單片機(jī)、STM32單片機(jī)等等。目前作為MCU芯片開發(fā)的軟件也不只是keil一家獨(dú)大,IAR在MCU微處理器開發(fā)領(lǐng)域里也使用的非常多,IAR擴(kuò)展性更強(qiáng),也支持STM32開發(fā),也支持其他芯片,比如:CC2530,51單片機(jī)的開發(fā)。從軟件的使用上來講,IAR比keil更加簡(jiǎn)潔,功能相對(duì)少一些。如果之前使用過keil,而且使用頻率較多,已經(jīng)習(xí)慣再使用IAR是有點(diǎn)不適應(yīng)界面的。
【2】上位機(jī)開發(fā)
上位機(jī)的開發(fā)選擇Qt框架,編程語言采用C++;Qt是一個(gè)1991年由Qt Company開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展(稱為元對(duì)象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴(kuò)展,并且允許真正地組件編程。Qt能輕松創(chuàng)建具有原生C++性能的連接設(shè)備、用戶界面(UI)和應(yīng)用程序。它功能強(qiáng)大且結(jié)構(gòu)緊湊,擁有直觀的工具和庫(kù)。
1.5 模塊的技術(shù)詳情介紹
【1】ESP8266-WIFI模塊
ESP8266是一款廣受歡迎的低成本、低功耗的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)(IoT)領(lǐng)域。它由樂鑫科技(Espressif Systems)開發(fā),最初作為一款簡(jiǎn)單易用的無線模塊推向市場(chǎng),但因其強(qiáng)大的功能和靈活性迅速獲得了開發(fā)者們的青睞。ESP8266內(nèi)置了Tensilica L106超低功耗32位微處理器,主頻最高可達(dá)160MHz,并且擁有512KB的SRAM,這使得它不僅能夠作為一個(gè)簡(jiǎn)單的Wi-Fi模塊使用,還可以作為獨(dú)立的微控制器來執(zhí)行復(fù)雜的任務(wù)。
ESP8266模塊支持IEEE 802.11 b/g/n標(biāo)準(zhǔn),能夠工作在2.4GHz頻段上。它具有多種工作模式,包括Station模式(客戶端)、Access Point模式(熱點(diǎn))以及Station+AP模式(同時(shí)作為客戶端和熱點(diǎn))。這意味著它可以連接到現(xiàn)有的Wi-Fi網(wǎng)絡(luò),也可以自己創(chuàng)建一個(gè)Wi-Fi熱點(diǎn)供其他設(shè)備連接,極大地增加了其在不同應(yīng)用場(chǎng)景中的適用性。
對(duì)于開發(fā)者而言,ESP8266的一個(gè)重要優(yōu)勢(shì)在于其豐富的開發(fā)資源和支持。樂鑫科技提供了詳細(xì)的開發(fā)文檔,包括硬件接口說明、固件升級(jí)指南和API參考手冊(cè)等。此外,ESP8266還支持多種編程語言,如C/C++和Lua,同時(shí)還有成熟的開發(fā)框架如Arduino IDE的支持,使得開發(fā)者能夠快速上手,并利用各種庫(kù)函數(shù)簡(jiǎn)化開發(fā)流程。
ESP8266的低功耗特性也是一大亮點(diǎn),它提供了多種省電模式,可以根據(jù)實(shí)際應(yīng)用需求調(diào)整工作狀態(tài),以延長(zhǎng)電池壽命。這對(duì)于那些依賴電池供電的物聯(lián)網(wǎng)設(shè)備來說尤為重要。
ESP8266憑借其出色的性價(jià)比、強(qiáng)大的功能、易于開發(fā)的特性以及廣泛的社區(qū)支持,已經(jīng)成為許多DIY項(xiàng)目、智能家居設(shè)備和小型物聯(lián)網(wǎng)應(yīng)用的理想選擇。無論是作為獨(dú)立的微控制器還是作為Wi-Fi模塊,ESP8266都能夠滿足大多數(shù)物聯(lián)網(wǎng)項(xiàng)目的需求。
【2】MLX90614紅外體溫傳感器
MLX90614紅外體溫傳感器是由Melexis公司生產(chǎn)的一款高性能、非接觸式溫度測(cè)量傳感器。這款傳感器集成了紅外溫度測(cè)量功能與環(huán)境溫度測(cè)量功能于一體,適用于需要快速、準(zhǔn)確測(cè)量物體表面溫度的應(yīng)用場(chǎng)合。由于其非接觸式的特點(diǎn),MLX90614特別適合用于醫(yī)療領(lǐng)域,如監(jiān)測(cè)人體體溫,以及其他工業(yè)或商業(yè)用途,例如食品溫度檢測(cè)、設(shè)備過熱保護(hù)等。
MLX90614的工作原理基于紅外輻射理論。所有物體都會(huì)發(fā)射紅外輻射,其強(qiáng)度與物體的溫度成正比。MLX90614通過檢測(cè)目標(biāo)物體發(fā)射的紅外輻射能量,并結(jié)合傳感器所在環(huán)境的溫度,計(jì)算出目標(biāo)物體的表面溫度。這款傳感器具有較高的靈敏度,能夠檢測(cè)到非常微小的溫度變化,并且具有較好的響應(yīng)速度。
從硬件角度來看,MLX90614采用了SMD(Surface Mount Device)封裝,使其易于集成到各種設(shè)備中。它具有數(shù)字I2C接口,可以方便地與微控制器或其他數(shù)字系統(tǒng)進(jìn)行通信。此外,MLX90614還提供了不同的視場(chǎng)角版本,允許用戶根據(jù)具體的應(yīng)用需求選擇最適合的角度,從而獲得最準(zhǔn)確的測(cè)量結(jié)果。
在使用MLX90614時(shí),需要注意幾個(gè)關(guān)鍵參數(shù)。首先是距離系數(shù)(Distance-to-Spot Size Ratio),即傳感器與目標(biāo)之間的距離與目標(biāo)面積直徑之比。這個(gè)參數(shù)決定了傳感器的有效測(cè)量區(qū)域大小。其次是傳感器的溫度測(cè)量范圍,一般為-70°C至+380°C,足以覆蓋大部分日常應(yīng)用。此外,MLX90614還具備較高的測(cè)溫精度,通常在±0.5°C左右,這使得它在醫(yī)療和工業(yè)應(yīng)用中具有很高的實(shí)用性。
對(duì)于開發(fā)人員來說,MLX90614的另一個(gè)優(yōu)點(diǎn)是其易于集成。Melexis提供了詳盡的技術(shù)文檔和支持,包括電路設(shè)計(jì)指南、編程示例等資源,使得開發(fā)者能夠快速地將MLX90614集成到他們的產(chǎn)品中。此外,市面上也有許多現(xiàn)成的開發(fā)板和庫(kù)文件,可以幫助開發(fā)者簡(jiǎn)化開發(fā)流程,加速產(chǎn)品的上市時(shí)間。
綜上所述,MLX90614紅外體溫傳感器以其高精度、非接觸式測(cè)量的特點(diǎn),在多個(gè)行業(yè)中得到了廣泛應(yīng)用,尤其是在需要快速、準(zhǔn)確溫度讀數(shù)的場(chǎng)合。
【3】微波雷達(dá)模塊
生物感知雷達(dá)R60ABD1模塊是一款基于60GHz毫米波雷達(dá)技術(shù)的產(chǎn)品,專為人體呼吸心率感知及睡眠評(píng)估而設(shè)計(jì)。它采用FMCW(調(diào)頻連續(xù)波)雷達(dá)體制,能夠針對(duì)特定場(chǎng)合內(nèi)的人員進(jìn)行呼吸心率頻率的輸出,并結(jié)合長(zhǎng)時(shí)間的睡眠姿態(tài)體動(dòng)采集,及時(shí)上報(bào)人員的睡眠狀態(tài)和歷史記錄。模塊的一發(fā)三收天線形式使得它適合于置頂安裝模式,能夠精準(zhǔn)掃描人體全身的動(dòng)作層析,實(shí)現(xiàn)人體動(dòng)靜態(tài)時(shí)的睡眠探測(cè)和不同姿態(tài)下的呼吸心率采集。
該模塊的工作原理基于雷達(dá)天線發(fā)射電磁波信號(hào),并接收目標(biāo)反射回來的回波信號(hào)。通過雷達(dá)處理器解析不同接收天線回波信號(hào)的波形參量之間的相位差和能量變化,從而反饋目標(biāo)運(yùn)動(dòng)的微動(dòng)能量變化、距離、方向和速度等信息。這使得R60ABD1模塊能夠探測(cè)目標(biāo)的運(yùn)動(dòng)狀態(tài)和胸腔呼吸起伏的頻次狀態(tài)。在雷達(dá)探測(cè)范圍內(nèi),即便是輕微的手部晃動(dòng)或呼吸引起的胸腔起伏等微小運(yùn)動(dòng),也能夠被模塊捕捉到。
R60ABD1模塊具有多種功能,包括運(yùn)動(dòng)檢測(cè)、呼吸探測(cè)、呼吸心率頻率采集等功能。模塊能夠檢測(cè)到諸如走動(dòng)或小幅度手晃動(dòng)等運(yùn)動(dòng),并觸發(fā)有人狀態(tài)的指示。當(dāng)人處于靜止?fàn)顟B(tài)時(shí),模塊也能檢測(cè)到由呼吸引起的胸腔起伏,并維持有人狀態(tài)的輸出。更重要的是,它能統(tǒng)計(jì)呼吸心跳引起的胸腔起伏,并輸出每分鐘的呼吸心跳數(shù)值。這些功能使得該模塊在全屋智能、智能家電、區(qū)域人員探測(cè)和睡眠看護(hù)等領(lǐng)域有著廣泛的應(yīng)用前景。
該模塊的電氣特性包括工作電壓在4.6V至6V之間,典型工作電流為93mA,工作溫度范圍從-20°C至+60°C,存儲(chǔ)溫度范圍則從-40°C至+105°C。其RF性能方面,工作頻率位于61GHz至61.5GHz區(qū)間,發(fā)射功率不超過6dBm。天線增益為4dBi,水平和垂直波束寬度均為20°(-3dB點(diǎn))。
R60ABD1模塊提供了標(biāo)準(zhǔn)的UART通信接口,并支持涂鴉協(xié)議,便于與其他設(shè)備集成。模塊尺寸小巧,體積僅為35mm×31mm×7.5mm,并配有雙排插針接口,接口間距為2.0mm。這些接口包括電源輸入、地、串口接收和發(fā)送端、以及多個(gè)可定義的通用I/O引腳。其中,部分引腳可用于輸出有人/無人狀態(tài)、活躍/靜止?fàn)顟B(tài)、體征參數(shù)等信息。
此外,模塊還支持多種參數(shù)設(shè)置,如人體存在開關(guān)、呼吸探測(cè)開關(guān)、心跳探測(cè)開關(guān)、睡眠探測(cè)開關(guān)以及探測(cè)模式切換開關(guān)(實(shí)時(shí)探測(cè)/睡眠模式)。這些設(shè)置使得模塊可以根據(jù)不同應(yīng)用場(chǎng)景的需求進(jìn)行靈活配置。在安裝方面,R60ABD1模塊推薦傾斜安裝,并且平行于掃描面的距離不超過1.5米。特別是用于睡眠呼吸心跳探測(cè)時(shí),雷達(dá)應(yīng)安裝在床頭正上方1米的高度,向下傾斜45°對(duì)著床中間,確保雷達(dá)與人體胸腔的距離在1.5米范圍內(nèi),以確保雷達(dá)正常進(jìn)行探測(cè)。
1.6 微波雷達(dá)安裝說明
生物感知雷達(dá)R60ABD1模塊的安裝需要遵循特定的指導(dǎo)原則以確保其最佳性能。首先,雷達(dá)模塊應(yīng)該朝向?yàn)榻z印標(biāo)識(shí)的方向進(jìn)行安裝,這意味著在安裝時(shí)需要確保雷達(dá)的正面朝向正確。為了達(dá)到理想的探測(cè)效果,R60ABD1雷達(dá)模塊建議采用傾斜安裝的方式,傾斜角度應(yīng)在30到45度之間。這種安裝方式有助于雷達(dá)的波束覆蓋到所需的探測(cè)區(qū)域,并且可以減少因環(huán)境因素引起的誤報(bào)。
在確定雷達(dá)的具體安裝位置時(shí),建議將雷達(dá)安裝在床頭正上方大約1米的高度處,這樣可以確保雷達(dá)的主要波束能夠覆蓋到床的中心區(qū)域。這樣做是為了確保雷達(dá)可以有效地探測(cè)到床上人的呼吸和心跳活動(dòng),同時(shí)也能夠監(jiān)測(cè)到人體的其他微動(dòng)。安裝高度的選擇也是基于雷達(dá)波束覆蓋范圍的考慮,以確保人體存在檢測(cè)的最大距離為約2.5米,而人體呼吸頻率檢測(cè)的最大距離約為1.5米。
除了正確的安裝位置和角度外,還需要注意避免雷達(dá)前方出現(xiàn)明顯的金屬或電解質(zhì)遮擋物。這是因?yàn)楹撩撞ɡ走_(dá)的探測(cè)機(jī)制依賴于雷達(dá)波的反射,如果存在金屬或電解質(zhì)遮擋物,則可能會(huì)影響雷達(dá)波的反射路徑,從而影響到雷達(dá)的探測(cè)準(zhǔn)確性。因此,在安裝雷達(dá)時(shí),應(yīng)確保雷達(dá)前方?jīng)]有諸如金屬窗簾條、風(fēng)扇、空調(diào)電機(jī)等潛在的干擾源。
在實(shí)際安裝過程中,還應(yīng)當(dāng)注意雷達(dá)模塊的安裝高度和角度會(huì)影響到其探測(cè)效果。為了使雷達(dá)的主波束能夠覆蓋到整個(gè)睡眠區(qū)域,雷達(dá)的安裝高度應(yīng)該保持在與床面的高度差在0.9米左右,誤差不超過0.2米。同時(shí),雷達(dá)模塊的安裝需要保證其前方?jīng)]有明顯的遮擋物,尤其是金屬材質(zhì)的物體,因?yàn)檫@些物體可能會(huì)反射雷達(dá)波,造成干擾。
為了確保雷達(dá)能夠正常工作,安裝完成后還需注意雷達(dá)模塊的供電穩(wěn)定性。雷達(dá)模塊對(duì)電源品質(zhì)有一定的要求,需要無門限毛刺或紋波現(xiàn)象,并且需要有效屏蔽來自附近設(shè)備的電源噪聲。為了保證模塊內(nèi)部VCO電路的正常工作,雷達(dá)模塊需要+5V到+6V的供電,且電壓紋波不能超過100mV。外部電源還需要提供足夠的電流輸出能力和瞬態(tài)響應(yīng)能力,以防止由于電源不穩(wěn)定導(dǎo)致的探測(cè)距離縮短或誤報(bào)率增加等問題。
1.7 微波雷達(dá)的完整功能概述(快速上手)
R60ABD1呼吸睡眠雷達(dá)模組是一款基于60GHz毫米波雷達(dá)技術(shù)設(shè)計(jì)的非接觸式生物感知設(shè)備,主要用于人體存在感知及運(yùn)動(dòng)感知。它能夠根據(jù)睡眠過程中身體運(yùn)動(dòng)幅度變化和呼吸心率變化,實(shí)時(shí)判斷目標(biāo)的睡眠狀態(tài)、呼吸心跳頻率,并在睡眠結(jié)束后輸出睡眠評(píng)分。該模組的探測(cè)功能不受溫度、濕度、噪聲氣流、塵埃、光照和人體完全靜止等因素的影響,適合安裝在室內(nèi)頂部使用。
模組具備多種功能,包括有人/無人狀態(tài)檢測(cè)、人體靜止/活躍狀態(tài)切換檢測(cè)、人體距離主動(dòng)上報(bào)、體動(dòng)幅度參數(shù)輸出、人體方位上報(bào)、心跳數(shù)值及波形輸出、呼吸數(shù)值及波形輸出、入床/離床狀態(tài)判斷、睡眠狀態(tài)(清醒/淺睡/深睡)識(shí)別、清醒/淺睡/深睡時(shí)長(zhǎng)統(tǒng)計(jì)、睡眠質(zhì)量評(píng)分、睡眠異常上報(bào)、異常掙扎上報(bào)、無人計(jì)時(shí)上報(bào)以及睡眠質(zhì)量評(píng)級(jí)上報(bào)等。這些功能通過不同的數(shù)據(jù)點(diǎn)(DP)以特定的時(shí)間間隔或狀態(tài)變化時(shí)上報(bào)。
為了確保雷達(dá)的準(zhǔn)確探測(cè),模組的安裝需要遵循一定的規(guī)范。雷達(dá)應(yīng)該安裝在床頭正上方1米的高度,向下傾斜30至45度,以確保主波束能夠覆蓋到睡眠區(qū)域。此外,雷達(dá)前方不應(yīng)有明顯的金屬或電解質(zhì)遮擋物,以免影響探測(cè)效果。在安裝過程中,還需確認(rèn)雷達(dá)探測(cè)范圍內(nèi)是否存在干擾源,如空調(diào)、風(fēng)扇等,并盡可能移除這些干擾源。
模組的引腳包括電源輸入、地、串口接收與發(fā)送端、以及若干備用擴(kuò)展引腳。其中,部分引腳可以根據(jù)用戶需求重新定義功能。為了便于用戶操作,在官方的文檔還介紹了如何準(zhǔn)備必要的工具,如TTL串口工具、杜邦線、PC電腦、串口助手終端和Radar-EVB demo板,并給出了上電及工作的數(shù)據(jù)上報(bào)規(guī)則和睡眠模式檢測(cè)邏輯。
在官方的文檔最后提供了主要功能測(cè)試指引,包括睡眠質(zhì)量狀態(tài)判斷測(cè)試、入離床狀態(tài)判斷測(cè)試、離床狀態(tài)判斷測(cè)試、呼吸頻率測(cè)試以及心跳頻率測(cè)試等。每項(xiàng)測(cè)試都有明確的操作步驟和判定標(biāo)準(zhǔn),以幫助用戶驗(yàn)證模組的功能是否正常。此外,官方的文檔還對(duì)體動(dòng)幅度參數(shù)的輸出進(jìn)行了詳細(xì)說明,并附帶了相關(guān)的測(cè)試表格格式,便于用戶記錄和分析測(cè)試結(jié)果。
二、微波雷達(dá)調(diào)試過程
2.1 接線說明
2.2 安裝說明
傾斜安裝: * 確保雷達(dá)探測(cè)準(zhǔn)確性,建議安裝在床頭上方,以 45°斜向下安裝! R60ABD1-呼吸睡眠雷達(dá)傾斜安裝,傾斜角度為 30~45°,安裝在床頭上方,雷達(dá)安裝高度建議為高于床面 0.8-1m;保證雷達(dá)主波束覆蓋探測(cè)區(qū)域;雷達(dá)前面無明顯(金屬/電解質(zhì))遮擋物及覆蓋物。受雷達(dá)安裝高度及雷達(dá)波束范圍影響,在該安裝模式下,人體存在檢測(cè)最大距離 L3 ≈ 2.5 米;睡眠檢測(cè)最大距離 L2 ≈ 2.5 米;人體呼吸頻率檢測(cè)最大距離 L1 ≈ 1.5 米。
2.3 連接電腦調(diào)試
將60G毫米波雷達(dá)模塊與電腦連接,調(diào)試模塊是否正??梢赃\(yùn)行,60G毫米波雷達(dá)模塊默認(rèn)的波特率是115200
GND-----GND
VCC-----VCC
TX------RX
RX------TX
串口調(diào)試助手返回的數(shù)據(jù):
睡眠雷達(dá)上位機(jī):
三、華為云服務(wù)器部署與上位機(jī)APP開發(fā)
這里直接看視頻,可以了解的更加清楚。
(1)華為云物聯(lián)網(wǎng)開發(fā)(一)設(shè)備上云: [https://www.bilibili.com/video/BV1Md4y1v7m5]
(2)華為云物聯(lián)網(wǎng)云平臺(tái)對(duì)應(yīng)的上位機(jī)開發(fā)步驟: [https://www.bilibili.com/video/BV1mr421c75S]
四、STM32代碼開發(fā)(微波雷達(dá)模塊數(shù)據(jù)處理)
4.1 微波雷達(dá)數(shù)據(jù)處理(頭文件)
#ifndef _DATAHANDLE_H
#define _DATAHANDLE_H
?
#include "stdint.h"
?
/* 定義包頭及指令信息 */
//幀頭
#define HEADER1 0x53
#define HEADER2 0x59
//控制字
#define CMD_TICK 0x01 //心跳包
#define CMD_PRODUCT_INFO 0x02 //產(chǎn)品信息
#define CMD_OTA 0x03 // OTA升級(jí)
#define CMD_WORK_STATE 0x05 //工作狀態(tài)
#define CMD_RADAR_DETECT_RANGE 0x07 //雷達(dá)探測(cè)范圍
#define CMD_BODY_EXIST_DETECT 0x80 //人體存在檢測(cè)
#define CMD_BREATH_DETECT 0x81 //呼吸檢測(cè)
#define CMD_SLEEP_DETECT 0x84 //睡眠檢測(cè)
#define CMD_HEART_DETECT 0x85 //心率檢測(cè)
//幀尾
#define END1 0x54
#define END2 0x43
?
/* 枚舉讀取數(shù)據(jù)報(bào)文的狀態(tài) */
typedef enum
{
IDLE,
SEEN_HEADER1,
SEEN_HEADER2,
SEEN_CONTROL,
SEEN_COMMAND,
SEEN_LENGTH,
SEEN_DATA,
SEEN_SUM,
SEEN_END1,
SEEN_END2
} rx_datagram_state_t;
?
/* 枚舉控制模式 */
typedef enum
{
MODE_IDLE,
MODE_SEND_TICK,
MODE_SEND_PRODUCT_INFO,
MODE_SEND_OTA,
MODE_SEND_WORK_STATE,
MODE_SEND_RADAR_DETECT_RANGE,
MODE_SEND_BODY_EXIST_DETECT,
MODE_SEND_BREATH_DETECT,
MODE_SEND_SLEEP_DETECT,
MODE_SEND_HEART_DETECT
} control_mode_t;
?
/*******************************************************************************/
//人體存在功能
typedef struct
{
uint8_t body_exist_flag; //有人無人檢測(cè)標(biāo)志
uint8_t work_state; //運(yùn)動(dòng)狀態(tài)
uint8_t body_move_param; //體動(dòng)參數(shù)
uint16_t body_distance; //人體距離
uint8_t body_direction[3]; //人體方位
} body_exist_detect_t;
?
//呼吸檢測(cè)功能
typedef struct
{
uint8_t breath_detect_switch; //開關(guān)呼吸功能
uint8_t breath_detect_state; //呼吸檢測(cè)狀態(tài)
uint8_t breath_detect_value; //呼吸檢測(cè)值
uint8_t breath_wave_data[5]; //呼吸波形
} breath_detect_t;
?
//睡眠評(píng)分
typedef struct
{
uint8_t sleep_detail_exist; //睡眠詳細(xì)狀態(tài)
uint8_t sleep_detail_state; //睡眠詳細(xì)評(píng)分
?
uint8_t sleep_detail_score; //睡眠評(píng)分
uint16_t sleep_detail_time; //睡眠時(shí)間
uint8_t sleep_detail_awake; //清醒時(shí)長(zhǎng)占比
uint8_t sleep_detail_light; //淺睡時(shí)長(zhǎng)占比
uint8_t sleep_detail_deep; //深睡時(shí)長(zhǎng)占比
uint8_t sleep_detail_away; //離床時(shí)長(zhǎng)占比
uint8_t sleep_detail_away_times; //離床次數(shù)
uint8_t sleep_detail_turn_over_times; //翻身次數(shù)
uint8_t sleep_detail_avg_breath; //平均呼吸
uint8_t sleep_detail_avg_heart; //平均心率
uint8_t sleep_detail_breath_stoptimes; //呼吸停頓次數(shù)
uint8_t sleep_detail_turn_over_L; //大動(dòng)作次數(shù)
uint8_t sleep_detail_turn_over_S; //小動(dòng)作次數(shù)
} sleep_detail_t;
?
//睡眠檢測(cè)功能
typedef struct
{
uint8_t sleep_detect_switch; //開關(guān)睡眠功能
uint8_t sleep_bed_state; //入床/離床狀態(tài)
uint8_t sleep_detect_state; //睡眠檢測(cè)狀態(tài)
?
uint8_t sleep_wake_hour; //清醒時(shí)間
uint8_t sleep_light_hour; //淺睡時(shí)長(zhǎng)
uint8_t sleep_deep_hour; //深睡時(shí)長(zhǎng)
?
uint8_t sleep_score; //睡眠質(zhì)量評(píng)分
sleep_detail_t sleep_score_detail; //睡眠質(zhì)量評(píng)分詳情
sleep_detail_t sleep_score_detail_1; //睡眠質(zhì)量評(píng)分詳情1
uint8_t sleep_score_detail_err; //睡眠質(zhì)量評(píng)分詳情2
} sleep_detect_t;
?
//心率檢測(cè)功能
typedef struct
{
uint8_t heart_detect_switch; //開關(guān)心率功能
uint8_t heart_detect_value; //心率檢測(cè)值
uint8_t heart_wave_data[5]; //心率波形
} heart_detect_t;
?
//數(shù)據(jù)變化標(biāo)志
typedef struct
{
unsigned data_change_body_exist : 1;
unsigned data_change_breath : 1;
unsigned data_change_sleep : 1;
unsigned data_change_heart : 1;
} data_change_t;
?
void ProcessRx(uint8_t *buff,uint8_t size);
// void ProcessRx(void);
?
?
extern body_exist_detect_t body_exist_detect;
extern breath_detect_t breath_detect;
extern sleep_detect_t sleep_detect;
extern heart_detect_t heart_detect;
?
#endif
?
4.2 微波雷達(dá)數(shù)據(jù)處理(源文件)
#include "datahandle.h"
#include "debug.h"
body_exist_detect_t body_exist_detect = {0};
breath_detect_t breath_detect = {0};
sleep_detect_t sleep_detect = {0};
heart_detect_t heart_detect = {0};
data_change_t data_change = {0};
?
/* 定義數(shù)據(jù)包接收狀態(tài)的變量,并初始化為空閑狀態(tài) */
rx_datagram_state_t rx_datagram_state = IDLE;
control_mode_t control_mode = MODE_IDLE;
?
/* 協(xié)議數(shù)據(jù)處理函數(shù) */
void ProcessRx(uint8_t *buff, uint8_t size)
{
/****************************************************************************/
uint8_t receivedbyte, rx_sum, command;
//數(shù)據(jù)存儲(chǔ)數(shù)組
uint8_t rx_data[10];
?
uint16_t rx_dategram_len;
while (size)
{
switch (rx_datagram_state)
{
case IDLE: //在空閑時(shí),判斷是否讀取幀頭1
{
receivedbyte = *buff;
if (HEADER1 == receivedbyte)
{
// printf("HEADER1:%xn", *buff);
rx_sum = 0;
rx_sum += receivedbyte;
rx_datagram_state = SEEN_HEADER1;
buff++;
}
break;
}
case SEEN_HEADER1: //讀取第一幀之后,判斷是否讀取幀頭2
{
receivedbyte = *buff;
if (HEADER2 == receivedbyte)
{
// printf("HEADER2:%xn", *buff);
rx_sum += receivedbyte;
rx_datagram_state = SEEN_HEADER2;
buff++;
}
break;
}
?
case SEEN_HEADER2: //讀取第二幀后,根據(jù)控制字判斷數(shù)據(jù)模式
{
uint8_t ctrl_mode = *buff; //控制字
rx_sum += ctrl_mode;
?
if (ctrl_mode == CMD_TICK)
control_mode = MODE_SEND_TICK;
else if (ctrl_mode == CMD_PRODUCT_INFO)
control_mode = MODE_SEND_PRODUCT_INFO;
else if (ctrl_mode == CMD_OTA)
control_mode = MODE_SEND_OTA;
else if (ctrl_mode == CMD_WORK_STATE)
control_mode = MODE_SEND_WORK_STATE;
else if (ctrl_mode == CMD_RADAR_DETECT_RANGE)
control_mode = MODE_SEND_RADAR_DETECT_RANGE;
else if (ctrl_mode == CMD_BODY_EXIST_DETECT)
control_mode = MODE_SEND_BODY_EXIST_DETECT;
else if (ctrl_mode == CMD_BREATH_DETECT)
control_mode = MODE_SEND_BREATH_DETECT;
else if (ctrl_mode == CMD_SLEEP_DETECT)
control_mode = MODE_SEND_SLEEP_DETECT;
else if (ctrl_mode == CMD_HEART_DETECT)
control_mode = MODE_SEND_HEART_DETECT;
else
control_mode = MODE_IDLE;
?
rx_datagram_state = SEEN_CONTROL;
// printf("SEEN_CONTROL:%xn", ctrl_mode);
buff++;
}
break;
?
case SEEN_CONTROL: //讀取控制字后,判斷命令字
{
command = *buff; //命令字
rx_sum += command;
rx_datagram_state = SEEN_COMMAND;
// printf("SEEN_COMMAND:%xn", command);
buff++;
}
break;
?
case SEEN_COMMAND: //讀取命令字后,識(shí)別數(shù)據(jù)長(zhǎng)度
{
uint8_t len_temp[2];
len_temp[0] = *buff;
rx_sum += len_temp[0];
?
buff++;
len_temp[1] = *buff;
rx_sum += len_temp[1];
?
rx_dategram_len = (len_temp[0] < < 8) | len_temp[1];
rx_datagram_state = SEEN_LENGTH;
// printf("SEEN_LENGTH:%xn", rx_dategram_len);
buff++;
}
break;
?
case SEEN_LENGTH: //讀取數(shù)據(jù)長(zhǎng)度后,保存數(shù)據(jù)
{
if (size < (int)rx_dategram_len) //判斷數(shù)據(jù)包是否完整
{
rx_datagram_state = IDLE;
return;
}
uint8_t readlen = rx_dategram_len; //數(shù)據(jù)包長(zhǎng)度
uint8_t tmp[rx_dategram_len]; //數(shù)據(jù)包緩存
uint8_t *ptmp = tmp; //數(shù)據(jù)包緩存指針
while (readlen--)
{
receivedbyte = *buff;
*ptmp++ = receivedbyte; //將數(shù)據(jù)存入緩存
rx_sum += receivedbyte; //校驗(yàn)和
}
// TODO 使用上面操作,可以直接操作rx_data指針,不用拷貝數(shù)據(jù)到rx_data數(shù)組中
for (uint8_t i = 0; i < rx_dategram_len; i++) //將數(shù)據(jù)存儲(chǔ)到數(shù)組中
{
rx_data[i] = tmp[i];
}
?
rx_datagram_state = SEEN_DATA;
buff++;
}
break;
?
case SEEN_DATA: //讀取數(shù)據(jù)后,判斷校驗(yàn)和,根據(jù)數(shù)據(jù)、控制字、命令字讀取狀態(tài)
{
uint8_t getsum = *buff;
?
//判斷校驗(yàn)和是否正確
if (getsum != rx_sum)
{
rx_datagram_state = IDLE;
return;
}
else
{
//判斷控制字模式
switch (control_mode)
{
case MODE_SEND_TICK: //心跳包
{
printf("MODE_SEND_TICKn");
}
break;
?
case MODE_SEND_PRODUCT_INFO: //產(chǎn)品信息
{
printf("MODE_SEND_PRODUCT_INFOn");
}
break;
?
case MODE_SEND_OTA: // OTA升級(jí)
{
printf("MODE_SEND_OTAn");
}
break;
?
case MODE_SEND_WORK_STATE: //工作狀態(tài)
{
printf("MODE_SEND_WORK_STATEn");
}
break;
?
case MODE_SEND_RADAR_DETECT_RANGE: //雷達(dá)檢測(cè)范圍
{
printf("MODE_SEND_RADAR_DETECT_RANGEn");
}
break;
?
case MODE_SEND_BODY_EXIST_DETECT: //人體存在檢測(cè)
{
data_change.data_change_body_exist = 1;
switch (command)
{
case 1:
{ //檢測(cè)人體存在
body_exist_detect.body_exist_flag = (0 != rx_data[0]) ? 1 : 0;
printf("Body Exist flag State:%dn", body_exist_detect.body_exist_flag);
}
break;
?
case 2:
{ //運(yùn)動(dòng)狀態(tài)
body_exist_detect.work_state = rx_data[0];
printf("Move State:%dn", body_exist_detect.work_state);
}
break;
?
case 3:
{ //運(yùn)動(dòng)值
body_exist_detect.body_move_param = rx_data[0];
printf("Body Move Value:%dn", body_exist_detect.body_move_param);
}
break;
?
case 4:
{ //人體距離
body_exist_detect.body_distance = (rx_data[0] < < 8) | rx_data[1];
printf("Body Distance:%dn", body_exist_detect.body_distance);
}
break;
?
case 5:
{ //人體方位
body_exist_detect.body_direction[0] = (rx_data[0] < < 8) | rx_data[1];
body_exist_detect.body_direction[1] = (rx_data[2] < < 8) | rx_data[3];
body_exist_detect.body_direction[2] = (rx_data[4] < < 8) | rx_data[5];
}
break;
}
}
break;
?
case MODE_SEND_BREATH_DETECT: //呼吸檢測(cè)
{
data_change.data_change_breath = 1;
switch (command)
{
case 1:
{
//呼吸檢測(cè)狀態(tài)
breath_detect.breath_detect_state = rx_data[0];
printf("Breath State:%dn", breath_detect.breath_detect_state);
}
break;
?
case 2:
{
//呼吸值
breath_detect.breath_detect_value = rx_data[0];
printf("Breath Value:%dn", breath_detect.breath_detect_value);
}
}
}
break;
?
case MODE_SEND_SLEEP_DETECT: //睡眠檢測(cè)
{
data_change.data_change_sleep = 1;
//判斷命令字
switch (command)
{
case 1:
{ //入床/離床狀態(tài)
sleep_detect.sleep_bed_state = rx_data[0];
printf("Sleep1 State:%dn", sleep_detect.sleep_bed_state);
}
break;
?
case 2:
{ //睡眠狀態(tài)
sleep_detect.sleep_detect_state = rx_data[0];
printf("Sleep State:%dn", sleep_detect.sleep_detect_state);
}
break;
?
case 3:
{ //清醒時(shí)長(zhǎng)
sleep_detect.sleep_wake_hour = (rx_data[0] < < 8) | rx_data[1];
printf("Sleep Wake Hours:%dn", sleep_detect.sleep_wake_hour);
}
break;
?
case 4:
{ //淺睡時(shí)長(zhǎng)
sleep_detect.sleep_light_hour = (rx_data[0] < < 8) | rx_data[1];
printf("Sleep Light Hours:%dn", sleep_detect.sleep_light_hour);
}
break;
?
case 5:
{ //深睡時(shí)長(zhǎng)
sleep_detect.sleep_deep_hour = (rx_data[0] < < 8) | rx_data[1];
printf("Sleep Deep Hours:%dn", sleep_detect.sleep_deep_hour);
}
break;
?
case 0x06:
{ //睡眠質(zhì)量評(píng)分
sleep_detect.sleep_score = rx_data[0];
printf("Sleep Score:%dn", sleep_detect.sleep_score);
}
break;
?
case 0x0c:
{ //睡眠檢測(cè)結(jié)果
sleep_detect.sleep_score_detail.sleep_detail_exist = rx_data[0];
sleep_detect.sleep_score_detail.sleep_detail_state = rx_data[1];
sleep_detect.sleep_score_detail.sleep_detail_avg_breath = rx_data[2];
sleep_detect.sleep_score_detail.sleep_detail_avg_heart = rx_data[3];
sleep_detect.sleep_score_detail.sleep_detail_turn_over_times = rx_data[4];
sleep_detect.sleep_score_detail.sleep_detail_turn_over_L = rx_data[5];
sleep_detect.sleep_score_detail.sleep_detail_turn_over_S = rx_data[6];
sleep_detect.sleep_score_detail.sleep_detail_breath_stoptimes = rx_data[7];
}
break;
?
case 0x0d:
{ //睡眠詳情
sleep_detect.sleep_score_detail_1.sleep_detail_score = rx_data[0];
sleep_detect.sleep_score_detail_1.sleep_detail_time = (rx_data[1] < < 8) | rx_data[2];
sleep_detect.sleep_score_detail_1.sleep_detail_awake = rx_data[3];
sleep_detect.sleep_score_detail_1.sleep_detail_light = rx_data[4];
sleep_detect.sleep_score_detail_1.sleep_detail_away = rx_data[5];
sleep_detect.sleep_score_detail_1.sleep_detail_away_times = rx_data[6];
sleep_detect.sleep_score_detail_1.sleep_detail_avg_breath = rx_data[7];
sleep_detect.sleep_score_detail_1.sleep_detail_avg_heart = rx_data[8];
sleep_detect.sleep_score_detail_1.sleep_detail_breath_stoptimes = rx_data[9];
}
break;
?
case 0x0e:
{ //異常檢測(cè)
sleep_detect.sleep_score_detail_err = rx_data[0];
}
break;
}
}
break;
?
case MODE_SEND_HEART_DETECT: //心率檢測(cè)
{
data_change.data_change_heart = 1;
switch (command)
{
case 0:
{ //開關(guān)心率檢測(cè)
}
break;
?
case 2:
{ //心率值
heart_detect.heart_detect_value = rx_data[0];
printf("Heart rate Value:%dn", heart_detect.heart_detect_value);
}
break;
?
case 5:
{ //心率波形
heart_detect.heart_wave_data[0] = rx_data[0];
heart_detect.heart_wave_data[1] = rx_data[1];
heart_detect.heart_wave_data[2] = rx_data[2];
heart_detect.heart_wave_data[3] = rx_data[3];
heart_detect.heart_wave_data[4] = rx_data[4];
}
break;
}
}
break;
?
case MODE_IDLE: //空閑
{
}
break;
}
}
rx_datagram_state = SEEN_SUM;
buff++;
}
break;
?
case SEEN_SUM: //讀取校驗(yàn)后,判斷幀尾1
{
rx_datagram_state = (END1 == *buff) ? SEEN_END1 : IDLE;
}
break;
?
case SEEN_END1: //讀取幀尾1后,判斷幀尾2
{
rx_datagram_state = (END2 == *buff) ? SEEN_END2 : IDLE;
}
break;
?
case SEEN_END2: //判斷幀尾2后,設(shè)置接收完成標(biāo)志
{
// rx_flag = 1;
rx_datagram_state = IDLE;
}
break;
?
?
default:
{
receivedbyte = 0;
rx_datagram_state = IDLE;
size = 0;
break;
}
}
size--;
}
}
五、總結(jié)
本項(xiàng)目開發(fā)一種非接觸式的睡眠監(jiān)控系統(tǒng),該系統(tǒng)利用先進(jìn)的60GHz毫米波雷達(dá)技術(shù)和STM32微控制器,實(shí)現(xiàn)了對(duì)人體在睡眠過程中的存在感知、運(yùn)動(dòng)感知以及生理指標(biāo)如呼吸頻率、心率的實(shí)時(shí)監(jiān)測(cè)。系統(tǒng)能夠自動(dòng)評(píng)估睡眠質(zhì)量,并在用戶睡眠周期結(jié)束時(shí)提供睡眠評(píng)分。為了確保用戶能夠在任何地點(diǎn)了解自己的睡眠狀況,系統(tǒng)集成了Wi-Fi模塊,可以將收集到的數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái),并通過專門設(shè)計(jì)的移動(dòng)應(yīng)用程序供用戶遠(yuǎn)程訪問。此外,系統(tǒng)還具備超閾值報(bào)警功能,當(dāng)檢測(cè)到異常的生理指標(biāo)時(shí)會(huì)發(fā)出警報(bào)提醒。本地1.44寸TFT LCD顯示屏用于實(shí)時(shí)顯示監(jiān)測(cè)到的信息,包括生理指標(biāo)和環(huán)境數(shù)據(jù)。為了全面監(jiān)測(cè)用戶的健康狀況,系統(tǒng)還加入了MLX90614紅外體溫傳感器來檢測(cè)人體體溫。通過集成多種傳感器和技術(shù),該項(xiàng)目為健康管理和智能家居應(yīng)用提供了有力支持。
審核編輯 黃宇
-
非接觸式
+關(guān)注
關(guān)注
0文章
77瀏覽量
14261 -
監(jiān)控系統(tǒng)
+關(guān)注
關(guān)注
21文章
3914瀏覽量
174692 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
355982 -
微波雷達(dá)
+關(guān)注
關(guān)注
4文章
88瀏覽量
21759
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論