0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32+微波雷達(dá)設(shè)計(jì)的非接觸式睡眠監(jiān)控系統(tǒng)

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2024-10-12 14:13 ? 次閱讀

一、前言

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ì)量。

image-20240910171618588

image-20240910171632403

image-20240910171602544

設(shè)備安裝角度:

image-20240910164203002

【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)界面的。

image-20221210225339928

【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ù)。

image-20230218001243591

image-20230218001219105

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 接線說明

image-20240126145448206

2.2 安裝說明

image-20240126145600771

傾斜安裝: * 確保雷達(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 米。

image-20240126145701021

image-20240126150859704

2.3 連接電腦調(diào)試

將60G毫米波雷達(dá)模塊與電腦連接,調(diào)試模塊是否正??梢赃\(yùn)行,60G毫米波雷達(dá)模塊默認(rèn)的波特率是115200

GND-----GND
VCC-----VCC
TX------RX
RX------TX

image-20240126211201418

image-20240126211215514

串口調(diào)試助手返回的數(shù)據(jù):

image-20240126212034175

睡眠雷達(dá)上位機(jī):

image-20240126212151180

image-20240126212338673

三、華為云服務(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)用提供了有力支持。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 非接觸式
    +關(guān)注

    關(guān)注

    0

    文章

    77

    瀏覽量

    14261
  • 監(jiān)控系統(tǒng)

    關(guān)注

    21

    文章

    3914

    瀏覽量

    174692
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    355982
  • 微波雷達(dá)
    +關(guān)注

    關(guān)注

    4

    文章

    88

    瀏覽量

    21759
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    移動(dòng)自動(dòng)雷達(dá)波測(cè)流系統(tǒng)的工作原理及使用

    移動(dòng)自動(dòng)雷達(dá)波測(cè)流系統(tǒng)具有測(cè)量精度高、速度快、可全天候工作、接觸測(cè)量、易于安裝和維護(hù)等優(yōu)點(diǎn)
    的頭像 發(fā)表于 11-08 16:16 ?212次閱讀
    移動(dòng)<b class='flag-5'>式</b>自動(dòng)<b class='flag-5'>雷達(dá)</b>波測(cè)流<b class='flag-5'>系統(tǒng)</b>的工作原理及使用

    定華雷達(dá)儀表學(xué)堂:雷達(dá)液位計(jì)在導(dǎo)波管中的測(cè)量

    在實(shí)際工況中,雷達(dá)液位計(jì)是非接觸的測(cè)量,一般來說,接觸的測(cè)量還是有不少優(yōu)勢(shì)的,但是在一些特殊的工況中,
    的頭像 發(fā)表于 09-07 10:38 ?232次閱讀

    接觸測(cè)量傳感器有哪些特點(diǎn)

    接觸測(cè)量傳感器是一種利用電磁波、聲波、光學(xué)等接觸方式進(jìn)行測(cè)量的傳感器。它具有以下特點(diǎn): 高精度:
    的頭像 發(fā)表于 08-19 10:07 ?653次閱讀

    接觸溫度傳感器的優(yōu)缺點(diǎn)有哪些

    接觸溫度傳感器,顧名思義,是一種無需與被測(cè)物體直接接觸即可測(cè)量溫度的傳感器。這種傳感器在工業(yè)、醫(yī)療、科研等領(lǐng)域有著廣泛的應(yīng)用。本文將詳細(xì)介紹
    的頭像 發(fā)表于 06-19 14:37 ?1098次閱讀

    接觸溫度傳感器的定義、工作原理、類型、特點(diǎn)、應(yīng)用和發(fā)展趨勢(shì)

    接觸溫度傳感器是一種無需與被測(cè)物體接觸即可測(cè)量溫度的傳感器。它具有測(cè)量速度快、精度高、使用方便、安全可靠等特點(diǎn),廣泛應(yīng)用于工業(yè)、醫(yī)療、科研等領(lǐng)域。本文將詳細(xì)介紹
    的頭像 發(fā)表于 06-19 14:34 ?3167次閱讀

    接觸溫度傳感器的特點(diǎn)是什么

    接觸溫度傳感器是一種無需與被測(cè)物體直接接觸即可測(cè)量溫度的傳感器。它具有許多優(yōu)點(diǎn),如測(cè)量速度快、精度高、不受環(huán)境影響等。以下是對(duì)
    的頭像 發(fā)表于 06-19 14:29 ?605次閱讀

    接觸溫度傳感器有哪些

    接觸溫度傳感器是一種無需接觸被測(cè)物體即可測(cè)量其溫度的傳感器。它們廣泛應(yīng)用于工業(yè)、醫(yī)療、科研等領(lǐng)域。本文將詳細(xì)介紹
    的頭像 發(fā)表于 06-19 14:26 ?1480次閱讀

    接觸接觸測(cè)量相關(guān)性的方法

    接觸測(cè)量和接觸測(cè)量是兩種常見的測(cè)量方法,它們?cè)诠I(yè)生產(chǎn)、科學(xué)研究和日常生活中都有廣泛的應(yīng)用。本文將詳細(xì)介紹這兩種測(cè)量方法的基本原理、特
    的頭像 發(fā)表于 06-14 09:24 ?1547次閱讀

    接觸位移傳感器有哪些類型

    接觸位移傳感器是一種無需與被測(cè)物體直接接觸即可測(cè)量其位移的傳感器。它們廣泛應(yīng)用于工業(yè)自動(dòng)化、機(jī)器人技術(shù)、精密測(cè)量等領(lǐng)域。本文將詳細(xì)介紹
    的頭像 發(fā)表于 06-14 09:22 ?2611次閱讀

    微波雷達(dá)探測(cè)器的工作原理、特點(diǎn)及應(yīng)用領(lǐng)域

    微波雷達(dá)探測(cè)器是一種利用微波技術(shù)來檢測(cè)和跟蹤移動(dòng)物體的設(shè)備。它們廣泛應(yīng)用于軍事、航空、航海、交通等領(lǐng)域。本文將詳細(xì)介紹微波雷達(dá)探測(cè)器的工作原
    的頭像 發(fā)表于 05-27 15:52 ?3855次閱讀

    接觸液位傳感器的工作原理

    液位傳感器,作為工業(yè)自動(dòng)化和過程控制中的重要組成部分,廣泛應(yīng)用于各種液體測(cè)量和控制系統(tǒng)中。根據(jù)其工作原理和應(yīng)用場(chǎng)景的不同,液位傳感器可以分為多種類型。其中,接觸液位傳感器以其獨(dú)特的
    的頭像 發(fā)表于 05-24 17:08 ?2835次閱讀

    ST60A3 USB2.0接觸連接套件與ST60A3 UART接觸連接套件有什么區(qū)別?

    ST60A3 USB2.0接觸連接套件與ST60A3 UART接觸連接套件有什么區(qū)別?做
    發(fā)表于 05-23 07:52

    生命體征監(jiān)測(cè)雷達(dá)模組

    SW-UWB-M-A2X2 是一款工作于 UWB 頻段的超寬帶人體監(jiān)測(cè)雷達(dá)模組,可以在設(shè)定區(qū)域內(nèi)以極高的靈敏度接觸感應(yīng)人體的存在,測(cè)量人體的呼吸和心率,長(zhǎng)時(shí)間監(jiān)測(cè)后可以生成
    發(fā)表于 03-06 09:51

    智能家居接觸技術(shù)已成為趨勢(shì)

    電子發(fā)燒友網(wǎng)報(bào)道(文/黃山明)當(dāng)前,接觸技術(shù)已經(jīng)成為智能家居中越來越普及和重要的技術(shù)手段。這一技術(shù)通過無線信號(hào)、電磁波感應(yīng)、雷達(dá)探測(cè)等多種方式實(shí)現(xiàn)設(shè)備與用戶之間的交互或數(shù)據(jù)傳輸,不
    的頭像 發(fā)表于 03-04 07:48 ?3705次閱讀

    微波雷達(dá)液位計(jì)介紹與安裝

    RY-W-LDSWJ毫米波雷達(dá)是專門針對(duì)水位測(cè)距設(shè)計(jì)的,該模塊采用FMCW模式,接觸安裝設(shè)計(jì),體積小巧,結(jié)構(gòu)緊湊。精度高,功耗低,抗干擾能力強(qiáng),適用于湖泊河流、山洪預(yù)警、蓄水池、污
    的頭像 發(fā)表于 02-29 21:08 ?402次閱讀
    <b class='flag-5'>微波</b><b class='flag-5'>雷達(dá)</b>液位計(jì)介紹與安裝