2014年8月30日 星期六

Arduino單元測試:心跳監測

當連接Arduino的訊號,開始使用手指心跳sensor量測心跳,每10秒計算透過電阻值級各參數換算成心跳數。因為sensor是用一個LED及一個光敏電阻,光變化來偵測脈搏,所以容易受環境的光影響,可以試著用東西包住手指及sensor或用3D列表機做個容器,再測試,測試出來的數字才會比較合理(人的正常心跳一般是在60-100次之間),如不行可再調整alpha及beta參數試試看,應該會比較準確。

 請注意手指心跳Sensor的腳位,詳細可參考該高手的網站





麵包板腳位情形



 Code
const int ledPin = 13;
const int sensorPin = A0;
const double alpha = 0.75;              // smoothing參數 可自行調整0~1之間的值
const double beta = 0.5;                // find peak參數 可自行調整0~1之間的值
const int period = 20;                  // sample脈搏的delay period

void setup()
{
    //pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
    Serial.begin(115200);               // Set the baud rate of the Serial Monitor
    //BTSerial.begin(9600);               // HC-06 baud rate 預設為9600
}

void loop()
{
    senseHeartRate();                   // 測量心跳
    
}

//   測量心跳並用藍芽傳給Android
//  讀入sensor的值
//  對值做smoothing
//  找出值得peak,即為有heart beat產生
//  計算每分鐘心跳頻率,用藍芽傳給手機

void senseHeartRate()
{
    int count = 0;                              // 記錄心跳次數
    double oldValue = 0;                        // 記錄上一次sense到的值
    double oldChange = 0;                       // 記錄上一次值的改變
       
    unsigned long startTime = millis();         // 記錄開始測量時間
   
    while(millis() - startTime < 10000) {       // sense 10 seconds
        int rawValue = analogRead(sensorPin);   // 讀取心跳sensor的值
        double value = alpha*oldValue + (1-alpha)*rawValue;     //smoothing value
   
        //find peak
        double change = value-oldValue;         // 計算跟上一次值的改變量
        if (change>beta && oldChange<-beta) {   // heart beat
            count = count + 1;
        }
         
        oldValue = value;
        oldChange = change;
        delay(period);
    }
    Serial.print(count);
    Serial.print(",");
    //BTSerial.println(count*6);          //use bluetooth to send result to android
}
參考網站  http://here-apps.blogspot.tw/2014/07/lab3-arduino.html

沒有留言: