"Imbedded - 테이블탑 프로젝터"의 두 판 사이의 차이

MIE capstone
이동: 둘러보기, 검색
(중간 보고서 내용을 바탕으로 위키 페이지 전체 업데이트)
(중간보고서 내용 반영 - 설계변경사항, 상세 진행상황, 기술적 구현내용, 예산내역 업데이트)
15번째 줄: 15번째 줄:
 
서울시립대학교 기계정보공학과 2021430035 조수민 <br/>
 
서울시립대학교 기계정보공학과 2021430035 조수민 <br/>
 
서울시립대학교 기계정보공학과 2020430028 전진형 <br/>
 
서울시립대학교 기계정보공학과 2020430028 전진형 <br/>
 +
 +
===개발 소요 비용===
 +
404.8천원
  
 
==프로젝트 개요==
 
==프로젝트 개요==
78번째 줄: 81번째 줄:
 
| 10
 
| 10
 
|}
 
|}
 +
 +
==설계 변경사항==
 +
 +
===하드웨어 변경사항===
 +
'''터치 모듈'''
 +
* 기존: 터치 지점 오차범위 5mm 이하
 +
* 변경: 터치 지점 오차범위 20mm 이하
 +
* 사유: 벨로스탯에 구리선을 부착할 때 구리선의 폭(5mm)과 간격(20mm) 설정 시, 사람의 손가락이 닿는 면적(8mm)이 신호선들 사이에 고르게 퍼지지 못하는 문제 발생. 4개 지점 동시 터치가 아닌 한 곳만 눌리게 되어 기존 알고리즘 적용 불가능. 시간과 수정 용이성을 고려하여 소프트웨어 UI 수정으로 문제 해결.
 +
 +
'''커버 설계'''
 +
* 기존: 미니리프트 2개 사용, 볼 조인트 방식 소형문
 +
* 변경: 미니리프트 1개 사용, 미니 경첩 부착 소형문
 +
* 사유:
 +
  * 두 리드 스크류 결합 시 용접 필수, 7kg 프로젝터 지지 토크 불확실
 +
  * 용접 과정에서 리드 스크류 길이 단축 시 리프트 작동 문제 가능성
 +
  * 실험을 통해 리프트 1개로도 안정적 지지 확인
 +
  * 5mm 아크릴 재질에서 볼 조인트 소켓 가공 어려움
 +
 +
===소프트웨어 변경사항===
 +
'''1차 게임 요소'''
 +
* 체스 게임: 변동 없음
 +
 +
'''2차 게임 요소'''
 +
* 기존: 유희왕 등 카드게임
 +
* 변경: 포커 게임으로 선구현, 포켓몬 카드게임 개발 시도중
 +
* 카메라 모델 변경: imx219 → imx708 120도 광각
 +
* 사유:
 +
  * 유희왕: 뒷면 카드 규칙 존재로 전면 카드 인식 시스템과 부적합
 +
  * 매직 더 게더링: 동시 인식 카드 50장으로 라즈베리파이 연산능력 초과, 플레이 영역이 터치패드 범위 초과
 +
  * 포켓몬: 뒷면 규칙 없음, 최대 인식 요구 갯수 13장으로 처리 가능, 약 16,000장 API 정보 보유
 +
 +
'''3차 게임 요소'''
 +
* LLM API를 활용한 TPRG: 변동 없음
  
 
==동작 시나리오==
 
==동작 시나리오==
108번째 줄: 144번째 줄:
 
* 크기: 프로젝터 크기에 맞춘 맞춤 제작
 
* 크기: 프로젝터 크기에 맞춘 맞춤 제작
 
* 특징:  
 
* 특징:  
   * 미니 리프트 1개를 사용한 높이 조절 기능
+
   * 미니 리프트 1개를 사용한 높이 조절 기능 (커버 후면 손잡이)
 
   * 미니 경첩을 이용한 여닫이 소형문
 
   * 미니 경첩을 이용한 여닫이 소형문
 
   * 측면 방열구멍 설계
 
   * 측면 방열구멍 설계
 
   * 카메라 모듈 장착부
 
   * 카메라 모듈 장착부
 +
  * 프로젝터 하부면적보다 큰 견고한 아크릴판을 리프트 상단에 부착하여 안정성 확보
  
 
'''터치 패드 구조'''
 
'''터치 패드 구조'''
117번째 줄: 154번째 줄:
 
* 층 구조: 마감천(인조가죽) - Velostat - 구리 테이프
 
* 층 구조: 마감천(인조가죽) - Velostat - 구리 테이프
 
* 구리선 배치: 5mm 폭, 20mm 간격
 
* 구리선 배치: 5mm 폭, 20mm 간격
 +
* 마감 소재: 인조가죽 (적절한 반사 특성과 부드러운 사용자 경험 제공)
  
 
===제어부 및 회로 구현===
 
===제어부 및 회로 구현===
122번째 줄: 160번째 줄:
 
* PCB 설계: 크로스토크 방지를 위한 3W 규칙 적용
 
* PCB 설계: 크로스토크 방지를 위한 3W 규칙 적용
 
* 도선 사양: 두께 20mil, 간격 12mil (0.5A 기준)
 
* 도선 사양: 두께 20mil, 간격 12mil (0.5A 기준)
 +
* 사용 전류: 약 0.3A~0.5A (벨로스탯 가변저항 동작)
 
* 주요 부품:
 
* 주요 부품:
   * 4051D 8-channel multiplexer
+
   * 4051D 8-channel multiplexer × 10개
   * 595D 8-Bit Shift Registers
+
   * 595D 8-Bit Shift Registers × 10개
   * LMV324 Operational Amplifiers
+
   * LMV324 Operational Amplifiers × 1개
   * 저항: 10KΩ, 1KΩ
+
   * 저항: 10KΩ × 10개, 1KΩ × 10개
   * 커패시터: 100nF 16V
+
   * 커패시터: 100nF 16V × 100개
 +
  * LED × 10개
 +
* 연결: 2×20 커넥터 사용으로 접촉 불량 최소화
 +
* 제어: 아두이노 우노 모델 사용 (아두이노 미니는 성능 이슈로 터치 반응 불규칙)
  
 
'''카메라 시스템'''
 
'''카메라 시스템'''
 
