硬件組成與連接
2、BH1790GLC傳感器
3、ArduinoNANO電路板。
連接關系如上圖所示
程序解讀
ROHM官方提供的BH1790GLC_HeartRate例程是基于arduino寫的,文件結構如下圖:
這樣的程序目錄,顯然很不合適使用arduino IDE去查閱,這里推薦大家使用Source Insight的軟件去查看代碼。需要注意的是,Source Insight不支持.ino文件,為了方便,將HeartRate.ino另存為一個.c的文件,方便Source Insight查看。
將程序燒錄到硬件中運行如下:
當前心率為70,反復測試幾次,數值都在70-75,看來一致性還是不錯。
廢話不多說,先看看ROHM怎么寫的,下面開始直接上代碼:
在setup()函數中,有兩個比較關鍵的函數hr_bh1790_Init()和hr_bh1790_StartMeasure()函數
其中hr_bh1790_Init()并沒有對bh1790硬件進行初始化,只是簡單的讀取了傳感器的兩個ID寄存器,驗證了一下傳感器的身份,同時讓硬件進行復位。
其主要的工作還是去初始化程序定義的結構體,給這些結構體賦上初值。
其中pwCalc_Init(void)函數也很重要,程序中定義了兩個IIR數字濾波器,這個函數是將這個數字濾波器進行初始化。
兩個IIR數字濾波器是3.5HZ的高通濾波器和0.5HZ的低通濾波器。
小知識:
在律規則的情況下,心率和脈搏是一致的。如果有心律不齊的人,會測到心率和脈率不一致,脈率少于心率。正常人心率在60—100次/分鐘,在此范圍有波動都是正常的
所以將兩個數字濾波器設置在這個這個范圍是合適的。
接下來就是在setup()函數中的另外一個函數hr_bh1790_StartMeasure (void)
在這個函數中程序對MEAS_CTRL1、MEAS_CTRL2、MEAS_START寄存器進行了操作
接下來就是最關鍵的loop()函數,看看ROHM官方是怎么將波形數據進行處理的。
在loop函數中,timer_flg是一個32HZ的計時標志,每隔31.25MS,就讀一次傳感器的數據,并進行計算。
其中hr_bh1790_Calc(s_cnt_freq)是本次分析的關鍵函數,在這個函數中,程序將傳感器數據進行讀取,濾波,判斷,最后計算出心率值;而hr_bh1790_GetData()僅僅是將心率結果數據和判斷讀出來,方便串口打印而已。
直接查看hr_bh1790_Calc()函數:
在這個函數中,程序通過pw_GetMeasureData(&s_pwData);將寄存器DATAOUT_LEDOFF和DATAOUT_LEDON的數據讀出來保存到s_pwData結構體中。
pwCalc(&s_pwData,&pw);及將s_pwData數據傳入到IIR濾波器中,經過高通和低通濾波器之后,得到的數據保存到PW變量中。
ma_AverageF()滑動求平均,
iir_Filter()即數字濾波器,先后經過s_iirPrm_hpf高通數字濾波器和s_iirPrm_lpf低通數字濾波器。
我在BH1790GLC_HeartRate例程上插入自己的代碼,將s_pwData(紅色DATAOUT_LEDON,藍色DATAOUT_LEDOFF)以及經過IIR濾波之后的數據 pw(綠色)繪制出來。
將綠色圖形放大:
可以看到,經過IIR濾波之后,pw幾乎呈現很規律的正弦波。
并且,這個波形與s_pwData的幅值大小沒太大的關系。所以,最這樣的波形進行統計和判斷是就比之前要容易很多了。
-
傳感器
+關注
關注
2553文章
51407瀏覽量
756657 -
數據采集
+關注
關注
39文章
6255瀏覽量
114055
發布評論請先 登錄
相關推薦
一種高速圖像數據采集板的設計方案
ROHM開發出支持壓力和血管年齡測量的高速脈搏傳感器“BH1792GLC”
用CC2530 建立Zigbee數據采集系統的設計
多路模擬數據采集接口設計
基于FPGA的數據采集控制器IP核的設計方案和實現方法研究
基于FPGA的高速數據采集系統該怎么設計?
基于ARM和FPGA的微加速度計數據采集設計方案
分享一種不錯的一種三十二通道掃描數據采集模塊的設計方案
基于CAN 總線的數據采集模塊設計
樓宇設備測控系統的無線數據采集與傳輸模塊設計
無線數據采集系統設計
網關數據采集解決方案
![網關<b class='flag-5'>數據采集解決方案</b>](https://file1.elecfans.com//web2/M00/C4/49/wKgaomXqxtiAGn0VAADgy2-cZI8113.jpg)
評論