아두이노의 센서 중에 심장박동을 측정할 수 있는 센서가 있습니다. 손가락 등 몸에 부착하면 심장박동과 심장박동수(Heart Rate, BPM - Beats Per Minute)를 측정할 수 있는 센서 입니다. 이 센서는 말 그대로 심장박동수를 관찰하는 기기를 만들 수 있으며 블루투스, 와이파이 모듈 등과 연동하면 스마트폰 등과 연동해서 건강관리 기능을 하는 앱을 만들 수도 있습니다. 심장박동으로는 심장의 이상, 부정맥 등의 질병을 진단할 수 있습니다. 아래 표는 위키피디아 에서 발췌한 자료로서 휴식기 기준 심박수 기준 데이터라고 합니다. 저도 한 번 측정해 봐야 겠네요.
남성 | 나이 | |||||
---|---|---|---|---|---|---|
18–25 | 26–35 | 36–45 | 46–55 | 56–65 | 65+ | |
운동선수 | 49–55 | 49–54 | 50–56 | 50–57 | 51–56 | 50–55 |
뛰어남 | 56–61 | 55–61 | 57–62 | 58–63 | 57–61 | 56–61 |
좋음 | 62–65 | 62–65 | 63–66 | 64–67 | 62–67 | 62–65 |
평균 이상 | 66–69 | 66–70 | 67–70 | 68–71 | 68–71 | 66–69 |
평균 | 70–73 | 71–74 | 71–75 | 72–76 | 72–75 | 70–73 |
평균 이하 | 74–81 | 75–81 | 76–82 | 77–83 | 76–81 | 74–79 |
나쁨 | 82+ | 82+ | 83+ | 84+ | 82+ | 80+ |
여성 | 나이 | |||||
---|---|---|---|---|---|---|
18–25 | 24–35 | 36–45 | 46–55 | 56–65 | 65+ | |
운동선수 | 54–60 | 54–59 | 54–59 | 54–60 | 54–59 | 54–59 |
뛰어남 | 61–65 | 60–64 | 60–64 | 61–65 | 60–64 | 60–64 |
좋음 | 66–69 | 65–68 | 65–69 | 66–69 | 65–68 | 65–68 |
평균 이상 | 70–73 | 69–72 | 70–73 | 70–73 | 69–73 | 69–72 |
평균 | 74–78 | 73–76 | 74–78 | 74–77 | 74–77 | 73–76 |
평균 이하 | 79–84 | 77–82 | 79–84 | 78–83 | 78–83 | 77–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
심장박동 센서 |
아두이노 UNO |
Signal |
A0 |
VCC |
5V |
GND |
GND |
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 |
저의 심박수를 측정한 결과 입니다. 대략 80 정도를 유지하고 있네요. 위의 정상 심박수 결과와 비교해보니 평균 이하의 값 입니다. 운동을 열심히 해야 겠네요. ㅠㅠ 측정 결과값은 1분 정도는 지나야 제대로 나오는 것 같습니다. 처음에는 심박수가 너무 높게 나오는 경향이 있네요.
이 동영상은 심장박동에 따라서 LED까 깜빡이는 모습 입니다. D5 에 연결된 LED 는 작동하지 않네요. 원인은 모르겠습니다. 소스를 좀 더 들여다봐야 할 듯 합니다.
원래는 이렇게 작동되어야 합니다.
■ 추가사항 (2016년 11월 5일) : 위의 글에 보면 D5에 연결된 LED 가 제대로 동작하지 않는다는 언급이 있다. 이에 대해 어느 분이 댓글을 달아주셨는데 delay(1000) 으로 임의로 변경한 부분을 delay(20)으로 변경하면 정상적으로 작동이 된다고 한다. 현재 직접 연결해서 테스트는 못 해 본 상태.
'아두이노' 카테고리의 다른 글
[아두이노] FTDI USB Serial 모듈과 아두이노 프로 미니 - FT232RL 칩 사용 보드 (1) | 2016.06.27 |
---|---|
[아두이노] 심장박동 센서의 사용 #2 - 심박수 시각화 (3) | 2016.06.26 |
[아두이노] BMP180 디지털 기압 센서의 사용 - 기압, 온도, 고도측정 (6) | 2016.06.23 |
[아두이노] 16자리 터치 키패드의 사용 - TTP229 (0) | 2016.06.22 |
[아두이노] 터치센서를 사용해서 LED 켜고 끄기 (2) | 2016.06.21 |