康楚陽,邵乙飛,陳明蒂,張景越,冉志堅
(1. 上海工程技術大學機械與汽車工程學院,上海 201620;2. 上海工程技術大學材料學院,上海 201620)
隨著科技的不斷發展與社會的不斷進步,健康已經成為人們生活中越來越重視的話題。比如近些年來科技廠商們都在其穿戴設備上添加了關于健康檢測的模塊。以Apple Watch 為例,近年來Apple Watch 的關注度越來越高,其過半的市占比就可以看出用戶的肯定與追捧。第一代Apple Watch 以“高端、奢華”為賣點,不過市場反應不積極、銷量一般。其后的第二代、第三代產品逐漸轉向以“健康、運動”為賣點,將睡眠檢測、運動數據記錄以及心率加入其互動系統中,而第四代產品更是將血氧檢測加入其中,并為女性用戶專門開發了經期檢測系統,更加關注呵護用戶的健康。可見圍繞“科技與健康”這一主題,有相當大的空間進行實踐與創新。
以此為起點,本項目組通過討論并閱讀相關文章,發現“睡眠問題”也是一個困擾很多人的問題,而打鼾是討論最多的話題。通過前期制作相關問卷,統計總計200份的問卷調查報告,本項目組認為“打鼾”在某種程度上已經成為現在寢室的一個難題。基于網絡上已經出現的相關文獻,本項目組在現有算法的基礎上進行改進,基于STM32 單片機設計了一款睡眠檢測裝置。
打鼾是指睡眠中因上呼吸道狹窄使懸雍垂發生振動而發出的鼾聲,在日常生活中非常常見。打鼾的原因有很多,上了年紀的人幾乎都有打鼾的癥狀,同時飲酒、吸煙、不恰當的睡眠姿勢以及睡眠障礙也會成為打鼾的原因之一。打鼾帶來的危害有很多,對于年輕人,可能會出現白天嗜睡、乏力、注意力不集中、頭痛、工作能力下降等癥狀,對于老年人常伴有睡眠呼吸暫停綜合征的出現,因此對個人健康有一定的不良影響。資料顯示打鼾可以通過采取一些措施來緩解,比如在打鼾時由他人或外在裝置輕推打鼾者,使其改變睡覺時的體位,可使打鼾得到緩解。
本文基于STM32F103C8T6 這款單片機設計了可以監測穿戴者睡覺時所發出的聲音分貝并做出一定振動輸出的裝置。其中STM32F103C8T6單片機負責將音頻檢測模塊采集的數據處理后數字化,再用該數據與預先設置好的數字范圍做對比,如果時間長達30 秒及以上,則通過振動馬達的輸出振動穿戴者的手臂使其翻身,從而達到止鼾的目的。
止鼾裝置模塊如圖1所示。

圖1 裝置模塊
STM32單片機是ST公司基于ARM Cortex-M內核開發的32 位微控制器,STM32 單片機常應用于嵌入式領域,如智能車、無人機、機器人、無線通信、物聯網、工業控制等產品。STM32單片機主要包括1 個ARM Cortex-M 內核、儲存器和外設。通過接口與不同的外設進行連接,實現和滿足不同的需求與開發。
考慮到成本以及裝置的運行系統的穩定,項目組采用STM32F103C8T6 控制芯片,一款增強型的單片機。內核為ARM Cortex-M3,最高工作頻率為72 Mhz,1.25 MIPS/MHz。片上集成32~512 KB 的Flash 存儲器。6~64 KB 的SRAM存儲器。2.0~3.6 V 的電源供電和I/O 接口的驅動電壓。上電復位(POR)、掉電復位(PDR)和可編程的電壓探測器(PVD)。擁有48 個引腳,屬于中容量產品。通過GPIO 輸入協議,將音頻檢測模塊與STM32 單片機進行連接。接受音頻檢測模塊并將其數字化,判斷其是否在實現所設定的范圍內,判定結果后,通過GPIO 輸出協議,輸出脈沖頻率。主控制器所實現的原理即通過應用統一的智能化平臺,實現各個獨立子系統的有機連接,最終形成一個能及時進行信息交換和管控的網絡。
該功能模塊指的是聲音傳感器,包括1 個開關指示燈、電位器、信號輸出、電源負極、電源正極(3.3~5 V)和一個電源LED 指示燈。音頻檢測模塊的作用是對環境聲音強度敏感,作為檢測周圍聲音強度的裝置。模塊在環境聲音強度達不到設定閾值時,OUT 輸出高電平,當外界環境聲音強度超過設定閾值時,模塊OUT 輸出低電平。通過小板數字量輸出OUT 與STM32F103C8T6 直接相連,通過單片機來檢測高低電平,由此來檢測環境聲音。
該功能模塊指的是振動傳感器,包括1 個靈敏度調節電位器、開關信號輸出、電源正極3.3~5 V、電源負極、3.1 mm 可鎖3.0 螺絲。其中需注意的是開關信號指示燈亮時輸出低電平、不亮則輸出高電平、信號輸出的電平接近電源壓。振動模塊在不振動時,振動開關呈斷開狀態,輸出端輸出高電平,綠色指示燈不亮;振動時,振動開關瞬間導通,輸出端輸出低電平,綠色指示燈亮。因為振動傳感器輸出端可以與單片機直接相連,通過單片機來檢測高低電平,由此來檢測環境是否有振動,起到報警作用。
該功能是由一塊0.96 寸OLED 模塊組成,OLED 是性能優異的新型顯示屏,具有功耗低、響應速度快、寬視角、輕薄柔韌等特點。選用0.96寸是考慮到成本因素,該顯示屏簡單易用、占用接口少。供電為3~5.5 V,通訊協議:I2C/SPI,分辨率:128×64。對于部分單片機編程而言,利用OLED 屏幕可以使程序內部數據通過代碼的編寫來顯示在OLED 屏幕上,方便查找錯誤。同時在后續設備調試的時候使設備更加美觀,使用更加方便。
軟件設計如圖2所示。

