반응형

아두이노의 센서 중에 심장박동을 측정할 수 있는 센서가 있습니다. 손가락 등 몸에 부착하면 심장박동과 심장박동수(Heart Rate, BPM - Beats Per Minute)를 측정할 수 있는 센서 입니다. 이 센서는 말 그대로 심장박동수를 관찰하는 기기를 만들 수 있으며 블루투스, 와이파이 모듈 등과 연동하면 스마트폰 등과 연동해서 건강관리 기능을 하는 앱을 만들 수도 있습니다. 심장박동으로는 심장의 이상, 부정맥 등의 질병을 진단할 수 있습니다. 아래 표는 위키피디아 에서 발췌한 자료로서 휴식기 기준 심박수 기준 데이터라고 합니다. 저도 한 번 측정해 봐야 겠네요.

 

남성나이
18–2526–3536–4546–5556–6565+
운동선수49–5549–5450–5650–5751–5650–55
뛰어남56–6155–6157–6258–6357–6156–61
좋음62–6562–6563–6664–6762–6762–65
평균 이상66–6966–7067–7068–7168–7166–69
평균70–7371–7471–7572–7672–7570–73
평균 이하74–8175–8176–8277–8376–8174–79
나쁨82+82+83+84+82+80+

여성나이
18–2524–3536–4546–5556–6565+
운동선수54–6054–5954–5954–6054–5954–59
뛰어남61–6560–6460–6461–6560–6460–64
좋음66–6965–6865–6966–6965–6865–68
평균 이상70–7369–7270–7370–7369–7369–72
평균74–7873–7674–7874–7774–7773–76
평균 이하79–8477–8279–8478–8378–8377–84
나쁨85+83+85+84+84+85+


위의 표를 보고 이 센서가 아니더라도 자신의 심박수를 체크할 수 있는 장치가 있다면 건강체크를 해 보는 것도 좋을 것 같습니다.

센서의 뒷면 입니다. 3개의 단자가 있으며 Signal, VCC (5V), GND 로 이루어져 있습니다. 연결선은 구입 시부터 납땜되어 붙어 있습니다. 아두이노에 바로 연결하면 됩니다.


심박 감지부 입니다. 가운데 LED 에서 밝은 녹색의 빛이 나오고 바로 아래 반사되는 빛을 감지하는 빛 감지 센서가 있습니다. 심장박동 시 혈류가 증가하면 반사되는 빛의 양이 줄어드는 점을 이용해서 심박을 측정 합니다. 자세한 원리는 [여기] 에 가보시면 설명이 되어 있습니다. 고로 손가락, 귀 등 심박에 따라 혈류의 변화가 잘 보이는 부위에서 더욱 잘 작동 합니다.


심박센서의 원리, 출처: http://www.raviyp.com/embedded/140-learn-how-a-heart-beat-sensor-works

 

이 센서는 특이하게도 별도의 웹사이트가 존재 합니다. http://pulsesensor.com/ 라는 사이트 인데요. 여기에서 센서의 정보 및 사용법에 대한 많은 정보를 얻을 수 있습니다. 이 사이트에 링크되어 있는 GitHub 의 예제를 실행해 보겠습니다.

■ 연결
연결은 간단 합니다. Signal 은 아날로그 Input 단자인 A0 에 연결하고 VCC 는 5V에 GND는 GND에 연결하면 됩니다. 그리고 심박의 관찰을 위해 D13에 LED를 하나 연결 합니다. 하지만 LED는 굳이 연결하지 않아도 됩니다. 아두이노 자체에 13번 LED가 달려 있으니까요. 그리고 소스를 보면 주석에 D5 에 LED를 하나 더 달아주라고 되어 있는데 무엇 때문인지 모르겠지만 저의 경우는 계속 켜져있기만 하고 제대로 작동하지 않네요.

 심장박동 센서

 아두이노 UNO

 Signal

 A0

 VCC

 5V

 GND

 GND


 
■ 소스
소스는 아래의 사이트에서 다운로드 받을 수 있습니다. Download ZIP 을 클릭해서 다운로드 받습니다.

PulseSensor_Amped_Arduino-master.zip



압축을 풀면 위와 같이 4개의 소스가 나오는데 라이브러리화가 되어 있지 않아서 PulseSensorAmped_Arduino_1dot4.ino 이외에는 참조파일들 입니다. 즉, 4개의 소스가 하나의 폴더에 있어야 작동이 됩니다.


