VERSION 007 — 통합 설계 기준서
기준일: 2026년 10월 13일
개발 상태: 설계 확정 및 기술 검증 준비
프로그램 환경: Windows / C# / WinForms / .NET 8 / x64
최종 UI 기준: 사용자가 제공한 MOTION-it 최종 디자인 이미지
이 문서는 MOTION-it의 목적, 설계, 기능, 하드웨어, 개발 환경 및 진행 상황을 통합한 최종 기준서다.
새로운 대화방에서 이전 대화 내용을 기억하지 못하더라도 이 문서를 읽으면 프로젝트를 이해하고 개발을 이어갈 수 있어야 한다.
따라서 이 문서에는 단순한 기능 목록뿐 아니라 설계 결정의 이유, 변경해서는 안 되는 사항, 아직 검증하지 않은 기술적 문제까지 기록한다.
VERSION 007은 VERSION 006의 핵심 설계를 유지하면서 최신 UI 디자인과 변경 사항을 반영한 통합 문서다.
이전 문서와 내용이 충돌하면 VERSION 007을 우선 적용한다.
특히 UI 디자인은 기존 문서의 텍스트 설명보다 사용자가 제공한 최종 디자인 이미지를 우선한다.
MOTION-it은 웹캠으로 사람의 움직임을 인식하고, 인체의 주요 관절과 좌표 데이터를 추출하여 외부 장치의 움직임으로 연결하는 Windows 프로그램이다.
첫 번째 목표는 화면 속 사람의 움직임을 실제 서보모터의 움직임으로 연결하는 것이다.
단순한 인체 인식 프로그램이 아니다.
인체 데이터를 추출하고 이를 실제 기계의 움직임으로 연결하는 창작 도구다.
향후에는 다양한 창작 작업에 활용할 수 있는 인체 데이터 소스로 발전할 가능성도 고려한다.
그러나 첫 번째 버전에서는 여러 장치와 복잡한 기능을 한꺼번에 지원하지 않는다.
먼저 하나의 관절 데이터가 실제 모터 하나의 움직임으로 연결되는 시스템을 완성한다.
실행 → 연결 → 선택 → 전송 → 실제 움직임 확인
사용자는 프로그래밍이나 복잡한 하드웨어 설정을 공부할 필요가 없다.
프로그램을 실행하고 장치를 연결한 다음 원하는 관절 또는 좌표 기준을 선택하고 필요한 동작을 실행하면 된다.
복잡한 기술은 프로그램 내부에서 처리한다.
항목
확정 사항
프로그램 이름
MOTION-it : HUMAN BODY SOURCE
운영체제
Windows
프로그래밍 언어
C#
UI 프레임워크
WinForms
.NET
.NET 8
플랫폼
x64
화면 해상도
1920 × 1080
화면 비율
16:9
레이아웃
고정
다른 해상도 지원
불필요
반응형 레이아웃
불필요
Visual Studio
사용하지 않음
개발 방식
명령 프롬프트 및 .NET CLI
개인용 프로그램이므로 다양한 화면 크기와 해상도를 지원하기 위해 설계를 복잡하게 만들지 않는다.
1920 × 1080 하나로 끝낸다.
다른 해상도 지원, 대체 레이아웃, 불필요한 설정 화면은 추가하지 않는다.
사용자가 제공한 MOTION-it 최종 디자인 이미지가 실제 프로그램의 UI 구현 기준이다.
이 이미지는 참고용 예시가 아니다.
실제 프로그램의 배치와 시각적 구조를 결정하는 원본이다.
이전에 작성된 UI 설명이나 오래된 레이아웃이 최종 디자인 이미지와 충돌하면 최신 이미지를 우선한다.
개발자는 이미지를 기준으로 실제 화면을 구현해야 하며, 임의로 디자인을 새롭게 발명하지 않는다.
화면 왼쪽에는 사람을 최대한 크게 보여주는 카메라 화면을 배치한다.
카메라 영상은 원래 센서의 4:3 화면 비율을 활용한다.
인체가 충분히 크게 보이도록 구성한다.
인체 인식 결과와 주요 관절점을 영상 위에 표시한다.
선택된 관절은 일반 관절과 구분되도록 강조한다.
관절점의 실제 위치와 마우스 클릭 판정 영역이 일치해야 한다.
인체 영상은 프로그램의 핵심이므로 불필요하게 작아져서는 안 된다.
화면 오른쪽에는 실제로 필요한 제어 메뉴만 배치한다.
기존 최종 디자인에 표시된 START, JOINT, XYZ 좌표 및 전송 관련 요소를 기준으로 구현한다.
불필요한 메뉴를 추가하지 않는다.
새로운 설정 화면을 만들지 않는다.
메뉴의 위치와 배치를 임의로 변경하지 않는다.
기존 색상과 디자인 분위기를 유지한다.
글씨 가독성은 필요한 범위에서만 소폭 개선한다.
기존에 사용자가 만든 최종 디자인을 실제로 작동하는 프로그램으로 구현한다.
새로운 디자인을 발명하는 프로젝트가 아니다.
다음 요소는 금지한다.
불필요한 장식
과도한 네온 효과
입체 패널과 불필요한 3D 효과
지나치게 두꺼운 테두리
복잡한 장식용 애니메이션
사용자가 요청하지 않은 메뉴와 설정
기존 디자인을 임의로 재해석한 레이아웃
쌍팔년도 디자인 금지.
화려하게 꾸미는 것보다 원본의 비율, 배치, 색상 및 가독성을 정확하게 구현하는 것이 중요하다.
진행률 표시는 사용자가 작업 상태를 쉽게 이해할 수 있도록 제공한다.
그러나 화면에 불필요한 숫자와 상태 표시를 계속 노출하지 않는다.
진행률은 필요한 작업이 진행되는 순간에만 표시한다.
프로그램이 대기 중일 때는 화면을 차분하게 유지한다.
START 영역에는 기존에 계획한 심장박동처럼 부드러운 색상 또는 명암 변화 효과를 적용한다.
효과는 사용자가 자연스럽게 버튼에 시선을 두도록 하는 정도로 제한한다.
최종 디자인 원본에 포함된 시각적 표현을 우선하며, 새로운 장식 효과를 추가하지 않는다.
Arduino UNO R3를 연결하고 최초 준비가 필요한 동안 START 옆에 진행률을 표시한다.
예시:
CONNECTING ARDUINO... 35%
PREPARING... 68%
READY. 100%
위 문구는 표현 예시이며, 최종 문구는 실제 UI 원본과 일치시킨다.
진행률은 실제 작업 상태를 반영해야 한다.
준비가 완료되기 전에 100%를 표시하지 않는다.
최초 준비가 끝난 뒤에는 정상적인 연결 상태에서 불필요한 준비 화면을 반복하지 않는다.
사용자가 전송 동작을 실행하면 필요한 동안 하나의 통합된 진행률을 표시한다.
예시:
ARDUINO UPLOAD 67%
내부적으로 여러 작업이 진행되더라도 사용자에게 여러 개의 진행률을 보여주지 않는다.
전체 과정을 대표하는 퍼센트 하나만 표시한다.
내부 단계별 진행률은 표시하지 않는다.
불필요한 상태 목록을 추가하지 않는다.
실제 작업이 완료되기 전에 100%를 표시하지 않는다.
작업이 완료되면 진행률 표시를 종료한다.
실제 진행률을 정확하게 측정하기 어려운 작업은 기술 검증 과정에서 합리적인 계산 방식을 결정한다.
숫자만 임의로 증가시키는 가짜 진행률은 사용하지 않는다.
또한 펌웨어 준비·업로드와 실제 움직임 데이터 전송은 서로 다른 작업일 수 있으므로, 구현 과정에서 두 작업의 관계를 명확하게 구분한다.
정상적인 동작마다 불필요하게 펌웨어를 다시 업로드하지 않는다.
이 항목은 VERSION 007에서 반드시 수정해야 하는 디자인 규칙이다.
기존 VERSION 006에는 진행바가 왼쪽에서 오른쪽으로 확장된다고 기재되어 있었다.
이전 규칙은 폐기한다.
진행바는 그라데이션이 위쪽에서 아래쪽으로 부드럽게 확장되는 방식으로 구현한다.
하나의 연속된 진행바 구조를 사용한다.
시작점은 위쪽에 고정한다.
아래쪽 끝이 진행 상태에 따라 확장된다.
실제 작업 진행률에 맞춰 확장한다.
작업이 다음 단계에 도달하면 자연스럽게 멈춘다.
불필요한 반동이나 튕김 효과를 사용하지 않는다.
그라데이션은 프로그램에서 구현한다.
진행바의 움직임은 부드럽게 표현하되, 표시되는 퍼센트는 실제 작업 상태와 일치해야 한다.
왼쪽에서 오른쪽으로 확장하는 방식은 사용하지 않는다.
전송이 성공하면 짧고 명확한 성공 효과를 제공한다.
전송 성공을 확인한다.
진행률 표시와 비슷한 글자 크기로 간결한 성공 메시지를 표시한다.
짧은 축하 애니메이션을 실행한다.
효과가 끝나면 평상시 화면으로 복귀한다.
축하 효과는 음악의 이퀼라이저처럼 잠깐 역동적으로 움직이는 느낌을 지향한다.
다만 성공 순간에만 효과를 집중한다.
평상시에는 차분하게 유지하고, 성공 효과가 끝난 뒤에는 불필요한 움직임을 계속하지 않는다.
성공 애니메이션은 실제 작업이 성공했을 때만 실행한다.
실패하거나 연결이 끊어진 경우 성공 효과를 표시해서는 안 된다.
웹캠으로 사람을 인식하고 주요 관절점을 추출한다.
인체 인식 기술은 C# WinForms 및 .NET 8 환경에서 안정적으로 실행할 수 있는 방법을 기술 검증을 거쳐 선정한다.
아직 특정 인식 라이브러리나 모델을 최종 확정한 것으로 간주하지 않는다.
각 관절은 고유한 ID를 가진다.
관절 데이터에는 다음 정보가 연결된다.
관절 ID
관절 이름
화면상 위치
XYZ 좌표
인식 유효성
선택 상태
화면에 표시되는 관절점, JOINT 목록, XYZ 좌표 및 관련 OUTPUT은 동일한 관절 데이터를 공유해야 한다.
같은 관절을 기능마다 별도로 관리하는 구조는 피한다.
인체 인식 기술에서 제공하는 좌표를 사용한다.
다음 항목은 서로 구분하여 관리한다.
화면상의 2차원 이미지 좌표
인체 인식 기술이 추정한 XYZ 좌표
XYZ 좌표의 의미와 좌표계는 선정한 인식 기술에 따라 확인한다.
특히 웹캠에서 추정한 Z값을 실제 거리 측정값과 동일한 것으로 가정하지 않는다.
좌표를 모터 제어에 사용하기 전에 좌표계와 값의 의미를 검증한다.
관절 인식이 일시적으로 실패하면 이전 좌표를 새로운 데이터인 것처럼 사용하지 않는다.
유효하지 않은 데이터는 별도로 구분한다.
필요한 경우 좌표의 미세한 흔들림을 완화할 수 있지만, 인식 결과 자체를 임의로 변경해 사용자가 의도한 움직임을 제한해서는 안 된다.
관절 선택은 두 가지 방법을 제공한다.
웹캠 화면에 표시된 관절점을 클릭한다.
선택된 관절은 즉시 활성화되고 관련 데이터가 연결된다.
오른쪽 제어 영역의 JOINT 목록에서 원하는 관절을 선택한다.
화면에서 관절점을 클릭하든 JOINT 목록에서 선택하든 동일한 관절 데이터가 활성화되어야 한다.
JOINT 목록에는 큰 동작을 제어하는 데 필요한 주요 관절만 표시한다.
손가락처럼 세밀한 관절은 제외한다.
정확한 관절 목록은 선택한 인체 인식 기술의 지원 범위를 확인한 뒤 확정한다.
단, 관절을 지나치게 많이 나열해 화면을 복잡하게 만들지 않는다.
JOINT 목록은 스크롤 없이 한 화면에서 한눈에 확인할 수 있도록 구성한다.
이 항목은 VERSION 006의 기존 규칙을 변경한다.
기존 문서에는 JOINT 목록의 마지막 스크롤 위치를 기억한다고 되어 있었으나, VERSION 007에서는 목록 자체에 스크롤을 사용하지 않는다.
따라서 다음 기능은 필요하지 않다.
JOINT 목록 스크롤
마지막 스크롤 위치 저장
이전 스크롤 위치 복원
관절 목록은 화면에 맞게 구성하고 필요한 관절만 제공한다.
평소에는 관절점을 파란색으로 표시한다.
선택된 관절은 밝기 증가 또는 테두리 강조 등 기존 디자인에 어울리는 방식으로 구분한다.
선택 상태는 한눈에 알아볼 수 있어야 한다.
화면의 관절점과 마우스 클릭 판정 영역이 정확하게 일치해야 한다.
프로그램은 관절 데이터와 좌표 데이터 중 원하는 제어 기준을 선택할 수 있도록 한다.
화면 또는 JOINT 목록에서 관절을 선택한다.
선택된 관절의 움직임 데이터를 모터 제어에 사용한다.
XYZ 좌표 중 사용할 축을 선택한다.
X축
Y축
Z축
선택된 축의 좌표 변화가 모터의 목표 회전 각도에 반영되도록 한다.
예를 들어 X축을 선택하면 해당 좌표의 변화에 따라 모터의 목표 각도가 변하도록 한다.
사용자는 어떤 데이터를 제어 기준으로 사용할지만 선택한다.
좌표를 회전 각도로 변환하는 작업은 프로그램 내부에서 처리한다.
복잡한 수학적 설정이나 불필요한 세부 옵션을 사용자에게 요구하지 않는다.
단, 제어 기준을 선택하는 일과 실제 모터의 회전 각도를 계산하는 일은 서로 다르다.
좌표 변화량과 모터 각도를 연결하는 규칙은 기술 검증 과정에서 확정한다.
첫 번째 실험의 표준 하드웨어는 다음과 같다.
항목
확정 사양
아두이노 보드
Arduino UNO R3
서보모터
MG90S
모터 종류
180° 위치 제어형
기어
금속 기어
PC 연결
USB
최초 시험 모터 수
1개
보드 선택 메뉴와 모터 선택 메뉴는 만들지 않는다.
첫 번째 버전에서는 정해진 하드웨어만 사용한다.
선배가 구매할 하드웨어는 다음과 같다.
번호
품목
수량
용도
1
Arduino UNO R3
1개
PC와 모터 사이의 제어 장치
2
안정화된 5V 전원 공급 장치
1개
서보모터 전원
3
USB 데이터 케이블
1개
PC와 아두이노 연결
4
MG90S 서보모터
1개
실제 회전 동작
5
점퍼 케이블
1세트
아두이노·모터·전원 연결
이 중 USB 케이블은 보드의 USB 단자와 호환되는 데이터 통신용 케이블이어야 한다.
점퍼 케이블이 다른 구성품에 포함되어 있다면 중복 구매하지 않는다.
사랑의 밧떼리도 필요하다. ㅋㅋㅋㅋㅋㅋ
단, 실제 구매 품목은 모터용 안정화된 5V 전원 공급 장치다. 일반적인 배터리와 혼동하지 않는다.
모터 1개를 시험하는 경우에도 실제 부하와 순간 전류를 고려해 전원 용량을 확인한다. 5V 2A급은 검토를 시작할 수 있는 기준이며, 최종 적합성은 시험 과정에서 확인한다.
서보모터는 아두이노의 5V 핀에서 직접 전원을 공급하는 방식보다 별도 전원 공급 장치를 사용하는 구성을 우선 검토한다. 이때 아두이노와 모터 전원의 접지는 공통으로 연결한다.
PC 및 개발 환경 준비
웹캠 사용
프로그램 개발 및 테스트
모터 장착
실제 배선 및 전원 연결
실제 하드웨어 구동 확인
USB 장치 감지
통신 포트 확인
아두이노 통신
인체 데이터 처리
좌표와 회전 각도 변환
모터 제어 명령 전송
연결 및 통신 오류 처리
하드웨어와 소프트웨어의 담당 범위를 명확하게 구분한다.
사용자가 원하는 연결 방식은 단순하다.
MOTION-it을 실행한다.
Arduino UNO R3를 USB로 연결한다.
프로그램이 보드를 자동 감지한다.
필요한 준비 작업을 자동으로 진행한다.
준비가 완료되면 사용할 수 있는 상태로 전환한다.
사용자가 COM 포트를 직접 찾거나 선택하지 않도록 한다.
프로그램은 가능한 한 다음 과정을 자동으로 처리한다.
USB 장치 감지
통신 포트 확인
필요한 도구 준비
고정 펌웨어 확인
필요한 경우 펌웨어 컴파일 및 업로드
통신 상태 확인
준비 완료 여부 확인
단, 이 모든 과정이 실제로 자동화 가능한지는 기술 검증을 통해 확인한다.
드라이버 문제, USB 케이블 불량, 보드 고장 등 프로그램만으로 해결할 수 없는 문제까지 무조건 자동 복구할 수 있다고 가정하지 않는다.
문제가 발생하면 사용자가 이해할 수 있는 간단한 안내를 표시한다.
이미 정상적으로 준비된 보드라면 불필요한 준비 작업을 반복하지 않는다.
USB 연결이 끊어지더라도 프로그램 전체가 종료되어서는 안 된다.
연결 상태를 확인하고 필요한 안내를 제공한다.
펌웨어는 하나의 안정적인 버전을 선정해 고정한다.
사용자가 펌웨어를 선택하거나 직접 관리하는 기능은 만들지 않는다.
펌웨어 버전 선택
펌웨어 업데이트 메뉴
사용자가 직접 관리하는 펌웨어 설정
불필요한 버전 관리 기능
최초 연결 시 프로그램은 현재 펌웨어 상태를 확인한다.
필요한 경우에만 컴파일 및 업로드를 수행한다.
이미 필요한 펌웨어가 설치되어 있고 정상적으로 작동한다면 불필요한 업로드를 반복하지 않는다.
사용자가 아두이노 개발 환경을 직접 실행하거나 코드를 작성할 필요가 없도록 한다.
다만 자동 컴파일과 업로드를 위해 필요한 도구를 프로그램이 어떻게 준비하고 관리할지는 실제 기술 검증을 거쳐 확정한다.
펌웨어는 프로그램 내부에서 관리하고, 사용자는 펌웨어를 신경 쓰지 않는 것이 목표다.
이 항목은 VERSION 006에서 확정된 중요 사항이다.
프로그램에 임의의 소프트웨어 회전 범위 제한을 추가하지 않는다.
사용자가 의도한 움직임을 임의로 제한하지 않는다.
불필요한 포즈 제한 기능을 만들지 않는다.
별도의 소프트웨어 안전 회전 범위를 임의로 설정하지 않는다.
MG90S 자체의 물리적 작동 범위는 모터의 특성에 따른다.
프로그램이 모터의 움직임을 임의로 잘라내는 방식은 사용하지 않는다.
인체 인식 프로그램에서 추출한 XYZ 좌표를 그대로 아두이노에 전달한다고 해서 모터가 사람의 움직임을 재현하는 것은 아니다.
프로그램 내부에서 좌표 변화와 회전 각도를 연결해야 한다.
기본 처리 과정은 다음과 같다.
선택된 관절 또는 XYZ 데이터를 읽는다.
해당 데이터의 변화량을 계산한다.
정해진 변환 규칙에 따라 목표 회전 각도를 계산한다.
필요하다면 인식 결과의 미세한 흔들림을 완화한다.
계산된 제어 데이터를 아두이노로 전달한다.
아두이노가 서보모터를 제어한다.
좌표 변환 규칙은 기술 검증을 통해 확정한다.
인체 인식 결과에는 작은 흔들림이 발생할 수 있다.
필요하다면 이러한 흔들림을 완화할 수 있다.
단, 이 처리는 불필요한 떨림을 줄이기 위한 것이어야 한다.
사용자가 의도한 움직임이나 포즈를 제한하기 위한 기능으로 변질되어서는 안 된다.
첫 번째 버전에서는 복잡한 인체 운동학이나 다관절 역기구학을 구현하지 않는다.
먼저 관절 데이터와 모터 하나의 관계를 검증한다.
정상적으로 작동하면 이후 확장 가능성을 검토한다.
MOTION-it은 인체 데이터를 다양한 창작 작업에 활용할 수 있는 데이터 소스를 지향한다.
그러나 첫 번째 버전에서는 확정된 하드웨어의 구동을 우선 완성한다.
화면의 관절점, JOINT 목록, XYZ 좌표 및 OUTPUT은 동일한 데이터를 공유한다.
관절 ID를 기준으로 데이터가 일관되게 연결되어야 한다.
같은 관절 정보를 여러 기능에서 별도로 관리하지 않는다.
향후 다른 장치나 여러 모터로 확장할 수 있도록 내부 구조는 고려한다.
그러나 첫 번째 버전부터 모든 하드웨어와 통신 방식을 지원하지 않는다.
보드 선택 메뉴 없음
모터 선택 메뉴 없음
복잡한 출력 설정 없음
불필요한 사용자 설정 없음
확장 가능성은 내부 구조에 남기되, 첫 번째 프로그램은 작고 명확하게 만든다.
항목
사양
언어
C#
UI
WinForms
프레임워크
.NET 8
플랫폼
x64
개발 도구
명령 프롬프트 및 .NET CLI
Visual Studio
사용하지 않음
화면
1920 × 1080 고정
사용자는 프로그래머가 아니다.
따라서 개발 과정은 이해하기 쉽게 설명하고 한 단계씩 진행한다.
기본 작업 순서는 다음과 같다.
저장 → 빌드 → 테스트 → 결과 확인
코드 수정은 전체 파일 교체 방식으로 진행한다.
부분 코드만 제공해 사용자가 직접 복잡하게 수정하도록 하지 않는다.
한 번에 여러 단계를 진행하지 않는다.
각 단계에서 정상적으로 작동하는지 확인한 뒤 다음 단계로 넘어간다.
관절점, JOINT, XYZ 좌표 및 OUTPUT이 동일한 데이터를 공유한다.
USB 연결, 준비, 전송, 완료 및 오류 상태를 일관되게 관리한다.
실제 작업의 진행 상태와 화면 애니메이션을 분리한다.
USB 통신, 펌웨어 준비, 데이터 변환 및 모터 제어가 UI 코드와 뒤섞이지 않도록 한다.
사용자가 의도한 움직임을 임의로 제한하는 기능을 넣지 않는다.
첫 번째 버전의 목표에 필요한 기능만 구현한다.
전체 프로그램을 작성하기 전에 핵심 기술을 개별적으로 테스트한다.
개발 전에 구조적 문제를 발견하고 해결한다.
기술적으로 검증되지 않은 기능을 작동한다고 가정하지 않는다.
설계가 확정되었다고 해서 모든 기술적 사항이 검증된 것은 아니다.
본격적인 UI 통합 전에 핵심 기술을 개별적으로 확인해야 한다.
웹캠 영상이 정상적으로 표시되는가?
인체의 주요 관절점이 실시간으로 추출되는가?
XYZ 좌표를 얻을 수 있는가?
좌표의 의미와 좌표계가 명확한가?
인식이 일시적으로 실패할 때 데이터가 적절하게 처리되는가?
.NET 8 환경에서 안정적으로 실행되는가?
인체 인식 기술은 실제 테스트 결과를 바탕으로 선정한다.
Arduino UNO R3를 자동 감지할 수 있는가?
통신 포트를 자동으로 확인할 수 있는가?
USB 통신이 안정적으로 작동하는가?
연결 상태를 정확하게 확인할 수 있는가?
연결이 끊어져도 프로그램이 종료되지 않는가?
고정 펌웨어를 자동으로 확인할 수 있는가?
필요한 도구를 프로그램에서 관리하거나 준비할 수 있는가?
필요한 경우 컴파일과 업로드를 자동으로 수행할 수 있는가?
이미 정상적으로 준비된 펌웨어를 불필요하게 반복 업로드하지 않을 수 있는가?
이 과정은 프로그램의 핵심 사용 경험을 좌우하므로 반드시 검증한다.
MG90S에 회전 명령을 전달할 수 있는가?
별도 전원 공급 장치로 안정적으로 구동할 수 있는가?
모터가 의도한 방향으로 회전하는가?
좌표 변화가 의도한 회전으로 연결되는가?
인식 결과의 작은 흔들림이 불필요한 모터 떨림으로 이어지지 않는가?
화면의 관절점과 JOINT 메뉴가 동일한 데이터를 사용하는가?
관절 선택이 정확하게 반영되는가?
XYZ 좌표가 정상적으로 표시되는가?
연결 준비와 전송의 진행률이 실제 작업 상태를 반영하는가?
진행바가 위쪽에서 아래쪽으로 확장되는가?
전송 진행률이 하나만 표시되는가?
성공 효과가 실제 성공 시에만 실행되는가?
검증 결과에 따라 세부 구현 방법은 조정할 수 있다.
단, 확정된 기본 설계와 사용자 경험은 유지한다.
코드를 두 번 작성하는 수고를 줄이기 위해 다음 순서로 진행한다.
웹캠 영상, 관절점 및 XYZ 좌표를 확인한다.
아직 전체 UI를 만들지 않는다.
먼저 인체 인식 기술이 실제로 작동하는지 확인한다.
Arduino UNO R3의 자동 감지와 USB 통신을 확인한다.
보드를 연결하고 통신할 수 있는 최소한의 시험 프로그램으로 검증한다.
고정 펌웨어를 준비하고 필요한 경우 자동 컴파일 및 업로드가 가능한지 확인한다.
자동화에 필요한 도구와 실행 방식도 이 단계에서 결정한다.
MG90S에 회전 명령을 전달하고 정상적으로 움직이는지 확인한다.
전원 공급과 배선도 함께 검증한다.
선택한 관절 또는 XYZ 축의 데이터가 모터의 회전으로 연결되는지 확인한다.
좌표 변화와 회전 각도의 관계를 검증한다.
임의의 소프트웨어 회전 제한은 추가하지 않는다.
화면의 관절점과 JOINT 목록을 연결한다.
두 가지 선택 방식이 동일한 관절 데이터를 사용하도록 한다.
주요 관절만 표시하고 목록에 스크롤을 사용하지 않는다.
확정된 1920 × 1080 레이아웃에 기능을 통합한다.
사용자가 제공한 최종 디자인 이미지를 기준으로 구현한다.
기존 디자인을 임의로 변경하지 않는다.
다음 전체 흐름을 확인한다.
실행 → 연결 → 인체 인식 → 관절 선택 → 데이터 처리 → 전송 → 모터 작동
진행률, 성공 메시지, 축하 효과 및 연결 오류 처리도 함께 확인한다.
프로그램이 완성되었다고 판단하기 전에 다음 항목을 확인한다.
1920 × 1080 해상도에서 정상 표시
16:9 고정 레이아웃 유지
왼쪽 4:3 카메라 화면이 크게 표시됨
오른쪽 제어 메뉴가 원본 디자인과 일치함
불필요한 메뉴가 없음
기존 디자인의 색상과 분위기 유지
JOINT 목록에 스크롤이 없음
웹캠 영상 정상 표시
주요 관절점 정상 인식
XYZ 좌표 추출
화면에서 관절점 선택 가능
JOINT 목록에서 관절 선택 가능
두 선택 방식이 동일한 데이터를 사용
선택된 관절이 시각적으로 강조됨
Arduino UNO R3 자동 감지
USB 통신 정상 작동
필요한 펌웨어 준비 및 업로드 검증
MG90S 정상 구동
별도 전원 공급 정상 작동
좌표와 회전 각도 변환 정상 작동
불필요한 소프트웨어 회전 제한이 없음
최초 준비 과정에서만 필요한 진행률 표시
전송 과정에서 통합된 진행률 하나만 표시
진행바가 위쪽에서 아래쪽으로 확장
실제 작업 상태와 진행률이 일치
작업 완료 전에 100%를 표시하지 않음
전송 성공 시 성공 메시지 표시
성공 순간에만 짧은 축하 효과 실행
실패 시 성공 효과가 실행되지 않음
USB 연결 해제 시 프로그램이 종료되지 않음
연결 오류를 이해하기 쉬운 메시지로 안내
정상 연결에서 불필요한 펌웨어 업로드를 반복하지 않음
전체 사용 흐름이 정상적으로 작동함
항목
최종 결정
프로그램 이름
MOTION-it : HUMAN BODY SOURCE
프로그램 목적
인체 움직임을 실제 모터 움직임으로 연결
화면 해상도
1920 × 1080 고정
화면 비율
16:9
UI 기준
사용자가 제공한 최종 디자인 이미지
왼쪽 화면
사람을 크게 보여주는 4:3 카메라 화면
오른쪽 화면
필요한 제어 메뉴만 배치
디자인 변경
임의 변경 금지
인체 인식
웹캠 기반
관절점 표시
주요 관절만 표시
세밀한 관절
손가락 등 제외
관절 선택
화면 클릭 또는 JOINT 목록
JOINT 목록
스크롤 없이 한눈에 표시
선택 상태
관절점 강조
제어 기준
JOINT 또는 XYZ
아두이노
Arduino UNO R3
모터
MG90S 금속 기어 서보
최초 모터 수
1개
펌웨어
안정적인 단일 버전
펌웨어 업데이트 메뉴
없음
USB 연결
자동 감지 및 준비 목표
연결 준비 진행률
필요한 동안 하나의 % 표시
전송 진행률
전체 과정을 통합한 하나의 %
진행바 방향
위쪽에서 아래쪽으로 확장
성공 메시지
간결하게 표시
성공 효과
짧은 축하 애니메이션
소프트웨어 회전 제한
임의 제한 없음
데이터 변환
프로그램 내부에서 처리
하드웨어 구매
Arduino UNO R3, 모터용 전원, USB 케이블, MG90S, 점퍼 케이블
개발 환경
C# WinForms / .NET 8 / x64
Visual Studio
사용하지 않음
코드 수정
전체 파일 교체 방식
개발 진행
한 단계씩 검증
불필요한 기능
추가하지 않음
다음 사항은 설계가 미완성이라서가 아니라, 실제 구현 전에 기술 검증이 필요한 항목이다.
.NET 8에서 안정적으로 작동하면서 주요 관절과 XYZ 좌표를 제공할 수 있는 기술을 검증한 뒤 선정한다.
어떤 좌표 변화가 어떤 회전 명령으로 연결되는지 실제 모터를 이용해 확인한다.
사용자에게 복잡한 수학적 설정을 요구하지 않는 가장 단순한 기본 규칙을 우선한다.
보드 자동 감지, 통신 포트 확인, 펌웨어 확인 및 필요한 경우의 자동 컴파일·업로드를 실제로 검증한다.
가능성이 확인되지 않은 기능을 이미 구현 가능한 것으로 단정하지 않는다.
각 작업에서 측정할 수 있는 진행 상태를 확인하고 진행률 계산 방식을 결정한다.
실제 작업과 무관하게 숫자만 증가시키는 방식은 사용하지 않는다.
선정된 인체 인식 기술이 제공하는 관절 중 프로그램에 필요한 주요 관절만 선정한다.
스크롤 없이 표시할 수 있는 범위로 구성한다.
이 항목들은 검증 결과에 따라 세부 구현 방법을 결정하되, 확정된 UI와 사용 원칙은 변경하지 않는다.
이 프로젝트를 이어받는 AI는 다음 원칙을 반드시 지켜야 한다.
첫째. 이 문서를 기준으로 삼는다.
이전 대화의 기억에 의존하지 않는다. 이전 문서와 충돌하면 VERSION 007을 우선 적용한다.
둘째. 최종 디자인 이미지를 기준으로 구현한다.
디자인을 새롭게 발명하거나 임의로 변경하지 않는다.
셋째. 기술 검증을 먼저 한다.
인체 인식, USB 통신, 펌웨어 준비, 모터 구동 등 핵심 기능을 개별적으로 확인한 뒤 통합한다.
넷째. 확인되지 않은 기능을 작동한다고 가정하지 않는다.
기술적으로 불확실한 부분은 검증해야 할 항목으로 분류한다.
다섯째. 사용자가 원하지 않는 기능을 추가하지 않는다.
불필요한 설정, 선택 메뉴, 장식 및 복잡한 기능을 만들지 않는다.
여섯째. 사용자가 의도한 움직임을 임의로 제한하지 않는다.
미세한 흔들림을 완화하는 것과 의도한 움직임을 제한하는 것은 구분한다.
일곱째. 코드를 두 번 작성하지 않도록 노력한다.
개발 전에 구조적 문제를 검토하고, 한 단계씩 저장·빌드·테스트·확인한다.
여덟째. 사용자가 프로그래머가 아니라는 사실을 고려한다.
어려운 용어를 남발하지 않고, 한 번에 하나의 작업만 안내한다. 코드 수정은 전체 파일 교체 방식으로 제공한다.
아홉째. 확정된 설계를 불필요하게 다시 논의하지 않는다.
이미 결정된 사항은 그대로 유지한다. 실제 기술적 문제가 발견되었을 때만 문제를 설명하고 해결 방법을 검토한다.
프로젝트: MOTION-it : HUMAN BODY SOURCE
현재 버전: VERSION 007
설계 상태: 핵심 설계 통합 및 최종 UI 기준 확정
개발 상태: 본격적인 프로그램 통합 전 기술 검증 준비
최종 디자인: 사용자가 제공한 최종 디자인 이미지
첫 번째 개발 목표: 웹캠 인체 인식, Arduino UNO R3 통신, MG90S 모터 구동을 개별 검증한 뒤 하나의 프로그램으로 통합
다음 작업: 인체 인식 기술 검증부터 시작한다.
개발 과정에서 기술적으로 확인되지 않은 기능을 작동한다고 가정하지 않는다.
핵심 기술을 검증하고, 확인된 결과를 바탕으로 개발을 진행한다.
최종 원칙
최종 디자인 이미지를 기준으로 구현한다.
기능은 필요한 것만 만든다.
기술 검증을 먼저 한다.
실제 작동을 확인한 뒤 통합한다.
사용자가 원하지 않는 기능을 추가하지 않는다.
확정된 설계를 임의로 변경하지 않는다.
개발 목표는 기능이 많은 프로그램이 아니라, 처음부터 의도한 대로 작동하는 프로그램을 만드는 것이다.
현재 상태: VERSION 007 설계 통합 완료. 기술 검증 단계로 진행 준비.
확정! MOTION-it 필수 기능으로 추가!!!
이건 내가 멋대로 기능을 확장한 게 아니라, 핀이 실제로 필요한 기능을 발견한 거니까 당연히 넣어야지.
그리고 이 기능은 생각보다 중요해.
최대 12개 모터 지원
실제 연결한 모터만 사용
각 모터를 개별적으로 제어
인체 관절과 모터의 연결 관계 설정
필요하면 인체 움직임과 다른 방식으로 모터들을 움직이도록 확장
기본 모드: 모터 하나를 연결해서 바로 테스트.
다중 모터 모드: 필요한 모터 채널을 활성화하고 각각의 움직임을 설정.
평소에는 복잡한 설정을 감추고, 필요할 때만 다중 모터 기능을 사용하면 돼.
물론 실제로 여러 모터를 구동하려면 별도 전원과 배선도 검증해야 해.
그리고 개발할 때는 처음부터 12개를 한꺼번에 구현하는 게 아니라, 모터 하나로 제어 구조를 검증한 다음 여러 모터로 확장할 수 있도록 프로그램을 설계하는 것이 핵심이야.
이렇게 하면 초기 개발은 단순하게 유지하면서도 나중에 구조를 다시 뜯어고치는 일을 줄일 수 있어.
그런데 핀, 이게 재미있는 게 뭔지 알아? ㅋㅋㅋㅋㅋ
처음에는 카메라로 사람의 움직임을 인식해서 모터 하나를 움직이려던 거잖아.
그런데 이제 모터 여러 개를 서로 다른 방식으로 움직일 수 있게 됐어.
사람의 동작을 그대로 재현할 수도 있고, 사람의 동작 하나를 여러 기계의 움직임으로 바꿀 수도 있지.
MOTION-it의 창작 가능성이 한 단계 더 넓어진 거야.
그리고 무엇보다 핀이 실제로 필요해.
그럼 넣어야지. ㅋㅋㅋㅋㅋㅋ 😎
VERSION 007 설계 업데이트: 다중 모터 제어는 선택 기능이지만, 프로그램에 반드시 구현해야 하는 필수 항목!