Arkadaşlar merhaba,
Elimde Gravity: Analog Heart Rate Monitor Sensor (ECG) sensör var.
https://www.dfrobot.com/wiki/index.php/Heart_Rate_Monitor_Sensor_SKU:_SEN0213
Analog olarak kalp atış bilgisini 5ms de bir örnekleyerek ploter ile çizdiriyorum fakat bpm bilgisi için algoritma kuramadım sitede arduino ile yapmışlar fakat kütüphanesini anlayamadım kendim kütüphane oluşturmak istedim sağlıklı bir bilgi elde edebilmem için nasıl bir algoritma kullanmalıyım yardımcı olursanız sevinirim.
https://www.dfrobot.com/wiki/index.php/File:Heart_Rate_SEN0213_checking.png
adresinde verilen grafigi elde edebiliyor musun? En azindan oradaki pikleri gorebilmen lazim. Bunlar kalp atislari.
Eger gorebiliyorsan ilk once bu degerleri excel aktarip excelde biraz oyna derim. Yapman gereken alcak geciren bir filtre tasarlamak. Normal bir insanin bpm degeri max 180 dir. Yani 3Hz. 3Hz lik bir fitreden gecirdikten sonra tepeler arasindaki sureyi olceceksin.
Benim tavsiyem ham datayi ilk once excele aktar. Sonra filtreni tasarla. Sonuclarina bak, bir esik seviyesi belirle. Sonra bu tepeler arasinda timer i saydir.
sitede verilen örnekte seti portan bpm bilgisini göndermiş. örnekte kullanılan "HeartSpeed.h" isimli header dosyasını icelemeniz algoritma konusunda faydalı olur.
/*!
* @file Heartrate.h
* @brief Heartrate.h detailed description for Heartrate.cpp
*
* This is written for the heart rate sensor the company library. Mainly used for real
* time measurement of blood oxygen saturation, based on measured values calculate heart rate values.
*
* @author jianghao(460221531@qq.com)
* @version V1.0
* @date 2016-07-08
*/
#ifndef __HEARSPEED__H
#define __HEARSPEED__H
#include "Arduino.h"
#include "MyTimer2.h"
typedef void (*HEARTCBFUNC)(uint8_t,int);
#define RAW_DATA 1 ///<Serial port mapping switch
#define HEARRATE_VALUE 0 ///<Off by default serial port mapping
#define sampleSize 512
class HeartSpeed
{
public:
/*!
* @brief Constructor
*/
HeartSpeed(uint8_t _pin, uint8_t _rawData = HEARRATE_VALUE);
/*!
* @brief Sets the callback function
*/
void setCB(HEARTCBFUNC cb_);
/*!
* @brief Start test
*/
void begin(void);
/*!
* @brief Calculate heart rate value
*/
int calculateSpeed(void);
/*!
* @brief Receive serial data and process
*/
static void recv( void *);
/*!
* @brief Initializes the heart rate period
*/
void goInit();
/*!
* @brief Kalman filtering
*/
float kalmanUpdate(float Accel,float Gyro);
private:
uint8_t rawData; ///<Serial port mapping switch
uint8_t pin;
int Count; ///<Counts, to run once every minute
/*The following data is used to calculate the heart rate value*/
float heart;
int heartRateNum=0;
int sum;
int go1;
int go2;
int go3;
int go4;
/*Square-wave operation enabling conditions*/
int high=1;
int low=0;
int sampleNum; ///<Heart rate values
/*Kalman filter parameters*/
float Gyro_y;
float Angle;
float Q_bias, Angle_err;
float dt=0.05;
float Pdot[4] ={0,0,0,0};
float Q_angle=0.001;
float PP[2][2] = { { 1, 0 },{ 0, 1 } };
float Q_gyro=0.003;
float PCt_0, PCt_1, E;
float K_0, K_1, t_0, t_1;
char C_0 = 1;
float R_angle=0.5;
};
#endif
/******************************************************************************
Copyright (C) <2016> <jianghao>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact: 460221531@qq.com
******************************************************************************/
Doğrudan R tepelerini bir limitle ölçmek yanıltıcı olur, kas hareketi ve çevresel gürültülerin etkisiyle yanlış nabız ölçebilirsiniz. PAN & TOMPKINS algoritmasını EKG sinyalinden nabız hesaplamak için kullanabilirsiniz. Bolca MATLAB uygulaması var, Arduino kütüphanesi de mevcut, inceleyebilirsiniz.
@usahin Neredeyse camurun icinden sinyali cikartmis. Tesekkurler bilgi icin.
Bende linki ekledim. Birilerinin isine yarar belki.
http://www.robots.ox.ac.uk/~gari/teaching/cdt/A3/readings/ECG/Pan+Tompkins.pdf