精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

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

一、前言

1.1 項目介紹

項目設(shè)計里用到的全部工具軟件都可以在這里下載

[https://pan.quark.cn/s/145a9b3f7f53]

【1】項目開發(fā)背景

隨著現(xiàn)代生活節(jié)奏的加快,人們對于健康管理的需求日益增長,尤其是對于睡眠健康的關(guān)注度顯著提升。良好的睡眠質(zhì)量不僅關(guān)系到個人的精神狀態(tài),更直接影響著工作和學(xué)習(xí)效率乃至整體生活質(zhì)量。然而,快節(jié)奏的生活壓力、不規(guī)律的生活作息等因素導(dǎo)致越來越多的人遭受睡眠障礙的困擾。傳統(tǒng)的睡眠監(jiān)測方式通常需要佩戴設(shè)備或接觸式傳感器,這可能會干擾到用戶的自然睡眠狀態(tài),從而影響監(jiān)測結(jié)果的準(zhǔn)確性。因此,開發(fā)一種非接觸式的睡眠監(jiān)測系統(tǒng),成為了提高睡眠質(zhì)量研究的重要方向之一。

非接觸式睡眠監(jiān)測技術(shù)的發(fā)展,得益于近年來毫米波雷達技術(shù)的進步。毫米波雷達具有高精度、強穿透力的特點,可以在不直接接觸人體的情況下,精準(zhǔn)地捕捉到人體微動,如呼吸和心跳等細微動作。這種技術(shù)的應(yīng)用,不僅可以避免傳統(tǒng)監(jiān)測手段可能帶來的不適感,還能在用戶不知情的狀態(tài)下進行連續(xù)監(jiān)測,保證了數(shù)據(jù)的真實性和有效性。與此同時,物聯(lián)網(wǎng)技術(shù)的發(fā)展使得數(shù)據(jù)的遠程傳輸與分析成為可能,進一步推動了智能健康監(jiān)測系統(tǒng)的普及。

本項目正是基于這樣的背景下展開的。它利用了60GHz毫米波雷達技術(shù),結(jié)合高性能的STM32微控制器,設(shè)計了一套完整的非接觸式睡眠監(jiān)控系統(tǒng)。該系統(tǒng)不僅能準(zhǔn)確地獲取用戶的睡眠信息,還能通過Wi-Fi連接云端,讓用戶可以通過手機應(yīng)用程序隨時查看自己的睡眠報告。此外,系統(tǒng)還具備異常生理指標(biāo)報警功能,能夠在第一時間提醒用戶注意健康狀況,為用戶提供了一個全方位、智能化的健康管理方案。通過這一創(chuàng)新性的解決方案,期望能夠幫助更多人改善睡眠質(zhì)量,提升生活質(zhì)量。

image-20240910171618588

image-20240910171632403

image-20240910171602544

設(shè)備安裝角度:

image-20240910164203002

【2】設(shè)計實現(xiàn)的功能

(1)人體存在感知與運動感知:通過使用60GHz頻段的毫米波雷達模塊,系統(tǒng)能夠感知房間內(nèi)是否存在人體以及人體的微小運動,如呼吸和心跳的變化。

(2)睡眠狀態(tài)監(jiān)測:系統(tǒng)能夠根據(jù)睡眠過程中身體的運動幅度變化和呼吸心率的變化,實時判斷目標(biāo)的睡眠狀態(tài),并在睡眠周期結(jié)束后提供一個綜合的睡眠評分。

(3)生理指標(biāo)檢測:系統(tǒng)能夠檢測并記錄睡眠者的心率、呼吸頻率等重要生理指標(biāo),這些數(shù)據(jù)有助于分析睡眠質(zhì)量。

(4)遠程數(shù)據(jù)上傳與查看:系統(tǒng)集成了Wi-Fi模塊,可以將監(jiān)測到的睡眠數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺,用戶可以通過智能手機應(yīng)用程序遠程查看每天的睡眠質(zhì)量報告和其他生理指標(biāo)。

(5)異常情況報警:當(dāng)檢測到的生理指標(biāo)超出預(yù)設(shè)的安全閾值時,系統(tǒng)會觸發(fā)報警機制,及時通知用戶或監(jiān)護人可能存在健康風(fēng)險。

(6)本地數(shù)據(jù)顯示:系統(tǒng)配備了1.44寸SPI協(xié)議的TFT LCD顯示屏,用于實時顯示監(jiān)測到的生理指標(biāo)及環(huán)境相關(guān)信息,便于用戶即時查看。

(7)體溫檢測:通過集成MLX90614紅外體溫傳感器,系統(tǒng)能夠檢測人體體溫,并將其作為一項重要的生理參數(shù)納入睡眠質(zhì)量評估體系中。

【3】項目硬件模塊組成

(1)主控單元:選用STM32F103RCT6微控制器作為核心處理單元,負責(zé)接收來自各傳感器的數(shù)據(jù),并處理和控制系統(tǒng)的各項功能。

(2)毫米波雷達模塊:采用60GHz頻段的R60ABD1毫米波雷達模塊,用于非接觸式地檢測人體的存在、呼吸頻率和心率等生理信號。

(3)無線通信模塊:集成ESP8266-Wi-Fi模塊,實現(xiàn)數(shù)據(jù)的無線傳輸功能,確保睡眠數(shù)據(jù)能夠?qū)崟r上傳至華為云物聯(lián)網(wǎng)平臺。