* 모델: IMX-708 (12MP 자동초점 120도 광각)
 
* 모델: IMX-708 (12MP 자동초점 120도 광각)
 +
* 기존 모델(imx219) 대비 개선사항:
 +
  * 화질 향상으로 카드 인식률 개선
 +
  * 화각 확대로 촬영 범위 증가
 +
  * 자동 초점 기능 추가
 
* 위치: 프로젝터 상단 커버 내부
 
* 위치: 프로젝터 상단 커버 내부
 
* 기능: 실물 카드 인식, 게임 상황 촬영
 
* 기능: 실물 카드 인식, 게임 상황 촬영
  
 
===소프트웨어 설계 및 구현===
 
===소프트웨어 설계 및 구현===
'''1차 게임 - 4인 체스'''
+
 
* 기반: 오픈소스 체스 게임
+
====1차 게임 - 체스====
* UI 개선: 불필요한 요소 제거, 터치 최적화
+
* 기반: 오픈소스 체스 게임을 라즈베리파이 OS에 포팅
 +
* UI 개선:  
 +
  * 기보나, 수 돌리기 등 불필요한 UI 삭제
 +
  * 배경화면을 밝게 설정하여 빔프로젝터 저밝기 환경 대응
 +
  * 체스판 크기 확대로 터치 부정확성 보완
 
* 특징: 4명이 동시에 즐길 수 있는 변형 체스
 
* 특징: 4명이 동시에 즐길 수 있는 변형 체스
  
'''2차 게임 - 카드 게임'''
+
====2차 게임 - 카드 게임====
* Texas Hold'em Poker (프로토타입)
+
 
  * 카드 인식: YOLO 모델 활용 (90% 이상 인식률)
+
'''게임 UI 설계 필요조건'''
  * 게임 로직: 표준 텍사스 홀덤 규칙 구현
+
1. 모든 UI 상호작용은 터치로만 구현
  * UI: 각 플레이어별 개인 보드, 중앙 커뮤니티 카드
+
2. 프로젝터 위치에 따른 카메라 비추는 반경 변화 고려하여 인식 기물을 화면 중앙 배치
* 포켓몬 카드 게임 (개발 중)
+
3. 다중 플레이어를 위한 각 플레이어별 개인 보드 배치
  * API 활용: 16,000여 장의 카드 데이터베이스
+
4. 라즈베리파이 부하 고려하여 캡처 방식으로 카메라 인식 구현
  * 특수 효과: 스타디움 카드에 따른 배경 변화
+
5. 초보자 돌발행동 방지를 위한 변수 요소 사전 비활성화
 +
6. 게임 진행을 위한 사회자 역할 메시지 창 구현
  
'''3차 게임 - TRPG (개발 중)'''
+
'''Texas Hold'em Poker (프로토타입)'''
* 맵 생성: Polytopia Map Generator 오픈소스 활용
+
* 목적: 라즈베리파이 카메라 성능과 객체 인식 성능 검증
* 캐릭터 시스템: D&D 기반 12개 직업, 스펠 시스템
+
* 카드 인식: YOLO 모델 활용 (테스트 이미지 90% 이상 인식률)
* 스토리 진행: GPT API를 활용한 동적 시나리오 생성
+
* 게임 로직:  
 +
  * 플레이어 인원 선택 (2-5명)
 +
  * SB, BB 자동 배팅
 +
  * 콜, 체크, 폴드, 레이즈, 올인 배팅 옵션
 +
  * 프리플랍-플랍-턴-리버 단계별 진행
 +
  * 자동 승자 판별 및 배팅액 분배
 +
  * 파산 방지를 위한 3000칩 자동 지급
 +
* UI 특징:
 +
  * 각 플레이어별 개인 보드 (테이블 외각 배치)
 +
  * 중앙 커뮤니티 카드 배치 (카메라 인식 범위 고려)
 +
  * 배팅액에 따른 애니메이션 효과
 +
  * 쇼다운 상황 특수 효과
 +
* 변수 처리:
 +
  * 비순차 배팅 방지
 +
  * 턴 종료 전 카드 공개 방지
 +
  * 배팅액에 따른 선택지 제한
  
 
'''카드 인식 프로세스'''
 
'''카드 인식 프로세스'''
1. 카메라 설정 (해상도: 4608×2592, FPS: 30)
+
1. '''카메라 설정'''
2. 이미지 캡처 이진화 처리
+
  * 해상도: 4608×2592 (IMX-708 최대 해상도)
3. 카드 영역 검출 (OpenCV 활용)
+
  * FPS: 30 (33333㎲ 프레임 지속시간)
4. 카드 이미지 crop 및 샤프닝
+
  * AwbMode: 0 (자동 화이트 밸런스)
5. YOLO 모델을 통한 카드 인식
+
  * Sharpness: 1.5 (기본값보다 높은 선명도)
6. 인식 결과를 게임 로직에 반영
+
 
 +
2. '''이미지 전처리'''
 +
  * 카메라 캡처 → 'image' 변수 저장
 +
  * 이진화 처리 (프로젝터 밝은 환경 고려한 임계값 설정)
 +
  * 카드 최소 영역, 가로세로 비율 제한 (실제 카드 63mm×88mm 기준)
 +
 
 +
3. '''카드 검출'''
 +
  * detect_card_edges() 함수로 카드 윤곽 검출
 +
  * 4개 끝점 좌표 확보
 +
  * 여백 포함한 crop으로 문양/숫자 손상 방지
 +
 
 +
4. '''이미지 보정'''
 +
  * 샤프닝 커널 적용으로 확대 시 화질 저하 보완
 +
  * 인식 모델 최적화를 위한 이미지 품질 향상
 +
 
 +
5. '''모델 인식'''
 +
  * YOLO 모델 적용
 +
  * 인식률 30% 이상 결과 중 최고 신뢰도 선택
 +
  * 좌표 정보 활용한 카드 순서 정렬 (Y좌표 오차 허용)
 +
 
 +
6. '''게임 로직 반영'''
 +
  * 인식 결과를 게임 상태에 반영
 +
  * 승자 판별 로직 실행
 +
 
 +
'''포켓몬 카드 게임 (개발 중)'''
 +
* API 활용: 16,000여 장의 카드 데이터베이스
 +
* 특수 효과: 스타디움 카드에 따른 배경 변화
 +
