13P by xguru 2달전 | favorite | 댓글 2개
  • 영국암센터의 "하루 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()로 센서 업데이트를 시작하고 중지함
    • pitchaccelerationY 값을 업데이트하고 델리게이트에 알림
  • Pushups Detector 구현
    • "세션" 개념을 도입하여 데이터 스트림 분석을 시작하고 중지함
    • 원시 데이터를 해석하여 사용자의 자세와 푸시업 여부를 판단함
    • 임계값을 사용하여 푸시업의 내려가기와 올라오기를 감지하고 카운트를 증가시킴
    • MotionManagerDelegate를 구현하여 가속도와 피치 값의 변화를 처리함
  • SwiftUI로 간단한 뷰 구현
    • 세션 시작/종료 버튼과 푸시업 횟수를 표시하는 큰 숫자로 구성됨
    • 사용자의 자세가 올바른지 여부를 표시하는 텍스트도 추가함
  • 데이터 분석 및 시각화
    • Swift Charts를 사용하여 원시 센서 데이터를 시각화하고 패턴을 식별함
    • Y축 가속도에서 푸시업의 내려가기(-1.0)와 올라오기(+0.5) 패턴을 발견함
    • 실제 테스트를 통해 임계값을 조정하여 정확도를 개선함 (+0.4, -0.7)
  • 실시간 추적의 매력
    • 에어팟을 착용하고 시작 버튼을 누르면 푸시업 횟수가 자동으로 업데이트됨
    • 사용자의 상호작용 없이도 동작함
  • 프로젝트를 통해 배운 점
    • 조기 검증과 반복적 개선의 중요성을 재확인함
    • 의미 있는 것을 만드는 재미와 만족감을 느낌
    • UI 개선과 여러 날에 걸친 푸시업 카운팅 등 개선할 점도 있음
    • 에어팟을 통한 오디오 피드백을 추가하여 시각적 인터페이스 외에도 사용자 경험을 개선함
  • 결론
    • Core Motion, SwiftUI, AI를 결합하여 24시간 만에 피트니스 트래킹에 새로운 차원을 더한 앱을 개발함
    • 새로운 기술을 일상의 문제에 어떻게 적용할 수 있을지에 대한 도전이 중요함

새삼 3대운동 횟수세주는 갤럭시워치가 대단하네요

몇년전에 아이폰 근접 센서를 활용한 Thirty라는 푸시업 챌린지 앱을 만들었었는데, 에어팟으로 하는 방법도 있군요.. 근접센서는 다이나믹 아일랜드 추가 이후 정확도가 다소 떨어진듯한 ㅠ