(4)顯示模塊:采用1.44寸TFT LCD顯示屏,分辨率為128x128像素,通過SPI協(xié)議與主控單元通訊,用于顯示監(jiān)測到的生理指標(biāo)和環(huán)境信息。

(5)體溫檢測模塊:采用MLX90614紅外體溫傳感器,用于無接觸地測量人體體溫,提供額外的健康監(jiān)測數(shù)據(jù)。

(6)電源管理模塊:采用外置的5V穩(wěn)壓電壓,包括電源轉(zhuǎn)換電路和電池管理電路,確保整個系統(tǒng)能夠穩(wěn)定運行,并為各個模塊提供所需電壓。

(7)報警模塊:設(shè)計蜂鳴器聲音形式的報警裝置,當(dāng)系統(tǒng)檢測到異常生理指標(biāo)時,能夠及時提醒用戶。

【4】需求總結(jié)

項目:基于STM32+微波雷達設(shè)計的非接觸式睡眠監(jiān)控系統(tǒng)
?
1. 可以實現(xiàn) 人體存在感知、人體運動感知、根據(jù)睡眠過程中的身體運動幅度變化和呼吸心率變化,對目標(biāo)的睡眠狀態(tài)、呼吸心跳頻率進行實時判斷,在一段睡眠過程結(jié)束后輸出睡眠評分呼吸、能夠檢測心率、睡眠時長、睡眠質(zhì)量等生理指標(biāo)
(此功能采用60GHz頻段的毫波雷達來實現(xiàn))
2. 可以實現(xiàn)能將數(shù)據(jù)通過
    ESP8266-WIFI上傳到華為云物聯(lián)網(wǎng)云平臺、設(shè)計手機APP可以遠程查看每天的睡眠質(zhì)量、生理指標(biāo)、環(huán)境相關(guān)信息。
3. 可以實現(xiàn)當(dāng)檢測到的生理指標(biāo)數(shù)據(jù)超過閾值時,系統(tǒng)發(fā)出報警提醒。 
4. 可以實現(xiàn)能在本地LCD顯示屏顯示監(jiān)測到的生理指標(biāo)、環(huán)境相關(guān)信息。
5. 支持檢測人體體溫。
?
    
硬件選型:
主控芯片選擇 STM32F103RCT6
LCD顯示屏采用1.44寸 SPI協(xié)議的 TFT顯示屏,分辨率是128x128。
人體體溫檢測采用MLX90614紅外體溫傳感器。
人體的呼吸、心率、采用60G毫米波 生物感知雷達R60ABD1模塊來實現(xiàn)檢測。呼吸睡眠雷達基于毫米波雷達體制實現(xiàn)人體生物存在感知及人體運動感知,持續(xù)記錄人體存在情況,根據(jù)睡眠
過程中的身體運動幅度變化和呼吸心率變化,對目標(biāo)的睡眠狀態(tài)、呼吸心跳頻率進行實時判斷,在一段睡眠過程結(jié)
束后輸出睡眠評分,根據(jù)相關(guān)睡眠參數(shù)的輸出結(jié)合到健康康養(yǎng)的應(yīng)用上。

1.2 設(shè)計思路

設(shè)計思路源于對現(xiàn)代人睡眠健康需求的關(guān)注以及對現(xiàn)有睡眠監(jiān)測技術(shù)局限性的思考。在設(shè)計之初,注意到傳統(tǒng)的睡眠監(jiān)測手段往往依賴于接觸式的穿戴設(shè)備,這種方式雖然能夠提供較為精確的數(shù)據(jù),但卻有可能影響用戶的自然睡眠狀態(tài)。因此,設(shè)計目標(biāo)是創(chuàng)造一個非侵入式的睡眠監(jiān)控系統(tǒng),能夠讓用戶在自然的睡眠環(huán)境中得到準(zhǔn)確而有效的監(jiān)測。

為了實現(xiàn)這一目標(biāo),選擇了60GHz頻段的毫米波雷達技術(shù)作為主要的監(jiān)測手段。毫米波雷達具有非接觸、高分辨率和強穿透性等特點,非常適合用來監(jiān)測人體微弱的生理信號,如呼吸和心跳。通過算法優(yōu)化,能夠從雷達回波中提取出穩(wěn)定的呼吸和心跳信號,并據(jù)此評估睡眠質(zhì)量和生理指標(biāo)。

