MOTION-it은 웹캠으로 인식한 사람의 움직임을 Arduino와 서보모터의 실제 움직임으로 연결하는 Windows 프로그램이다.
목적은 단순한 모션 캡처가 아니다.
기술적 어려움 때문에 구현하지 못했던 창작 아이디어를 누구나 직접 실험할 수 있도록 만드는 것.
사용자는 아두이노 프로그래밍이나 복잡한 모터 제어 기술을 직접 다루지 않는다.
정해진 하드웨어를 연결하고, 프로그램에서 관절과 좌표축을 선택한 다음, 카메라 앞에서 움직이면 된다.
사람의 움직임을 다른 물체의 움직임으로 전환하고, 여러 모터를 조합해 복합적인 움직임을 만들어 내는 창작 도구다.
핵심은 기능의 다양성이 아니라 창작 과정에서 기술적 걸림돌을 제거하는 것이다.
소프트웨어
Windows용 프로그램
C# / WinForms / .NET 8 / x64
Visual Studio 없이 .NET CLI를 이용해 개발
화면 해상도 1920 × 1080 고정
하드웨어
Arduino UNO R3
MG90S 180° 위치 제어형 서보모터
최대 12개 모터 제어
PC와 아두이노의 USB 연결
모터용 별도 전원
보드와 모터 종류는 고정한다. 사용자가 하드웨어 종류를 선택하거나 복잡한 설정을 변경할 필요가 없도록 한다.
최대 12개 모터를 지원하되, 초기 개발에서는 단일 모터와 2개 모터의 작동을 우선 검증한다.
최종 확정된 원본 레이아웃을 기준으로 구현한다.
화면 비율 16:9, 해상도 1920 × 1080 고정
왼쪽에는 사람의 움직임을 보여주는 큰 웹캠 화면
오른쪽에는 모터 선택과 제어에 필요한 메뉴 배치
주요 관절을 표시하되 손가락처럼 세밀한 관절은 제외
모터 12개를 6열 × 2행으로 배열
상단에는 연결 상태와 진행 상황을 확인할 수 있는 영역 배치
기존 디자인을 새롭게 해석하거나 장식을 추가하지 않는다.
확정된 디자인을 실제로 작동하는 프로그램으로 구현하는 것이 목표다.
웹캠은 자동으로 인식한다.
카메라가 여러 대 연결되어 있다면 외장 웹캠을 우선 사용하고, 사용할 수 있는 외장 웹캠이 없다면 다른 카메라를 사용하도록 한다.
실제 선택된 웹캠의 장치명을 화면에 표시한다.
영상은 원본의 4:3 비율을 유지한다. 화면에 맞추기 위해 영상을 가로 또는 세로로 늘리지 않는다.
인체 인식은 큰 움직임에 필요한 주요 관절을 중심으로 한다.
주요 관절의 위치와 XYZ 좌표 추출
화면에서 관절점을 직접 선택
JOINT 목록에서도 관절 선택 가능
손가락 등 세밀한 관절은 제외
XYZ 제어에서는 한 번에 한 축만 선택
특정 인물의 신원을 식별하거나 추적하지 않는다.
카메라 앞에 있는 사람이 바뀌더라도 새로운 사람의 움직임을 자동으로 인식해 작동을 계속한다.
사람이 사라지면 모터는 마지막 상태를 유지하며, 자동으로 원래 위치로 복귀시키는 기능은 두지 않는다.
모터 12개는 각각 독립적으로 설정할 수 있다.
각 모터에는 다음 두 가지 입력 방식 중 하나를 지정한다.
JOINT
인체의 특정 관절을 선택한다.
해당 관절의 움직임을 모터 제어에 사용한다.
XYZ
X, Y, Z축 중 하나를 선택한다.
선택한 좌표축의 변화를 모터 제어에 사용한다.
관절과 XYZ축을 동시에 선택하거나 여러 좌표축을 조합하는 기능은 제공하지 않는다.
사용자가 복잡한 설정을 고민하지 않도록 각 모터의 입력 방식은 단순하게 유지한다.
모터 버튼을 누르면 해당 버튼이 깜빡이며 설정 대기 상태가 된다.
관절 또는 XYZ축을 선택한다.
설정을 변경하는 동안에는 다른 항목을 다시 선택할 수 있다.
깜빡이는 모터 버튼을 다시 누르면 설정이 확정된다.
확정된 모터 버튼은 설정 완료 상태로 표시된다.
확정된 모터 버튼을 다시 누르면 설정을 변경할 수 있다.
이미 설정한 모터를 수정해도 다른 모터의 설정은 유지한다.
별도의 복잡한 초기화 메뉴 대신 모터 버튼 자체를 설정과 재설정에 사용한다.
인체 화면에서 관절을 쉽게 선택할 수 있도록 한다.
실제 관절점은 작게 표시하되, 클릭할 수 있는 영역은 넓게 설정한다.
따라서 화면의 작은 점을 정확하게 겨냥하지 않아도 원하는 관절을 선택할 수 있다.
선택 과정에서는 시각적인 상태 변화로 현재 작업을 명확하게 구분한다.
선택 중인 관절점은 깜빡인다.
선택이 확정된 관절점은 크게 유지된다.
확정된 관절점은 다른 관절점과 구분되는 색상이나 표시를 사용한다.
JOINT 목록에서도 선택 상태가 명확하게 드러난다.
목록을 스크롤해야 하는 경우 마지막 위치를 기억한다.
사용자가 현재 무엇을 선택하고 있는지 쉽게 파악할 수 있어야 한다.
MOTION-it의 핵심은 사람의 움직임을 최대한 자연스럽게 모터로 전달하는 것이다.
기본 제어 방식은 사람의 움직임 크기와 속도에 대응하도록 설계한다.
사람이 천천히 움직이면 모터도 가능한 한 자연스럽게 천천히 움직인다.
사람이 빠르게 움직이면 모터도 가능한 한 빠르게 반응한다.
미세한 움직임이나 인식 노이즈에는 불필요하게 반응하지 않도록 한다.
임의의 소프트웨어 회전 범위 제한을 추가하지 않는다.
모터 방향을 반전하는 별도 옵션은 제공하지 않는다.
복잡한 목표 위치 설정이나 불필요한 제어 옵션을 추가하지 않는다.
사람이 바뀌어 관절 좌표가 달라지는 경우에도 새로운 움직임으로 자연스럽게 전환하는 것을 목표로 한다.
다만 좌표 변환 방식, 미세 움직임을 무시하는 기준, 사람 변경 시 전환 방식은 실제 시험을 통해 검증해야 한다.
MG90S 자체의 물리적인 회전 범위와 속도 한계는 프로그램으로 없앨 수 없다.
목표는 모터를 인위적으로 제한하는 것이 아니라, 사용자가 의도한 움직임을 불필요한 소프트웨어 제약 없이 전달하는 것이다.
아두이노는 USB로 연결한다.
최초 연결 시 필요한 펌웨어를 준비하고, 준비 과정에는 통합 진행률을 표시한다.
펌웨어는 미리 준비한 고정 폴더의 파일을 사용하는 방향으로 설계한다.
펌웨어가 이미 준비되어 있고 정상적으로 연결된다면 불필요한 준비 과정을 반복하지 않도록 한다.
아두이노 프로그램을 설정할 때마다 새로 작성하고 컴파일하는 방식 대신, 고정 펌웨어를 사용하고 PC에서 선택한 모터 설정을 USB 통신으로 전달하는 방식을 우선 채택한다.
이에 따라 펌웨어 준비와 모터 설정 전달을 분리한다.
다만 실제 통신 구조와 펌웨어 준비 과정은 기술 검증 후 확정한다.
최초 펌웨어 준비 시 진행률 표시
실제 작업 상태에 맞는 통합 진행률
완료 전 100% 표시 금지
정상 연결 상태에서는 불필요한 안내 반복 금지
연결 실패, USB 분리, 통신 오류 등은 하나의 상태 메시지 영역에 표시
문제가 해결되면 일시적인 오류 메시지를 정상 상태로 전환
복잡한 오류 해결 안내나 별도의 복구 메뉴는 만들지 않는다.
프로그램 상단의 상태 영역에서 현재 작동 상태를 확인할 수 있도록 한다.
정상 작동 시 녹색 표시
카메라 또는 장치에 문제가 있을 때 빨간색 표시
현재 사용 중인 웹캠 장치명 표시
연결 및 통신 오류는 통합 상태 메시지로 표시
프로그램을 실행했다고 즉시 모터 제어가 시작되는 것은 아니다.
START를 눌러야 실제 작동 단계로 들어간다.
전송이 성공하면 간결한 성공 메시지와 짧은 축하 애니메이션을 표시한다.
평상시에는 차분한 인터페이스를 유지하고, 성공 순간에만 짧은 시각 효과를 사용한다.
MOTION-it의 전체 사용 과정은 다음과 같다.
① 프로그램 실행
프로그램을 실행하고 웹캠 화면을 확인한다.
② 아두이노 연결
Arduino UNO R3를 USB로 연결한다.
최초 연결 시 필요한 펌웨어를 준비하며, 진행률을 표시한다.
③ START
웹캠 화면과 장치 상태를 확인한 뒤 START를 누른다.
④ 모터 선택
화면 상단의 12개 모터 버튼 중 설정할 모터를 선택한다.
선택된 버튼은 깜빡이며 설정 대기 상태가 된다.
⑤ 입력 방식 선택
JOINT 또는 XYZ를 선택한다.
JOINT라면 원하는 관절을 선택하고, XYZ라면 X·Y·Z 중 한 축을 선택한다.
⑥ 설정 확정
깜빡이는 모터 버튼을 다시 눌러 설정을 확정한다.
다른 모터도 설정하려면 같은 과정을 반복한다.
설정한 모터를 다시 누르면 해당 모터의 설정을 변경할 수 있다.
⑦ 아두이노 코드 버튼 클릭
설정한 내용을 아두이노에 전달한다.
정확한 버튼 동작과 통신 과정은 고정 펌웨어 방식의 기술 검증을 거쳐 확정한다.
⑧ 창작 시작
웹캠 앞에서 자유롭게 움직이며 실제 모터의 반응을 확인한다.
사용자가 해야 할 설정 작업은 여기서 끝난다.
코드 작성 전에 설계 검토를 마치고, 기술적으로 확인되지 않은 부분을 실제로 검증한다.
권장 개발 순서는 다음과 같다.
웹캠 인식 및 주요 관절·XYZ 좌표 추출
외장 웹캠 우선 선택 및 4:3 영상 표시 검증
아두이노 자동 감지와 USB 통신 검증
고정 펌웨어 준비 및 설정 전달 방식 검증
단일 MG90S 모터 구동
관절·XYZ 데이터와 모터 움직임의 연결
모터 2개의 동시 작동 검증
12개 모터 설정 인터페이스 구현
확정된 디자인 통합
사람 변경, 인식 중단, USB 분리 등 주요 상황 시험
전체 사용 흐름 테스트
실제 하드웨어를 사용해야 확인할 수 있는 사항은 작은 시험부터 진행한다.
전원 용량, 배선, 실제 모터의 물리적 상태 등은 사용자가 직접 확인한다.
MOTION-it은 범용 모터 제어 프로그램을 목표로 하지 않는다.
정해진 하드웨어와 사용 환경에서 창작에 필요한 기능을 단순하게 제공하는 개인용 창작 도구다.
이미 확정한 디자인과 기능을 임의로 변경하지 않는다.
불필요한 메뉴와 옵션을 추가하지 않는다.
사용자가 직접 설정하거나 해결해야 하는 기술적 작업을 최소화한다.
코드 작성 전에 가능한 문제를 최대한 찾아낸다.
실제 검증이 필요한 부분은 작게 시험한 뒤 확장한다.
코드 수정은 전체 파일 교체 방식으로 진행한다.
한 단계씩 저장, 빌드, 테스트, 결과 확인을 반복한다.
설계의 목적은 기능을 무한히 늘리는 것이 아니다.
실제 개발 중 발생할 수 있는 불필요한 수정과 시행착오를 줄이고, 완성된 프로그램을 누구나 쉽게 사용할 수 있도록 하는 것이다.
설계 정리 및 요구사항 검토 단계.
아직 본격적인 코드 작성은 시작하지 않았다.
핵심 기능과 사용 흐름은 구체화되었으며, 웹캠 인식, 아두이노 통신, 고정 펌웨어, 좌표 변환, 모터 제어 등은 단계별 기술 검증이 필요하다.
설계가 확정된 사항은 유지하되, 검증 과정에서 새로운 문제가 발견되면 기존 구조에 미치는 영향을 먼저 검토한다.