고급 예제

다양한 도구들을 가지고 마음껏 응용해보세요.

심장 박동 센서(Pulse Sensor)

2014-10-02 15:17:12

개요


아래는 NYMI 라는 제품입니다. 사람의 고유 심장 박동 패턴을 이용한 정보보안 장치입니다. 
착용하는 사람의 심장 박동 패턴을 분석한 후 고유한 패턴을 알아냅니다. 
회사에 출근에서 책상에 앉으면 자동으로 컴퓨터 비밀번호가 해제 되고 집의 문도 자동으로 열립니다.

 

 


신기하죠? 이런 제품을 만드는 것은 어렵겠지만 심장 박동수를 아는 것은 어렵지 않습니다.

심장 박동 센서만 있다면 아주 쉽게 심장이 얼마나 빠르게 뛰는 지 알 수 있습니다.
특히 pulse sensor는 오픈소스 프로젝트로 스케치와 이쁜 프로세싱 화면까지 무료로 제공해줍니다.

 

 


혈액의 흐름이 심장 고동에 맞춰서 강해졌다 약해졌다 변화 합니다.
손가락, 귀의 미세혈관에 적외선을 보내어 반사되는 빛의 양을 감지하면
변화하는 혈액의 흐름의 따라 빛의 양도 변화하는 것을 알 수 있을 것입니다.
이런 원리를 통해 맥박을 측정할 수 있게 됩니다.


다음은 pulse sensor에 대한 여러 정보를 얻을 수 있는 웹사이트 입니다. 
궁금하신 분은 사진 밑에 링크를 참고하세요.


출처 : http://pulsesensor.myshopify.com/pages/code-and-guide


심박센서를 사용해서를 이용한다면 진짜 좋아하는 지 아닌 지 알 수 있는 그린라이트 박스,
할머니, 할아버지 분들을 위한 심박수 측정기를 만들 수도 있을 것 입니다. 

본 문에서는 심박 센서를 이용하여 심박을 측정하고 프로세싱 화면에서 그래프로 확인해 보겠습니다.

 

 

 

부품목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 심박 센서 1 Pulse sensor kit를 사용하였습니다.
3 LED 2  
4 330 ohm 저항 2  
5 점퍼 케이블 6  
6 브레드 보드 1  

 

부품명 오렌지 보드 브레드 보드 LED 330 ohm 저항 점퍼 케이블
사진 x1 x1 x2 x2 x6

 

 

 

부품명 심박 센서
사진 x1

 

 

하드웨어 Making

 

출처 : http://pulsesensor.myshopify.com


심박센서 키트는 다음과 같이 구성되어 있습니다. 심박센서 외에 부속품을 사용하면
다양한 형태로 심박센서를 사용하실 수 있습니다.

 

1. 먼저 심박센서 위에 비닐 스티커를 양면으로 붙입니다.

출처 : http://pulsesensor.myshopify.com


센서를 만지기 전에 절연을 하기 위해서 붙입니다.

2. 각종 부속품을 이용해 원하는 형태로 사용하세요.

 

 

 

 

1. 찍찍이 이용하기 : 바로 센서 뒤에 부착하시고 하나는 벽 등 원하는 부분에 붙여서 사용하세요.
출처 : http://pulsesensor.myshopify.com
 
 

2. 벨크로 테이프 사용하기
         스티커를 붙인 뒷면에 글루건을 바른 후 말립니다.
 
출처 : http://pulsesensor.myshopify.com

손톱깍기를 이용하여 나머지 부분을 정리합니다.
출처 : http://pulsesensor.myshopify.com
 

이제, 벨크로 테입에 붙여서 사용합니다.
 

출처 : http://pulsesensor.myshopify.com


3. 이어 클립 사용하기
글루건으로 이어 클립과 센서를 붙입니다.
 

출처 : http://pulsesensor.myshopify.com


다음 그림과 같이 귀, 손가락에 부착하여 사용하시면 됩니다.


출처 : http://pulsesensor.myshopify.com
 

회로도


 

브레드 보드 레이아웃

 
* 센서 사용시 주의사항

1. 센서를 너무 강하게 누르실 경우, 모세혈관 측정이 방해가 되어 측정이 잘 되지 않을 수 있습니다.

2. 초기 인식 시, 5초 정도의 대기 시간이 필요합니다.

3. 센서를 사용하지 않을 때, 빛 등에 의해 외부 파형이 생성될 수 있으며, 고장이 아닙니다.
 

 

 

 

소프트웨어 Coding

 

다음 링크를 통해 스케치 및 프로세싱 파일 다운로드 하고 실행하세요.
(스케치 및 프로세싱 파일은 여러 파일로 되어 있기 때문에 압축 파일을 링크 하였습니다. 파일을 다운로드 하시고 열기를 이용하여 사용하세요.)
PulseSensorAmped_Arduino_1dot1.zip : 스케치 파일
PulseSensorAmpd_Processing…1dot1 : 프로세싱 파일


* 프로세싱 실행 시 주의사항

