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

Arduino單元測試:使用按鈕鍵輸入訊號控制LED燈

最近才剛接觸Arduino,先從最簡單的開始來。

首先先到官方網站或至商店、購物網買 Arduino 或入門套件,因為本身非電子相關本科系出身,所以線插的有點亂。

然後開始準備開發環境,Arduino 官方網站下載免費IDE。安裝完畢後就可開始準備玩了。


網路上有許多高手,可參考大家所分享的範例,以這case為例,下列網址提供大家參考:
1.http://coopermaa2nd.blogspot.tw/2010/12/arduino-lab2-led.html
2.http://ming-shian.blogspot.tw/p/arduino.html

麵包板插線情形

完成測試圖


Code
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}