圖2 設計邏輯
GPIO也稱為通用輸入/輸出,是控制器中最簡單也是最重要的配置。一個程序接收到指令然后做出反應,接受指令就是一個輸入的過程,做出反應就是一個輸出的過程。GIPO 就是這樣一個輸入和輸出的總稱。STM32F103C8T6 的GPIO 引腳電平為0~3 V,部分引腳可容忍5 V。輸出模式下可控制端口輸出高低電平,用以驅動LED、蜂鳴器、模擬通信協議輸出時序等,輸入模式下可讀取端口的高低電平或電壓,用于讀取按鍵輸入、外接模塊電平信號輸入、ADC電壓采集、模擬通信協議接收數據等。GPIO配置8種輸入輸出模式。GPIO 輸入包括輸入浮空、輸入上拉、輸入下拉和模擬輸入四種輸入模式。GPIO輸出包括開漏輸出、開漏復用功能、推挽式輸出和推挽式復用功能四種輸出模式。
3.2.1 中斷
處理器中的中斷指的是在處理器中,中斷是一個過程,即CPU在正常執行程序的過程中,遇到外部/內部的緊急事件需要處理,暫時中止當前程序的執行,轉而去處理緊急的事件,待處理完畢后再返回被打斷的程序處繼續往下執行。中斷在計算機多任務處理,尤其是即時系統中尤為重要。比如uCOS,FreeRTOS 等。中斷能提高CPU 的效率,同時能對突發事件做出實時處理。實現程序的并行化,實現嵌入式系統進程之間的切換。
3.2.2 TIM定時器
TIM(Timer)定時器可以對輸入的時鐘進行計數,并在計數值達到設定值時觸發中斷。STM32 的定時器擁有16 位計數器、預分頻器、自動重裝寄存器的時基單元,在72 MHz 計數時鐘下可以實現最大59.65(72/216/216)的定時。定時器不僅具備基本的定時中斷功能,而且還包含內外時鐘源選擇、輸入捕獲、輸出比較、編碼器接口、主從觸發模式等多種功能。根據程序復雜和應用場景的不同定時器可分為高級定時器、通用定時器、基本定時器三種類型。
ADC 全稱為模擬-數字轉換器。ADC 可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量,建立模擬電路到數字電路的橋梁。本次使用的STM32F103C8T6 的ADC 是12位逐次逼近的ADC,轉換時間1 us。輸入電壓范圍0~3.3 V,轉換結果范圍0~4095.18 個輸入通道,可測量16 個外部和2 個內部信號源,即溫度傳感器和內部參考電壓。
本研究希望實現如下幾種效果:首先是通過STM32 單片機檢測大概的聲音強度并在OLED 上顯示出來。利用ADC原理對聲音分貝的顯示,通過ADC轉化從而獲得分貝數據并顯示在OLED屏幕上方便觀察。其次本研究不希望程序是聽到聲音立刻產生觸發,考慮到鼾聲是持續的、連續的。預期的程序是檢測一段長達10秒及以上的聲音之后才觸發振動模塊。通過代碼的編寫給予STM32單片機一個判斷的數值范圍,即分貝過小和分貝過大并不會觸發單片機。該功能是防止誤觸發。比如分貝過小的連續性聲音其實并不一定是鼾聲,如果不劃定一定的范圍,那么就可能造成誤觸,降低使用者的使用體驗。同樣,分貝過大的聲音足以令使用者醒來,因此也沒有觸發的必要。關于如何判斷觸發的因素是“一段長達10秒及以上的聲音”,本研究采用定時器和中斷的原理來完成這一設置。通過音頻監測來讓STM32單片機接收口電位以1秒的時間產生變化,定時器則可以記錄這一電位變化,數據大于10則說明這一段聲音是長達10 秒的,即可以啟動觸發,開啟振動模塊。
本研究針對寢室存在的打鼾問題設計了一款以STM32 微處理器為核心,通過接收音頻檢測器輸入數字信號,再通過程序分析來達到一定的睡眠檢測功能的裝置,該裝置具有一定的止鼾功能,控制系統也具有體積小、易于集成和調試的特點,方便后續的修改以及合成。