考慮到用戶體驗的重要性,決定將系統(tǒng)與互聯(lián)網(wǎng)技術(shù)相結(jié)合,通過ESP8266-Wi-Fi模塊將睡眠數(shù)據(jù)上傳至云端,方便用戶通過智能手機應(yīng)用程序隨時隨地查看自己的睡眠報告。同時,為了應(yīng)對突發(fā)狀況,設(shè)計了閾值報警機制,當(dāng)檢測到異常生理指標(biāo)時,系統(tǒng)能夠立即向用戶發(fā)出警告,以確保用戶的安全。

硬件選型方面,選擇了性能穩(wěn)定且廣泛使用的STM32F103RCT6作為主控芯片,以確保系統(tǒng)的可靠性和可擴展性。為了直觀展示數(shù)據(jù),選用了1.44寸的TFT LCD顯示屏,它可以清晰地顯示監(jiān)測到的各項生理指標(biāo)和環(huán)境信息。此外,還加入了MLX90614紅外體溫傳感器,以便系統(tǒng)能夠監(jiān)測用戶的體溫變化,進一步完善健康監(jiān)測功能。

總體的設(shè)計思路是在不干擾用戶正常生活的情況下,利用先進的毫米波雷達技術(shù)和物聯(lián)網(wǎng)平臺,創(chuàng)建一個能夠全天候監(jiān)測睡眠狀態(tài)、生理指標(biāo),并及時反饋給用戶的智能系統(tǒng)。這樣不僅能夠幫助用戶更好地了解自己的睡眠質(zhì)量,還能在出現(xiàn)異常時提供及時的幫助,從而提升整體的生活品質(zhì)。

1.3 系統(tǒng)功能總結(jié)

功能類別描述
人體存在感知利用60GHz毫米波雷達檢測房間內(nèi)是否有人存在。
運動感知感知人體的微小運動,如呼吸和心跳。
睡眠狀態(tài)監(jiān)測根據(jù)身體運動幅度變化和呼吸心率變化實時判斷睡眠狀態(tài)。
生理指標(biāo)檢測記錄并分析心率、呼吸頻率等重要生理指標(biāo)。
遠程數(shù)據(jù)上傳通過ESP8266-Wi-Fi模塊將監(jiān)測數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺。
移動端查看用戶可以通過手機應(yīng)用程序遠程查看睡眠質(zhì)量報告和其他生理指標(biāo)。
異常報警當(dāng)檢測到的生理指標(biāo)超過設(shè)定閾值時,系統(tǒng)會發(fā)出報警提醒。
本地數(shù)據(jù)顯示通過1.44寸TFT LCD顯示屏實時顯示監(jiān)測到的生理指標(biāo)和環(huán)境信息。
體溫檢測使用MLX90614紅外體溫傳感器檢測人體體溫,并將其納入健康監(jiān)測數(shù)據(jù)中。

1.4 開發(fā)工具的選擇

【1】設(shè)備端開發(fā)

STM32的編程語言選擇C語言,C語言執(zhí)行效率高,大學(xué)里主學(xué)的C語言,C語言編譯出來的可執(zhí)行文件最接近于機器碼,匯編語言執(zhí)行效率最高,但是匯編的移植性比較差,目前在一些操作系統(tǒng)內(nèi)核里還有一些低配的單片機使用的較多,平常的單片機編程還是以C語言為主。C語言的執(zhí)行效率僅次于匯編,語法理解簡單、代碼通用性強,也支持跨平臺,在嵌入式底層、單片機編程里用的非常多,當(dāng)前的設(shè)計就是采用C語言開發(fā)。

開發(fā)工具選擇Keil,keil是一家世界領(lǐng)先的嵌入式微控制器軟件開發(fā)商,在2015年,keil被ARM公司收購。因為當(dāng)前芯片選擇的是STM32F103系列,STMF103是屬于ARM公司的芯片構(gòu)架、Cortex-M3內(nèi)核系列的芯片,所以使用Kile來開發(fā)STM32是有先天優(yōu)勢的,而keil在各大高校使用的也非常多,很多教科書里都是以keil來教學(xué),開發(fā)51單片機、STM32單片機等等。目前作為MCU芯片開發(fā)的軟件也不只是keil一家獨大,IAR在MCU微處理器開發(fā)領(lǐng)域里也使用的非常多,IAR擴展性更強,也支持STM32開發(fā),也支持其他芯片,比如:CC2530,51單片機的開發(fā)。從軟件的使用上來講,IAR比keil更加簡潔,功能相對少一些。如果之前使用過keil,而且使用頻率較多,已經(jīng)習(xí)慣再使用IAR是有點不適應(yīng)界面的。

image-20221210225339928

【2】上位機開發(fā)

上位機的開發(fā)選擇Qt框架,編程語言采用C++;Qt是一個1991年由Qt Company開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,并且允許真正地組件編程。Qt能輕松創(chuàng)建具有原生C++性能的連接設(shè)備、用戶界面(UI)和應(yīng)用程序。它功能強大且結(jié)構(gòu)緊湊,擁有直觀的工具和庫。

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ā),最初作為一款簡單易用的無線模塊推向市場,但因其強大的功能和靈活性迅速獲得了開發(fā)者們的青睞。ESP8266內(nèi)置了Tensilica L106超低功耗32位微處理器,主頻最高可達160MHz,并且擁有512KB的SRAM,這使得它不僅能夠作為一個簡單的Wi-Fi模塊使用,還可以作為獨立的微控制器來執(zhí)行復(fù)雜的任務(wù)。