* 과제: 한국판 카드 인식 모델 부재 (대부분 영문판으로 학습된 모델)
 +
* 해결방안: 영문판 카드 구매 또는 한국판 카드 일부 학습 모델 제작
 +
 
 +
====3차 게임 - TRPG====
 +
* 맵 생성: Polytopia Map Generator 오픈소스 활용 (GNU GPL 라이선스)
 +
* 캐릭터 시스템:
 +
  * D&D 기반 12개 직업 선택
 +
  * 스펠 사용 가능 직업: Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard
 +
  * 직업별 차별화된 스펠 목록
 +
* 맵 구현: QWebEngineView를 사용하여 HTML 기반 맵을 PyQt5 UI에 통합
 +
* 스토리 진행: GPT API를 활용한 동적 시나리오 생성 (예정)
 +
 
 +
==현재 진행상황==
 +
 
 +
===하드웨어 완성도===
 +
'''터치 모듈 (완료)'''
 +
* PCB 제작 완료 및 부품 납땜 완료
 +
* 터치패드 마감재 선정 완료 (인조가죽)
 +
* 캘리브레이션 코드 개발 필요
 +
 
 +
'''커버 (완료)'''
 +
* 아크릴 판재 레이저 커팅 완료
 +
* 조립 완료
 +
* 카메라 정확한 설치 위치 협의 필요
 +
 
 +
===소프트웨어 완성도===
 +
'''1차 게임 (완료)'''
 +
* 체스 게임 UI 개선 완료
 +
* 터치 인터페이스 최적화 완료
 +
 
 +
'''2차 게임 (80% 완료)'''
 +
* Texas Hold'em Poker 게임 로직 완성
 +
* 카드 인식 시스템 구현 완료
 +
* 포켓몬 카드 게임 UI 설계 완료
 +
* 포켓몬 카드 인식 모델 해결 필요
 +
 
 +
'''3차 게임 (60% 완료)'''
 +
* 캐릭터 생성 시스템 구현 완료
 +
* 맵 생성 기능 구현 완료
 +
* GPT API 연동 개발 중
 +
 
 +
==향후 진행 계획 및 일정==
  
==프로젝트 결과==
+
===하드웨어 개선 계획===
 +
'''터치 모듈'''
 +
* 터치 캘리브레이션 코드 추가
 +
* 가변적 화면 비율 대응 적응형 소프트웨어 개발
 +
* 초기 시작 시 마커 터치를 통한 캘리브레이션 기능 구현
 +
 
 +
'''커버'''
 +
* 카메라 모듈 최종 위치 확정
 +
* 슬라이드 레일 설치 여부 결정 (카메라 깊이에 따라)
 +
 
 +
===소프트웨어 개발 계획===
 +
'''2차 게임 요소'''
 +
* 포켓몬 카드 게임 본격 개발
 +
* 한국판 카드 인식 해결 (영문판 구매 또는 학습 모델 제작)
 +
* 카드 정보 기반 화려한 효과 구현
 +
 
 +
'''3차 게임 요소'''
 +
* GPT API 연동 완료
 +
* 동적 시나리오 생성 시스템 구현
  
===현재 진행상황===
+
===통합 및 테스트===
'''하드웨어'''
+
'''시스템 통합'''
* 터치 모듈: PCB 제작 완료, 마감천 선정 완료 (인조가죽)
+
* 모듈 간 통합 테스트
* 커버: 아크릴 레이저 커팅 완료, 조립 완료
+
* 터치 팀과 소프트웨어 팀 UI 크기 조율
* 카메라: IMX-708로 업그레이드 완료
+
* 커버 팀과 카메라 위치 설정 협의
  
'''소프트웨어'''
+
'''최종 테스트'''
* 1차 게임(체스): UI 개선 완료, 프로젝터 환경 최적화
+
* 50cm 카메라 케이블 준비 후 최종 위치 설정
* 2차 게임(포커): 카드 인식 시스템 구현, 게임 로직 완성
+
* 캘리브레이션 코드 적용 테스트
* 3차 게임(TRPG): 캐릭터 생성 시스템 구현, 맵 생성 기능 개발 중
+
* 전체 시스템 통합 테스트
  
===향후 계획===
+
===개발 일정표===
 
{| class="wikitable"
 
{| class="wikitable"
 
! 개발 내용
 
! 개발 내용
 
! 담당자
 
! 담당자
! 5월
+
! 5월 1-2주
 +
! 5월 3주
 
! 6월 1주
 
! 6월 1주
 
! 6월 2주
 
! 6월 2주
188번째 줄: 341번째 줄:
 
| ■
 
| ■
 
| ■
 
| ■
 +
|
 
|  
 
|  
 
|  
 
|  
195번째 줄: 349번째 줄:
 
| ■
 
| ■
 
| ■
 
| ■
 +
|
 
|  
 
|  
 
|  
 
|  
201번째 줄: 356번째 줄:
 
| 터치팀
 
| 터치팀
 
|  
 
|  
 +
| ■
 
| ■
 
| ■
 
|  
 
|  
207번째 줄: 363번째 줄:
 
| 1차 통합 테스트
 
| 1차 통합 테스트
 
| 터치팀
 
| 터치팀
 +
|
 
|  
 
|  
 
| ■
 
| ■
214번째 줄: 371번째 줄:
 
| 2차 프로그램 통합
 
| 2차 프로그램 통합
 
| 터치팀, 전진형
 
| 터치팀, 전진형
 +
|
 
|  
 
|  
 
|  
 
|  
221번째 줄: 379번째 줄:
 
| 최종 통합 테스트
 
| 최종 통합 테스트
 
| 전체
 
| 전체
 +
|
 
|  
 
|  
 
|  
 
|  
226번째 줄: 385번째 줄:
 
|  
 
|  
 
|-
 
|-
| Feedback
+
| Feedback 및 디버깅
 
| 전체
 
| 전체
 +
|
 
|  
 
|  
 
|  
 
|  
235번째 줄: 395번째 줄:
 
| 최종 프로젝트 발표 준비
 
| 최종 프로젝트 발표 준비
 
| 전체
 
| 전체
 +
|
 
|  
 
|  
 
|  
 
|  
241번째 줄: 402번째 줄:
 
|}
 
|}
  
