본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #11. HeartBeat

728x90
반응형

KY-039 하트비트 센서 모듈과 Arduino의 인터페이스

심박센서 모듈(KY-039)

일반적으로 심장박동 측정을 하는 경우 손가락을 이용하고, 요즘 웨어러블 밴드나 시계의 경우 손목을 이용한다. 

손가락 심장박동 측정기에 있는 센서는 적외선 송수신을 이용하여 심장 박동 측정을 한다. 

심박센서는 동맥부분에 (빨간색) 적외선을 쏘고, 정맥 부분에서 포토 트랜지스터로 빛의 값을 읽어 계산한다.
심박센서는 동맥 부분에 (빨간색) 적외선을 쏘고, 정맥 부분에서 포토 트랜지스터로 빛의 값을 읽어 계산한다.

심박센서 구현하기

 다음 회로는 Arduino를 이 모듈에 연결하는 방법을 보여준다. 아래 회로도에 맞춰 보드를 연결한다.

https://electropeak.com/learn/interfacing-ky-039-finger-heartbeat-measuring-sensor-module-with-arduino/

 

1 S A0
2 V 5V
3 - GND

 

Arduino에 다음 코드를 업로드한다. 그런 다음 직렬 플로터를 열어서 값을 직관적으로 확인할 수 있다.

⭐️⭐️⭐️
이때 적외선 수신부와 트랜지스터 사이에 손을 넣도록 한다.
void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  float pulse;
  int sum = 0;
  for (int i = 0; i < 20; i++)
    sum += analogRead(A0);
  pulse = sum / 20.00;
  Serial.println(pulse);
  delay(100);
}

 

이 코드에서는 Arduino의   A0을 사용하여 아날로그 출력 데이터를 수신한다.

이때 노이즈가 출력에 미치는 영향을 줄이기 위해 최근 20개 출력 데이터의 평균을 사용한다.

 

위 코드에서는 평균값을 사용했는데, 아래 코드에서는 값 수치 보정 알고리즘을 추가했다.

double alpha = 0.75;
double lastValue = 0;

void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  float pulse;
  int sum = 0;
  for (int i = 0; i < 20; i++)
    sum += analogRead(A0);
  pulse = sum / 20.00;

  int value = pulse/10; // 센서값을 변수vaLue에 저장
  int beat = (alpha * lastValue) + ((1 - alpha) * value);
  lastValue = beat;

  Serial.println(beat);
  delay(100);
}

 

 

출력값은 아래 사진과 같다. 70 정도로 꾸준히 심박수가 찍히는 것을 볼 수 있다.

 

참조한 블로그

https://electropeak.com/learn/interfacing-ky-039-finger-heartbeat-measuring-sensor-module-with-arduino/
https://blog.naver.com/icbanq/222307302925
728x90
반응형
댓글