파일 -> 열기를 눌러서 PulseSensorAmped_Arduino_1dot4.ino 를 열어 줍니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
/*  Pulse Sensor Amped 1.4    by Joel Murphy and Yury Gitman   http://www.pulsesensor.com
----------------------  Notes ----------------------  ---------------------- 
This code:
1) Blinks an LED to User's Live Heartbeat   PIN 13
2) Fades an LED to User's Live HeartBeat
3) Determines BPM
4) Prints All of the Above to Serial
Read Me:
https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino/blob/master/README.md   
 ----------------------       ----------------------  ----------------------
*/
 
//  Variables
int pulsePin = 0;                 // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13;                // pin to blink led at each beat
int fadePin = 5;                  // pin to do fancy classy fading blink at each beat
int fadeRate = 0;                 // used to fade LED on with PWM on fadePin
 
// Volatile Variables, used in the interrupt service routine!
volatile int BPM;                   // int that holds raw Analog in 0. updated every 2mS
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // int that holds the time interval between beats! Must be seeded! 
volatile boolean Pulse = false;     // "True" when User's live heartbeat is detected. "False" when not a "live beat". 
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.
 
// Regards Serial OutPut  -- Set This Up to your needs
static boolean serialVisual = true;   // Set to 'false' by Default.  Re-set to 'true' to see Arduino Serial Monitor ASCII Visual Pulse 
 
 
void setup(){
  pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
  pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
  Serial.begin(115200);             // we agree to talk fast!
  interruptSetup();                 // sets up to read Pulse Sensor signal every 2mS 
   // IF YOU ARE POWERING The Pulse Sensor AT VOLTAGE LESS THAN THE BOARD VOLTAGE, 
   // UN-COMMENT THE NEXT LINE AND APPLY THAT VOLTAGE TO THE A-REF PIN
//   analogReference(EXTERNAL);   
}
 
 
//  Where the Magic Happens
void loop(){
  
    serialOutput() ;       
    
  if (QS == true){     // A Heartbeat Was Found
                       // BPM and IBI have been Determined
                       // Quantified Self "QS" true when arduino finds a heartbeat
        fadeRate = 255;         // Makes the LED Fade Effect Happen
                                // Set 'fadeRate' Variable to 255 to fade LED with pulse
        serialOutputWhenBeatHappens();   // A Beat Happened, Output that to serial.     
        QS = false;                      // reset the Quantified Self flag for next time    
  }
     
  ledFadeToBeat();                      // Makes the LED Fade Effect Happen 
  delay(1000);                             //  take a break
}
 
void ledFadeToBeat(){
    fadeRate -= 15;                         //  set LED fade value
    fadeRate = constrain(fadeRate,0,255);   //  keep LED fade value from going into negative numbers!
    analogWrite(fadePin,fadeRate);          //  fade LED
  }
cs

위와 같이 소스가 나오는데 원래 소스에서 수정해준 부분은 29행의 static boolean serialVisual = true; 부분 입니다. Default 는 false 로 되어 있습니다.  그리고 측정 속도가 너무 빨라서 58행의 delay 값을 200 에서 1000으로 높여 주었습니다. 이렇게 설정해주면 자신의 심박수를 시리얼 모니터를 통해서 볼 수 있습니다.

저의 심박수를 측정한 결과 입니다. 대략 80 정도를 유지하고 있네요. 위의 정상 심박수 결과와 비교해보니 평균 이하의 값 입니다. 운동을 열심히 해야 겠네요. ㅠㅠ 측정 결과값은 1분 정도는 지나야 제대로 나오는 것 같습니다. 처음에는 심박수가 너무 높게 나오는 경향이 있네요.


이 동영상은 심장박동에 따라서 LED까 깜빡이는 모습 입니다. D5 에 연결된 LED 는 작동하지 않네요. 원인은 모르겠습니다. 소스를 좀 더 들여다봐야 할 듯 합니다.


원래는 이렇게 작동되어야 합니다.



이상으로 심장박동 센서(심박센서)의 기본적인 원리와 활용에 대해서 알아보았습니다. 다음 글에서는 이 센서를 활용해서 좀 더 비주얼하게 심장박동을 보여주는 방법을 알아보려고 합니다.




■ 추가사항 (2016년 11월 5일) : 위의 글에 보면 D5에 연결된 LED 가 제대로 동작하지 않는다는 언급이 있다. 이에 대해 어느 분이 댓글을 달아주셨는데 delay(1000) 으로 임의로 변경한 부분을 delay(20)으로 변경하면 정상적으로 작동이 된다고 한다. 현재 직접 연결해서 테스트는 못 해 본 상태.

반응형

+ Recent posts