===미구현 내용===
+
==프로젝트 결과==
* 포켓몬 카드 게임 완전 구현 (한국판 카드 인식 모델 부재)
+
 
 +
===현재 달성 성과===
 +
'''하드웨어'''
 +
* 터치 모듈: PCB 제작 완료, 마감천 선정 완료
 +
* 커버: 설계 변경 완료 및 제작 완료
 +
* 카메라: IMX-708로 성능 향상 완료
 +
 
 +
'''소프트웨어'''
 +
* 1차 게임(체스): 프로젝터 환경 최적화 완료
 +
* 2차 게임(포커): 완전 구현, 카드 인식률 90% 이상 달성
 +
* 3차 게임(TRPG): 캐릭터 및 맵 생성 시스템 구현
 +
 
 +
===평가 항목 달성도===
 +
* 터치 정확도: 20mm 달성 (목표치 충족)
 +
* 터치 응답시간: 측정 예정
 +
* 게임 응답속도: 측정 예정 
 +
* 지원 게임 가짓수: 2개 구현 (체스, 포커) + 1개 개발중 (TRPG)
 +
* 화면투사 선명도: 측정 예정
 +
 
 +
===미구현 내용 및 향후 과제===
 +
* 포켓몬 카드 게임 한국판 인식 모델
 
* TRPG GPT API 연동
 
* TRPG GPT API 연동
 
* 터치 캘리브레이션 자동화
 
* 터치 캘리브레이션 자동화
* 슬라이드 레일 적용 여부 (카메라 위치에 따라 결정)
+
* 카메라 최종 위치 확정
 +
* 전체 시스템 통합 테스트
  
 
==프로젝트 평가==
 
==프로젝트 평가==
  
===평가항목===
+
===중간 평가 (2025년 6월 1일 기준)===
중간 평가 기준에 따른 현재 달성도
+
'''진행률'''
 +
* 하드웨어: 90% 완료
 +
* 소프트웨어: 75% 완료
 +
* 시스템 통합: 30% 완료
  
===평가결과===
+
'''주요 성과'''
* 터치 정확도: 20mm 달성 (목표치 충족)
+
* 설계 변경을 통한 현실적 목표 재설정
* 터치 응답시간: 측정 예정
+
* 터치 모듈 하드웨어 완성
* 게임 응답속도: 측정 예정
+
* 카드 인식 시스템 성공적 구현
* 지원 게임 가짓수: 2개 구현 (체스, 포커)
+
* 복수 게임 구현을 통한 플랫폼 확장성 입증
* 화면투사 선명도: 측정 예정
+
 
 +
'''주요 과제'''
 +
* 한국어 카드 인식 문제 해결
 +
* 시스템 통합 및 안정성 확보
 +
* 사용자 경험 최적화
 +
 
 +
==예산 내역==
 +
 
 +
===총 예산===
 +
404,800원 (기존 175,000원에서 229,800원 증액)
 +
 
 +
===상세 내역===
 +
{| class="wikitable"
 +
! 항목
 +
! 수량
 +
! 단가(천원)
 +
! 금액(천원)
 +
! 비고
 +
|-
 +
| 전도성필름 Velostat
 +
| 14
 +
| 10.8
 +
| 151.2
 +
| 배송비 2.5
 +
|-
 +
| 구리 테이프 5mm × 30M
 +
| 1
 +
| 5.7
 +
| 5.7
 +
| 배송비 2.5
 +
|-
 +
| 에나멜 동선 0.1mm × 10m
 +
| 2
 +
| 1.5
 +
| 3.0
 +
| 배송비 2.7
 +
|-
 +
| 4051D 8-channel multiplexer
 +
| 10
 +
| 0.6
 +
| 6.0
 +
|
 +
|-
 +
| 595D 8-Bit Shift Registers
 +
| 10
 +
| 0.3
 +
| 3.0
 +
|
 +
|-
 +
| LMV324 Operational Amplifiers
 +
| 1
 +
| 1.6
 +
| 1.6
 +
|
 +
|-
 +
| 10KΩ Resistor
 +
| 10
 +
| 0.05
 +
| 0.5
 +
|
 +
|-
 +
| 1KΩ Resistor
 +
| 10
 +
| 0.05
 +
| 0.5
 +
|
 +
|-
 +
| 100nF 16V Capacitor
 +
| 100
 +
| 0.03
 +
| 3.0
 +
|
 +
|-
 +
| LED
 +
| 10
 +
| 0.07
 +
| 0.7
 +
|
 +
|-
 +
| IMX-708 camera
 +
| 1
 +
| 54.2
 +
| 54.2
 +
| imx219에서 업그레이드
 +
|-
 +
| 40핀 IDC 커넥터
 +
| 2
 +
| 1.0
 +
| 2.0
 +
|
 +
|-
 +
| PCB
 +
| 5
 +
| 12.0
 +
| 60.0
 +
|
 +
|-
 +
| 아크릴 판재
 +
| 5
 +
| 15.8
 +
| 79.4
 +
|
 +
|-
 +
| 터치패드 보호 필름
 +
| 2
 +
| 10.0
 +
| 20.0
 +
|
 +
|-
 +
| 터치패드 커버
 +
| 1
 +
| 14.0
 +
| 14.0
 +
|
 +
|-
 +
| '''합계'''
 +
|
 +
|
 +
| '''404.8'''
 +
|
 +
|}
 +
 
 +
===주요 증액 사유===
 +
* IMX-708 카메라 모듈: 54.2천원 (성능 향상)
 +
* 아크릴 판재: 79.4천원 (커버 제작)
 +
* PCB 제작: 60.0천원 (전문 제작)
 +
 
 +
==기술적 상세사항==
 +
 
 +
===터치 인식 기술===
 +
'''Velostat 원리'''
 +
* 압력 감지형 전도성 필름
 +
* 압력에 따른 저항값 변화 감지
 +
* 멀티플렉서를 통한 다점 터치 구현
 +
 
 +
'''PCB 설계 기준'''
 +
* 크로스토크 방지: 3W 규칙 적용
 +
* 도선 사양: 20mil 두께, 12mil 간격
 +
* 신호 무결성 확보
 +
 
 +
===카메라 인식 기술===
 +
'''이미지 처리 파이프라인'''
 +
1. 고해상도 캡처 (4608×2592)
 +
