|
|
| 1번째 줄: |
1번째 줄: |
| − | ==프로젝트 소개== | + | ==프로젝트 개요== |
| − | '''테이블탑 프로젝터'''는 프로젝터를 이용하여 테이블 위에 게임 화면을 투사하고, 터치 센서를 통해 사용자와 상호작용할 수 있는 인터랙티브 게임 플랫폼입니다. 다양한 보드게임과 카드게임을 디지털화하여 여러 사용자가 함께 즐길 수 있는 새로운 형태의 게임 환경을 제공합니다.
| |
| | | | |
| − | ===프로젝트 명=== | + | ===프로젝트 소개=== |
| | + | '''프로젝트 명''' |
| | 테이블탑 프로젝터 (Tabletop Projector) | | 테이블탑 프로젝터 (Tabletop Projector) |
| | | | |
| − | ===프로젝트 기간===
| + | '''프로젝트 요약''' |
| − | 2025년 3월 ~ 2025년 6월
| + | '''테이블탑 프로젝터'''는 프로젝터를 이용하여 테이블 위에 게임 화면을 투사하고, 터치 센서를 통해 사용자와 상호작용할 수 있는 인터랙티브 게임 플랫폼입니다. 다양한 보드게임과 카드게임을 디지털화하여 여러 사용자가 함께 즐길 수 있는 새로운 형태의 게임 환경을 제공합니다. |
| − | | |
| − | ===팀 소개===
| |
| − | {| class="wikitable" style="text-align:center"
| |
| − | ! 팀명 colspan="5" | '''Imbedded'''
| |
| − | |-
| |
| − | ! 역할
| |
| − | ! 이름
| |
| − | ! 담당 업무
| |
| − | ! 연락처
| |
| − | |-
| |
| − | | 팀장
| |
| − | | 구**
| |
| − | | 프로젝트 관리, 터치 시스템
| |
| − | | -
| |
| − | |-
| |
| − | | 팀원
| |
| − | | 김**
| |
| − | | 터치 시스템, 시스템 통합
| |
| − | | -
| |
| − | |-
| |
| − | | 팀원
| |
| − | | 류**
| |
| − | | 터치 시스템, 회로 설계
| |
| − | | -
| |
| − | |-
| |
| − | | 팀원
| |
| − | | 조**
| |
| − | | 기구 설계, 커버 제작
| |
| − | | -
| |
| − | |-
| |
| − | | 팀원
| |
| − | | 전**
| |
| − | | AI/객체인식, API 연동
| |
| − | | -
| |
| − | |}
| |
| − | | |
| − | ===개발 소요 비용===
| |
| − | * '''초기 계획''' (2025.4): 183천원
| |
| − | * '''최종 예산''' (2025.6): 404.8천원
| |
| − | * '''증액 사유''': 카메라 성능 업그레이드, 아크릴 커버 제작, PCB 전문 제작
| |
| − | | |
| − | ==프로젝트 개요==
| |
| | | | |
| − | ===초기 개발 컨셉===
| + | '''프로젝트 개발 컨셉''' |
| − | '''프로젝트 비전''' | + | 본 프로젝트는 테이블 위에 보드게임 화면을 투사하고, 사용자의 터치 입력으로 직접 상호작용할 수 있는 플랫폼을 구현하는 것입니다. 이를 통해 여러 사람이 각자 휴대기기에 국한되지 않고 하나의 공용 공간에서 함께 게임을 즐길 수 있으며, 전통 보드게임의 정적인 특성을 넘어 화면 위의 영상과 동적으로 교감하며 플레이할 수 있어 온라인 게임이 가지는 ‘대면 상호작용의 부재’ 문제를 해소합니다. |
| | | | |
| − | 보드게임 화면을 책상에 투사하고 영상을 터치함으로써 상호작용이 가능한 장치를 제작하여, 여러 사람들이 개인용 기기로만 접할 수 있었던 게임을 함께 참여할 수 있게 공통된 책상에 투사해주는 시스템을 구현한다. 전통적인 보드게임의 정적인 특성에서 벗어나, 사용자와 영상의 상호작용으로 동적인 보드게임이 가능해지며, 온라인 게임의 약점으로 꼽혀왔던 사람들과의 대면 부족이라는 문제를 해결할 수 있다.
| + | ===프로젝트 배경 및 기대효과=== |
| − | | |
| − | '''핵심 가치'''
| |
| − | * '''확장 가능성''': 리눅스 플랫폼 특성상 개발 환경이 잘 갖추어져 있어 향후 추가 보드게임 개발 가능
| |
| − | * '''직관적 조작''': 빠른 터치 속도 및 영상인식을 통한 자연스러운 사용자 상호작용
| |
| − | * '''사회적 연결''': 대면 보드게임의 장점과 디지털 게임의 편의성 결합
| |
| − | | |
| − | ===프로젝트 요약=== | |
| − | 본 프로젝트는 프로젝터와 터치 센서를 결합하여 테이블 위에서 다양한 인터랙티브 게임을 즐길 수 있는 플랫폼을 개발하는 것을 목표로 한다. 라즈베리파이를 중심으로 한 제어 시스템과 벨로스탯(Velostat)을 활용한 터치 모듈, 카메라를 통한 실물 카드 인식 시스템을 구현하여 디지털과 아날로그의 장점을 결합한 새로운 게임 경험을 제공한다.
| |
| − | | |
| − | ===프로젝트의 배경 및 기대효과===
| |
| | <div style="background-color:#f8f9fa; border-left:4px solid #1976d2; padding:20px; margin:10px 0;"> | | <div style="background-color:#f8f9fa; border-left:4px solid #1976d2; padding:20px; margin:10px 0;"> |
| | '''배경''' | | '''배경''' |
| 79번째 줄: |
27번째 줄: |
| | </div> | | </div> |
| | | | |
| − | ===프로젝트 개발 목표=== | + | ===프로젝트 목표=== |
| | + | * '''확장 가능성''': 리눅스 플랫폼 특성상 개발 환경이 잘 갖추어져 있어 향후 추가 보드게임 개발 가능 |
| | + | * '''직관적 조작''': 빠른 터치 속도 및 영상인식을 통한 자연스러운 사용자 상호작용 |
| | + | * '''사회적 연결''': 대면 보드게임의 장점과 디지털 게임의 편의성 결합 |
| | | | |
| − | '''초기 목표 (2025.4 제안서 기준)'''
| + | ==동작 시나리오== |
| − | {| class="wikitable" style="text-align:center"
| + | <div style="background-color:#f5f5f5; padding:20px; border-radius:10px; margin:20px 0;"> |
| − | |-
| + | <h3 style="color:#1976d2; margin-top:0;">🎯 시스템 동작 흐름</h3> |
| − | ! style="background-color:#1976d2; color:white;" | 평가 항목
| + | <ol style="font-size:16px; line-height:2;"> |
| − | ! style="background-color:#1976d2; color:white;" | 평가방법
| + | <li><strong>시스템 시작</strong>: 프로젝터 전원 ON, 라즈베리파이 부팅</li> |
| − | ! style="background-color:#1976d2; color:white;" | 초기 목표치
| + | <li><strong>게임 선택</strong>: 터치를 통해 메인 화면에서 원하는 게임 선택</li> |
| − | ! style="background-color:#1976d2; color:white;" | 최종 목표치 (수정)
| + | <li><strong>게임 진행</strong> |
| − | ! style="background-color:#1976d2; color:white;" | 비중(%)
| + | <ul> |
| − | |-
| + | <li>1차 게임(체스): 터치로 기물 이동</li> |
| − | | '''터치 정확도'''
| + | <li>2차 게임(카드게임): 실물 카드를 테이블에 배치, 카메라가 인식하여 게임 진행</li> |
| − | | 터치 인식 간격 (mm)
| + | <li>3차 게임(TRPG): GPT API를 활용한 스토리 진행</li> |
| − | | < 30mm
| + | </ul> |
| − | | style="background-color:#ffecb3;" | '''< 20mm'''
| + | </li> |
| − | | 35
| + | <li><strong>게임 종료</strong>: 메인 화면으로 복귀</li> |
| − | |-
| + | </ol> |
| − | | '''터치 응답시간'''
| |
| − | | 20회 반복 측정 (ms)
| |
| − | | < 5ms
| |
| − | | style="background-color:#ffecb3;" | '''< 100ms'''
| |
| − | | 20
| |
| − | |-
| |
| − | | '''카드 객체인식 정확도'''
| |
| − | | 100프레임당 인식률 (%)
| |
| − | | > 50%
| |
| − | | style="background-color:#c8e6c9;" | '''> 90%'''
| |
| − | | 10
| |
| − | |-
| |
| − | | '''게임 응답속도'''
| |
| − | | 입력-반응 사이 시간 (ms)
| |
| − | | < 100ms
| |
| − | | < 100ms
| |
| − | | 25
| |
| − | |-
| |
| − | | '''지원 게임 가짓수'''
| |
| − | | 빌드된 게임 개수
| |
| − | | 3+ 개
| |
| − | | style="background-color:#ffecb3;" | '''2+ 개'''
| |
| − | | 10
| |
| − | |-
| |
| − | | '''화면투사 선명도'''
| |
| − | | sharpness 계산 (%)
| |
| − | | > 70%
| |
| − | | > 70%
| |
| − | | 10
| |
| − | |}
| |
| − | | |
| − | <div class="mw-collapsible mw-collapsed" style="border:1px solid #ddd; padding:10px; margin:10px 0;"> | |
| − | <div style="font-weight:bold; background-color:#f5f5f5; padding:5px;">목표 수정 사유 (클릭하여 확인)</div> | |
| − | <div class="mw-collapsible-content" style="padding-top:10px;"> | |
| − | * '''터치 정확도''': 30mm → 20mm (하드웨어 성능 향상으로 목표 강화)
| |
| − | * '''터치 응답시간''': 5ms → 100ms (하드웨어 한계를 고려한 현실적 조정)
| |
| − | * '''카드 인식률''': 50% → 90% (카메라 성능 향상과 알고리즘 개선으로 목표 강화)
| |
| − | * '''게임 가짓수''': 3개 → 2개 (프로젝트 기간 내 완성도 높은 구현을 위한 조정)
| |
| − | </div> | |
| | </div> | | </div> |
| | | | |
| − | ==개념 설계== | + | ==구현 내용== |
| − | | + | ===장치 선정=== |
| − | ===시스템 목적 계통도===
| |
| − | 테이블탑 프로젝터는 다음 5가지 핵심 가치를 중심으로 설계되었습니다:
| |
| − | | |
| − | <div style="display:flex; flex-wrap:wrap; gap:20px; margin:20px 0;">
| |
| − | <div style="flex:1; min-width:300px; background-color:#e3f2fd; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#1976d2; margin-top:0;">💡 편의성 (직관성, 조작감)</h4>
| |
| − | * '''직관성''': 터치와 프로젝터의 빔을 이용하는 테이블탑 프로젝터는 간편한 UI를 제공하여 처음 사용하는 사용자에게도 직관적으로 사용법을 알 수 있도록 설계
| |
| − | * '''조작감''': 뮤직 플레이어의 UI와 유사하게 구성하여 게임이 목록화되고, 각 게임마다의 사진과 설명을 화면 대부분에 할당하여 표시
| |
| − | * 터치라는 익숙한 입력 방식을 통해 스마트폰 사용 경험자들이 쉽게 장치를 조작하고 실행할 수 있도록 구현
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#e8f5e9; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#388e3c; margin-top:0;">⚡ 성능 (신속성, 정밀성)</h4>
| |
| − | * '''신속성''': 터치 압력 감지용 Velostat 소재의 저항값이 민감하게 변하는 구간을 선택하여 정전식 터치방식인 스마트폰과 유사한 압력대를 감지
| |
| − | * '''정밀성''': 저항값이 변하는 지점을 통해 정확한 터치 지점을 좌표 계산하여 mm단위의 정밀한 터치점을 찾아내고, 압력의 세기도 구분하여 범용적인 활용 가능
| |
| − | * 터치 모듈을 구동하는 연산을 아두이노로 분리하여 라즈베리파이에서는 게임 소프트웨어에 리소스를 최대한 투자
| |
| − | * 프로젝터는 해상도보다는 높은 밝기값을 지원하는 제품을 선택하여 주변 빛에 의한 프로젝션 영상의 선명도를 최대한 보존
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#fff3e0; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#f57c00; margin-top:0;">🔧 확장가능성 (범용성, 확장성)</h4>
| |
| − | * '''모듈성''': 라즈베리파이, 터치 모듈, 프로젝터, 카메라 각각이 모듈로 구성되어 요구되는 테이블 크기, 게임 성능 등에 따라 시스템 변경 가능
| |
| − | * '''표준화된 단자''': HDMI, USB, FPC/FFC 케이블 등 표준화된 단자를 사용하여 다양한 환경, 가격 조건, 성능 조건에 따라 적합한 시스템 성능 구축 가능
| |
| − | * '''포팅 편의성''': 소스가 LINUX 환경에서 실행되며, 터치 시스템을 하드웨어 부분에서 지원하므로 터치입력 처리만 구현하면 어렵지 않게 이식 가능
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#fce4ec; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#c2185b; margin-top:0;">🛡️ 내구성</h4>
| |
| − | * '''높은 내구성''': 프로젝터, 라즈베리파이, 카메라 모듈은 표준화된 입출력 단자가 존재하여 체결성이 높고 여러번의 탈착에도 높은 내구성 보장
| |
| − | * '''PCB 구현''': 터치 모듈의 복잡한 회로를 PCB 기판으로 구현하고 케이블의 단자를 FPC/FFC 규격으로 압축하여 부품의 탈착, 이동에도 높은 내구성 유지
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#f3e5f5; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#7b1fa2; margin-top:0;">💰 경제성</h4>
| |
| − | * '''비용 절감''': 압력인식 패널, 고가의 카메라 등을 사용하지 않고 저렴한 회로기판과 velostat 소재, 이미지처리 기법과 객체인식 모델을 활용하여 센서 비용 최소화
| |
| − | * '''확장성을 통한 경제성''': 같은 기능을 가진 저렴한 모델(저렴한 프로젝터, 라즈베리파이 4 이하의 CPU 등)로 교체하여 단가 절감 가능성 확보
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ===입력장치 검토 및 선정===
| |
| − | | |
| | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> | | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> |
| − | <h4 style="background-color:#2196f3; color:white; padding:10px; margin:0;">🔍 입력장치 상세 비교</h4> | + | <h4 style="background-color:#2196f3; color:white; padding:10px; margin:0;">입력장치</h4> |
| | <div class="mw-collapsible-content" style="padding:20px;"> | | <div class="mw-collapsible-content" style="padding:20px;"> |
| | | | |
| 216번째 줄: |
87번째 줄: |
| | </div> | | </div> |
| | </div> | | </div> |
| − |
| |
| − | ===제어장치 검토 및 선정===
| |
| | | | |
| | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> | | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> |
| − | <h4 style="background-color:#4caf50; color:white; padding:10px; margin:0;">🎮 제어장치 상세 비교</h4> | + | <h4 style="background-color:#4caf50; color:white; padding:10px; margin:0;">제어장치</h4> |
| | <div class="mw-collapsible-content" style="padding:20px;"> | | <div class="mw-collapsible-content" style="padding:20px;"> |
| | | | |
| 245번째 줄: |
114번째 줄: |
| | </div> | | </div> |
| | </div> | | </div> |
| − |
| |
| − | ===통신모듈 검토 및 선정===
| |
| | | | |
| | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> | | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> |
| − | <h4 style="background-color:#ff9800; color:white; padding:10px; margin:0;">📡 통신모듈 상세 비교</h4> | + | <h4 style="background-color:#ff9800; color:white; padding:10px; margin:0;">통신모듈</h4> |
| | <div class="mw-collapsible-content" style="padding:20px;"> | | <div class="mw-collapsible-content" style="padding:20px;"> |
| | | | |
| 270번째 줄: |
137번째 줄: |
| | </div> | | </div> |
| | | | |
| − | ===출력장치 검토 및 선정===
| |
| | | | |
| | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> | | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;"> |
| − | <h4 style="background-color:#9c27b0; color:white; padding:10px; margin:0;">📽️ 출력장치 상세 비교</h4> | + | <h4 style="background-color:#9c27b0; color:white; padding:10px; margin:0;">출력장치</h4> |
| | <div class="mw-collapsible-content" style="padding:20px;"> | | <div class="mw-collapsible-content" style="padding:20px;"> |
| | | | |
| 293번째 줄: |
159번째 줄: |
| | </div> | | </div> |
| | | | |
| − | ===부품 평가 및 선정 결과=== | + | ===커버 설계=== |
| − | | |
| − | 개념설계 단계에서 수행한 부품별 평가 결과
| |
| − | | |
| − | <div style="overflow-x:auto;">
| |
| − | {| class="wikitable" style="text-align:center; min-width:800px;"
| |
| − | |-
| |
| − | ! rowspan="2" style="background-color:#2196f3; color:white;" | 분류
| |
| − | ! rowspan="2" style="background-color:#2196f3; color:white;" | 설계안
| |
| − | ! colspan="7" style="background-color:#2196f3; color:white;" | 평가 기준
| |
| − | ! rowspan="2" style="background-color:#2196f3; color:white;" | 합계
| |
| − | ! rowspan="2" style="background-color:#2196f3; color:white;" | 순위
| |
| − | |-
| |
| − | ! style="background-color:#64b5f6;" | 직관성
| |
| − | ! style="background-color:#64b5f6;" | 조작감
| |
| − | ! style="background-color:#64b5f6;" | 신속성
| |
| − | ! style="background-color:#64b5f6;" | 정밀성
| |
| − | ! style="background-color:#64b5f6;" | 확장성
| |
| − | ! style="background-color:#64b5f6;" | 내구성
| |
| − | ! style="background-color:#64b5f6;" | 경제성
| |
| − | |-
| |
| − | | rowspan="4" | '''입력장치'''
| |
| − | | style="background-color:#c8e6c9;" | '''Velostat'''
| |
| − | | -
| |
| − | | 중
| |
| − | | 중
| |
| − | | 중
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | '''15'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | 터치 패널
| |
| − | | -
| |
| − | | 중
| |
| − | | 중
| |
| − | | 상
| |
| − | | 하
| |
| − | | 하
| |
| − | | 하
| |
| − | | 10
| |
| − | | 2
| |
| − | |-
| |
| − | | style="background-color:#c8e6c9;" | '''IMX219'''
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | 상
| |
| − | | -
| |
| − | | -
| |
| − | | 중
| |
| − | | '''5'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | OV5648
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | 하
| |
| − | | -
| |
| − | | -
| |
| − | | 상
| |
| − | | 4
| |
| − | | 2
| |
| − | |-
| |
| − | | rowspan="4" | '''제어장치'''
| |
| − | | style="background-color:#c8e6c9;" | '''아두이노 우노'''
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | 상
| |
| − | | 중
| |
| − | | 상
| |
| − | | '''8'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | 아두이노 프로미니
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | 하
| |
| − | | 중
| |
| − | | 중
| |
| − | | 5
| |
| − | | 2
| |
| − | |-
| |
| − | | 라즈베리파이4B
| |
| − | | -
| |
| − | | -
| |
| − | | 하
| |
| − | | 하
| |
| − | | 중
| |
| − | | -
| |
| − | | 상
| |
| − | | 7
| |
| − | | 2
| |
| − | |-
| |
| − | | style="background-color:#c8e6c9;" | '''라즈베리파이 5'''
| |
| − | | -
| |
| − | | -
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | -
| |
| − | | 중
| |
| − | | '''11'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | rowspan="3" | '''통신모듈'''
| |
| − | | style="background-color:#c8e6c9;" | '''USB 유선'''
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | 중
| |
| − | | 중
| |
| − | | 상
| |
| − | | '''19'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | 블루투스 무선
| |
| − | | 중
| |
| − | | 하
| |
| − | | 하
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | 중
| |
| − | | 15
| |
| − | | 2
| |
| − | |-
| |
| − | | style="background-color:#c8e6c9;" | '''HDMI'''
| |
| − | | 상
| |
| − | | -
| |
| − | | -
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | 상
| |
| − | | '''15'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | rowspan="2" | '''출력장치'''
| |
| − | | style="background-color:#c8e6c9;" | '''PJD86533WS'''
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | 하
| |
| − | | 중
| |
| − | | 중
| |
| − | | 중
| |
| − | | '''10'''
| |
| − | | '''1'''
| |
| − | |-
| |
| − | | style="background-color:#c8e6c9;" | '''HY450'''
| |
| − | | -
| |
| − | | -
| |
| − | | -
| |
| − | | 중
| |
| − | | 중
| |
| − | | 중
| |
| − | | 상
| |
| − | | '''10'''
| |
| − | | '''1'''
| |
| − | |}
| |
| − | </div>
| |
| − | | |
| − | <div class="mw-collapsible mw-collapsed" style="border:1px solid #ddd; padding:10px; margin:10px 0;">
| |
| − | <div style="font-weight:bold; background-color:#f5f5f5; padding:5px;">📊 평가 기준 정의 (클릭하여 확인)</div>
| |
| − | <div class="mw-collapsible-content" style="padding-top:10px;">
| |
| − | * '''직관성''': 직관적으로 사용법을 알 수 있는가?
| |
| − | * '''조작감''': 적은 힘으로 터치 구동이 가능한가?
| |
| − | * '''신속성''': 장치의 반응속도가 빠른가?
| |
| − | * '''정밀성''': 화면의 가시성, 터치의 정밀도가 높은가?
| |
| − | * '''확장성''': 부품 교체 및 업그레이드가 용이한가?
| |
| − | * '''내구성''': 이동 및 보관 시 배선이 끊어지거나 부품이 손상될 우려는 없는가?
| |
| − | * '''경제성''': 제품의 비용이 합리적인가?
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | <div style="background-color:#e8f5e9; border-radius:10px; padding:20px; margin:20px 0;">
| |
| − | <h4 style="color:#2e7d32; margin-top:0;">✅ 최종 선정 결과</h4>
| |
| − | 상기 평가를 통해 다음과 같이 부품을 선정:
| |
| − | * '''입력장치''': Velostat + IMX219 (→ IMX-708로 업그레이드)
| |
| − | * '''제어장치''': Arduino Uno + Raspberry Pi 5
| |
| − | * '''통신모듈''': USB 유선 + HDMI 유선
| |
| − | * '''출력장치''': ViewSonic PJD86533WS (1차) / MAGCUBIC HY450 (대안) → XGIMI Halo+ (최종)
| |
| − | </div>
| |
| − | | |
| − | ==초기 시스템 설계==
| |
| − | | |
| − | ===초기 하드웨어 구성 (제안서 기준)===
| |
| − | <div style="display:flex; flex-wrap:wrap; gap:20px;">
| |
| − | <div style="flex:1; min-width:300px; background-color:#f5f5f5; padding:15px; border-radius:5px;">
| |
| − | <h4 style="color:#1976d2;">터치 입력 시스템</h4>
| |
| − | * 크기: 120 × 90 cm² (최종: 400 × 400 mm로 축소)
| |
| − | * 센서: Velostat 압력 센서 + 구리 테이프 매트릭스
| |
| − | * 제어: Arduino + 멀티플렉서/시프트 레지스터 조합
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#f5f5f5; padding:15px; border-radius:5px;">
| |
| − | <h4 style="color:#388e3c;">영상 처리 시스템</h4>
| |
| − | * 메인 컨트롤러: Raspberry Pi 4 (최종: Raspberry Pi 5)
| |
| − | * 카메라: SONY IMX 219 8MP (최종: IMX-708 12MP 광각으로 업그레이드)
| |
| − | * 해상도: 3280×2464 (최종: 4608×2592)
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#f5f5f5; padding:15px; border-radius:5px;">
| |
| − | <h4 style="color:#7b1fa2;">출력 시스템</h4>
| |
| − | * 프로젝터: Viewsonic PJD8653ws (최종: XGIMI Halo+로 변경)
| |
| − | * 해상도: 1280×800 (최종: 1920×1080)
| |
| − | * 밝기: 3000 ANSI (최종: 더 높은 성능)
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ===초기 게임 계획===
| |
| − | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;">
| |
| − | <h4 style="background-color:#4caf50; color:white; padding:10px; margin:0;">🎮 게임 개발 계획</h4>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| − | | |
| − | '''1차 게임 - 4인 체스''' ✅ '''완료'''
| |
| − | * 목적: 터치 시스템 정확도 및 딜레이 측정
| |
| − | * 특징: 마우스 클릭을 터치로 대체하는 간단한 포팅
| |
| − | * 상태: ✅ 완료 (계획대로 구현)
| |
| − | | |
| − | '''2차 게임 - 카드게임''' 🔄 '''변경 및 개발 중'''
| |
| − | * 초기 계획: 유희왕 등 복잡한 카드게임
| |
| − | * 변경 사유:
| |
| − | * 유희왕: 뒷면 카드 규칙으로 전면 인식 시스템과 부적합
| |
| − | * 매직: 동시 인식 카드 수 과다, 플레이 영역 초과
| |
| − | * 최종 구현:
| |
| − | * Texas Hold'em Poker (프로토타입) ✅
| |
| − | * 포켓몬 카드게임 (개발 중) 🔄
| |
| − | | |
| − | '''3차 게임 - TRPG''' 📝 '''개발 중'''
| |
| − | * 계획: LLM API 활용한 사회자 역할 AI
| |
| − | * 목적: AI를 통한 게임 진행 관리, 공정한 랜덤성 제공
| |
| − | * 상태: 📝 개발 중 (캐릭터 생성 시스템 완료, GPT API 연동 예정)
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ==설계 변경사항==
| |
| − | | |
| − | ===하드웨어 변경사항===
| |
| − | <div class="mw-collapsible" style="border:2px solid #ff5252; margin:10px 0;">
| |
| − | <h4 style="background-color:#ff5252; color:white; padding:10px; margin:0;">⚠️ 중요 하드웨어 변경사항</h4>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| − | | |
| − | <div style="background-color:#ffebee; padding:15px; margin:10px 0; border-left:4px solid #ff5252;">
| |
| − | <h5 style="color:#c62828;">터치 모듈 변경</h5>
| |
| − | * '''초기''': 터치 지점 오차범위 5mm 이하
| |
| − | * '''변경''': 터치 지점 오차범위 20mm 이하
| |
| − | * '''사유''':
| |
| − | * 벨로스탯에 구리선을 부착할 때 구리선의 폭(5mm)과 간격(20mm) 설정 시, 사람의 손가락이 닿는 면적(8mm)이 신호선들 사이에 고르게 퍼지지 못하는 문제 발생
| |
| − | * 초기 알고리즘은 터치 입력 네 곳을 바탕으로 상세한 터치점의 위치를 정하는 것이였으나, 터치 시 네 곳이 동시에 눌리는 것이 아닌 한 곳만 눌리게 되면서 이러한 알고리즘의 적용이 불가능해짐
| |
| − | * 시간과 수정의 용이성을 고려하여 소프트웨어의 UI를 수정하는 방법으로 문제 해결
| |
| − | </div>
| |
| − | | |
| − | <div style="background-color:#ffebee; padding:15px; margin:10px 0; border-left:4px solid #ff5252;">
| |
| − | <h5 style="color:#c62828;">커버 설계 변경</h5>
| |
| − | * '''초기''': 미니리프트 2개 사용, 볼 조인트 방식 소형문
| |
| − | * '''변경''': 미니리프트 1개 사용, 미니 경첩 부착 소형문
| |
| − | * '''사유''':
| |
| − | * 두 리드 스크류를 용접하여 하나로 연결하더라도 약 7kg에 달하는 프로젝터를 들어 올릴 수 있는 충분한 토크가 발생하는지 불확실
| |
| − | * 용접 과정에서 리드 스크류의 길이가 미세하게나마 짧아질 경우, 리프트 작동 자체에 문제가 생길 수 있음
| |
| − | * 실험적 경험에 비추어 볼 때, 한 개의 미니 리프트만으로도 프로젝터를 지지하고 높낮이를 안정적으로 조절할 수 있다는 점이 확인됨
| |
| − | * 5mm 아크릴 재질에서 볼 조인트 소켓 가공 어려움
| |
| − | </div>
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ===소프트웨어 변경사항===
| |
| − | <div class="mw-collapsible" style="border:2px solid #1976d2; margin:10px 0;">
| |
| − | <h4 style="background-color:#1976d2; color:white; padding:10px; margin:0;">💡 소프트웨어 개선사항</h4>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| − | | |
| − | '''1차 게임 요소'''
| |
| − | * 체스 게임: 변동 없음 ✅
| |
| − | | |
| − | '''2차 게임 요소''' 🔄
| |
| − | <div style="background-color:#e3f2fd; padding:15px; margin:10px 0; border-left:4px solid #1976d2;">
| |
| − | * '''초기 계획''': 유희왕 등 카드게임
| |
| − | * '''변경''': 포커 게임으로 선구현, 포켓몬 카드게임 개발 시도중
| |
| − | * '''카메라 모델 변경''': IMX-219 → IMX-708 120도 광각
| |
| − | * '''변경 사유''':
| |
| − | * '''유희왕''': 뒷면으로 카드를 내는 규칙이 존재하여 현재 시스템에서는 카드의 전면이 드러나야 카메라로 정보를 얻고 게임 로직을 수행할 수 있어 적용이 어려움
| |
| − | * '''매직 더 게더링''': 동시에 인식해야하는 카드가 대부분 50장에 달해 라즈베리파이의 연산능력으로 객체인식을 수행함에 있어 어려움이 존재. 또한 플레이 영역이 터치패드와 프로젝션 범위을 넘어설 우려가 있어 제작 후보에서 제외
| |
| − | * '''포켓몬 카드 게임''': 턴 선택, 카드의 효과, 데미지 등 PyQt UI로 대체가능한 요소가 다수 존재. 유희왕이나 매직 더 게더링과 달리 뒷면 규칙이 없으며 최대 인식 요구 갯수가 최대 13장으로 라즈베리파이의 연산성능으로 처리가 가능하다고 판단됨
| |
| − | </div>
| |
| − | | |
| − | '''3차 게임 요소'''
| |
| − | * LLM API를 활용한 TPRG: 변동 없음 ✅
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ==동작 시나리오==
| |
| − | <div style="background-color:#f5f5f5; padding:20px; border-radius:10px; margin:20px 0;">
| |
| − | <h3 style="color:#1976d2; margin-top:0;">🎯 시스템 동작 흐름</h3>
| |
| − | <ol style="font-size:16px; line-height:2;">
| |
| − | <li><strong>시스템 시작</strong>: 프로젝터 전원 ON, 라즈베리파이 부팅</li>
| |
| − | <li><strong>게임 선택</strong>: 터치를 통해 메인 화면에서 원하는 게임 선택</li>
| |
| − | <li><strong>게임 진행</strong>
| |
| − | <ul>
| |
| − | <li>1차 게임(체스): 터치로 기물 이동</li>
| |
| − | <li>2차 게임(카드게임): 실물 카드를 테이블에 배치, 카메라가 인식하여 게임 진행</li>
| |
| − | <li>3차 게임(TRPG): GPT API를 활용한 스토리 진행</li>
| |
| − | </ul>
| |
| − | </li>
| |
| − | <li><strong>게임 종료</strong>: 메인 화면으로 복귀</li>
| |
| − | </ol>
| |
| − | </div>
| |
| − | | |
| − | ==구현 내용==
| |
| − | | |
| − | ===시스템 구성===
| |
| − | <div style="display:flex; flex-wrap:wrap; gap:20px; margin:20px 0;">
| |
| − | <div style="flex:1; min-width:300px; background-color:#e3f2fd; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#1976d2; margin-top:0;">🔧 하드웨어 구성</h4>
| |
| − | * '''제어부''': Raspberry Pi 5
| |
| − | * '''출력부''': 프로젝터 (XGIMI Halo+)
| |
| − | * '''입력부''': 터치 모듈 (Velostat 기반), 카메라 모듈 (IMX-708)
| |
| − | * '''구조부''': 아크릴 커버, 미니 리프트
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#e8f5e9; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#388e3c; margin-top:0;">💻 소프트웨어 구성</h4>
| |
| − | * '''OS''': Raspberry Pi OS
| |
| − | * '''개발 언어''': Python, C++
| |
| − | * '''주요 라이브러리''': PyQt5, OpenCV, GPIO
| |
| − | * '''API''': GPT API (3차 게임용)
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ===기구부 설계 및 구현===
| |
| − | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;">
| |
| − | <h4 style="background-color:#ff9800; color:white; padding:10px; margin:0;">🏗️ 기구부 상세 설계</h4>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| − | | |
| | '''커버 설계''' | | '''커버 설계''' |
| | <div style="background-color:#fff3e0; padding:15px; margin:10px 0; border-radius:5px;"> | | <div style="background-color:#fff3e0; padding:15px; margin:10px 0; border-radius:5px;"> |
| 646번째 줄: |
172번째 줄: |
| | </div> | | </div> |
| | | | |
| | + | |
| | + | ===터치패드 설계=== |
| | '''터치 패드 구조''' | | '''터치 패드 구조''' |
| | <div style="background-color:#e8f5e9; padding:15px; margin:10px 0; border-radius:5px;"> | | <div style="background-color:#e8f5e9; padding:15px; margin:10px 0; border-radius:5px;"> |
| 656번째 줄: |
184번째 줄: |
| | </div> | | </div> |
| | | | |
| − | ===제어부 및 회로 구현===
| |
| − | <div class="mw-collapsible" style="border:1px solid #ddd; margin:10px 0;">
| |
| − | <h4 style="background-color:#4caf50; color:white; padding:10px; margin:0;">⚡ 전자 회로 상세</h4>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| | | | |
| − | '''터치 모듈 회로'''
| + | ===소프트웨어 설계=== |
| − | <div style="background-color:#f5f5f5; padding:15px; margin:10px 0; border-radius:5px;">
| + | ====1차 게임==== |
| − | <h5 style="color:#2e7d32;">PCB 설계 사양</h5>
| |
| − | * '''설계 원칙''': 크로스토크 방지를 위한 3W 규칙 적용
| |
| − | * '''도선 사양''': 두께 20mil, 간격 12mil (0.5A 기준)
| |
| − | * '''사용 전류''': 약 0.3A~0.5A (벨로스탯 가변저항 동작)
| |
| − | </div>
| |
| − | | |
| − | <div style="background-color:#e8f5e9; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h5 style="color:#2e7d32;">주요 부품 목록</h5>
| |
| − | * '''4051D''' 8-channel multiplexer × 4개
| |
| − | * '''595D''' 8-Bit Shift Registers × 5개
| |
| − | * '''LMV324''' Operational Amplifiers × 18개
| |
| − | * '''저항''': 470Ω × 32개
| |
| − | </div>
| |
| − | | |
| − | <div style="background-color:#c8e6c9; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h5 style="color:#1b5e20;">시스템 구성</h5>
| |
| − | * '''연결''': 2×20 커넥터 사용으로 접촉 불량 최소화
| |
| − | * '''제어''': 아두이노 우노 모델 사용 (아두이노 미니는 성능 이슈로 터치 반응 불규칙)
| |
| − | </div>
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | '''카메라 시스템'''
| |
| − | <div style="background-color:#f3e5f5; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h5 style="color:#6a1b9a;">📷 IMX-708 카메라 사양</h5>
| |
| − | * '''모델''': IMX-708 (12MP 자동초점 120도 광각)
| |
| − | * '''기존 모델(IMX-219) 대비 개선사항''':
| |
| − | * ✅ 화질 향상으로 카드 인식률 개선
| |
| − | * ✅ 화각 확대로 촬영 범위 증가
| |
| − | * ✅ 자동 초점 기능 추가
| |
| − | * '''위치''': 프로젝터 상단 커버 내부
| |
| − | * '''기능''': 실물 카드 인식, 게임 상황 촬영
| |
| − | </div>
| |
| − | | |
| − | ===소프트웨어 설계 및 구현=== | |
| − | | |
| − | ====1차 게임 - 체스==== | |
| | <div style="background-color:#e3f2fd; padding:20px; margin:20px 0; border-radius:10px;"> | | <div style="background-color:#e3f2fd; padding:20px; margin:20px 0; border-radius:10px;"> |
| | <h4 style="color:#1976d2; margin-top:0;">♟️ 4인 체스 구현</h4> | | <h4 style="color:#1976d2; margin-top:0;">♟️ 4인 체스 구현</h4> |
| 710번째 줄: |
197번째 줄: |
| | </div> | | </div> |
| | | | |
| − | ====2차 게임 - 카드 게임==== | + | |
| | + | ====2차 게임 ==== |
| | | | |
| | <div class="mw-collapsible" style="border:2px solid #4caf50; margin:10px 0;"> | | <div class="mw-collapsible" style="border:2px solid #4caf50; margin:10px 0;"> |
| 781번째 줄: |
269번째 줄: |
| | * 승자 판별 로직 실행</li> | | * 승자 판별 로직 실행</li> |
| | </ol> | | </ol> |
| − | </div>
| |
| − |
| |
| − | '''포켓몬 카드 게임 (개발 중)''' 🔄
| |
| − | <div style="background-color:#ffebee; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | * '''API 활용''': 16,000여 장의 카드 데이터베이스
| |
| − | * '''특수 효과''': 스타디움 카드에 따른 배경 변화
| |
| − | * '''과제''': 한국판 카드 인식 모델 부재 (대부분 영문판으로 학습된 모델)
| |
| − | * '''해결방안''': 영문판 카드 구매 또는 한국판 카드 일부 학습 모델 제작
| |
| − | </div>
| |
| − | </div>
| |
| | </div> | | </div> |
| | | | |
| 803번째 줄: |
281번째 줄: |
| | * '''맵 구현''': QWebEngineView를 사용하여 HTML 기반 맵을 PyQt5 UI에 통합 | | * '''맵 구현''': QWebEngineView를 사용하여 HTML 기반 맵을 PyQt5 UI에 통합 |
| | * '''스토리 진행''': GPT API를 활용한 동적 시나리오 생성 (예정) | | * '''스토리 진행''': GPT API를 활용한 동적 시나리오 생성 (예정) |
| − | </div>
| |
| − |
| |
| − | ==현재 진행상황==
| |
| − |
| |
| − | <div style="background-color:#f5f5f5; padding:20px; margin:20px 0; border-radius:10px;">
| |
| − | <h3 style="color:#1976d2; margin-top:0;">📊 2025년 6월 중간보고 기준 진행률</h3>
| |
| − |
| |
| − | <div style="display:flex; flex-wrap:wrap; gap:20px; margin-top:20px;">
| |
| − | <div style="flex:1; min-width:300px;">
| |
| − | <h4 style="color:#388e3c;">🔧 하드웨어 완성도</h4>
| |
| − |
| |
| − | '''터치 모듈''' ✅ '''완료'''
| |
| − | * PCB 제작 완료 및 부품 납땜 완료
| |
| − | * 터치패드 마감재 선정 완료 (인조가죽)
| |
| − | * 캘리브레이션 코드 개발 필요 ⚠️
| |
| − |
| |
| − | '''커버''' ✅ '''완료'''
| |
| − | * 아크릴 판재 레이저 커팅 완료
| |
| − | * 조립 완료
| |
| − | * 카메라 정확한 설치 위치 협의 필요 ⚠️
| |
| − | </div>
| |
| − |
| |
| − | <div style="flex:1; min-width:300px;">
| |
| − | <h4 style="color:#1976d2;">💻 소프트웨어 완성도</h4>
| |
| − |
| |
| − | '''1차 게임''' ✅ '''완료'''
| |
| − | * 체스 게임 UI 개선 완료
| |
| − | * 터치 인터페이스 최적화 완료
| |
| − |
| |
| − | '''2차 게임''' 🔄 '''80% 완료'''
| |
| − | * Texas Hold'em Poker 게임 로직 완성 ✅
| |
| − | * 카드 인식 시스템 구현 완료 ✅
| |
| − | * 포켓몬 카드 게임 UI 설계 완료 ✅
| |
| − | * 포켓몬 카드 인식 모델 해결 필요 ⚠️
| |
| − |
| |
| − | '''3차 게임''' 📝 '''60% 완료'''
| |
| − | * 캐릭터 생성 시스템 구현 완료 ✅
| |
| − | * 맵 생성 기능 구현 완료 ✅
| |
| − | * GPT API 연동 개발 중 🔄
| |
| − | </div>
| |
| − | </div>
| |
| − |
| |
| − | <div style="margin-top:20px;">
| |
| − | <h4>전체 진행률</h4>
| |
| − | <div style="background-color:#e0e0e0; height:30px; border-radius:15px; overflow:hidden;">
| |
| − | <div style="background-color:#4caf50; height:100%; width:75%; text-align:center; line-height:30px; color:white; font-weight:bold;">
| |
| − | 75%
| |
| − | </div>
| |
| − | </div>
| |
| − | </div>
| |
| − | </div>
| |
| − |
| |
| − | ==향후 진행 계획 및 일정==
| |
| − |
| |
| − | ===하드웨어 개선 계획===
| |
| − | <div style="background-color:#e3f2fd; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#1976d2; margin-top:0;">🔧 터치 모듈</h4>
| |
| − | * 터치 캘리브레이션 코드 추가
| |
| − | * 가변적 화면 비율 대응 적응형 소프트웨어 개발
| |
| − | * 초기 시작 시 마커 터치를 통한 캘리브레이션 기능 구현
| |
| − | </div>
| |
| − |
| |
| − | <div style="background-color:#e8f5e9; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#388e3c; margin-top:0;">🏗️ 커버</h4>
| |
| − | * 카메라 모듈 최종 위치 확정
| |
| − | * 슬라이드 레일 설치 여부 결정 (카메라 깊이에 따라)
| |
| − | </div>
| |
| − |
| |
| − | ===소프트웨어 개발 계획===
| |
| − | <div style="background-color:#fff3e0; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#f57c00; margin-top:0;">🎮 2차 게임 요소</h4>
| |
| − | * 포켓몬 카드 게임 본격 개발
| |
| − | * 한국판 카드 인식 해결 (영문판 구매 또는 학습 모델 제작)
| |
| − | * 카드 정보 기반 화려한 효과 구현
| |
| − | </div>
| |
| − |
| |
| − | <div style="background-color:#f3e5f5; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#7b1fa2; margin-top:0;">🎲 3차 게임 요소</h4>
| |
| − | * GPT API 연동 완료
| |
| − | * 동적 시나리오 생성 시스템 구현
| |
| − | </div>
| |
| − |
| |
| − | ===통합 및 테스트===
| |
| − | <div style="background-color:#ffebee; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#c62828; margin-top:0;">🔄 시스템 통합</h4>
| |
| − | * 모듈 간 통합 테스트
| |
| − | * 터치 팀과 소프트웨어 팀 UI 크기 조율
| |
| − | * 커버 팀과 카메라 위치 설정 협의
| |
| − | </div>
| |
| − |
| |
| − | <div style="background-color:#e0f2f1; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#00695c; margin-top:0;">✅ 최종 테스트</h4>
| |
| − | * 50cm 카메라 케이블 준비 후 최종 위치 설정
| |
| − | * 캘리브레이션 코드 적용 테스트
| |
| − | * 전체 시스템 통합 테스트
| |
| − | </div>
| |
| − |
| |
| − | ===개발 일정표===
| |
| − | <div style="overflow-x:auto;">
| |
| − | {| class="wikitable" style="text-align:center;"
| |
| − | |-
| |
| − | ! style="background-color:#2196f3; color:white;" | 개발 내용
| |
| − | ! style="background-color:#2196f3; color:white;" | 담당자
| |
| − | ! style="background-color:#2196f3; color:white;" | 5월 1-2주
| |
| − | ! style="background-color:#2196f3; color:white;" | 5월 3주
| |
| − | ! style="background-color:#2196f3; color:white;" | 6월 1주
| |
| − | ! style="background-color:#2196f3; color:white;" | 6월 2주
| |
| − | ! style="background-color:#2196f3; color:white;" | 6월 3주
| |
| − | |-
| |
| − | | 터치 캘리브레이션 코드 추가
| |
| − | | 터치팀
| |
| − | | style="background-color:#4caf50;" | ■
| |
| − | | style="background-color:#4caf50;" | ■
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | |-
| |
| − | | 프로젝터 하우징
| |
| − | | 구**, 조**
| |
| − | | style="background-color:#4caf50;" | ■
| |
| − | | style="background-color:#4caf50;" | ■
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | |-
| |
| − | | 1차 프로그램 통합 및 에러처리
| |
| − | | 터치팀
| |
| − | |
| |
| − | | style="background-color:#ff9800;" | ■
| |
| − | | style="background-color:#ff9800;" | ■
| |
| − | |
| |
| − | |
| |
| − | |-
| |
| − | | 1차 통합 테스트
| |
| − | | 터치팀
| |
| − | |
| |
| − | |
| |
| − | | style="background-color:#2196f3;" | ■
| |
| − | |
| |
| − | |
| |
| − | |-
| |
| − | | 2차 프로그램 통합
| |
| − | | 터치팀, 전**
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | | style="background-color:#9c27b0;" | ■
| |
| − | |
| |
| − | |-
| |
| − | | 최종 통합 테스트
| |
| − | | 전체
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | | style="background-color:#f44336;" | ■
| |
| − | |
| |
| − | |-
| |
| − | | Feedback 및 디버깅
| |
| − | | 전체
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | | style="background-color:#f44336;" | ■
| |
| − | | style="background-color:#f44336;" | ■
| |
| − | |-
| |
| − | | 최종 프로젝트 발표 준비
| |
| − | | 전체
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | |
| |
| − | | style="background-color:#607d8b;" | ■
| |
| − | |}
| |
| | </div> | | </div> |
| | | | |
| | ==프로젝트 결과== | | ==프로젝트 결과== |
| − | | + | ===최종 평가=== |
| − | ===현재 달성 성과===
| |
| − | <div style="display:flex; flex-wrap:wrap; gap:20px; margin:20px 0;">
| |
| − | <div style="flex:1; min-width:300px; background-color:#e8f5e9; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#2e7d32; margin-top:0;">🔧 하드웨어</h4>
| |
| − | * '''터치 모듈''': PCB 제작 완료, 마감천 선정 완료
| |
| − | * '''커버''': 설계 변경 완료 및 제작 완료
| |
| − | * '''카메라''': IMX-708로 성능 향상 완료
| |
| − | </div>
| |
| − | | |
| − | <div style="flex:1; min-width:300px; background-color:#e3f2fd; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#1976d2; margin-top:0;">💻 소프트웨어</h4>
| |
| − | * '''1차 게임(체스)''': 프로젝터 환경 최적화 완료
| |
| − | * '''2차 게임(포커)''': 완전 구현, 카드 인식률 90% 이상 달성
| |
| − | * '''3차 게임(TRPG)''': 캐릭터 및 맵 생성 시스템 구현
| |
| − | </div>
| |
| − | </div>
| |
| − | | |
| − | ===평가 항목 달성도=== | |
| | {| class="wikitable" style="text-align:center;" | | {| class="wikitable" style="text-align:center;" |
| | |- | | |- |
| 1,031번째 줄: |
318번째 줄: |
| | |} | | |} |
| | | | |
| − | ===미구현 내용 및 향후 과제=== | + | ===최종 시연 영상=== |
| − | <div style="background-color:#ffebee; padding:20px; margin:20px 0; border-radius:10px;">
| |
| − | <h4 style="color:#c62828; margin-top:0;">⚠️ 미완성 항목</h4>
| |
| − | * 포켓몬 카드 게임 한국판 인식 모델
| |
| − | * TRPG GPT API 연동
| |
| − | * 터치 캘리브레이션 자동화
| |
| − | * 카메라 최종 위치 확정
| |
| − | * 전체 시스템 통합 테스트
| |
| − | </div>
| |
| | | | |
| − | ==프로젝트 평가==
| |
| − |
| |
| − | ===중간 평가 (2025년 6월 1일 기준)===
| |
| − | <div style="background-color:#f5f5f5; padding:20px; margin:20px 0; border-radius:10px;">
| |
| − | <h4 style="color:#1976d2; margin-top:0;">📊 진행률</h4>
| |
| − | <div style="display:flex; gap:20px; margin-bottom:20px;">
| |
| − | <div style="flex:1;">
| |
| − | * '''하드웨어''': 90% 완료
| |
| − | * '''소프트웨어''': 75% 완료
| |
| − | * '''시스템 통합''': 30% 완료
| |
| − | </div>
| |
| − | </div>
| |
| − |
| |
| − | <h4 style="color:#388e3c; margin-top:20px;">✅ 주요 성과</h4>
| |
| − | * 설계 변경을 통한 현실적 목표 재설정
| |
| − | * 터치 모듈 하드웨어 완성
| |
| − | * 카드 인식 시스템 성공적 구현
| |
| − | * 복수 게임 구현을 통한 플랫폼 확장성 입증
| |
| − |
| |
| − | <h4 style="color:#f57c00; margin-top:20px;">🔍 주요 과제</h4>
| |
| − | * 한국어 카드 인식 문제 해결
| |
| − | * 시스템 통합 및 안정성 확보
| |
| − | * 사용자 경험 최적화
| |
| − | </div>
| |
| − |
| |
| − | ==예산 내역==
| |
| − |
| |
| − | ===총 예산 변화===
| |
| − | <div style="background-color:#fff3e0; padding:20px; margin:20px 0; border-radius:10px;">
| |
| − | <h4 style="color:#e65100; margin-top:0;">💰 예산 변경 내역</h4>
| |
| − | * '''초기 계획''' (2025.4): 183천원
| |
| − | * '''최종 예산''' (2025.6): 404.8천원
| |
| − | * '''증액''': 221.8천원 (121% 증가)
| |
| − | * '''증액 사유''': 카메라 업그레이드, 아크릴 판재, PCB 전문 제작
| |
| − | </div>
| |
| − |
| |
| − | ===상세 내역 비교===
| |
| − | {| class="wikitable" style="text-align:center;"
| |
| − | |-
| |
| − | ! style="background-color:#ff9800; color:white;" | 구분
| |
| − | ! style="background-color:#ff9800; color:white;" | 초기 계획 (천원)
| |
| − | ! style="background-color:#ff9800; color:white;" | 최종 실제 (천원)
| |
| − | ! style="background-color:#ff9800; color:white;" | 주요 변경사항
| |
| − | |-
| |
| − | | 기본 부품
| |
| − | | 175
| |
| − | | 175
| |
| − | | 동일
| |
| − | |-
| |
| − | | 카메라 업그레이드
| |
| − | | -
| |
| − | | style="background-color:#ffecb3;" | '''54.2'''
| |
| − | | IMX219 → IMX708
| |
| − | |-
| |
| − | | 아크릴 판재
| |
| − | | -
| |
| − | | style="background-color:#ffecb3;" | '''79.4'''
| |
| − | | 커버 제작
| |
| − | |-
| |
| − | | PCB 제작
| |
| − | | -
| |
| − | | style="background-color:#ffecb3;" | '''60.0'''
| |
| − | | 전문 제작
| |
| − | |-
| |
| − | | 기타 추가 부품
| |
| − | | 8
| |
| − | | style="background-color:#ffecb3;" | '''36.2'''
| |
| − | | 터치패드 보호재 등
| |
| − | |-
| |
| − | ! style="background-color:#f57c00; color:white;" | '''총계'''
| |
| − | ! style="background-color:#f57c00; color:white;" | '''183'''
| |
| − | ! style="background-color:#f57c00; color:white;" | '''404.8'''
| |
| − | ! style="background-color:#f57c00; color:white;" | '''221.8천원 증액'''
| |
| − | |}
| |
| − |
| |
| − | ==기술적 상세사항==
| |
| − |
| |
| − | <div class="mw-collapsible" style="border:2px solid #2196f3; margin:10px 0;">
| |
| − | <h3 style="background-color:#2196f3; color:white; padding:10px; margin:0;">🔬 기술 상세 정보</h3>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| − |
| |
| − | ===Velostat 압력 센서 기술===
| |
| − | <div style="background-color:#e3f2fd; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#1976d2;">원리와 특성</h4>
| |
| − | * '''소재''': 전도성 폴리에틸렌 수지 필름에 탄소 블랙 항정전기 플라스틱 침투
| |
| − | * '''표면 저항''': 31,000 Ω/cm² (일반적으로 100,000Ω/□ 미만)
| |
| − | * '''물리적 특성''': 열접착 가능, 유연성, 뛰어난 내마모성
| |
| − | * '''온도 범위''': -45°C ~ +65°C (-50°F ~ 150°F)
| |
| − | * '''크기''': 280mm × 280mm, 두께 4mil/0.1mm
| |
| − |
| |
| − | <h4 style="color:#1976d2;">매트릭스 구성</h4>
| |
| − | * '''구리 테이프''': 5mm 폭으로 최적화 (실험적 검증)
| |
| − | * '''배치''': 한 면에 구리 열(column), 다른 면에 구리 행(row)
| |
| − | * '''보호''': 50μm PE(폴리에틸렌) 필름으로 방수 처리
| |
| − | </div>
| |
| − |
| |
| − | ===터치 인식 회로===
| |
| − | <div style="background-color:#e8f5e9; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#388e3c;">핵심 구성요소</h4>
| |
| − | * '''SN74HC595''': 반응 신호 제어, 하나의 활성 열(column) 스위칭
| |
| − | * '''CD4051D''': 터치 천의 반응 신호 제어, ADC 연결된 활성 행(row) 선택
| |
| − | * '''연산 증폭기''': 미약한 신호 증폭
| |
| − | * '''Arduino''': 시프트 레지스터와 멀티플렉서 제어, 직렬 데이터 수신
| |
| − |
| |
| − | <h4 style="color:#388e3c;">PCB 설계 기준</h4>
| |
| − | * '''크로스토크 방지''': 3W 규칙 적용
| |
| − | * '''도선 사양''': 20mil 두께, 12mil 간격
| |
| − | * '''신호 무결성 확보'''
| |
| − | </div>
| |
| − |
| |
| − | ===카메라 인식 기술===
| |
| − | <div style="background-color:#fff3e0; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#f57c00;">하드웨어 사양</h4>
| |
| − | * '''센서''': Sony IMX708 (12MP, 자동초점, 120도 광각)
| |
| − | * '''해상도''': 최대 4608×2592
| |
| − | * '''인터페이스''': CSI (Camera Serial Interface)
| |
| − |
| |
| − | <h4 style="color:#f57c00;">이미지 처리 파이프라인</h4>
| |
| − | 1. 고해상도 캡처 (4608×2592)
| |
| − | 2. 이진화 및 윤곽 검출
| |
| − | 3. 카드 영역 추출
| |
| − | 4. 샤프닝 필터 적용
| |
| − | 5. 딥러닝 모델 인식
| |
| − | 6. 결과 검증 및 정렬
| |
| − |
| |
| − | <h4 style="color:#f57c00;">인식 정확도 향상 기법</h4>
| |
| − | * 프로젝터 조명 환경 고려한 임계값 설정
| |
| − | * 카드 크기 비율 검증 (63mm×88mm 기준)
| |
| − | * 여백 포함 crop으로 정보 손실 방지
| |
| − | * 좌표 기반 카드 순서 정렬
| |
| − | </div>
| |
| − | </div>
| |
| − | </div>
| |
| − |
| |
| − | ==개발 환경 및 도구==
| |
| − |
| |
| − | <div style="display:flex; flex-wrap:wrap; gap:20px; margin:20px 0;">
| |
| − | <div style="flex:1; min-width:300px; background-color:#e3f2fd; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#1976d2; margin-top:0;">🔧 하드웨어 환경</h4>
| |
| − | * '''제어 보드''': Raspberry Pi 5
| |
| − | * '''개발 보드''': Arduino Uno
| |
| − | * '''카메라''': IMX-708 12MP 광각
| |
| − | * '''프로젝터''': XGIMI Halo+
| |
| − | </div>
| |
| − |
| |
| − | <div style="flex:1; min-width:300px; background-color:#e8f5e9; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#388e3c; margin-top:0;">💻 소프트웨어 환경</h4>
| |
| − | * '''OS''': Raspberry Pi OS
| |
| − | * '''언어''': Python 3.9, C++
| |
| − | * '''프레임워크''': PyQt5, OpenCV 4.5
| |
| − | * '''딥러닝''': YOLO v5
| |
| − | * '''API''': OpenAI GPT API
| |
| − | </div>
| |
| − |
| |
| − | <div style="flex:1; min-width:300px; background-color:#fff3e0; padding:20px; border-radius:10px;">
| |
| − | <h4 style="color:#f57c00; margin-top:0;">🛠️ 개발 도구</h4>
| |
| − | * '''PCB 설계''': KiCad
| |
| − | * '''3D 모델링''': Fusion 360 (초기 설계)
| |
| − | * '''코드 편집''': VS Code
| |
| − | * '''이미지 처리''': OpenCV, PIL
| |
| − | </div>
| |
| − | </div>
| |
| − |
| |
| − | ==참고 자료 및 오픈소스==
| |
| − |
| |
| − | <div style="background-color:#f5f5f5; padding:20px; margin:20px 0; border-radius:10px;">
| |
| − | <h3 style="color:#1976d2; margin-top:0;">📚 참고 자료</h3>
| |
| − |
| |
| − | <h4>활용 오픈소스</h4>
| |
| − | * 체스 게임: GNU GPL 라이선스
| |
| − | * YOLO 카드 인식: GitHub 공개 모델
| |
| − | * Polytopia Map Generator: GNU GPL 라이선스
| |
| − | * 포켓몬 카드 API: 16,000장 데이터베이스
| |
| − |
| |
| − | <h4>기술 참고 문헌</h4>
| |
| − | [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
| |
| − | </div>
| |
| − |
| |
| − | ==팀 구성 및 역할 분담==
| |
| | | | |
| | + | ==프로젝트 리뷰== |
| | + | ===팀 구성 및 역할 분담=== |
| | <div style="overflow-x:auto;"> | | <div style="overflow-x:auto;"> |
| | {| class="wikitable" style="text-align:center; width:100%;" | | {| class="wikitable" style="text-align:center; width:100%;" |
| 1,265번째 줄: |
365번째 줄: |
| | * GPT API 연동 및 TRPG 시스템 구현 | | * GPT API 연동 및 TRPG 시스템 구현 |
| | |} | | |} |
| − | </div>
| |
| − |
| |
| − | ==프로젝트 리뷰==
| |
| − |
| |
| − | <div class="mw-collapsible mw-collapsed" style="border:2px solid #4caf50; margin:20px 0;">
| |
| − | <h3 style="background-color:#4caf50; color:white; padding:10px; margin:0;">💭 개발 과정 회고</h3>
| |
| − | <div class="mw-collapsible-content" style="padding:20px;">
| |
| − |
| |
| − | ===문제 해결 과정===
| |
| − | <div style="background-color:#e8f5e9; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#2e7d32;">터치 정확도 문제</h4>
| |
| − | * '''문제''': 초기 설계 목표 5mm 정확도 달성 어려움
| |
| − | * '''원인''': 손가락 접촉면적과 센서 간격 불일치
| |
| − | * '''해결''': UI 재설계를 통한 실용적 접근
| |
| − | </div>
| |
| − |
| |
| − | <div style="background-color:#e3f2fd; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#1976d2;">카메라 성능 문제</h4>
| |
| − | * '''문제''': IMX219 화질 및 화각 부족
| |
| − | * '''해결''': IMX708 광각 카메라로 업그레이드
| |
| − | </div>
| |
| − |
| |
| − | <div style="background-color:#fff3e0; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#f57c00;">게임 복잡도 문제</h4>
| |
| − | * '''문제''': 유희왕, 매직 더 게더링 구현 복잡도 과다
| |
| − | * '''해결''': 포켓몬 카드게임으로 범위 조정
| |
| − | </div>
| |
| − |
| |
| − | <div style="background-color:#ffebee; padding:15px; margin:10px 0; border-radius:5px;">
| |
| − | <h4 style="color:#c62828;">예산 관리</h4>
| |
| − | * '''초기 예산''': 183천원
| |
| − | * '''최종 예산''': 404.8천원
| |
| − | * '''주요 증액 요인''': 성능 향상을 위한 부품 업그레이드
| |
| | </div> | | </div> |
| | | | |
| 1,306번째 줄: |
373번째 줄: |
| | * 모바일 앱 연동 | | * 모바일 앱 연동 |
| | | | |
| − | ===프로젝트 느낀점=== | + | |
| | + | ===프로젝트를 진행하며 느낀 점=== |
| | * 하드웨어 제약사항을 고려한 현실적 목표 설정의 중요성 | | * 하드웨어 제약사항을 고려한 현실적 목표 설정의 중요성 |
| | * 프로토타입을 통한 조기 검증의 필요성 | | * 프로토타입을 통한 조기 검증의 필요성 |
| 1,312번째 줄: |
380번째 줄: |
| | * 오픈소스 활용을 통한 개발 효율성 증대 | | * 오픈소스 활용을 통한 개발 효율성 증대 |
| | </div> | | </div> |
| | + | </div> |
| | + | |
| | + | == 참고 자료 및 오픈소스== |
| | + | ===활용 오픈소스=== |
| | + | <h4>활용 오픈소스</h4> |
| | + | * 체스 게임: GNU GPL 라이선스 |
| | + | * YOLO 카드 인식: GitHub 공개 모델 |
| | + | * Polytopia Map Generator: GNU GPL 라이선스 |
| | + | * 포켓몬 카드 API: 16,000장 데이터베이스 |
| | + | |
| | + | |
| | + | ===기술 참고 문헌=== |
| | + | <h4>기술 참고 문헌</h4> |
| | + | [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 |
| | </div> | | </div> |
| | | | |
| 1,322번째 줄: |
406번째 줄: |
| | </div> | | </div> |
| | </div> | | </div> |
| | + | |
| | | | |
| | [[Category:임베디드시스템]] | | [[Category:임베디드시스템]] |
| | [[Category:2025년프로젝트]] | | [[Category:2025년프로젝트]] |
| | [[Category:게임플랫폼]] | | [[Category:게임플랫폼]] |
[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
</div>