Imbedded - 테이블탑 프로젝터
목차
프로젝트 소개
테이블탑 프로젝터는 프로젝터를 이용하여 테이블 위에 게임 화면을 투사하고, 터치 센서를 통해 사용자와 상호작용할 수 있는 인터랙티브 게임 플랫폼입니다. 다양한 보드게임과 카드게임을 디지털화하여 여러 사용자가 함께 즐길 수 있는 새로운 형태의 게임 환경을 제공합니다.
프로젝트 명
테이블탑 프로젝터 (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 대전 상대 구현
- 온라인 멀티플레이어 지원
- 모바일 앱 연동