開源藍牙心率防水運動手環 心率監測 ——瘋殼·智能穿戴開發系列 1心率測量原理簡介 我們手環的心率測量, 采用的是 PPG 光電容積脈搏波描記法原理(PhotoPlethysmoGraphy)。簡單來說,就是利用血液中透光率的脈動變化,折算成電信號,對應的就是心率。 當一定波長的光束照射到皮膚表面時,光束將通過反射方式傳送到光電接收器,在此過程中由于受到皮膚肌肉和血液的吸收衰減作用,檢測器檢測到的廣強度將減弱。其中皮膚、肌肉組織等對光的吸收在整個血液循環中是保持恒定不變的,而皮膚內的血液,容積在心臟作用下呈搏動性變化。當心臟收縮時外周血容量最多光吸收量也最大,檢測到的反射光強度最小。而在心臟舒張時,檢測到的光強度最大,使光接收器接收到的光強度隨之呈脈動性變化。最后,我們通過DA14580 的 ADC 采集光接收器的電信號,計算出心率。 2硬件設計 我們的心率傳感器由兩部分組成,如下圖所示。 第一個張圖 HY1303 其實是一個 LED 和一個光傳感器,將采集到的光強轉換成電壓,從第 6 引腳輸出。然后通過第二張圖 HY232 放大電壓。 圖 1 圖 2 3軟件設計 第一步,就是系統的初始化。 代碼1 由于本次要使用串口打印,我們就設置串口管腳,使能串口,對串口進行初 始化。 GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false); GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false); SetBits16(CLK_PER_REG, UART2_ENABLE, 1); // Initialize UART component uart2_init(UART2_BAUDRATE, UART2_DATALENGTH); 我們的心率需要的采樣周期是 4ms 到 10ms,這里用 的是 10ms,就需要通過 void my_timer_init(void)開啟一個定時器。 代碼2 每 過 10ms , 定 時 器 0 就 會 產 生 一 次 中 斷 , 進 入 回 調 函 數 timer0_general_user_callback_function,在回調函數中,我們就使用 ADC 采集數據。 最后通過函數 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 數字電壓,hr_capture 就是心率值了。 代碼3 代碼4 4實驗現象 首先,插好 Jlink 和 USB 轉串口,然后打開打開串口調試助手。 (1)選擇串口號,我們圖中是 COM1,這個根據實際情況選擇。 (2)配置串口參數,波特率為 115200,數據位 8,停止位 1,沒有校驗位和控制流,與下圖一致。 (3)點擊打開串口。 圖 3 配置完串口之后,打開我們提供的代碼。 (1)點擊仿真按鍵。 圖 4 (2)點擊運行代碼。 圖5 完成之后,就能看到串口調試助手接收框信息如下。 圖 6 配套資料:https://www.fengke.club/GeekMart/su_fkZyGYgrp.jsp 配套視頻:https://www.fengke.club/GeekMart/su_fTSgUL3y3.jsp 套件地址:http://shop115904315.taobao.com 文件下載請點擊: |