ESP8266模塊支持IEEE 802.11 b/g/n標(biāo)準(zhǔn),能夠工作在2.4GHz頻段上。它具有多種工作模式,包括Station模式(客戶端)、Access Point模式(熱點)以及Station+AP模式(同時作為客戶端和熱點)。這意味著它可以連接到現(xiàn)有的Wi-Fi網(wǎng)絡(luò),也可以自己創(chuàng)建一個Wi-Fi熱點供其他設(shè)備連接,極大地增加了其在不同應(yīng)用場景中的適用性。

對于開發(fā)者而言,ESP8266的一個重要優(yōu)勢在于其豐富的開發(fā)資源和支持。樂鑫科技提供了詳細的開發(fā)文檔,包括硬件接口說明、固件升級指南和API參考手冊等。此外,ESP8266還支持多種編程語言,如C/C++和Lua,同時還有成熟的開發(fā)框架如Arduino IDE的支持,使得開發(fā)者能夠快速上手,并利用各種庫函數(shù)簡化開發(fā)流程。

ESP8266的低功耗特性也是一大亮點,它提供了多種省電模式,可以根據(jù)實際應(yīng)用需求調(diào)整工作狀態(tài),以延長電池壽命。這對于那些依賴電池供電的物聯(lián)網(wǎng)設(shè)備來說尤為重要。

ESP8266憑借其出色的性價比、強大的功能、易于開發(fā)的特性以及廣泛的社區(qū)支持,已經(jīng)成為許多DIY項目、智能家居設(shè)備和小型物聯(lián)網(wǎng)應(yīng)用的理想選擇。無論是作為獨立的微控制器還是作為Wi-Fi模塊,ESP8266都能夠滿足大多數(shù)物聯(lián)網(wǎng)項目的需求。

【2】MLX90614紅外體溫傳感器

MLX90614紅外體溫傳感器是由Melexis公司生產(chǎn)的一款高性能、非接觸式溫度測量傳感器。這款傳感器集成了紅外溫度測量功能與環(huán)境溫度測量功能于一體,適用于需要快速、準(zhǔn)確測量物體表面溫度的應(yīng)用場合。由于其非接觸式的特點,MLX90614特別適合用于醫(yī)療領(lǐng)域,如監(jiān)測人體體溫,以及其他工業(yè)或商業(yè)用途,例如食品溫度檢測、設(shè)備過熱保護等。

MLX90614的工作原理基于紅外輻射理論。所有物體都會發(fā)射紅外輻射,其強度與物體的溫度成正比。MLX90614通過檢測目標(biāo)物體發(fā)射的紅外輻射能量,并結(jié)合傳感器所在環(huán)境的溫度,計算出目標(biāo)物體的表面溫度。這款傳感器具有較高的靈敏度,能夠檢測到非常微小的溫度變化,并且具有較好的響應(yīng)速度。

從硬件角度來看,MLX90614采用了SMD(Surface Mount Device)封裝,使其易于集成到各種設(shè)備中。它具有數(shù)字I2C接口,可以方便地與微控制器或其他數(shù)字系統(tǒng)進行通信。此外,MLX90614還提供了不同的視場角版本,允許用戶根據(jù)具體的應(yīng)用需求選擇最適合的角度,從而獲得最準(zhǔn)確的測量結(jié)果。

在使用MLX90614時,需要注意幾個關(guān)鍵參數(shù)。首先是距離系數(shù)(Distance-to-Spot Size Ratio),即傳感器與目標(biāo)之間的距離與目標(biāo)面積直徑之比。這個參數(shù)決定了傳感器的有效測量區(qū)域大小。其次是傳感器的溫度測量范圍,一般為-70°C至+380°C,足以覆蓋大部分日常應(yīng)用。此外,MLX90614還具備較高的測溫精度,通常在±0.5°C左右,這使得它在醫(yī)療和工業(yè)應(yīng)用中具有很高的實用性。

對于開發(fā)人員來說,MLX90614的另一個優(yōu)點是其易于集成。Melexis提供了詳盡的技術(shù)文檔和支持,包括電路設(shè)計指南、編程示例等資源,使得開發(fā)者能夠快速地將MLX90614集成到他們的產(chǎn)品中。此外,市面上也有許多現(xiàn)成的開發(fā)板和庫文件,可以幫助開發(fā)者簡化開發(fā)流程,加速產(chǎn)品的上市時間。

綜上所述,MLX90614紅外體溫傳感器以其高精度、非接觸式測量的特點,在多個行業(yè)中得到了廣泛應(yīng)用,尤其是在需要快速、準(zhǔn)確溫度讀數(shù)的場合。

【3】微波雷達模塊