2. 이진화 및 윤곽 검출
 +
3. 카드 영역 추출
 +
4. 샤프닝 필터 적용
 +
5. 딥러닝 모델 인식
 +
6. 결과 검증 및 정렬
 +
 
 +
'''인식 정확도 향상 기법'''
 +
* 프로젝터 조명 환경 고려한 임계값 설정
 +
* 카드 크기 비율 검증
 +
* 여백 포함 crop으로 정보 손실 방지
 +
* 좌표 기반 카드 순서 정렬
 +
 
 +
==개발 환경 및 도구==
 +
 
 +
===하드웨어 환경===
 +
* 제어 보드: Raspberry Pi 5
 +
* 개발 보드: Arduino Uno
 +
* 카메라: IMX-708 12MP 광각
 +
* 프로젝터: XGIMI Halo+
 +
 
 +
===소프트웨어 환경===
 +
* OS: Raspberry Pi OS
 +
* 언어: Python 3.9, C++
 +
* 프레임워크: PyQt5, OpenCV 4.5
 +
* 딥러닝: YOLO v5
 +
* API: OpenAI GPT API
 +
 
 +
===개발 도구===
 +
* PCB 설계: KiCad
 +
* 3D 모델링: Fusion 360
 +
* 코드 편집: VS Code
 +
* 이미지 처리: OpenCV, PIL
 +
 
 +
==참고 자료 및 오픈소스==
 +
 
 +
===활용 오픈소스===
 +
* 체스 게임: GNU GPL 라이선스
 +
* YOLO 카드 인식: GitHub 공개 모델
 +
* Polytopia Map Generator: GNU GPL 라이선스
 +
* 포켓몬 카드 API: 16,000장 데이터베이스
 +
 
 +
===기술 문서===
 +
* Velostat 압력 센서 원리
 +
* 라즈베리파이 GPIO 프로그래밍
 +
* OpenCV 이미지 처리 기법
 +
* PyQt5 UI 프로그래밍
  
 
==느낀점==
 
==느낀점==
264번째 줄: 637번째 줄:
 
==부록==
 
==부록==
  
===개발 환경===
+
===문제 해결 과정===
* 하드웨어: Raspberry Pi 5, XGIMI Halo+ 프로젝터, IMX-708 카메라
+
'''터치 정확도 문제'''
* 소프트웨어: Python 3.9, PyQt5, OpenCV 4.5
+
* 문제: 초기 설계 목표 5mm 정확도 달성 어려움
* 개발 도구: VS Code, KiCad (PCB 설계)
+
* 원인: 손가락 접촉면적과 센서 간격 불일치
 +
* 해결: UI 재설계를 통한 실용적 접근
 +
 
 +
'''카메라 성능 문제'''
 +
* 문제: IMX219 화질 및 화각 부족
 +
* 해결: IMX708 광각 카메라로 업그레이드
  
===참고 자료===
+
'''게임 복잡도 문제'''
* 오픈소스 체스 게임
+
* 문제: 유희왕, 매직 더 게더링 구현 복잡도 과다
* YOLO 카드 인식 모델 (GitHub)
+
* 해결: 포켓몬 카드게임으로 범위 조정
* Polytopia Map Generator
 
* 포켓몬 카드 API
 
  
===예산 내역===
+
===향후 확장 가능성===
총 예산: 404,800원
+
* 추가 게임 장르 지원
* 전도성필름 Velostat: 151,200원
+
* AI 대전 상대 구현
* IMX-708 카메라: 54,200원
+
* 온라인 멀티플레이어 지원
* PCB 제작: 60,000원
+
* 모바일 앱 연동
* 아크릴 판재: 79,400원
 
* 기타 부품: 60,000원
 

2025년 6월 15일 (일) 01:08 판

프로젝트 소개

테이블탑 프로젝터는 프로젝터를 이용하여 테이블 위에 게임 화면을 투사하고, 터치 센서를 통해 사용자와 상호작용할 수 있는 인터랙티브 게임 플랫폼입니다. 다양한 보드게임과 카드게임을 디지털화하여 여러 사용자가 함께 즐길 수 있는 새로운 형태의 게임 환경을 제공합니다.

프로젝트 명

테이블탑 프로젝터 (Tabletop Projector)

프로젝트 기간

2025.3~2025.6

팀 소개

팀명: Imbedded
서울시립대학교 기계정보공학과 2020430001 구효본 (팀장)
서울시립대학교 기계정보공학과 2022430012 김지호
서울시립대학교 기계정보공학과 2020430008 류정현
서울시립대학교 기계정보공학과 2021430035 조수민
서울시립대학교 기계정보공학과 2020430028 전진형

개발 소요 비용

404.8천원

프로젝트 개요

프로젝트 요약

본 프로젝트는 프로젝터와 터치 센서를 결합하여 테이블 위에서 다양한 인터랙티브 게임을 즐길 수 있는 플랫폼을 개발하는 것을 목표로 합니다. 라즈베리파이를 중심으로 한 제어 시스템과 벨로스탯(Velostat)을 활용한 터치 모듈, 카메라를 통한 실물 카드 인식 시스템을 구현하여 디지털과 아날로그의 장점을 결합한 새로운 게임 경험을 제공합니다.

프로젝트의 배경 및 기대효과

배경

  • 기존 보드게임의 한계: 물리적 공간 제약, 게임 준비 시간, 규칙 숙지의 어려움
  • 디지털 게임의 한계: 실물 조작감 부재, 대면 상호작용 부족
  • COVID-19 이후 변화된 여가 문화: 소규모 모임 증가, 홈 엔터테인먼트 수요 증가

기대효과

  • 디지털과 아날로그의 융합을 통한 새로운 게임 경험 제공
  • 다양한 게임을 하나의 플랫폼에서 즐길 수 있는 편의성
  • 실물 카드와 디지털 화면의 상호작용을 통한 몰입감 증대
  • 게임 규칙 자동화로 진입 장벽 감소

프로젝트 개발 목표

주요 목표 1. 터치 인식 시스템: 20mm 이하의 터치 정확도, 100ms 이하의 응답시간 2. 게임 시스템: 최소 2개 이상의 게임 구현, 100ms 이하의 게임 응답속도 3. 프로젝션 시스템: 70% 이상의 화면 선명도 4. 카메라 인식 시스템: 실물 카드 인식을 통한 게임 진행

