아두이노로 만드는 신뢰도 높은 적외선 심박 센서: 단계별 가이드
프로젝트 동기
코로나19 팬데믹으로 의료 기기 수요가 폭증하고 가격이 치솟는 상황에서, 15달러 미만으로 제작 가능한 DIY 심박 센서의 필요성을 느껴 개발했습니다. 손가락을 센서에 올리기만 하면 실시간 심박 파형을 얻을 수 있습니다.
작동 원리
핵심 원리: 혈액이 손가락 혈관을 채울 때(수축기)와 빠져나갈 때(이완기)의 불투명도 차이를 이용합니다. 혈액량이 많을수록 손가락이 더 불투명해지고, 적을수록 투명해집니다. 이 불투명도 변화를 측정해 심박 파형을 그립니다.
측정 방식: IR 이미터가 손가락에 지속적으로 빛을 쏘고, 일부는 흡수·반사·투과됩니다. 손가락 반대편의 IR 수신기는 투과된 미세한 빛의 세기를 감지합니다. 이 강도는 혈액량에 따라 변하므로, 수신기 값을 실시간 플로팅하면 심박 파형이 그대로 나옵니다. 아두이노 IDE 시리얼 플로터로 파형을 확인할 수 있습니다.
정밀도 향상: 주변광 노이즈 제거
주변 물체(우리 몸 포함)에서 나오는 적외선이 노이즈가 됩니다. 아두이노가 측정 전 주변광 노이즈 평균값을 5회 측정해 저장한 뒤, 실제 측정값에서 이 평균을 빼서 순수 신호만 추출합니다.
// 주변광 노이즈 5회 측정 후 평균 계산
int reading = 0;
for(int i=0; i<5; i++) {
reading += analogRead(A0);
}
int reading_final = reading / 5; // 평균 노이즈 값
delay(100);
int Heart_rate = analogRead(A0) - reading_final; // 노이즈 제거된 최종 값
Serial.println(Heart_rate); // 시리얼 플로터로 출력
하드웨어 구성 및 배선
부품: 아두이노 우노, IR 이미터(또는 IR 근접 센서에서 수신부 차단), IR 수신기(또는 근접 센서에서 송신부 차단), USB-미니 USB 케이블.
회로도와 실물 배선 사진을 참조해 브레드보드 또는 납땜으로 구성합니다. IR 이미터와 수신기는 손가락을 사이에 두고 마주 보게 배치합니다.
실행 결과
작동 영상에서 실시간 심박 파형이 시리얼 플로터에 그려지는 모습을 확인할 수 있습니다.
부품 대체 팁 (급할 때)
- 이미터 대체: TV 리모컨 버튼을 테이프로 고정해 계속 누른 상태 사용
- 수신기 대체: 조도 센서(CDS/LDR) 사용 시 데이터시트 참고해 IR 감지 임계값 조정
완전 소스 코드
// code by YaSh - Heart_Rate_Sensor
int reading = 0;
int reading_final;
int Heart_rate;
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
}
void loop() {
reading = 0;
for(int i=0; i<5; i++) {
reading += analogRead(A0);
}
reading_final = reading / 5;
delay(100);
Heart_rate = analogRead(A0) - reading_final;
Serial.println(Heart_rate);
}
회로도
본문 이미지 참조: IR 이미터/수신기 ↔ 아두이노 A0 핀 연결 회로도