生物感知雷達R60ABD1模塊是一款基于60GHz毫米波雷達技術(shù)的產(chǎn)品,專為人體呼吸心率感知及睡眠評估而設(shè)計。它采用FMCW(調(diào)頻連續(xù)波)雷達體制,能夠針對特定場合內(nèi)的人員進行呼吸心率頻率的輸出,并結(jié)合長時間的睡眠姿態(tài)體動采集,及時上報人員的睡眠狀態(tài)和歷史記錄。模塊的一發(fā)三收天線形式使得它適合于置頂安裝模式,能夠精準(zhǔn)掃描人體全身的動作層析,實現(xiàn)人體動靜態(tài)時的睡眠探測和不同姿態(tài)下的呼吸心率采集。

該模塊的工作原理基于雷達天線發(fā)射電磁波信號,并接收目標(biāo)反射回來的回波信號。通過雷達處理器解析不同接收天線回波信號的波形參量之間的相位差和能量變化,從而反饋目標(biāo)運動的微動能量變化、距離、方向和速度等信息。這使得R60ABD1模塊能夠探測目標(biāo)的運動狀態(tài)和胸腔呼吸起伏的頻次狀態(tài)。在雷達探測范圍內(nèi),即便是輕微的手部晃動或呼吸引起的胸腔起伏等微小運動,也能夠被模塊捕捉到。

R60ABD1模塊具有多種功能,包括運動檢測、呼吸探測、呼吸心率頻率采集等功能。模塊能夠檢測到諸如走動或小幅度手晃動等運動,并觸發(fā)有人狀態(tài)的指示。當(dāng)人處于靜止?fàn)顟B(tài)時,模塊也能檢測到由呼吸引起的胸腔起伏,并維持有人狀態(tài)的輸出。更重要的是,它能統(tǒng)計呼吸心跳引起的胸腔起伏,并輸出每分鐘的呼吸心跳數(shù)值。這些功能使得該模塊在全屋智能、智能家電、區(qū)域人員探測和睡眠看護等領(lǐng)域有著廣泛的應(yīng)用前景。

該模塊的電氣特性包括工作電壓在4.6V至6V之間,典型工作電流為93mA,工作溫度范圍從-20°C至+60°C,存儲溫度范圍則從-40°C至+105°C。其RF性能方面,工作頻率位于61GHz至61.5GHz區(qū)間,發(fā)射功率不超過6dBm。天線增益為4dBi,水平和垂直波束寬度均為20°(-3dB點)。

R60ABD1模塊提供了標(biāo)準(zhǔn)的UART通信接口,并支持涂鴉協(xié)議,便于與其他設(shè)備集成。模塊尺寸小巧,體積僅為35mm×31mm×7.5mm,并配有雙排插針接口,接口間距為2.0mm。這些接口包括電源輸入、地、串口接收和發(fā)送端、以及多個可定義的通用I/O引腳。其中,部分引腳可用于輸出有人/無人狀態(tài)、活躍/靜止?fàn)顟B(tài)、體征參數(shù)等信息。

此外,模塊還支持多種參數(shù)設(shè)置,如人體存在開關(guān)、呼吸探測開關(guān)、心跳探測開關(guān)、睡眠探測開關(guān)以及探測模式切換開關(guān)(實時探測/睡眠模式)。這些設(shè)置使得模塊可以根據(jù)不同應(yīng)用場景的需求進行靈活配置。在安裝方面,R60ABD1模塊推薦傾斜安裝,并且平行于掃描面的距離不超過1.5米。特別是用于睡眠呼吸心跳探測時,雷達應(yīng)安裝在床頭正上方1米的高度,向下傾斜45°對著床中間,確保雷達與人體胸腔的距離在1.5米范圍內(nèi),以確保雷達正常進行探測。

1.6 微波雷達安裝說明

生物感知雷達R60ABD1模塊的安裝需要遵循特定的指導(dǎo)原則以確保其最佳性能。首先,雷達模塊應(yīng)該朝向為絲印標(biāo)識的方向進行安裝,這意味著在安裝時需要確保雷達的正面朝向正確。為了達到理想的探測效果,R60ABD1雷達模塊建議采用傾斜安裝的方式,傾斜角度應(yīng)在30到45度之間。這種安裝方式有助于雷達的波束覆蓋到所需的探測區(qū)域,并且可以減少因環(huán)境因素引起的誤報。

在確定雷達的具體安裝位置時,建議將雷達安裝在床頭正上方大約1米的高度處,這樣可以確保雷達的主要波束能夠覆蓋到床的中心區(qū)域。這樣做是為了確保雷達可以有效地探測到床上人的呼吸和心跳活動,同時也能夠監(jiān)測到人體的其他微動。安裝高度的選擇也是基于雷達波束覆蓋范圍的考慮,以確保人體存在檢測的最大距離為約2.5米,而人體呼吸頻率檢測的最大距離約為1.5米。