평가 기준

평가 항목 평가방법 기준 목표치 비중(%)
터치 정확도 터치 인식 간격 mm < 20mm 35
터치 응답시간 20회 반복 측정 (평균) ms < 100ms 20
게임 응답속도 입력-반응 사이 시간 계산 ms < 100ms 25
지원 게임 가짓수 빌드된 게임 개수 2+ 개 10
화면투사 선명도 고정 위치 촬영 후 sharpness 계산  % > 70% 10

설계 변경사항

하드웨어 변경사항

터치 모듈

  • 기존: 터치 지점 오차범위 5mm 이하
  • 변경: 터치 지점 오차범위 20mm 이하
  • 사유: 벨로스탯에 구리선을 부착할 때 구리선의 폭(5mm)과 간격(20mm) 설정 시, 사람의 손가락이 닿는 면적(8mm)이 신호선들 사이에 고르게 퍼지지 못하는 문제 발생. 4개 지점 동시 터치가 아닌 한 곳만 눌리게 되어 기존 알고리즘 적용 불가능. 시간과 수정 용이성을 고려하여 소프트웨어 UI 수정으로 문제 해결.

커버 설계

  • 기존: 미니리프트 2개 사용, 볼 조인트 방식 소형문
  • 변경: 미니리프트 1개 사용, 미니 경첩 부착 소형문
  • 사유:
 * 두 리드 스크류 결합 시 용접 필수, 7kg 프로젝터 지지 토크 불확실
 * 용접 과정에서 리드 스크류 길이 단축 시 리프트 작동 문제 가능성
 * 실험을 통해 리프트 1개로도 안정적 지지 확인
 * 5mm 아크릴 재질에서 볼 조인트 소켓 가공 어려움

소프트웨어 변경사항

1차 게임 요소

  • 체스 게임: 변동 없음

2차 게임 요소

  • 기존: 유희왕 등 카드게임
  • 변경: 포커 게임으로 선구현, 포켓몬 카드게임 개발 시도중
  • 카메라 모델 변경: imx219 → imx708 120도 광각
  • 사유:
 * 유희왕: 뒷면 카드 규칙 존재로 전면 카드 인식 시스템과 부적합
 * 매직 더 게더링: 동시 인식 카드 50장으로 라즈베리파이 연산능력 초과, 플레이 영역이 터치패드 범위 초과
 * 포켓몬: 뒷면 규칙 없음, 최대 인식 요구 갯수 13장으로 처리 가능, 약 16,000장 API 정보 보유

3차 게임 요소

  • LLM API를 활용한 TPRG: 변동 없음

동작 시나리오

1. 시스템 시작: 프로젝터 전원 ON, 라즈베리파이 부팅 2. 게임 선택: 터치를 통해 메인 화면에서 원하는 게임 선택 3. 게임 진행

  * 1차 게임(체스): 터치로 기물 이동
  * 2차 게임(카드게임): 실물 카드를 테이블에 배치, 카메라가 인식하여 게임 진행
  * 3차 게임(TRPG): GPT API를 활용한 스토리 진행

4. 게임 종료: 메인 화면으로 복귀

구현 내용

시스템 구성

하드웨어 구성

  • 제어부: Raspberry Pi 5
  • 출력부: 프로젝터 (XGIMI Halo+)
  • 입력부: 터치 모듈 (Velostat 기반), 카메라 모듈 (IMX-708)
  • 구조부: 아크릴 커버, 미니 리프트

소프트웨어 구성

  • OS: Raspberry Pi OS
  • 개발 언어: Python, C++
  • 주요 라이브러리: PyQt5, OpenCV, GPIO
  • API: GPT API (3차 게임용)

기구부 설계 및 구현

커버 설계

  • 재질: 5mm 두께 무광 아크릴 (검정색)
  • 크기: 프로젝터 크기에 맞춘 맞춤 제작
  • 특징:
 * 미니 리프트 1개를 사용한 높이 조절 기능 (커버 후면 손잡이)
 * 미니 경첩을 이용한 여닫이 소형문
 * 측면 방열구멍 설계
 * 카메라 모듈 장착부
 * 프로젝터 하부면적보다 큰 견고한 아크릴판을 리프트 상단에 부착하여 안정성 확보

터치 패드 구조

  • 크기: 400mm × 400mm
  • 층 구조: 마감천(인조가죽) - Velostat - 구리 테이프
  • 구리선 배치: 5mm 폭, 20mm 간격
  • 마감 소재: 인조가죽 (적절한 반사 특성과 부드러운 사용자 경험 제공)

제어부 및 회로 구현

터치 모듈 회로

  • PCB 설계: 크로스토크 방지를 위한 3W 규칙 적용
  • 도선 사양: 두께 20mil, 간격 12mil (0.5A 기준)
  • 사용 전류: 약 0.3A~0.5A (벨로스탯 가변저항 동작)
  • 주요 부품:
 * 4051D 8-channel multiplexer × 10개
 * 595D 8-Bit Shift Registers × 10개
 * LMV324 Operational Amplifiers × 1개
 * 저항: 10KΩ × 10개, 1KΩ × 10개
 * 커패시터: 100nF 16V × 100개
 * LED × 10개
  • 연결: 2×20 커넥터 사용으로 접촉 불량 최소화
  • 제어: 아두이노 우노 모델 사용 (아두이노 미니는 성능 이슈로 터치 반응 불규칙)

카메라 시스템

  • 모델: IMX-708 (12MP 자동초점 120도 광각)
  • 기존 모델(imx219) 대비 개선사항:
 * 화질 향상으로 카드 인식률 개선
 * 화각 확대로 촬영 범위 증가
 * 자동 초점 기능 추가
  • 위치: 프로젝터 상단 커버 내부
  • 기능: 실물 카드 인식, 게임 상황 촬영

소프트웨어 설계 및 구현

1차 게임 - 체스

  • 기반: 오픈소스 체스 게임을 라즈베리파이 OS에 포팅
  • UI 개선:
 * 기보나, 수 돌리기 등 불필요한 UI 삭제
 * 배경화면을 밝게 설정하여 빔프로젝터 저밝기 환경 대응
 * 체스판 크기 확대로 터치 부정확성 보완
  • 특징: 4명이 동시에 즐길 수 있는 변형 체스

