[포트폴리오] 지휘자의 모션을 인식하여 음원을 제어하는 프로그램
프로젝트 내용
사용자의 지휘 동작을 실시간으로 인식하여 음악의 재생 속도와 볼륨을 제어하는 하드웨어 및 소프트웨어 연동 시스템입니다. 연구용 하드웨어 모델(라즈베리파이)과 윈도우 기반 클라이언트 소프트웨어로 구성되었으며, 강남 코엑스 전시회에 출품되어 실제 사용자들과 상호작용했습니다.
실제 구동 장면
실제 구동 장면(화면)
라즈베리파이 서버 및 가속도센서가 달린 지휘봉

결과 출력 기능

1. 프로젝트 개요
- 성격: 모션 인식 기반 인터랙티브 미디어 외주 프로젝트
- 기간: 2025.01 - 2025.03
- 규모: 개발 인원 1명 (1인 개발)
2. 기술 스택
- Language: C# (Client), Python (Server)
- Framework / Platform: WinForms (.NET), Raspberry Pi OS
- Hardware / Communication: Accelerometer Sensor(가속도 센서 2개), BLE 5.0
- Library: LiveChart
3. 핵심 기술적 도전 및 구현
하드웨어 통신 및 센서 데이터 처리
라즈베리파이와 센서에서 수집되는 아날로그 신호를 애플리케이션의 제어 인자로 변환하는 통신 파이프라인을 구축했습니다.
- 무선 통신: BLE 5.0 규격을 사용하여 라즈베리파이 서버(Python)와 윈도우 클라이언트 간의 저지연 실시간 데이터 전송 환경을 구현했습니다.
- 데이터 정량화: 지휘봉 내부에 2개의 가속도 센서를 부착하여 3차원 공간상의 미세한 움직임과 방향성을 수치 데이터로 추출했습니다.
신호 처리 알고리즘 (FFT) 도입
지휘 동작의 불규칙한 원시 데이터(Raw Data)에서 유의미한 패턴을 도출했습니다.
- 수집된 가속도 센서 데이터에 FFT(Fast Fourier Transform, 고속 푸리에 변환) 알고리즘을 적용하여 시간 영역의 데이터를 주파수 영역으로 변환했습니다.
- 이를 통해 지휘의 주기(주파수)를 산출하여 음원의 재생 속도에 매핑하고, 진폭을 계산하여 볼륨 제어 로직에 적용했습니다.
아키텍처 설계 및 UI 최적화
유지보수성과 사용자 경험을 고려한 클라이언트 애플리케이션을 설계했습니다.
- MVP 패턴 적용: 윈도우 폼 환경에서 뷰(View)와 모델(Model)을 분리하는 MVP(Model-View-Presenter) 패턴을 도입하여 데이터 처리 로직과 UI 갱신 로직의 결합도를 낮추었습니다.
- 데이터 시각화: LiveChart 라이브러리를 활용하여 센서에서 수신되는 다량의 데이터를 실시간 그래프로 지연 없이 렌더링했습니다.
- 커스텀 컨트롤: UserControl 클래스를 상속받아 그라데이션 등 기본 윈도우 폼에서 제공하지 않는 커스텀 UI 요소를 직접 구현하고, 프린트 라이브러리를 연동해 분석 결과의 하드카피 출력을 지원했습니다.
4. 트러블슈팅 및 회고
유연한 아키텍처의 필요성 (인터페이스 활용)
프로젝트 납품 마감 하루 전, 클라이언트 측에서 FFT가 아닌 다른 신호 처리 알고리즘으로의 교체를 요구하는 상황이 발생했습니다. 이를 통해 핵심 비즈니스 로직이나 알고리즘 등 변동성이 높은 모듈은 구체 클래스에 직접 의존하기보다 인터페이스(Interface)를 활용해 추상화해야 함을 뼈저리게 체감했습니다. 전략 패턴(Strategy Pattern) 등 다형성을 활용한 객체지향적 설계가 실무에서의 급격한 요구사항 변경에 대응하는 강력한 무기임을 배웠습니다.
프로젝트 리스크 관리
개발 과정 내내 클라이언트와 주 단위로 소통하며 진행 상황을 공유했음에도 마지막 순간에 크리티컬한 요구사항 변경이 발생했습니다. 개발자는 단순히 코드를 작성하는 것을 넘어, 완료 승인이 떨어지는 시점까지 방심하지 않고 요구사항의 변동 여지를 선제적으로 고려하는 방어적이고 유연한 태도를 가져야 한다는 교훈을 얻었습니다.