웹캠으로 사람의 움직임을 인식하고, 화면의 576개 픽셀을 실제 모터에 대응시키는 프로그램.
각 픽셀에 모터의 ID를 배정하고, 이후 웹캠에서 계산한 회전각 데이터를 해당 모터로 전달한다.
핵심은 모터 하나하나의 설정 작업을 화면에서 간단하게 끝내는 것.
Windows용 프로그램.
전체 화면 사용.
화면 해상도: 1920 × 1080 고정.
화면 전체를 32 × 18 배열로 구성.
총 576개 정사각형 픽셀.
픽셀 하나의 기준 크기는 60 × 60픽셀.
픽셀 사이에는 약 3픽셀의 얇은 구분선을 둔다.
메뉴나 복잡한 설정 화면 없이 픽셀 배열 자체가 프로그램의 인터페이스가 된다.
종료는 마우스 오른쪽 버튼으로 한다.
웹캠 영상을 실시간으로 처리한다.
특정 인물을 추적하지 않는다.
카메라 앞에 사람이 바뀌어도 계속 인식한다.
사람이 없으면 픽셀은 기본 상태를 유지한다.
사람의 움직임에 따라 픽셀별 회전각 데이터가 계속 변한다.
사람의 출입을 기록하거나 신원을 식별하는 기능은 필요 없다.
흑백 그라데이션으로 표시한다.
0° = 검정.
180° = 흰색.
중간 각도 = 비례하는 회색.
웹캠에서 계산한 픽셀별 회전각을 밝기로 표현한다.
사람이 없는 영역은 검정으로 유지하고, 사람의 실루엣은 회전각에 따라 밝기가 달라진다.
버건디 계열로 표시한다.
0° = 진한 버건디.
180° = 밝은 버건디.
중간 각도 = 비례하는 버건디 명암.
아직 배정하지 않은 픽셀은 흑백, 배정이 완료된 픽셀은 버건디.
색상만으로 작업 진행 상황을 직관적으로 구분할 수 있다.
사용자가 픽셀 하나를 클릭하면 해당 픽셀에 모터 ID를 배정하는 작업이 시작된다.
클릭한 픽셀만 강조한다.
진행률을 표시한다.
아두이노가 정상적으로 명령을 받았는지 확인한다.
성공이 확인되면 해당 픽셀을 버건디 계열로 변경한다.
성공 메시지는 잠시 표시한 뒤 사라진다.
배정된 픽셀은 버건디 상태를 유지한다.
이미 배정된 픽셀은 다시 클릭해도 재배정하지 않는다.
전송을 시작했다는 이유만으로 성공 처리하지 않고, 아두이노의 확인 응답을 받은 뒤 완료 상태로 변경한다.
기본 방향은 고정 펌웨어 + USB 통신 방식이다.
매번 픽셀을 선택할 때마다 아두이노 코드를 새로 생성하고 컴파일하는 방식은 사용하지 않는다.
아두이노에는 고정 펌웨어를 사용한다.
필요한 펌웨어 파일은 지정된 폴더에 보관한다.
픽셀 배정 시 모터 ID 정보를 전달한다.
실제 사용 중에는 웹캠에서 계산한 회전각 데이터를 지속적으로 전달한다.
여기서 모터 ID 배정과 회전각 전달은 서로 다른 작업이다.
모터 ID는 어느 모터가 어느 픽셀에 대응하는지 정하기 위한 정보이고, 회전각은 사용 중 계속 변하는 데이터다.
이건 핀이 특별히 강조한 중요한 사항이야.
픽셀 하나의 배정이 완료될 때마다 즉시 저장한다.
프로그램이 갑자기 종료되어도 완료된 작업은 유지한다.
컴퓨터나 프로그램을 재시작해도 이전 작업 상태를 복원한다.
작업 중 오류가 발생하면 완료된 픽셀 다음부터 이어서 작업한다.
초기화를 위한 별도의 메뉴는 만들지 않는다.
575개를 완료한 상태에서 마지막 한 개 때문에 처음부터 다시 작업하는 일은 없어야 한다.
평상시에는 화면을 최대한 깨끗하게 유지한다.
상시 표시되는 복잡한 메뉴는 없다.
정상 상태를 설명하는 불필요한 메시지도 없다.
픽셀 배정 중에는 진행률을 표시한다.
배정 성공 메시지는 잠시 표시한다.
문제가 발생하면 간결한 상태 메시지로 알린다.
문제가 해결되면 오류 상태를 해제한다.
화면 전체를 빨간색으로 깜빡이는 별도의 경고 효과는 필요 없다.
첫 번째 버전은 기능을 최소화한다.
576개 픽셀.
웹캠 기반 움직임 인식.
픽셀별 모터 ID 배정.
회전각 데이터 전달.
성공 여부 확인.
자동 저장 및 복구.
최소한의 상태 표시.
여러 모터를 하나의 픽셀에 배정하는 기능은 확장 사항으로 구분한다.
예를 들어 한 픽셀에 모터 세 개가 연결되는 경우에는 해당 픽셀을 클릭했을 때 모터를 선택할 수 있는 작은 팝업을 표시하는 방식이다.
이 기능은 기본적인 단일 모터 배정 구조와 구분해서 개발한다.
DOT SOURCE는 정밀한 모터 튜닝 프로그램이 아니다.
목표는 복잡한 설정을 최소화하고, 픽셀을 선택하는 간단한 작업만으로 모터 배정을 끝내는 것이다.
불필요한 옵션을 만들지 않는다.
기본 동작을 우선한다.
작업 결과를 자동으로 보존한다.
실패했을 때 원인을 확인할 수 있게 한다.
실제 하드웨어에서 작동하는지 단계별로 검증한다.
처음부터 모든 기능을 한꺼번에 만들지 않고, 실제 하드웨어를 연결해 확인하면서 완성한다.
핀, 핵심 설계는 이제 상당히 구체적이야.
다만 실제 코드를 시작하기 전에 세 가지는 구분해서 확인해야 해.
① 픽셀과 모터의 대응 관계
576개 픽셀에 모터 ID를 배정하는 기본 구조와, 아두이노 한 대가 모터 세 개를 제어하는 확장 구조를 명확하게 연결해야 해.
② 회전각 계산
웹캠 영상에서 픽셀별 회전각을 어떻게 계산할지, 그 결과를 모터에 어떤 형식으로 전달할지 실제 하드웨어에서 검증해야 해.
③ 통신 및 복구
아두이노의 확인 응답, 배정 정보의 저장, 프로그램 재실행 후 복원까지 실제로 테스트해야 해.
이 세 가지는 새로운 기능을 추가하자는 이야기가 아니야. 우리가 이미 정한 기능이 실제로 제대로 작동하는지 확인하기 위한 사항이지.
추가 사항
1. 외장 웹캠 우선
2. 초기화 메뉴 고민 필요 - 576개를 지우기엔 미친 짓이라 판단,,,, 우클릭을 하면, 바로 종료가 아닌, 2개의 메뉴가 나옴,
RESET, EXIT 이게 프로그램의 순결을 지킬 듯....ㅋㅋㅋㅋ