2차 게임 - 카드 게임

게임 UI 설계 필요조건 1. 모든 UI 상호작용은 터치로만 구현 2. 프로젝터 위치에 따른 카메라 비추는 반경 변화 고려하여 인식 기물을 화면 중앙 배치 3. 다중 플레이어를 위한 각 플레이어별 개인 보드 배치 4. 라즈베리파이 부하 고려하여 캡처 방식으로 카메라 인식 구현 5. 초보자 돌발행동 방지를 위한 변수 요소 사전 비활성화 6. 게임 진행을 위한 사회자 역할 메시지 창 구현

Texas Hold'em Poker (프로토타입)

  • 목적: 라즈베리파이 카메라 성능과 객체 인식 성능 검증
  • 카드 인식: YOLO 모델 활용 (테스트 이미지 90% 이상 인식률)
  • 게임 로직:
 * 플레이어 인원 선택 (2-5명)
 * SB, BB 자동 배팅
 * 콜, 체크, 폴드, 레이즈, 올인 배팅 옵션
 * 프리플랍-플랍-턴-리버 단계별 진행
 * 자동 승자 판별 및 배팅액 분배
 * 파산 방지를 위한 3000칩 자동 지급
  • UI 특징:
 * 각 플레이어별 개인 보드 (테이블 외각 배치)
 * 중앙 커뮤니티 카드 배치 (카메라 인식 범위 고려)
 * 배팅액에 따른 애니메이션 효과
 * 쇼다운 상황 특수 효과
  • 변수 처리:
 * 비순차 배팅 방지
 * 턴 종료 전 카드 공개 방지
 * 배팅액에 따른 선택지 제한

카드 인식 프로세스 1. 카메라 설정

  * 해상도: 4608×2592 (IMX-708 최대 해상도)
  * FPS: 30 (33333㎲ 프레임 지속시간)
  * AwbMode: 0 (자동 화이트 밸런스)
  * Sharpness: 1.5 (기본값보다 높은 선명도)

2. 이미지 전처리

  * 카메라 캡처 → 'image' 변수 저장
  * 이진화 처리 (프로젝터 밝은 환경 고려한 임계값 설정)
  * 카드 최소 영역, 가로세로 비율 제한 (실제 카드 63mm×88mm 기준)

3. 카드 검출

  * detect_card_edges() 함수로 카드 윤곽 검출
  * 4개 끝점 좌표 확보
  * 여백 포함한 crop으로 문양/숫자 손상 방지

4. 이미지 보정

  * 샤프닝 커널 적용으로 확대 시 화질 저하 보완
  * 인식 모델 최적화를 위한 이미지 품질 향상

5. 모델 인식

  * YOLO 모델 적용
  * 인식률 30% 이상 결과 중 최고 신뢰도 선택
  * 좌표 정보 활용한 카드 순서 정렬 (Y좌표 오차 허용)

6. 게임 로직 반영

  * 인식 결과를 게임 상태에 반영
  * 승자 판별 로직 실행

포켓몬 카드 게임 (개발 중)

  • API 활용: 16,000여 장의 카드 데이터베이스
  • 특수 효과: 스타디움 카드에 따른 배경 변화
  • 과제: 한국판 카드 인식 모델 부재 (대부분 영문판으로 학습된 모델)
  • 해결방안: 영문판 카드 구매 또는 한국판 카드 일부 학습 모델 제작

3차 게임 - TRPG

  • 맵 생성: Polytopia Map Generator 오픈소스 활용 (GNU GPL 라이선스)
  • 캐릭터 시스템:
 * D&D 기반 12개 직업 선택
 * 스펠 사용 가능 직업: Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard
 * 직업별 차별화된 스펠 목록
  • 맵 구현: QWebEngineView를 사용하여 HTML 기반 맵을 PyQt5 UI에 통합
  • 스토리 진행: GPT API를 활용한 동적 시나리오 생성 (예정)

현재 진행상황

하드웨어 완성도

터치 모듈 (완료)

  • PCB 제작 완료 및 부품 납땜 완료
  • 터치패드 마감재 선정 완료 (인조가죽)
  • 캘리브레이션 코드 개발 필요

커버 (완료)

  • 아크릴 판재 레이저 커팅 완료
  • 조립 완료
  • 카메라 정확한 설치 위치 협의 필요

소프트웨어 완성도

1차 게임 (완료)

  • 체스 게임 UI 개선 완료
  • 터치 인터페이스 최적화 완료

2차 게임 (80% 완료)

  • Texas Hold'em Poker 게임 로직 완성
  • 카드 인식 시스템 구현 완료
  • 포켓몬 카드 게임 UI 설계 완료
  • 포켓몬 카드 인식 모델 해결 필요

3차 게임 (60% 완료)

  • 캐릭터 생성 시스템 구현 완료
  • 맵 생성 기능 구현 완료
  • GPT API 연동 개발 중

향후 진행 계획 및 일정

하드웨어 개선 계획

터치 모듈

  • 터치 캘리브레이션 코드 추가
  • 가변적 화면 비율 대응 적응형 소프트웨어 개발
  • 초기 시작 시 마커 터치를 통한 캘리브레이션 기능 구현

커버

  • 카메라 모듈 최종 위치 확정
  • 슬라이드 레일 설치 여부 결정 (카메라 깊이에 따라)

소프트웨어 개발 계획

2차 게임 요소

  • 포켓몬 카드 게임 본격 개발
  • 한국판 카드 인식 해결 (영문판 구매 또는 학습 모델 제작)
  • 카드 정보 기반 화려한 효과 구현

3차 게임 요소

  • GPT API 연동 완료
  • 동적 시나리오 생성 시스템 구현

통합 및 테스트

시스템 통합

  • 모듈 간 통합 테스트
  • 터치 팀과 소프트웨어 팀 UI 크기 조율
  • 커버 팀과 카메라 위치 설정 협의

최종 테스트

  • 50cm 카메라 케이블 준비 후 최종 위치 설정
  • 캘리브레이션 코드 적용 테스트
  • 전체 시스템 통합 테스트

개발 일정표

