- 영국암센터의 "하루 100회 푸시업 챌린지" 참여를 위해 앱을 찾다가, 직접 푸시업 횟수를 세는 재미있는 것을 만들어 보기로 함
- iOS의 Core Motion 프레임워크 탐구
- 센서 데이터를 활용하는 방법을 모색하다가 CMHeadphoneMotionManager를 사용하여 에어팟의 움직임 데이터를 활용하기로 함
- Core Motion은 가속도계, 자이로스코프, 지자기 센서 등의 데이터를 제공함
- 정확하고 신뢰할 수 있는 움직임과 방향 측정에 유용함
- 사용자의 개인정보 보호를 위해 데이터 액세스 권한이 필요함
- AI 적용 방법 고민
- ARKit 등의 프레임워크를 사용하는 앱은 이미 많이 있음
- 대신 AI가 아이디어 구현을 도와줄 수 있을 것으로 판단함
- Core Motion에 대해 학습시킨 GPT를 활용하여 자연어로 질문하고 해결책을 얻음
- 앱 아키텍처 설계
- Motion Manager: 센서 데이터를 스트리밍하고 장치 센서 업데이트를 처리함
- Pushups Detector: 스트리밍된 데이터를 분석하여 미리 정의된 임계값에 따라 푸시업을 감지하고 계산함
- SwiftUI View: 사용자가 푸시업을 수행할 때 실시간으로 업데이트되는 반응형 UI를 제공함
- Motion Manager 구현
- 델리게이트 패턴을 사용하여 업데이트되는 값에 액세스함
-
CMHeadphoneMotionManager
를 사용하여 장치 모션 데이터를 가져옴
-
startUpdates()
와 stopUpdates()
로 센서 업데이트를 시작하고 중지함
-
pitch
와 accelerationY
값을 업데이트하고 델리게이트에 알림
- Pushups Detector 구현
- "세션" 개념을 도입하여 데이터 스트림 분석을 시작하고 중지함
- 원시 데이터를 해석하여 사용자의 자세와 푸시업 여부를 판단함
- 임계값을 사용하여 푸시업의 내려가기와 올라오기를 감지하고 카운트를 증가시킴
-
MotionManagerDelegate
를 구현하여 가속도와 피치 값의 변화를 처리함
- SwiftUI로 간단한 뷰 구현
- 세션 시작/종료 버튼과 푸시업 횟수를 표시하는 큰 숫자로 구성됨
- 사용자의 자세가 올바른지 여부를 표시하는 텍스트도 추가함
- 데이터 분석 및 시각화
- Swift Charts를 사용하여 원시 센서 데이터를 시각화하고 패턴을 식별함
- Y축 가속도에서 푸시업의 내려가기(-1.0)와 올라오기(+0.5) 패턴을 발견함
- 실제 테스트를 통해 임계값을 조정하여 정확도를 개선함 (+0.4, -0.7)
- 실시간 추적의 매력
- 에어팟을 착용하고 시작 버튼을 누르면 푸시업 횟수가 자동으로 업데이트됨
- 사용자의 상호작용 없이도 동작함
- 프로젝트를 통해 배운 점
- 조기 검증과 반복적 개선의 중요성을 재확인함
- 의미 있는 것을 만드는 재미와 만족감을 느낌
- UI 개선과 여러 날에 걸친 푸시업 카운팅 등 개선할 점도 있음
- 에어팟을 통한 오디오 피드백을 추가하여 시각적 인터페이스 외에도 사용자 경험을 개선함
- 결론
- Core Motion, SwiftUI, AI를 결합하여 24시간 만에 피트니스 트래킹에 새로운 차원을 더한 앱을 개발함
- 새로운 기술을 일상의 문제에 어떻게 적용할 수 있을지에 대한 도전이 중요함