Imbedded - 테이블탑 프로젝터
목차
프로젝트 소개
테이블탑 프로젝터는 프로젝터를 이용하여 테이블 위에 게임 화면을 투사하고, 터치 센서를 통해 사용자와 상호작용할 수 있는 인터랙티브 게임 플랫폼입니다. 다양한 보드게임과 카드게임을 디지털화하여 여러 사용자가 함께 즐길 수 있는 새로운 형태의 게임 환경을 제공합니다.
프로젝트 명
테이블탑 프로젝터 (Tabletop Projector)
프로젝트 기간
2025년 3월 ~ 2025년 6월
팀 소개
| Imbedded | ||||
|---|---|---|---|---|
| 역할 | 이름 | 담당 업무 | 연락처 | |
| 팀장 | 구** | 프로젝트 관리, 터치 시스템 | - | |
| 팀원 | 김** | 터치 시스템, 시스템 통합 | - | |
| 팀원 | 류** | 터치 시스템, 회로 설계 | - | |
| 팀원 | 조** | 기구 설계, 커버 제작 | - | |
| 팀원 | 전** | AI/객체인식, API 연동 | - | |
개발 소요 비용
- 초기 계획 (2025.4): 183천원
- 최종 예산 (2025.6): 404.8천원
- 증액 사유: 카메라 성능 업그레이드, 아크릴 커버 제작, PCB 전문 제작
프로젝트 개요
초기 개발 컨셉
프로젝트 비전
보드게임 화면을 책상에 투사하고 영상을 터치함으로써 상호작용이 가능한 장치를 제작하여, 여러 사람들이 개인용 기기로만 접할 수 있었던 게임을 함께 참여할 수 있게 공통된 책상에 투사해주는 시스템을 구현한다. 전통적인 보드게임의 정적인 특성에서 벗어나, 사용자와 영상의 상호작용으로 동적인 보드게임이 가능해지며, 온라인 게임의 약점으로 꼽혀왔던 사람들과의 대면 부족이라는 문제를 해결할 수 있다.
핵심 가치
- 확장 가능성: 리눅스 플랫폼 특성상 개발 환경이 잘 갖추어져 있어 향후 추가 보드게임 개발 가능
- 직관적 조작: 빠른 터치 속도 및 영상인식을 통한 자연스러운 사용자 상호작용
- 사회적 연결: 대면 보드게임의 장점과 디지털 게임의 편의성 결합
프로젝트 요약
본 프로젝트는 프로젝터와 터치 센서를 결합하여 테이블 위에서 다양한 인터랙티브 게임을 즐길 수 있는 플랫폼을 개발하는 것을 목표로 한다. 라즈베리파이를 중심으로 한 제어 시스템과 벨로스탯(Velostat)을 활용한 터치 모듈, 카메라를 통한 실물 카드 인식 시스템을 구현하여 디지털과 아날로그의 장점을 결합한 새로운 게임 경험을 제공한다.
프로젝트의 배경 및 기대효과
배경
- 기존 보드게임의 한계: 종이 카드, 고정된 규칙, 제한된 게임 도구로 인한 정적인 플레이 방식
- 온라인 게임의 한계: 개인용 기기 중심으로 인한 대면 상호작용 부족, 사회적 단절 현상
- 기술적 공백: 프로젝터 활용 프로젝트는 있으나 터치 기능과 카메라 기반 객체 인식을 결합한 사례 부족
- 시장 요구: COVID-19 이후 소규모 모임 증가, 홈 엔터테인먼트 수요 증가
기대효과
- 보드게임 혁신: 기존 카드와 기물 중심에서 벗어나 복잡하고 다양한 규칙 적용 가능
- 접근성 향상: 플레이어가 복잡한 룰을 모두 숙지하지 않아도 시스템 보조로 원활한 게임 진행
- 사회적 가치: 온라인 게임의 사회적 단절 문제 보완, 공동 참여형 콘텐츠 발전
- 콘텐츠 확장성: 소프트웨어 업데이트를 통한 지속적인 새로운 룰 추가, 기존 IP 재활용
- 상업적 가능성: 보드게임 개발사에게 새로운 개발 방향성 제시
프로젝트 개발 목표
초기 목표 (2025.4 제안서 기준)
| 평가 항목 | 평가방법 | 초기 목표치 | 최종 목표치 (수정) | 비중(%) |
|---|---|---|---|---|
| 터치 정확도 | 터치 인식 간격 (mm) | < 30mm | < 20mm | 35 |
| 터치 응답시간 | 20회 반복 측정 (ms) | < 5ms | < 100ms | 20 |
| 카드 객체인식 정확도 | 100프레임당 인식률 (%) | > 50% | > 90% | 10 |
| 게임 응답속도 | 입력-반응 사이 시간 (ms) | < 100ms | < 100ms | 25 |
| 지원 게임 가짓수 | 빌드된 게임 개수 | 3+ 개 | 2+ 개 | 10 |
| 화면투사 선명도 | sharpness 계산 (%) | > 70% | > 70% | 10 |
- 터치 정확도: 30mm → 20mm (하드웨어 성능 향상으로 목표 강화)
- 터치 응답시간: 5ms → 100ms (하드웨어 한계를 고려한 현실적 조정)
- 카드 인식률: 50% → 90% (카메라 성능 향상과 알고리즘 개선으로 목표 강화)
- 게임 가짓수: 3개 → 2개 (프로젝트 기간 내 완성도 높은 구현을 위한 조정)
개념 설계
시스템 목적 계통도
테이블탑 프로젝터는 다음 5가지 핵심 가치를 중심으로 설계되었습니다:
💡 편의성 (직관성, 조작감)
- 직관성: 터치와 프로젝터의 빔을 이용하는 테이블탑 프로젝터는 간편한 UI를 제공하여 처음 사용하는 사용자에게도 직관적으로 사용법을 알 수 있도록 설계
- 조작감: 뮤직 플레이어의 UI와 유사하게 구성하여 게임이 목록화되고, 각 게임마다의 사진과 설명을 화면 대부분에 할당하여 표시
- 터치라는 익숙한 입력 방식을 통해 스마트폰 사용 경험자들이 쉽게 장치를 조작하고 실행할 수 있도록 구현
⚡ 성능 (신속성, 정밀성)
- 신속성: 터치 압력 감지용 Velostat 소재의 저항값이 민감하게 변하는 구간을 선택하여 정전식 터치방식인 스마트폰과 유사한 압력대를 감지
- 정밀성: 저항값이 변하는 지점을 통해 정확한 터치 지점을 좌표 계산하여 mm단위의 정밀한 터치점을 찾아내고, 압력의 세기도 구분하여 범용적인 활용 가능
- 터치 모듈을 구동하는 연산을 아두이노로 분리하여 라즈베리파이에서는 게임 소프트웨어에 리소스를 최대한 투자
- 프로젝터는 해상도보다는 높은 밝기값을 지원하는 제품을 선택하여 주변 빛에 의한 프로젝션 영상의 선명도를 최대한 보존
🔧 확장가능성 (범용성, 확장성)
- 모듈성: 라즈베리파이, 터치 모듈, 프로젝터, 카메라 각각이 모듈로 구성되어 요구되는 테이블 크기, 게임 성능 등에 따라 시스템 변경 가능
- 표준화된 단자: HDMI, USB, FPC/FFC 케이블 등 표준화된 단자를 사용하여 다양한 환경, 가격 조건, 성능 조건에 따라 적합한 시스템 성능 구축 가능
- 포팅 편의성: 소스가 LINUX 환경에서 실행되며, 터치 시스템을 하드웨어 부분에서 지원하므로 터치입력 처리만 구현하면 어렵지 않게 이식 가능
🛡️ 내구성
- 높은 내구성: 프로젝터, 라즈베리파이, 카메라 모듈은 표준화된 입출력 단자가 존재하여 체결성이 높고 여러번의 탈착에도 높은 내구성 보장
- PCB 구현: 터치 모듈의 복잡한 회로를 PCB 기판으로 구현하고 케이블의 단자를 FPC/FFC 규격으로 압축하여 부품의 탈착, 이동에도 높은 내구성 유지
💰 경제성
- 비용 절감: 압력인식 패널, 고가의 카메라 등을 사용하지 않고 저렴한 회로기판과 velostat 소재, 이미지처리 기법과 객체인식 모델을 활용하여 센서 비용 최소화
- 확장성을 통한 경제성: 같은 기능을 가진 저렴한 모델(저렴한 프로젝터, 라즈베리파이 4 이하의 CPU 등)로 교체하여 단가 절감 가능성 확보
입력장치 검토 및 선정
🔍 입력장치 상세 비교
1. 압력 감지 소자 (Velostat) ✅ 선정
- 특성: 전기 전도성을 띄는 소재로 압력 혹은 비틀림에 의해 전기 저항이 낮아지는 성질을 보유
- 구조: 구리선을 상부와 하부에 교차로 배치하여 압력에 의해 구리선 사이의 전류가 흐르는 양을 감지하고, 이를 통해 압력점을 추정
- 장점:
* ✅ 저비용 * ✅ 넓은 면적 커버 가능 * ✅ 압력 세기 구분 가능
- 단점:
* ❌ 정밀도가 전용 터치스크린 대비 낮음
2. 저항막 방식 터치스크린 패널
- 특성: ITO 처리된 필름 및 글라스의 2중 레이어로 구성되어 화면을 누르면 레이어가 서로 맞닿으며 발생한 전류와 저항의 변화를 감지
- 장점:
* ✅ 높은 정밀도 * ✅ 상용화된 기술
- 단점:
* ❌ 높은 비용 * ❌ 크기 제한 * ❌ 압력 세기 구분 어려움
3. 카메라 모듈 (IMX-219) → IMX-708로 업그레이드
- 특성: 3296 x 2480의 해상도를 지원하는 CMOS 카메라 센서
- 용도: 프로젝터의 구조 특성상 객체인식 등에 활용하기 위해 전체 이미지에 비해 작은 사이즈의 ROI만을 사용
- 장점: 고해상도로 확대 시 이미지 손실 최소화
- 단점: IMX-708 대비 낮은 성능
4. 카메라 모듈 (OV5647)
- 특성: 2592 x 1944의 해상도를 지원하는 CMOS 카메라 센서
- 장점: IMX-219 모델에 비해 저렴한 가격
- 단점: 카메라의 해상도가 낮아 성능 제한
제어장치 검토 및 선정
🎮 제어장치 상세 비교
1. Arduino uno ✅ 선정
- 역할: 터치모듈의 연산, Shift register와 Multiplexer 제어를 위한 MCU(Micro Controller Unit)
- 장점: 터치 장치에 별개로 연결되어 배선 길이를 줄여 모듈성 향상, 연산 소모를 분할하여 라즈베리파이 리소스 부담 절약
- 적용성: 높음
2. Arduino pro mini
- 특성: 아두이노 우노와 유사한 MCU 장치로, 크기가 더 작다는 장점
- 장점: 소형화에 유리, 아두이노 우노와 동일한 성능
- 단점: USB 연결, 핀 체결이 우노에 비해 어려워 작동 테스트 단계에서 사용이 번거로움
3. Raspberry Pi 4B
- 특성: HDMI와 USB 연결을 기본적으로 지원하며, 1.8GHz Arm CPU, 4GB의 SDRAM 메모리 보유
- 장점: 이더넷 연결과 블루투스 모델을 자체지원하여 추후 기능 확장에 유용
- 적용성: 중간
4. Raspberry Pi 5 ✅ 선정
- 특성: 라즈베리파이 4B에서 향상된 2.4GHz Arm CPU, SDRAM 8GB의 메모리로 쾌적한 소프트웨어 실행환경 제공
- 장점: 고성능으로 복잡한 게임 로직 처리 가능
- 단점: 4B 모델에 비해 높은 비용
- 적용성: 높음
통신모듈 검토 및 선정
📡 통신모듈 상세 비교
1. USB 유선 ✅ 선정
- 특성: 아두이노와 라즈베리파이 사이의 시리얼 통신용 연결단자
- 장점: 확장성이 높고 범용성이 높아 다양한 시스템에 터치 모듈 사용 가능, 전원을 컴퓨터로부터 받을 수 있어 아두이노에 충분한 전력 공급
- 적용성: 높음
2. 블루투스 무선
- 특성: 아두이노와 라즈베리파이 사이의 시리얼 통신용 블루투스 모듈
- 장점: 라즈베리파이의 내장 블루투스 모듈 활용 가능, 유선에 비해 통신선의 제약이 없고 미관상 유리
- 단점: 통신 딜레이 및 배터리의 필요성 요구
- 적용성: 중간
3. HDMI 유선 ✅ 선정
- 특성: 라즈베리파이와 프로젝터를 연결해주는 단자로 범용적인 영상 데이터 전송 규격
- 장점: 고화질 영상 지원, 범용적 사용으로 손쉬운 교체 가능
- 적용성: 높음
출력장치 검토 및 선정
📽️ 출력장치 상세 비교
1. ViewSonic PJD86533WS
- 특성: 1280*800의 해상도를 지원하며 1m에서 100인치의 투사거리를 갖는 3000ANSI 루멘 밝기의 프로젝터
- 장점: 초단초점 지원으로 Tabletop Projector 프로젝트 목적에 부합, 밝은 밝기로 낮에도 충분히 사용 가능, 조금만 거리를 벌려도 투사 영상 크기가 넓어져 다양한 책상에 적용 가능
- 적용성: 높음
2. MAGCUBIC HY450
- 특성: 1920*1080의 해상도를 지원하며 1.2m에서 100인치의 투사거리를 갖는 900ANSI 루멘 밝기의 프로젝터
- 장점: ViewSonic 제품보다 높은 화질, 작은 사이즈로 소형화 가능
- 단점: 낮은 밝기 성능으로 주변 조명에 민감
- 적용성: 높음
최종 선택: XGIMI Halo+ ✅
- 특성: 1920*1080 해상도, 높은 밝기 성능
- 선정 이유: 초기 계획 대비 성능 향상을 위해 업그레이드
부품 평가 및 선정 결과
개념설계 단계에서 수행한 부품별 평가 결과
| 분류 | 설계안 | 평가 기준 | 합계 | 순위 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 직관성 | 조작감 | 신속성 | 정밀성 | 확장성 | 내구성 | 경제성 | ||||
| 입력장치 | Velostat | - | 중 | 중 | 중 | 상 | 상 | 상 | 15 | 1 |
| 터치 패널 | - | 중 | 중 | 상 | 하 | 하 | 하 | 10 | 2 | |
| IMX219 | - | - | - | 상 | - | - | 중 | 5 | 1 | |
| OV5648 | - | - | - | 하 | - | - | 상 | 4 | 2 | |
| 제어장치 | 아두이노 우노 | - | - | - | - | 상 | 중 | 상 | 8 | 1 |
| 아두이노 프로미니 | - | - | - | - | 하 | 중 | 중 | 5 | 2 | |
| 라즈베리파이4B | - | - | 하 | 하 | 중 | - | 상 | 7 | 2 | |
| 라즈베리파이 5 | - | - | 상 | 상 | 상 | - | 중 | 11 | 1 | |
| 통신모듈 | USB 유선 | 상 | 상 | 상 | 상 | 중 | 중 | 상 | 19 | 1 |
| 블루투스 무선 | 중 | 하 | 하 | 상 | 상 | 상 | 중 | 15 | 2 | |
| HDMI | 상 | - | - | 상 | 상 | 상 | 상 | 15 | 1 | |
| 출력장치 | PJD86533WS | - | - | - | 하 | 중 | 중 | 중 | 10 | 1 |
| HY450 | - | - | - | 중 | 중 | 중 | 상 | 10 | 1 | |
- 직관성: 직관적으로 사용법을 알 수 있는가?
- 조작감: 적은 힘으로 터치 구동이 가능한가?
- 신속성: 장치의 반응속도가 빠른가?
- 정밀성: 화면의 가시성, 터치의 정밀도가 높은가?
- 확장성: 부품 교체 및 업그레이드가 용이한가?
- 내구성: 이동 및 보관 시 배선이 끊어지거나 부품이 손상될 우려는 없는가?
- 경제성: 제품의 비용이 합리적인가?
✅ 최종 선정 결과
상기 평가를 통해 다음과 같이 부품을 선정:
- 입력장치: Velostat + IMX219 (→ IMX-708로 업그레이드)
- 제어장치: Arduino Uno + Raspberry Pi 5
- 통신모듈: USB 유선 + HDMI 유선
- 출력장치: ViewSonic PJD86533WS (1차) / MAGCUBIC HY450 (대안) → XGIMI Halo+ (최종)
초기 시스템 설계
초기 하드웨어 구성 (제안서 기준)
터치 입력 시스템
- 크기: 120 × 90 cm² (최종: 400 × 400 mm로 축소)
- 센서: Velostat 압력 센서 + 구리 테이프 매트릭스
- 제어: Arduino + 멀티플렉서/시프트 레지스터 조합
영상 처리 시스템
- 메인 컨트롤러: Raspberry Pi 4 (최종: Raspberry Pi 5)
- 카메라: SONY IMX 219 8MP (최종: IMX-708 12MP 광각으로 업그레이드)
- 해상도: 3280×2464 (최종: 4608×2592)
출력 시스템
- 프로젝터: Viewsonic PJD8653ws (최종: XGIMI Halo+로 변경)
- 해상도: 1280×800 (최종: 1920×1080)
- 밝기: 3000 ANSI (최종: 더 높은 성능)
초기 게임 계획
🎮 게임 개발 계획
1차 게임 - 4인 체스 ✅ 완료
- 목적: 터치 시스템 정확도 및 딜레이 측정
- 특징: 마우스 클릭을 터치로 대체하는 간단한 포팅
- 상태: ✅ 완료 (계획대로 구현)
2차 게임 - 카드게임 🔄 변경 및 개발 중
- 초기 계획: 유희왕 등 복잡한 카드게임
- 변경 사유:
* 유희왕: 뒷면 카드 규칙으로 전면 인식 시스템과 부적합 * 매직: 동시 인식 카드 수 과다, 플레이 영역 초과
- 최종 구현:
* Texas Hold'em Poker (프로토타입) ✅ * 포켓몬 카드게임 (개발 중) 🔄
3차 게임 - TRPG 📝 개발 중
- 계획: LLM API 활용한 사회자 역할 AI
- 목적: AI를 통한 게임 진행 관리, 공정한 랜덤성 제공
- 상태: 📝 개발 중 (캐릭터 생성 시스템 완료, GPT API 연동 예정)
설계 변경사항
하드웨어 변경사항
⚠️ 중요 하드웨어 변경사항
터치 모듈 변경
- 초기: 터치 지점 오차범위 5mm 이하
- 변경: 터치 지점 오차범위 20mm 이하
- 사유:
* 벨로스탯에 구리선을 부착할 때 구리선의 폭(5mm)과 간격(20mm) 설정 시, 사람의 손가락이 닿는 면적(8mm)이 신호선들 사이에 고르게 퍼지지 못하는 문제 발생 * 초기 알고리즘은 터치 입력 네 곳을 바탕으로 상세한 터치점의 위치를 정하는 것이였으나, 터치 시 네 곳이 동시에 눌리는 것이 아닌 한 곳만 눌리게 되면서 이러한 알고리즘의 적용이 불가능해짐 * 시간과 수정의 용이성을 고려하여 소프트웨어의 UI를 수정하는 방법으로 문제 해결
커버 설계 변경
- 초기: 미니리프트 2개 사용, 볼 조인트 방식 소형문
- 변경: 미니리프트 1개 사용, 미니 경첩 부착 소형문
- 사유:
* 두 리드 스크류를 용접하여 하나로 연결하더라도 약 7kg에 달하는 프로젝터를 들어 올릴 수 있는 충분한 토크가 발생하는지 불확실 * 용접 과정에서 리드 스크류의 길이가 미세하게나마 짧아질 경우, 리프트 작동 자체에 문제가 생길 수 있음 * 실험적 경험에 비추어 볼 때, 한 개의 미니 리프트만으로도 프로젝터를 지지하고 높낮이를 안정적으로 조절할 수 있다는 점이 확인됨 * 5mm 아크릴 재질에서 볼 조인트 소켓 가공 어려움
소프트웨어 변경사항
💡 소프트웨어 개선사항
1차 게임 요소
- 체스 게임: 변동 없음 ✅
2차 게임 요소 🔄
- 초기 계획: 유희왕 등 카드게임
- 변경: 포커 게임으로 선구현, 포켓몬 카드게임 개발 시도중
- 카메라 모델 변경: IMX-219 → IMX-708 120도 광각
- 변경 사유:
* 유희왕: 뒷면으로 카드를 내는 규칙이 존재하여 현재 시스템에서는 카드의 전면이 드러나야 카메라로 정보를 얻고 게임 로직을 수행할 수 있어 적용이 어려움 * 매직 더 게더링: 동시에 인식해야하는 카드가 대부분 50장에 달해 라즈베리파이의 연산능력으로 객체인식을 수행함에 있어 어려움이 존재. 또한 플레이 영역이 터치패드와 프로젝션 범위을 넘어설 우려가 있어 제작 후보에서 제외 * 포켓몬 카드 게임: 턴 선택, 카드의 효과, 데미지 등 PyQt UI로 대체가능한 요소가 다수 존재. 유희왕이나 매직 더 게더링과 달리 뒷면 규칙이 없으며 최대 인식 요구 갯수가 최대 13장으로 라즈베리파이의 연산성능으로 처리가 가능하다고 판단됨
3차 게임 요소
- LLM API를 활용한 TPRG: 변동 없음 ✅
동작 시나리오
🎯 시스템 동작 흐름
- 시스템 시작: 프로젝터 전원 ON, 라즈베리파이 부팅
- 게임 선택: 터치를 통해 메인 화면에서 원하는 게임 선택
- 게임 진행
- 1차 게임(체스): 터치로 기물 이동
- 2차 게임(카드게임): 실물 카드를 테이블에 배치, 카메라가 인식하여 게임 진행
- 3차 게임(TRPG): GPT API를 활용한 스토리 진행
- 게임 종료: 메인 화면으로 복귀
구현 내용
시스템 구성
🔧 하드웨어 구성
- 제어부: 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 카메라 사양
- 모델: IMX-708 (12MP 자동초점 120도 광각)
- 기존 모델(IMX-219) 대비 개선사항:
* ✅ 화질 향상으로 카드 인식률 개선 * ✅ 화각 확대로 촬영 범위 증가 * ✅ 자동 초점 기능 추가
- 위치: 프로젝터 상단 커버 내부
- 기능: 실물 카드 인식, 게임 상황 촬영
소프트웨어 설계 및 구현
1차 게임 - 체스
♟️ 4인 체스 구현
- 기반: 오픈소스 체스 게임을 라즈베리파이 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 특징
- 각 플레이어별 개인 보드 (테이블 외각 배치)
- 중앙 커뮤니티 카드 배치 (카메라 인식 범위 고려)
- 배팅액에 따른 애니메이션 효과
- 쇼다운 상황 특수 효과
변수 처리
- 비순차 배팅 방지
- 턴 종료 전 카드 공개 방지
- 배팅액에 따른 선택지 제한
카드 인식 프로세스
📸 카메라 설정
- 해상도: 4608×2592 (IMX-708 최대 해상도)
- FPS: 30 (33333㎲ 프레임 지속시간)
- AwbMode: 0 (자동 화이트 밸런스)
- Sharpness: 1.5 (기본값보다 높은 선명도)
🔍 이미지 처리 파이프라인
- 이미지 전처리 * 카메라 캡처 → 'image' 변수 저장 * 이진화 처리 (프로젝터 밝은 환경 고려한 임계값 설정) * 카드 최소 영역, 가로세로 비율 제한 (실제 카드 63mm×88mm 기준)
- 카드 검출 * detect_card_edges() 함수로 카드 윤곽 검출 * 4개 끝점 좌표 확보 * 여백 포함한 crop으로 문양/숫자 손상 방지
- 이미지 보정 * 샤프닝 커널 적용으로 확대 시 화질 저하 보완 * 인식 모델 최적화를 위한 이미지 품질 향상
- 모델 인식 * YOLO 모델 적용 * 인식률 30% 이상 결과 중 최고 신뢰도 선택 * 좌표 정보 활용한 카드 순서 정렬 (Y좌표 오차 허용)
- 게임 로직 반영 * 인식 결과를 게임 상태에 반영 * 승자 판별 로직 실행
포켓몬 카드 게임 (개발 중) 🔄
- API 활용: 16,000여 장의 카드 데이터베이스
- 특수 효과: 스타디움 카드에 따른 배경 변화
- 과제: 한국판 카드 인식 모델 부재 (대부분 영문판으로 학습된 모델)
- 해결방안: 영문판 카드 구매 또는 한국판 카드 일부 학습 모델 제작
3차 게임 - TRPG
🎲 TRPG 게임 구현
- 맵 생성: Polytopia Map Generator 오픈소스 활용 (GNU GPL 라이선스)
- 캐릭터 시스템:
* D&D 기반 12개 직업 선택 * 스펠 사용 가능 직업: Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard * 직업별 차별화된 스펠 목록
- 맵 구현: QWebEngineView를 사용하여 HTML 기반 맵을 PyQt5 UI에 통합
- 스토리 진행: GPT API를 활용한 동적 시나리오 생성 (예정)
현재 진행상황
📊 2025년 6월 중간보고 기준 진행률
🔧 하드웨어 완성도
터치 모듈 ✅ 완료
- 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 | 20mm 달성 | 충족 |
| 터치 응답시간 | < 100ms | 측정 예정 | 진행 중 |
| 게임 응답속도 | < 100ms | 측정 예정 | 진행 중 |
| 지원 게임 가짓수 | 2+ 개 | 2개 구현 + 1개 개발중 | 충족 |
| 화면투사 선명도 | > 70% | 측정 예정 | 진행 중 |
미구현 내용 및 향후 과제
⚠️ 미완성 항목
- 포켓몬 카드 게임 한국판 인식 모델
- TRPG GPT API 연동
- 터치 캘리브레이션 자동화
- 카메라 최종 위치 확정
- 전체 시스템 통합 테스트
프로젝트 평가
중간 평가 (2025년 6월 1일 기준)
📊 진행률
- 하드웨어: 90% 완료
- 소프트웨어: 75% 완료
- 시스템 통합: 30% 완료
✅ 주요 성과
- 설계 변경을 통한 현실적 목표 재설정
- 터치 모듈 하드웨어 완성
- 카드 인식 시스템 성공적 구현
- 복수 게임 구현을 통한 플랫폼 확장성 입증
🔍 주요 과제
- 한국어 카드 인식 문제 해결
- 시스템 통합 및 안정성 확보
- 사용자 경험 최적화
예산 내역
총 예산 변화
💰 예산 변경 내역
- 초기 계획 (2025.4): 183천원
- 최종 예산 (2025.6): 404.8천원
- 증액: 221.8천원 (121% 증가)
- 증액 사유: 카메라 업그레이드, 아크릴 판재, PCB 전문 제작
상세 내역 비교
| 구분 | 초기 계획 (천원) | 최종 실제 (천원) | 주요 변경사항 |
|---|---|---|---|
| 기본 부품 | 175 | 175 | 동일 |
| 카메라 업그레이드 | - | 54.2 | IMX219 → IMX708 |
| 아크릴 판재 | - | 79.4 | 커버 제작 |
| PCB 제작 | - | 60.0 | 전문 제작 |
| 기타 추가 부품 | 8 | 36.2 | 터치패드 보호재 등 |
| 총계 | 183 | 404.8 | 221.8천원 증액 |
기술적 상세사항
🔬 기술 상세 정보
Velostat 압력 센서 기술
원리와 특성
- 소재: 전도성 폴리에틸렌 수지 필름에 탄소 블랙 항정전기 플라스틱 침투
- 표면 저항: 31,000 Ω/cm² (일반적으로 100,000Ω/□ 미만)
- 물리적 특성: 열접착 가능, 유연성, 뛰어난 내마모성
- 온도 범위: -45°C ~ +65°C (-50°F ~ 150°F)
- 크기: 280mm × 280mm, 두께 4mil/0.1mm
매트릭스 구성
- 구리 테이프: 5mm 폭으로 최적화 (실험적 검증)
- 배치: 한 면에 구리 열(column), 다른 면에 구리 행(row)
- 보호: 50μm PE(폴리에틸렌) 필름으로 방수 처리
터치 인식 회로
핵심 구성요소
- SN74HC595: 반응 신호 제어, 하나의 활성 열(column) 스위칭
- CD4051D: 터치 천의 반응 신호 제어, ADC 연결된 활성 행(row) 선택
- 연산 증폭기: 미약한 신호 증폭
- Arduino: 시프트 레지스터와 멀티플렉서 제어, 직렬 데이터 수신
PCB 설계 기준
- 크로스토크 방지: 3W 규칙 적용
- 도선 사양: 20mil 두께, 12mil 간격
- 신호 무결성 확보
카메라 인식 기술
하드웨어 사양
- 센서: Sony IMX708 (12MP, 자동초점, 120도 광각)
- 해상도: 최대 4608×2592
- 인터페이스: CSI (Camera Serial Interface)
이미지 처리 파이프라인
1. 고해상도 캡처 (4608×2592) 2. 이진화 및 윤곽 검출 3. 카드 영역 추출 4. 샤프닝 필터 적용 5. 딥러닝 모델 인식 6. 결과 검증 및 정렬
인식 정확도 향상 기법
- 프로젝터 조명 환경 고려한 임계값 설정
- 카드 크기 비율 검증 (63mm×88mm 기준)
- 여백 포함 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장 데이터베이스
기술 참고 문헌
[1] M. Kciuk, Z. Kowalik, G. Lo Sciuto, S. Sławski, and S. Mastrostefano, "Intelligent medical Velostat pressure sensor mat based on artificial neural network and Arduino embedded system," Applied System Innovation, vol. 6, no. 5, p. 84, Sep. 2023, doi: 10.3390/asi6050084.
[2] L. Yuan, H. Qu, and J. Li, "Velostat sensor array for object recognition," IEEE Sensors Journal, vol. 22, no. 2, pp. 1692–1701, Jan. 15, 2022
팀 구성 및 역할 분담
| 팀원명 | 주요 역할 | 세부 담당 업무 |
|---|---|---|
| 구** (팀장) | 프로젝트 관리, 터치 시스템 |
|
| 김** | 터치 시스템, 통합 |
|
| 류** | 터치 시스템 |
|
| 조** | 기구 설계, 통합 |
|
| 전** | AI/객체인식, API |
|
프로젝트 리뷰
💭 개발 과정 회고
문제 해결 과정
터치 정확도 문제
- 문제: 초기 설계 목표 5mm 정확도 달성 어려움
- 원인: 손가락 접촉면적과 센서 간격 불일치
- 해결: UI 재설계를 통한 실용적 접근
카메라 성능 문제
- 문제: IMX219 화질 및 화각 부족
- 해결: IMX708 광각 카메라로 업그레이드
게임 복잡도 문제
- 문제: 유희왕, 매직 더 게더링 구현 복잡도 과다
- 해결: 포켓몬 카드게임으로 범위 조정
예산 관리
- 초기 예산: 183천원
- 최종 예산: 404.8천원
- 주요 증액 요인: 성능 향상을 위한 부품 업그레이드
향후 확장 가능성
- 추가 게임 장르 지원
- AI 대전 상대 구현
- 온라인 멀티플레이어 지원
- 모바일 앱 연동
프로젝트 느낀점
- 하드웨어 제약사항을 고려한 현실적 목표 설정의 중요성
- 프로토타입을 통한 조기 검증의 필요성
- 팀 내 소통과 역할 분담의 중요성
- 오픈소스 활용을 통한 개발 효율성 증대
Imbedded - 테이블탑 프로젝터
"디지털과 아날로그가 만나는 새로운 게임 플랫폼"