개발 내용 담당자 5월 1-2주 5월 3주 6월 1주 6월 2주 6월 3주
터치 캘리브레이션 코드 추가 터치팀
프로젝터 하우징 구효본, 조수민
1차 프로그램 통합 및 에러처리 터치팀
1차 통합 테스트 터치팀
2차 프로그램 통합 터치팀, 전진형
최종 통합 테스트 전체
Feedback 및 디버깅 전체
최종 프로젝트 발표 준비 전체

프로젝트 결과

현재 달성 성과

하드웨어

  • 터치 모듈: PCB 제작 완료, 마감천 선정 완료
  • 커버: 설계 변경 완료 및 제작 완료
  • 카메라: IMX-708로 성능 향상 완료

소프트웨어

  • 1차 게임(체스): 프로젝터 환경 최적화 완료
  • 2차 게임(포커): 완전 구현, 카드 인식률 90% 이상 달성
  • 3차 게임(TRPG): 캐릭터 및 맵 생성 시스템 구현

평가 항목 달성도

  • 터치 정확도: 20mm 달성 (목표치 충족)
  • 터치 응답시간: 측정 예정
  • 게임 응답속도: 측정 예정
  • 지원 게임 가짓수: 2개 구현 (체스, 포커) + 1개 개발중 (TRPG)
  • 화면투사 선명도: 측정 예정

미구현 내용 및 향후 과제

  • 포켓몬 카드 게임 한국판 인식 모델
  • TRPG GPT API 연동
  • 터치 캘리브레이션 자동화
  • 카메라 최종 위치 확정
  • 전체 시스템 통합 테스트

프로젝트 평가

중간 평가 (2025년 6월 1일 기준)

진행률

  • 하드웨어: 90% 완료
  • 소프트웨어: 75% 완료
  • 시스템 통합: 30% 완료

주요 성과

  • 설계 변경을 통한 현실적 목표 재설정
  • 터치 모듈 하드웨어 완성
  • 카드 인식 시스템 성공적 구현
  • 복수 게임 구현을 통한 플랫폼 확장성 입증

주요 과제

  • 한국어 카드 인식 문제 해결
  • 시스템 통합 및 안정성 확보
  • 사용자 경험 최적화

예산 내역

총 예산

404,800원 (기존 175,000원에서 229,800원 증액)

상세 내역

항목 수량 단가(천원) 금액(천원) 비고
전도성필름 Velostat 14 10.8 151.2 배송비 2.5
구리 테이프 5mm × 30M 1 5.7 5.7 배송비 2.5
에나멜 동선 0.1mm × 10m 2 1.5 3.0 배송비 2.7
4051D 8-channel multiplexer 10 0.6 6.0
595D 8-Bit Shift Registers 10 0.3 3.0
LMV324 Operational Amplifiers 1 1.6 1.6
10KΩ Resistor 10 0.05 0.5
1KΩ Resistor 10 0.05 0.5
100nF 16V Capacitor 100 0.03 3.0
LED 10 0.07 0.7
IMX-708 camera 1 54.2 54.2 imx219에서 업그레이드
40핀 IDC 커넥터 2 1.0 2.0
PCB 5 12.0 60.0
아크릴 판재 5 15.8 79.4
터치패드 보호 필름 2 10.0 20.0
터치패드 커버 1 14.0 14.0
합계 404.8

주요 증액 사유

  • IMX-708 카메라 모듈: 54.2천원 (성능 향상)
  • 아크릴 판재: 79.4천원 (커버 제작)
  • PCB 제작: 60.0천원 (전문 제작)

기술적 상세사항

터치 인식 기술

Velostat 원리

  • 압력 감지형 전도성 필름
  • 압력에 따른 저항값 변화 감지
  • 멀티플렉서를 통한 다점 터치 구현

PCB 설계 기준

  • 크로스토크 방지: 3W 규칙 적용
  • 도선 사양: 20mil 두께, 12mil 간격
  • 신호 무결성 확보

카메라 인식 기술

이미지 처리 파이프라인 1. 고해상도 캡처 (4608×2592) 2. 이진화 및 윤곽 검출 3. 카드 영역 추출 4. 샤프닝 필터 적용 5. 딥러닝 모델 인식 6. 결과 검증 및 정렬

인식 정확도 향상 기법

  • 프로젝터 조명 환경 고려한 임계값 설정
  • 카드 크기 비율 검증
  • 여백 포함 crop으로 정보 손실 방지
  • 좌표 기반 카드 순서 정렬

개발 환경 및 도구

하드웨어 환경

  • 제어 보드: Raspberry Pi 5
  • 개발 보드: Arduino Uno
  • 카메라: IMX-708 12MP 광각
  • 프로젝터: XGIMI Halo+

소프트웨어 환경

  • OS: Raspberry Pi OS
  • 언어: Python 3.9, C++
  • 프레임워크: PyQt5, OpenCV 4.5
  • 딥러닝: YOLO v5
  • API: OpenAI GPT API

개발 도구

  • PCB 설계: KiCad
  • 3D 모델링: Fusion 360
  • 코드 편집: VS Code
  • 이미지 처리: OpenCV, PIL

참고 자료 및 오픈소스

활용 오픈소스

  • 체스 게임: GNU GPL 라이선스
  • YOLO 카드 인식: GitHub 공개 모델
  • Polytopia Map Generator: GNU GPL 라이선스
  • 포켓몬 카드 API: 16,000장 데이터베이스

기술 문서

  • Velostat 압력 센서 원리
  • 라즈베리파이 GPIO 프로그래밍
  • OpenCV 이미지 처리 기법
  • PyQt5 UI 프로그래밍

느낀점

(프로젝트 완료 후 작성 예정)

부록

문제 해결 과정

터치 정확도 문제

  • 문제: 초기 설계 목표 5mm 정확도 달성 어려움
  • 원인: 손가락 접촉면적과 센서 간격 불일치
  • 해결: UI 재설계를 통한 실용적 접근

카메라 성능 문제

  • 문제: IMX219 화질 및 화각 부족
  • 해결: IMX708 광각 카메라로 업그레이드

게임 복잡도 문제

  • 문제: 유희왕, 매직 더 게더링 구현 복잡도 과다
  • 해결: 포켓몬 카드게임으로 범위 조정

향후 확장 가능성

  • 추가 게임 장르 지원
  • AI 대전 상대 구현
  • 온라인 멀티플레이어 지원
  • 모바일 앱 연동