산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

무선 ECG 심박수 모니터: 아두이노 나노 & nRF24 착용형 디자인

부품 및 소모품

부품 수량
uECG 장치 (심박수 측정, nRF24 호환 프로토콜로 데이터 전송) 1
아두이노 나노 R3 1
nRF24 모듈 (범용) 1
아다프루트 네오픽셀 링: WS2812 5050 RGB LED (16개) 1
리튬 폴리머 배터리 (200mAh 이상) 1

필요 도구

프로젝트 소개

이전 버전은 가슴에 착용하고 uECG와 유선 연결이었는데, 시야 밖이라 LED 확인이 어렵고 와이어가 센서에 간섭을 줘 달리기 중엔 작동하지 않았습니다.

이번 버전은 손목 착용형으로 시선 내에서 확인 가능하고, 무선이라 신호 왜곡 없이 달리기 중에도 심박 부하 추적이 가능합니다.

1. 구성 요소

모든 핵심 작업(심박 측정, BPM 계산)은 uECG가 수행. 다이렉트 링크 모드에서 nRF24 호환 무선 프로토콜로 고해상도 ECG 데이터와 BPM을 전송. 아두이노 나노는 네오픽셀 링 크기에 딱 맞게 들어가 컨트롤러 역할을 합니다.

2. 회로도

nRF24 연결이 가장 복잡합니다. SPI 핀(MISO, MOSI, SCK, CS), 칩 인에이블, 전원 등 7개 와이어(14개 납땜 포인트) 필요. 핀 헤더 제거 후 패드에 직접 납땜해야 소형화 가능. 나머지는 단순: 네오픽셀 링(데이터 1선, 전원 2선), 배터리(전원 2선).

연결 상세

중요: MOSI, MISO, SCK는 아두이노 D11, D12, D13에만 연결 가능 (SPI 하드웨어 고정). 나머지 핀은 코드 수정으로 변경 가능.

3. 프로그래밍

유일하게 복잡한 건 RF 채널 설정. uECG와 nRF24가 파이프 주소의 비트 순서가 달라 애먹었는데, 비트 순서 반전 함수로 해결. 패킷 5번째 바이트가 BPM. 하드웨어 CRC 비활성화로 노이즈 필터링 위해 최근 5개 BPM 값이 모두 같을 때만 유효값으로 인정 (uECG가 초당 ~100패킷 전송이라 지연 없음). BPM을 색상과 점등 LED 개수로 변환 표시.

색상 매핑 로직

점등 LED 수 = (BPM - 80) / 8 (80 BPM 미만은 미표시, 고부하 구간 민감도 향상)

4. 손목 밴드 조립

열접착제로 부품 고정 (나노는 외부 링, nRF24는 내부 링 크기에 딱 맞음). 납땜 스테이션용 접지 밴드(벨크로 스트랩)에 봉제해 완성.

5. 테스트 후기

실제 러닝 테스트에서 192 BPM(전 LED 점등) 초과 기록. 센서 오류인 줄 알았으나 정지 후 서서히 내려가 실제 심박수임 확인. 청소년기 심장 질환이 있었으나 운동으로 극복했는데, 건강 기준치를 넘는 건지 의문. 최대 BPM 설정 상향 또는 운동 강도 조절 필요. 참고로 uECG는 EMG 센서로도 우수함 (로봇 손 제어 프로젝트 참조).

소스 코드 (bpm_watch.ino)

#include 
#ifdef __AVR__
#include 
#endif
#include 
#include 
#include 
#include 

int rf_cen = 9;  // nRF24 CE 핀
int rf_cs = 8;   // nRF24 CS 핀
RF24 rf(rf_cen, rf_cs);

// uECG 파이프 주소 (비트 순서 반전 필요)
uint8_t pipe_rx[8] = {0x0E, 0xE6, 0x0D, 0xA7, 0, 0, 0, 0};

#define PIN 5        // 네오픽셀 데이터 핀
#define NUMPIXELS 16 // LED 개수
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// 비트 순서 반전 함수 (uECG 파이프 주소용)
uint8_t swapbits(uint8_t a) {
  uint8_t v = 0;
  if(a & 0x80) v |= 0x01;
  if(a & 0x40) v |= 0x02;
  if(a & 0x20) v |= 0x04;
  if(a & 0x10) v |= 0x08;
  if(a & 0x08) v |= 0x10;
  if(a & 0x04) v |= 0x20;
  if(a & 0x02) v |= 0x40;
  if(a & 0x01) v |= 0x80;
  return v;
}

void setup() {
  pixels.begin();
  for(int i=0;i 0) rf_bpm = bb;
  }

  long ms = millis();
  if(ms - last_pix_upd > 10) { // 10ms마다 LED 업데이트
    int r, g, b;
    last_pix_upd = ms;
    int bpm = rf_bpm;
    int max_bright = 160;
    float dd = 25; // 색상 전환 BPM 간격
    float t1 = 90, t2 = t1+dd, t3 = t2+dd, t4 = t3+dd;

    if(bpm < t1) { r=0; g=0; b=max_bright; }
    else if(bpm < t2) { r=0; g=max_bright*(bpm-t1)/dd; b=max_bright-g; }
    else if(bpm < t3) { r=max_bright*(bpm-t2)/dd; g=max_bright-r; b=r/4; }
    else if(bpm < t4) { r=max_bright; g=0; b=max_bright/2 - max_bright*(bpm-t3)/(2*dd); }
    else { r=max_bright; g=0; b=0; }

    int on_pixels = (bpm-80)/8;
    for(int i=0;i

회로도

프리칭 파일(nrf24_led_ring_o2Gij5oigT.fzz) 제공. 별도 문서는 없음.

제조공정

  1. Renesas·Altran, 사회적 거리두기용 저펄스 UWB 손목시계 첫 출시
  2. 라즈베리 파이 공기질·기상 관측소 구축: InfluxDB & Grafana 연동
  3. 라즈베리 파이와 파이썬으로 원격 온도 센서 만들기 – 단계별 가이드
  4. 라즈베리 파이 대시보드로 집 온도 모니터링하기
  5. AWS IoT 알림으로 원격 심박수 모니터링 시스템 구축
  6. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  7. 아두이노와 스마트폰으로 만드는 스마트 전압계 – 초간단 DIY 프로젝트
  8. 아두이노와 MAX30100으로 만드는 실시간 IoT 심박수 모니터
  9. 스마트 의류 통합 심박 센서, 신뢰도 높은 착용형 모니터링 구현
  10. CNC 가공: 소재 및 부품의 정밀 제작