수행기록퀘스트2

심박수 및 산소포화도 측정기
2023. 12. 16 (토) 20:45 rudals 조회 1221 좋아요 0 스크랩 0 댓글 0

IoT를 활용한 생활 편의 기능 만들기

 

# 프로젝트명: 
심박수 및 산소포화도 측정기

# 프로젝트 설명
사용자는 심박수 및 산소포화도 측정기를 사용하여 심박수 및 산소 포화도를 측정합니다.
이렇게 측정된 값은 MQTT를 사용하여 Node-RED dashboard에 전송되어 보여줍니다.
Node-RED dashboard의 스케줄러를 사용하여 주기적으로 약 복용 시간 및 자가 검진 시간을 설정할 수 있으며, 설정된 시간에 핸드폰으로 알림 메시지를 전송하여 약 복용 또는 자가 검진을 할 수 있도록 합니다.

# 하드웨어 구현
WeMos D1 Mini, MAX30102, OLED를 사용하여 간단한 ‘심박수 및 산소포화도 측정기’ 를 만들어 보았습니다.
 
IoT관련 사용될 WeMos D1 mini와 OLED입니다.
 
WeMos D1 mini에 연결할 수 있게 심박수 센서를 모듈 형태로 만들었습니다.
아래와 같이 3개의 모듈이 연결됩니다.
 
내부 모듈이 안보이도록 케이스를 만듭니다.
 
아래 부분으로 손가락을 넣어 심박수를 측정할 수 있도록 하였습니다.
 
위쪽은 하얀색 동그라미 부분은 기기 인식을 위한 NFC 태그를 붙어 놓았습니다.
이 NFC 태그 부분에 핸드폰을 가져다 대면 NFC 태그를 인식하여 관련 안드로이드 앱이 실행됩니다. (동영상 참고)

부팅 완료 후 모습입니다.
 
실제 측정시 심박수와 산소 포화도가 OLED에 표시됩니다.

 

# 소프트웨어 구현
WeMos D1 Mini에서 심박수 센서와 MQTT의 동작을 구현하였습니다.(첨부파일을 참고)

 
Node-RED를 사용하여 아래와 같은 flow를 작성하였습니다.

 


MQTT에 Subscribe 메시지를 수신하여 데이터를 심박수와 산소 포화도를 분리하여 각 각의 차트와 그래프에 표시합니다. 또한 스케줄러를 사용하여 약 복용시간 및 측정시간의 알림을 설정하여 MQTT로 publish 됩니다. (참고로 이 publish된 데이터는 핸드폰에서 알림 용도로 사용됩니다.)
위 그림의 왼쪽 사각형 Test 영역은 디버깅 및 테스트를 위해 구현된 내용입니다.

아래 이미지는 위 flow에서 구현된 코드를 적용한 Node-RED dashboard입니다.
심박수, 산소포화도, 스케줄러, 테스트의 총 4개의 탭으로 구성되어 있습니다.

모니터링 및 관리 목적으로 안드로이드 어플리케이션을 제작해 보았습니다.
심박수 및 산소 포화도 측정기의 NFC 태그에 핸드폰을 가져다 대면 아래 이미지와 같이 앱의 메인 화면이 실행되어 MQTT와 연결 시 심박수 및 산소 포화도를 표시해 줍니다. 또한 Node-RED dashboard에서 설정된 스케줄러에 의해 동작되는 약 복용 및 심박수 체크 시간을 사용자에게 알람으로 알려줍니다.

# 데모 영상

 

첨부파일
Quest2.zip 다운로드

로그인 후
참가 상태를 확인할 수 있습니다.