除了正確的安裝位置和角度外,還需要注意避免雷達前方出現(xiàn)明顯的金屬或電解質(zhì)遮擋物。這是因為毫米波雷達的探測機制依賴于雷達波的反射,如果存在金屬或電解質(zhì)遮擋物,則可能會影響雷達波的反射路徑,從而影響到雷達的探測準(zhǔn)確性。因此,在安裝雷達時,應(yīng)確保雷達前方?jīng)]有諸如金屬窗簾條、風(fēng)扇、空調(diào)電機等潛在的干擾源。

在實際安裝過程中,還應(yīng)當(dāng)注意雷達模塊的安裝高度和角度會影響到其探測效果。為了使雷達的主波束能夠覆蓋到整個睡眠區(qū)域,雷達的安裝高度應(yīng)該保持在與床面的高度差在0.9米左右,誤差不超過0.2米。同時,雷達模塊的安裝需要保證其前方?jīng)]有明顯的遮擋物,尤其是金屬材質(zhì)的物體,因為這些物體可能會反射雷達波,造成干擾。

為了確保雷達能夠正常工作,安裝完成后還需注意雷達模塊的供電穩(wěn)定性。雷達模塊對電源品質(zhì)有一定的要求,需要無門限毛刺或紋波現(xiàn)象,并且需要有效屏蔽來自附近設(shè)備的電源噪聲。為了保證模塊內(nèi)部VCO電路的正常工作,雷達模塊需要+5V到+6V的供電,且電壓紋波不能超過100mV。外部電源還需要提供足夠的電流輸出能力和瞬態(tài)響應(yīng)能力,以防止由于電源不穩(wěn)定導(dǎo)致的探測距離縮短或誤報率增加等問題。

1.7 微波雷達的完整功能概述(快速上手)

R60ABD1呼吸睡眠雷達模組是一款基于60GHz毫米波雷達技術(shù)設(shè)計的非接觸式生物感知設(shè)備,主要用于人體存在感知及運動感知。它能夠根據(jù)睡眠過程中身體運動幅度變化和呼吸心率變化,實時判斷目標(biāo)的睡眠狀態(tài)、呼吸心跳頻率,并在睡眠結(jié)束后輸出睡眠評分。該模組的探測功能不受溫度、濕度、噪聲氣流、塵埃、光照和人體完全靜止等因素的影響,適合安裝在室內(nèi)頂部使用。

模組具備多種功能,包括有人/無人狀態(tài)檢測、人體靜止/活躍狀態(tài)切換檢測、人體距離主動上報、體動幅度參數(shù)輸出、人體方位上報、心跳數(shù)值及波形輸出、呼吸數(shù)值及波形輸出、入床/離床狀態(tài)判斷、睡眠狀態(tài)(清醒/淺睡/深睡)識別、清醒/淺睡/深睡時長統(tǒng)計、睡眠質(zhì)量評分、睡眠異常上報、異常掙扎上報、無人計時上報以及睡眠質(zhì)量評級上報等。這些功能通過不同的數(shù)據(jù)點(DP)以特定的時間間隔或狀態(tài)變化時上報。

為了確保雷達的準(zhǔn)確探測,模組的安裝需要遵循一定的規(guī)范。雷達應(yīng)該安裝在床頭正上方1米的高度,向下傾斜30至45度,以確保主波束能夠覆蓋到睡眠區(qū)域。此外,雷達前方不應(yīng)有明顯的金屬或電解質(zhì)遮擋物,以免影響探測效果。在安裝過程中,還需確認雷達探測范圍內(nèi)是否存在干擾源,如空調(diào)、風(fēng)扇等,并盡可能移除這些干擾源。

模組的引腳包括電源輸入、地、串口接收與發(fā)送端、以及若干備用擴展引腳。其中,部分引腳可以根據(jù)用戶需求重新定義功能。為了便于用戶操作,在官方的文檔還介紹了如何準(zhǔn)備必要的工具,如TTL串口工具、杜邦線、PC電腦、串口助手終端和Radar-EVB demo板,并給出了上電及工作的數(shù)據(jù)上報規(guī)則和睡眠模式檢測邏輯。

在官方的文檔最后提供了主要功能測試指引,包括睡眠質(zhì)量狀態(tài)判斷測試、入離床狀態(tài)判斷測試、離床狀態(tài)判斷測試、呼吸頻率測試以及心跳頻率測試等。每項測試都有明確的操作步驟和判定標(biāo)準(zhǔn),以幫助用戶驗證模組的功能是否正常。此外,官方的文檔還對體動幅度參數(shù)的輸出進行了詳細說明,并附帶了相關(guān)的測試表格格式,便于用戶記錄和分析測試結(jié)果。

二、微波雷達調(diào)試過程

2.1 接線說明

image-20240126145448206

2.2 安裝說明

image-20240126145600771

傾斜安裝: * 確保雷達探測準(zhǔn)確性,建議安裝在床頭上方,以 45°斜向下安裝! R60ABD1-呼吸睡眠雷達傾斜安裝,傾斜角度為 30~45°,安裝在床頭上方,雷達安裝高度建議為高于床面 0.8-1m;保證雷達主波束覆蓋探測區(qū)域;雷達前面無明顯(金屬/電解質(zhì))遮擋物及覆蓋物。受雷達安裝高度及雷達波束范圍影響,在該安裝模式下,人體存在檢測最大距離 L3 ≈ 2.5 米;睡眠檢測最大距離 L2 ≈ 2.5 米;人體呼吸頻率檢測最大距離 L1 ≈ 1.5 米。

