한국정보기술진흥원
한국정보기술신문
thumbnail

정보기술 ·

애플 실리콘 맥북, 비공개 가속도 센서를 파이썬으로 실시간 읽는다...오픈소스 공개

발행일
읽는 시간1분 40초

아이오킷 HID 경로 통해 초당 약 100회 3축 데이터 획득, 심장박동 감지까지 가능

개발자 올리비에 부르보네, 애플이 공개하지 않은 MEMS 가속도계 접근 기법 공개

[한국정보기술신문] 애플 실리콘(M1·M2·M3·M4) 맥북에 숨겨진 MEMS(미세전자기계시스템) 가속도 센서를 파이썬 코드로 실시간 접근하는 오픈소스 프로젝트가 등장해 개발자 커뮤니티의 주목을 받고 있다. 개발자 올리비에 부르보네가 깃허브에 공개한 'apple-silicon-accelerometer' 프로젝트는 애플이 공식 API로 제공하지 않는 센서 데이터를 저수준 시스템 인터페이스를 통해 추출하는 데 성공한 사례다.

공개 API 없는 센서에 어떻게 접근했나

이 프로젝트의 핵심은 애플의 아이오킷(IOKit) HID(Human Interface Device) 프레임워크를 우회적으로 활용하는 방식에 있다. 문제의 가속도 센서는 애플 실리콘 칩 내부의 센서처리장치(SPU, Sensor Processing Unit)가 관리하는 MEMS 센서로, 아이오킷 레지스트리 상에서 'AppleSPUHIDDevice'라는 항목으로 존재하지만 애플은 이를 공개 API나 프레임워크 형태로 외부에 노출하지 않고 있다.

부르보네는 벤더 사용 페이지 0xFF00, 사용 번호 3에 해당하는 경로를 직접 탐색해 IOHIDDeviceCreate로 장치를 열고, IOHIDDeviceRegisterInputReportCallback을 통해 비동기 콜백 방식으로 센서 값을 수신하는 기법을 개발했다. 수신되는 HID 리포트는 22바이트 구조로, 6·10·14번 바이트 오프셋에 각각 X·Y·Z축의 int32 리틀엔디언 값이 담긴다. 이 값을 65536으로 나누면 중력가속도(g) 단위의 수치를 얻을 수 있다. 콜백 수신 속도는 초당 약 100회로 측정됐다.

코드 구조와 사용 방법

프로젝트는 크게 두 개의 파이썬 파일로 구성된다. 핵심 로직을 담당하는 spu_sensor.py는 아이오킷 바인딩, 장치 검색, HID 콜백, 공유 메모리 링 버퍼를 구현하고 있으며, motion_live.py는 진동 감지 파이프라인, 심장박동 발리스토카디오그래피(BCG) 처리, 터미널 UI, 메인 루프로 구성돼 있다. 센서 읽기 로직이 spu_sensor.py에 독립적으로 분리돼 있어 다른 프로젝트에서 재사용하기 용이하다.

사용 방법은 비교적 단순하다. 저장소를 클론하고 requirements.txt에 명시된 의존성을 설치한 뒤, 아이오킷 HID 장치 접근에 관리자 권한이 필요하므로 sudo를 붙여 실행하면 된다. 자신의 맥에 해당 장치가 존재하는지 확인하려면 터미널에서 ioreg 명령어로 AppleSPUHIDDevice 항목을 조회하면 된다.

심장박동 감지라는 이색 활용 사례

이 프로젝트에서 특히 눈길을 끄는 기능은 발리스토카디오그래피(BCG) 기반 심장박동 감지다. 사용자가 트랙패드 근처에 손목을 올려놓으면, 심장 박동으로 인한 기계적 진동이 팔을 통해 맥북 섀시로 전달되며, 가속도 센서가 이를 감지한다. 프로젝트는 0.8~3Hz 대역의 밴드패스 필터를 적용하고 자기상관(autocorrelation) 방식으로 분당 심박수(BPM)를 추정한다. 개발자 스스로 '실험적이고 신뢰성이 높지 않으며 재미있는 활용 사례를 보여주기 위한 것'이라고 밝혔지만, 가속도 센서의 민감도가 얼마나 높은지를 단적으로 보여주는 사례다.

한국정보기술신문 정보기술분과 강민규 기자 news@kitpa.org