1. 보드에 먼저 스케치를 업로드 하신 후 시리얼 모니터는 꺼진 상태에서 실행하셔야 합니다.

2. 보드와 연결된 포트 번호를 확인 하신 후 연결하셔야 합니다.
: 프로세싱이 실행 버튼을 누르신 후 보드와 연결이 안되 실 경우, 포트 번호를 확인하세요.

1. 실행 버튼을 누르시면 프로세싱 콘솔창에서 포트 번호를 확인 하실 수 있습니다.
 


2. 보드와 실행된 포트를 확인 하시고 프로세싱 코드를 확인하세요.

 println(Serial.list());    //포트번호 전부 출력
  
 port = new Serial(this, Serial.list()[0], 115200);  //첫 번재 포트로 연결

 

만약 COM22와 아두이노 보드가 연결되어 있다면 리스트의 두번째 있는 번호이므로 list()[1]로 수정하셔야 합니다.

 

소프트웨어 및 하드웨어 설명

1. 스케치 설명

스케치는 한 폴더 안에 두 개의 파일로 이뤄져 있습니다.
PulseSensorAmped 파일과 Interrupt파일로 이뤄져 있습니다.
 

void setup(){
  pinMode(blinkPin,OUTPUT);         
  pinMode(fadePin,OUTPUT);          
  Serial.begin(115200);             
  interruptSetup();                 // (인터럽트)0.002초 마다 심박 재기
}

 

심장박동을 사용하여 심박수를 잰다음 프로세싱으로 넘겨주기 위해서는 일정한 순간마다 
심박을 재는 동시에 프로세싱으로 값또한 넘겨 주어야 합니다.
한 번에 한 기능만 수행 할 수 있는 아두이노에서는 이를 어떻게 처리해야 할 까요?

이럴때 사용 할 수 있는 것이 인터럽트라는 개념입니다.
만약 여러분이 밥을 먹고 있는 데 중요한 전화가 왔다면 밥을 먹다가 전화를 받을 것입니다.
여기서 밥을 먹는 행위가 메인 프로그램이 실행되는 것이고 전화가 인터럽트에 해당합니다.

즉, 어떤 특정 신호에 의해 인터럽트가 호출되면 프로세서는 수행 중이던 작업을 멈추고 해당 인터럽트에 연결된 
함수를 호출합니다. 또 일정 시간마다 발생되는 인터럽트를 타이머 인터럽트라 합니다.

PulseSensorAmped 파일은 메인 프로그램입니다. 이 스케치 안에 setup함수를 보시면 
interruptSetup이라는 함수를 보실 수 있습니다.
intterutSetup은 0.002초 마다 심박 수를 재는 타이머인터럽트를 발생하는 신호를 설정하는 함수입니다.
메인 스케치가 실행될 때 일정시간마다 심박수를 재는 인터럽트가 발생되는 것입니다.

 

void interruptSetup(){     
  
  TCCR2A = 0x02;     //모드 설정 : CTC Mode
  TCCR2B = 0x06;     //256 PRESCALER 
  OCR2A = 0X7C;      //CTC MODE 설정시, 이 값(124)과 같아질 때 인터럽트 발생
  TIMSK2 = 0x02;     //사용할 타이머 인터럽트를 enable
  sei();              
} 

일정시간마다 인터럽트를 일어나게 하는 것은 ATmega128 내부의 타이머를 사용하는 것입니다.
이 타이머를 설정하기 위해서는 위와 같이 레지스터를 설정해야 합니다.
간단히 설명하면, 모드, 카운트 되는 시간, 비교값, 사용할 타이머 인터럽트 설정을 합니다.
레지스터 설정에 대한 자세한 원리 보다도 인터럽트 전체 원리를 이해하도록 합시다.
심박 센서 스케치 만큼은 아니지만 간단한 인터럽트는 쓰일 수 있기 때문입니다.


 
ISR(TIMER2_COMPA_vect){                         //124가 되었을 때, 인터럽트 발생
    cli();                                      
    Signal = analogRead(pulsePin);              //심박수 읽음
    sampleCounter += 2;                        
    int N = sampleCounter - lastBeatTime;     
}

 

레지스터에 설정한 대로 특정 주기에 인터럽트가 발생할 신호가 되면
실제 인터럽트에서 행해지는 기능은 ISR함수입니다.
ISR은 인터럽트 발생시 호출되는 함수입니다.
위 스케치의 경우 심박 센서를 읽어와서 처리하는 부분입니다.

위의 설명이 이해가지 않더라도 괜찮습니다.
인터럽트의 개념과 호출되는 함수ISR 개념에 대해서만 이해하셔도 좋습니다.
 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

심박센서, 아두이노, 오렌지보드

키미 2017-05-02 22:06:38

일정 심박수 이상될시 led가 켜지는 소스 있으신가요?!

KHS 2017-11-11 22:18:52

안녕하세요 스케치 예제를 통해서 블루투스를 이용해 BPM 값을 전송하면 수신받는 곳에서 값이 뜨지 않고 이상한 문자가 뜨는데 무슨 오류인지 알수있을까요?