image-20240126145701021

image-20240126150859704

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

將60G毫米波雷達模塊與電腦連接,調(diào)試模塊是否正常可以運行,60G毫米波雷達模塊默認的波特率是115200

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

image-20240126211201418

image-20240126211215514

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

image-20240126212034175

睡眠雷達上位機:

image-20240126212151180

image-20240126212338673

三、華為云服務(wù)器部署與上位機APP開發(fā)

這里直接看視頻,可以了解的更加清楚。

(1)華為云物聯(lián)網(wǎng)開發(fā)(一)設(shè)備上云: [https://www.bilibili.com/video/BV1Md4y1v7m5]

(2)華為云物聯(lián)網(wǎng)云平臺對應(yīng)的上位機開發(fā)步驟: [https://www.bilibili.com/video/BV1mr421c75S]

四、STM32代碼開發(fā)(微波雷達模塊數(shù)據(jù)處理)

4.1 微波雷達數(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升級
#define CMD_WORK_STATE 0x05         //工作狀態(tài)
#define CMD_RADAR_DETECT_RANGE 0x07 //雷達探測范圍
#define CMD_BODY_EXIST_DETECT 0x80  //人體存在檢測
#define CMD_BREATH_DETECT 0x81      //呼吸檢測
#define CMD_SLEEP_DETECT 0x84       //睡眠檢測
#define CMD_HEART_DETECT 0x85       //心率檢測
//幀尾
#define END1 0x54
#define END2 0x43
?
/* 枚舉讀取數(shù)據(jù)報文的狀態(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;   //有人無人檢測標(biāo)志
    uint8_t work_state;        //運動狀態(tài)
    uint8_t body_move_param;   //體動參數(shù)
    uint16_t body_distance;    //人體距離
    uint8_t body_direction[3]; //人體方位
} body_exist_detect_t;
?
//呼吸檢測功能
typedef struct
{
    uint8_t breath_detect_switch; //開關(guān)呼吸功能
    uint8_t breath_detect_state;  //呼吸檢測狀態(tài)
    uint8_t breath_detect_value;  //呼吸檢測值
    uint8_t breath_wave_data[5];  //呼吸波形
} breath_detect_t;
?
//睡眠評分
typedef struct
{
    uint8_t sleep_detail_exist; //睡眠詳細狀態(tài)
    uint8_t sleep_detail_state; //睡眠詳細評分
?
    uint8_t sleep_detail_score;            //睡眠評分
    uint16_t sleep_detail_time;            //睡眠時間
    uint8_t sleep_detail_awake;            //清醒時長占比
    uint8_t sleep_detail_light;            //淺睡時長占比
    uint8_t sleep_detail_deep;             //深睡時長占比
    uint8_t sleep_detail_away;             //離床時長占比
    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;      //大動作次數(shù)
    uint8_t sleep_detail_turn_over_S;      //小動作次數(shù)
} sleep_detail_t;
?
//睡眠檢測功能
typedef struct
{
    uint8_t sleep_detect_switch; //開關(guān)睡眠功能
    uint8_t sleep_bed_state;     //入床/離床狀態(tài)
    uint8_t sleep_detect_state;  //睡眠檢測狀態(tài)
?
    uint8_t sleep_wake_hour;  //清醒時間
    uint8_t sleep_light_hour; //淺睡時長
    uint8_t sleep_deep_hour;  //深睡時長
?
    uint8_t sleep_score;                 //睡眠質(zhì)量評分
    sleep_detail_t sleep_score_detail;   //睡眠質(zhì)量評分詳情
    sleep_detail_t sleep_score_detail_1; //睡眠質(zhì)量評分詳情1
    uint8_t sleep_score_detail_err;      //睡眠質(zhì)量評分詳情2
} sleep_detect_t;
?
//心率檢測功能
typedef struct
{
    uint8_t heart_detect_switch; //開關(guān)心率功能
    uint8_t heart_detect_value;  //心率檢測值
    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 微波雷達數(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ù)存儲數(shù)組
    uint8_t rx_data[10];
?
    uint16_t rx_dategram_len;
    while (size)
    {
        switch (rx_datagram_state)
        {
        case IDLE: //在空閑時,判斷是否讀取幀頭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ù)據(jù)長度
        {
            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ù)長度后,保存數(shù)據(jù)
        {
            if (size < (int)rx_dategram_len) //判斷數(shù)據(jù)包是否完整
            {
                rx_datagram_state = IDLE;
                return;
            }
            uint8_t readlen = rx_dategram_len; //數(shù)據(jù)包長度
            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; //校驗和
            }
            // TODO 使用上面操作,可以直接操作rx_data指針,不用拷貝數(shù)據(jù)到rx_data數(shù)組中
            for (uint8_t i = 0; i < rx_dategram_len; i++) //將數(shù)據(jù)存儲到數(shù)組中
            {
                rx_data[i] = tmp[i];
            }
?
            rx_datagram_state = SEEN_DATA;
            buff++;
        }
        break;
?
        case SEEN_DATA: //讀取數(shù)據(jù)后,判斷校驗和,根據(jù)數(shù)據(jù)、控制字、命令字讀取狀態(tài)
        {
            uint8_t getsum = *buff;
?
            //判斷校驗和是否正確
            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升級
                {
                    printf("MODE_SEND_OTAn");
                }
                break;
?
                case MODE_SEND_WORK_STATE: //工作狀態(tài)
                {
                    printf("MODE_SEND_WORK_STATEn");
                }
                break;
?
                case MODE_SEND_RADAR_DETECT_RANGE: //雷達檢測范圍
                {
                    printf("MODE_SEND_RADAR_DETECT_RANGEn");
                }
                break;
?
                case MODE_SEND_BODY_EXIST_DETECT: //人體存在檢測
                {
                    data_change.data_change_body_exist = 1;
                    switch (command)
                    {
                    case 1:
                    { //檢測人體存在
                        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:
                    { //運動狀態(tài)
                        body_exist_detect.work_state = rx_data[0];
                        printf("Move State:%dn", body_exist_detect.work_state);
                    }
                    break;
?
                    case 3:
                    { //運動值
                        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: //呼吸檢測
                {
                    data_change.data_change_breath = 1;
                    switch (command)
                    {
                    case 1:
                    {
                        //呼吸檢測狀態(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: //睡眠檢測
                {
                    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:
                    { //清醒時長
                        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:
                    { //淺睡時長
                        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:
                    { //深睡時長
                        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ì)量評分
                        sleep_detect.sleep_score = rx_data[0];
                        printf("Sleep Score:%dn", sleep_detect.sleep_score);
                    }
                    break;
?
                    case 0x0c:
                    { //睡眠檢測結(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:
                    { //異常檢測
                        sleep_detect.sleep_score_detail_err = rx_data[0];
                    }
                    break;
                    }
                }
                break;
?
                case MODE_SEND_HEART_DETECT: //心率檢測
                {
                    data_change.data_change_heart = 1;
                    switch (command)
                    {
                    case 0:
                    { //開關(guān)心率檢測
                    }
                    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: //讀取校驗后,判斷幀尾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é)

本項目開發(fā)一種非接觸式的睡眠監(jiān)控系統(tǒng),該系統(tǒng)利用先進的60GHz毫米波雷達技術(shù)和STM32微控制器,實現(xiàn)了對人體在睡眠過程中的存在感知、運動感知以及生理指標(biāo)如呼吸頻率、心率的實時監(jiān)測。系統(tǒng)能夠自動評估睡眠質(zhì)量,并在用戶睡眠周期結(jié)束時提供睡眠評分。為了確保用戶能夠在任何地點了解自己的睡眠狀況,系統(tǒng)集成了Wi-Fi模塊,可以將收集到的數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺,并通過專門設(shè)計的移動應(yīng)用程序供用戶遠程訪問。此外,系統(tǒng)還具備超閾值報警功能,當(dāng)檢測到異常的生理指標(biāo)時會發(fā)出警報提醒。本地1.44寸TFT LCD顯示屏用于實時顯示監(jiān)測到的信息,包括生理指標(biāo)和環(huán)境數(shù)據(jù)。為了全面監(jiān)測用戶的健康狀況,系統(tǒng)還加入了MLX90614紅外體溫傳感器來檢測人體體溫。通過集成多種傳感器和技術(shù),該項目為健康管理和智能家居應(yīng)用提供了有力支持。

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    75

    瀏覽量

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

    關(guān)注

    21

    文章

    3860

    瀏覽量

    173495
  • STM32
    +關(guān)注

    關(guān)注

    2266

    文章

    10871

    瀏覽量

    354786
  • 微波雷達
    +關(guān)注

    關(guān)注

    4

    文章

    87

    瀏覽量

    21738
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    接觸測量傳感器有哪些特點

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

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

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

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

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

    接觸溫度傳感器的特點是什么

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

    接觸溫度傳感器有哪些

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

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

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

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

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

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

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

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

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

    生命體征監(jiān)測雷達模組

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

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

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

    微波雷達液位計介紹與安裝

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

    同樣是運動感應(yīng),微波雷達感應(yīng)技術(shù)和紅外感應(yīng)技術(shù)有什么區(qū)別?

    同樣是運動感應(yīng),微波雷達感應(yīng)技術(shù)和紅外感應(yīng)技術(shù)有什么區(qū)別? 微波雷達感應(yīng)技術(shù)和紅外感應(yīng)技術(shù)都是常見的運動感應(yīng)技術(shù),它們可以應(yīng)用于多種領(lǐng)域,如安防監(jiān)控
    的頭像 發(fā)表于 12-12 14:37 ?1145次閱讀