아두이노의 센서 중에 심장박동을 측정할 수 있는 센서가 있습니다. 손가락 등 몸에 부착하면 심장박동과 심장박동수(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 |
[아두이노] 심장박동 센서의 사용 #1 - 심박수 측정 (47) | 2016.06.26 |
[아두이노] BMP180 디지털 기압 센서의 사용 - 기압, 온도, 고도측정 (6) | 2016.06.23 |
[아두이노] 16자리 터치 키패드의 사용 - TTP229 (0) | 2016.06.22 |
[아두이노] 터치센서를 사용해서 LED 켜고 끄기 (2) | 2016.06.21 |
댓글을 달아 주세요
아두이노:1.6.11 (Windows 10), 보드:"Arduino/Genuino Uno"
2016.10.15 15:34 [ ADDR : EDIT/ DEL : REPLY ]C:\Users\諛⑹뵪\Documents\Arduino\PulseSensorAmped_Arduino_1dot4\PulseSensorAmped_Arduino_1dot4.ino: In function 'void setup()':
PulseSensorAmped_Arduino_1dot4:37: error: 'interruptSetup' was not declared in this scope
C:\Users\諛⑹뵪\Documents\Arduino\PulseSensorAmped_Arduino_1dot4\PulseSensorAmped_Arduino_1dot4.ino: In function 'void loop()':
PulseSensorAmped_Arduino_1dot4:47: error: 'serialOutput' was not declared in this scope
PulseSensorAmped_Arduino_1dot4:54: error: 'serialOutputWhenBeatHappens' was not declared in this scope
PulseSensorAmped_Arduino_1dot4:58: error: 'ledFadeToBeat' was not declared in this scope
C:\Users\諛⑹뵪\Documents\Arduino\PulseSensorAmped_Arduino_1dot4\AllSerialHandling.ino: In function 'void serialOutput()':
AllSerialHandling:10: error: 'arduinoSerialMonitorVisual' was not declared in this scope
AllSerialHandling:12: error: 'sendDataToSerial' was not declared in this scope
C:\Users\諛⑹뵪\Documents\Arduino\PulseSensorAmped_Arduino_1dot4\AllSerialHandling.ino: In function 'void serialOutputWhenBeatHappens()':
AllSerialHandling:25: error: 'sendDataToSerial' was not declared in this scope
exit status 1
'interruptSetup' was not declared in this scope
이 리포트는 파일 -> 환경설정에 "컴파일중 자세한 출력보이기"를
활성화하여 더 많은 정보를
보이게 할 수 있습니다.
똑같이 했는데 오류가뜨네요.... 왜이러는걸까요
모든소스가 한 폴더에 있는지
2016.10.15 15:48 신고 [ ADDR : EDIT/ DEL ]소스의 경로에 한글폴더명이 있는지 확인해 보세요. 위에 보니까 경로명에 이상한 문자가 있네요
심박수 정보만 실시간으로 빼서 다른 함수에 사용하고싶은데 어떻게하면 될까요?
2016.10.15 16:07 [ ADDR : EDIT/ DEL : REPLY ]당연한 얘기겠지만;; 다른 함수에 데이터를 넣으면 되겠죠?
2016.11.05 13:55 신고 [ ADDR : EDIT/ DEL ]그리고 소스를 보면 주석에 D5 에 LED를 하나 더 달아주라고 되어 있는데 무엇 때문인지 모르겠지만 저의 경우는 계속 켜져있기만 하고 제대로 작동하지 않네요.->그리고 측정 속도가 너무 빨라서 58행의 delay 값을 20 에서 1000으로 높여 주었습니다. 이렇게 설정해주면 자신의 심박수를 시리얼 모니터를 통해서 볼 수 있습니다. => delay값을 처음의 20으로 두면 LED가 영상처럼 작동합니다!
2016.11.04 21:20 신고 [ ADDR : EDIT/ DEL : REPLY ]헉 그랬었군요. 감사합니다. 참고하겠습니다.
2016.11.05 13:56 신고 [ ADDR : EDIT/ DEL ]delay가 측정되는것을 보여주는 것만 해당하는건줄 알았는데(저는) 측정을 1초 단위로 하는 명령이라 led에 명령이 안먹은건가요?
2016.11.14 03:12 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2016.11.04 23:16 [ ADDR : EDIT/ DEL : REPLY ]흠... 글쎄요... 저도 잘 모르겠네요.
2016.11.05 14:02 신고 [ ADDR : EDIT/ DEL ]안녕하세요 요번에 학교에서 아두이노 아이디어로 심박센서를 준비하려는 학생입니다.
2016.12.01 18:33 [ ADDR : EDIT/ DEL : REPLY ]제가 구상한 아이디어로는 무선 블루투스로 심박센서를 이용해서 브로치를 만드려구 하는데요
브로치에 심장박동 bpm 기본 수치를 적용시킨뒤 기본수치에서 많이 벗어날 경우에 벨이 울리는 방식으로 만드려고 하는데, 블루투스는 이 브로치를 착용하고 있는 사람의 심장박동수를 관찰하는 역할로 하구요
현재 저는 아두이노를 처음시작하는 아두이노의 아자도 모르는 초보입니다.
이 홈페이지에서 정말 많은 도움을 얻고싶은데 조언좀 해주시면 감사하겠습니다!
1~2주만에 간단하게 만들수 있는지도 알려주시면 감사하겠습니다!
아두이노의 '아'자도 모르는데 어떻게 프로젝트를 진행하려 하시나요? 아두이노 책을 한 권 사거나 도서관에서 빌려서 기초를 먼저 배우시길 바랍니다. 말씀하신 기능은 그닥 어렵지 않게 구현이 가능할수도 있을것 같네요
2016.12.01 18:50 신고 [ ADDR : EDIT/ DEL ]안녕하세요 아두이노 개발중인 대학생입니다
2016.12.03 19:07 [ ADDR : EDIT/ DEL : REPLY ]펄스센서를 사용해서 시리얼모니터와 프로세싱으로 그래프 파형이 동시에 보이게 할수는 없나요?
시리얼모니터를 보기위해 여기 올려주신 코딩 사용해서 그래프 파형을 보려하면 프로세싱 프로그램이 작동을 않하네요;;;
시리얼 통신은 하나의 커넥션만 가능한걸로 압니다. 그래서 프로세싱에 데이터를 보내면 시리얼모니터는 사용이 안될겁니다. 프로세싱에서 해결하는 방법으로 수정해 보세요.
2016.12.05 00:47 신고 [ ADDR : EDIT/ DEL ]블루노 나노와 심박센서를 연결해서 손목으로 측정하는데 값이 너무 튀는데요 이거 해결할수 있는 방법 없을까요?
2017.02.13 22:49 [ ADDR : EDIT/ DEL : REPLY ]웨어러블로 전원공급은 베터리팩을 사용하고 바로 GND와 A0에 연결시켯는데 손목에 착용시키니까 값이 너무 정신없이 튀네요
이 페이지에서 나온 모습으로 측정할땐 크게 값이 안튀는데 손목에 착용하는 밴드형태로 만드니까 심박 값이 너무 튀는데 방법없을까요?
저도 위의것만 해봐서 뭐라 말하기 어렵지만 센서의 고정이 중요하지 않을까 싶네요.
2017.02.14 09:02 신고 [ ADDR : EDIT/ DEL ]라즈베리파이에서도 다 작동가능한가요??
2017.06.06 23:54 [ ADDR : EDIT/ DEL : REPLY ]해보진 않았지만 라즈에도 gpio가 있으니 가능하겠죠?
2017.06.07 10:14 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2017.07.09 18:21 [ ADDR : EDIT/ DEL : REPLY ]네 전 알리익스프레스에서 구입했습니다.
2017.07.09 18:30 신고 [ ADDR : EDIT/ DEL ]그런데 찾아보면 국내 쇼핑몰에도 있을 겁니다
전 아두이노를 학교에서 배우고 있는 학생입니다. 저는 이 센서를 사용하여 맥박 수치가 평균 이상이거나 이하일 경우 블루투스를 이용해 핸드폰으로 전송되는 프로그램을 만들고 싶은데 어떻게 하면될까요??
2017.08.09 19:50 [ ADDR : EDIT/ DEL : REPLY ]맥박수치를 블루투스로 핸드폰 전송하는 프로그램을 만들면 됩니다. ^^;;
2017.08.09 21:32 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2017.11.30 14:28 [ ADDR : EDIT/ DEL : REPLY ]노이즈제거를 따로 하진 않았습니다
2017.11.30 14:45 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2018.05.15 02:54 [ ADDR : EDIT/ DEL : REPLY ]소스코드는 없습니다 다만 저의 블로그에서 블루투스 모듈 HC-06 검색하시면 쉽게 데이터 연동이 가능 합니다. 어렵지 않아요...
2018.05.15 11:09 신고 [ ADDR : EDIT/ DEL ]이 센서는 릴리패드에서도 작동이 가능한가요..?
2018.06.14 18:09 [ ADDR : EDIT/ DEL : REPLY ]만약 가능하다면 SIGNAL, VCC, GND는 어디에 릴리패드의 어느부분에 연결해야 할까요? ㅜㅜ
가능할겁니다. 자세한 방법은 릴리패드를 몰라서 저도 모릅니다
2018.06.14 20:05 신고 [ ADDR : EDIT/ DEL ]위의 과정대로 심박센서를 검지손끝이나 귓볼 등 다양한 부위에서 수행해봤는데 값이 점차올라가다가 235-237사이의 값만 출력됩니다
2018.12.18 21:04 [ ADDR : EDIT/ DEL : REPLY ]절연테이프로 다른 빛을 차단하고 했는데도 235-237사이의 값만출력되는데 혹시 저랑 같은 경험을 하신적이 있나요???
글쎄요. 저는 한 번에 잘 되었다는 ;;
2018.12.18 22:50 신고 [ ADDR : EDIT/ DEL ]저도 그래요... 확인하셨나요?
2021.01.23 01:07 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2019.05.16 07:26 [ ADDR : EDIT/ DEL : REPLY ]ppg가 뭔가요? ^^;
2019.05.16 07:52 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2019.09.20 17:45 [ ADDR : EDIT/ DEL : REPLY ]그럼요 가능합니다
2019.09.20 17:48 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2019.09.20 19:23 [ ADDR : EDIT/ DEL : REPLY ]esp32 자체가 인터넷이나 블루투스 통신이 가능하므로 이를 응용하면 가능할 겁니다. 물론 인터넷에서 전화, 문자 등과 연동하는건 고민해 보셔야죠.
2019.09.20 20:09 신고 [ ADDR : EDIT/ DEL ]비밀댓글입니다
2019.11.25 15:52 [ ADDR : EDIT/ DEL : REPLY ]윗 글과 같이 빛이 새어나가지 않게 검은 테이프로 감아준다거나 하면 좀 나아질겁니다
2019.11.25 16:09 신고 [ ADDR : EDIT/ DEL ]안녕하세요,혹시 한가지 질문드려도 될까요?
2021.04.06 23:08 [ ADDR : EDIT/ DEL : REPLY ]저희도 지금 심박수를 측정해서 이 수치들을 모으고자 하는데,
만약에 이 아두이노 기기를 웨어러블 형태로 차고 밖에 있는 상태에서
값을 알고 싶다면 와이파이쪽 관련 ESP8266칩셋 이런쪽을 추가로 넣어야하나요?
아니면 말씀하신 기존 센서만으로도 할 수 있나요?
아두이노 관련 제작은 처음이라 막막해서 도움얻고자 댓글달아봅니다...ㅠㅠ
esp8266을 쓴다면 아두이노는 필요 없습니다. 심박센서를 바로 esp8266에 연결하고 와이파이 연결을 통해 수치를 전송하면 되니까요.
2021.04.07 07:03 신고 [ ADDR : EDIT/ DEL ]안녕하세요 질문드립니다. led는 달지 않았는데 다른건 똑같이하고 실행을 하면 처음엔 50정도롤 나오다가 몇초지나면 200정도로 오르더니 수치가 계속 정상화가 안되네요 무슨 문제일까요?
2021.07.10 12:16 [ ADDR : EDIT/ DEL : REPLY ]