wiki:전기공학실험2/프로젝트

전기공학실험 2 프로젝트

전기공학실험 2 프로젝트 진행 기록입니다.

Add comment


목차

  1. 진행 일정
  2. 조사 단계
    1. 주제 선택 방향
    2. 사용 가능한 부품들
    3. 아이디어
      1. 전자 제품류
      2. 게임류
      3. 컴퓨터 관련
  3. 준비 단계
    1. 계획
      1. 개발 동기
      2. 목표
      3. 구현 모델
      4. 설계
    2. 고려할 점
    3. 필요 부품
  4. 진행 단계
    1. 기술 조사
      1. 포트 문제
      2. 출력부
      3. 입력부
      4. 코딩
      5. 관련 서적
    2. 개발 환경 설정
    3. 플레이 보드 설계
      1. 크기/배치
      2. 상태 출력부
      3. 점수 표시부
      4. 입력부
    4. 플레이 보드 작성
    5. 게임 코드 작성
    6. 추가 구현
      1. 인공지능
      2. 소리
  5. 확인 단계
  6. 최종 발표

올린 파일 목록


진행 일정


기간 4/22~4/28 4/29~5/5 5/6~5/12 5/13~5/19 5/20~5/26 5/27~6/2 6/3~6/9 6/10~6/16 6/17~6/21
일정프로젝트 계획 부품 확보
필요 물품 조사기술 조사추가 기술 조사컴파일러 확장 조사 부품 특성, 전류/전압 확인
알고리즘 설계코드 작성시뮬레이션디버깅추가 구현통합, 최적화
플레이 보드 설계 보드 작성통합, 확인
프로젝트 제안서
(26일 10시 @ 308호)
제안서 수정 제출
(3일 12시 @ 308호 & 웹)
중간 보고서
(13일 19시 @ 309호)
결과 보고서 및 발표
(21일 18시)

조사 단계

주제 선택 방향

  • 뭔가 움직이고 보이는 게 있을 것
  • 실제로 쓸모있는 것
  • 추가 부품/모듈을 다는 것이 좋을 듯

사용 가능한 부품들

LED, 전구
소리 Buzzer, 스피커, 마이크
문자 LCD (텍스트 2, 4 Line, 그래픽 128×128 등), 대형 발광 LED 팩
모터 스테핑 모터, 서보 모터, DC 모터
통신 RF 모듈 (단파 등)
입력 키패드, 버튼, 스위치, 키보드
센서 온도 감지 센서, 적외선 센서, 광센서, 초음파 센서, 기울기 센서, 중량 감지 센서, 진동 감지 센서
외부 Chip, 모듈 Midi or FM (Yamaha), MP3 DSP, 8255 (Port 3개로 확장, 89C51), 리모콘 신호 수신기, 모터 제어 모듈, 음성 인식, 합성, USB 모듈
기타파형 발생기, Op Amp, D/A Conv, A/D Conv, 수정발진자
충전지, 만능기판
8051 보드, Serial cable
  • 부품 구매 사이트

http://www.comfile.co.kr
http://www.das-co.com
http://www.devicemart.co.kr
http://www.eleparts.com
http://www.funnykit.com
http://www.kumilmotor.co.kr
http://www.microrobot.co.kr

아이디어

전자 제품류

  • 단거리 문자 전송기
    두 대의 8051 보드를 사용하여 서로 문자 전송 (RF 모듈 이용)
    문자 내용은 키패드나 키보드로 입력받아 LCD로 출력, 최근 온 문자를 기억하고 있어야 하며 송수신시 소리가 나게 할 수 있다.
    장점 : 실용성
    단점 : 모듈 구입, 포트 확장 필요할듯.
  • (RF) 카드 리더
    교통 카드의 내용을 분석하거나 그 비슷한 시스템을 만든다.
    그런 것이 되는 모듈이 있는지 모르겠음.
    신호가 어떤식으로 저장되어 있는지를 알아내는 것이 문제됨.
    LG CNS 등에 문의해볼 수 있으나 기밀일 경우 알아내기 힘듦.
    장점 : 리버스 엔지니어링과 분석 기술 사용, 최신의 기술
    단점 : 기술 정보 얻어내기 힘들고 RF 모듈이 다름
  • 센서로 사람의 움직임을 확인
    도난 방지 시스템, 광센서나 적외선 센서 사용
    센서 시스템은 물건의 안 또는 밖에 있도록.
    지정된 시간 동안 신호가 유지되지 않으면 경보
    움직이면 소리가 난다
    원격으로 경보 신호 전송 기능 구현할 수도. (좋은 아이디어 같음; but 회로가 많이 복잡해질듯.)
    장점 : 실용성
    단점 : 무게, 발신부는 보드와 별개로 만들어야 함
  • 사물함 Locker
    모터, 기어 사용 자동 잠금 장치 구현.
    기본적인 사물'함' 만들 필요 있음.
    비밀번호는 키패드로 입력, 소리 나게 할 수도 있다.
    여러 사물함을 제어할 수 있는 시스템도 좋을듯.
    장점 : 실제 적용하고 있는 시스템과 비교 가능
    단점 : 사물함 박스 구해야 하고 모터 제어 공부해야 함
  • 대형 전광판
    지하철 안내판 같은, LED 블럭을 사용한 전광판 문자 표시
    글꼴이 필요하며, 화면 전환 효과를 구현한다.
    포트 확장 필요.
    일단 LED 블럭 cascading이 완성되면 나머지는 LED Display 효과에 집중하게 될 가능성이 크다.
    단순히 LED 블럭 제어까지만 프로젝트 구성에 들어간다면 좋은 점수를 얻기가 약간 힘들지 않을까
    (LED 블럭이 기성품으로 제어하는데 크게 어렵지 않은 부분이라면..)
    장점 : 실 사용하고 있는 것을 만들어본다는데 의의
    단점 : Dot Matrix LED 모듈은 비싸다;

게임류

  • 세균전 Board Game
    실물로 놓고 할 수 있는 세균전 게임.
    8×8 사이즈의 보드, 각 칸은 적/청색 LED가 들어있고 푸쉬 버튼으로 되어 있다. 누르는 게 선택 역할을 함.
    플레잉 모드 토글 스위치도 필요 (사람 : 사람, 사람 : 컴)
    신호는 off/적/청 신호가 있어야 하므로 칸당 2 line, 보드 표시에만 128 bit = 16 포트 필요;; (방법이 있을까)
    7 segment 등으로 각 팀 세균 수 표시
    보드에서는 기본 게임 진행과 AI를 담당
    소리 나게 할 수도.
    포트 확장 필수.
    장점 : 재미있고 시연시 보여줄 만 하다;
    단점 : 포트 수가 문제임.. 프로그래밍이 어려워질 수도.
  • 두더지 게임 (실 사이즈)
    제안서에 있는 것은 LCD와 키패드로 만든 것이지만, 오락실에 있는 사이즈의 두더지 게임을 만들 수 있다.
    모터로 두더지를 움직이게 함
    게임기 몸체와 두더지를 만들어야 한다;;
    소리 안 나면 재미가 없다;
    장점 : 만들어다가 전시하면 괜찮겠음.
    단점 : 두더지 인형을 어떻게 만들지. 충격에 모터가 약함
  • (대형) 피아노
    영화에 나온 발로 누르는 피아노나 (이미 언젠가 발표했던 듯?) 전자 키보드를 만듦
    MIDI 인터페이스로 입출력하게 할 수 있다.
    건반 만들 필요. DAC와 스피커 단자 필요.
    장점 : 소리가 난다...?
    단점 : 누가 이미 만든바 있다.

컴퓨터 관련

  • Flash Memory Reader/Writer
    게시판에서 제시.
    SD, CF 메모리 R/W 기능.
    통신 속도가 일반적인 리더에 비해 어떨지.
    장점 : 시판 제품의 원리를 구현.
    단점 : 너무 느리다;
  • HDD형 MP3 Player
    MP3 칩을 이용한 것
    HDD를 FAT32 방식으로 읽고 (쓸) 수 있어야 한다
    인터페이스를 어떻게 할지 (본체 버튼, 리모콘) 생각해 봐야 함.
    장점 : 역시 시판 제품의 원리 구현.
    단점 : 잘 될지...

준비 단계

위 아이디어 중 최종 선택된 것은 <세균전> 이다.
(제안서에 있는 내용)

계획

개발 동기

2.1절에 언급한 '소재 선택의 기본 방향'에 따라 아이디어를 찾았다. 이 10여 개의 아이디어 중에 위 사항을 잘 만족한다고 생각하여 결정한 소재가 <세균전>이었다.
평소에 우리가 즐기는 게임은 대부분 디스플레이 상에서만 구현되는 것들이어서, 현실감이 많이 떨어지는 편이다. 그래서 화면 상에서만 보이는 것이 아닌, 실제로 움직이거나 나타나는 게임을 만들어보는 게 어떨까 하는 생각을 하였다.
세균전은 보드게임과 비슷함에도 불구하고 실제 공간에서 즐기기에는 조금 불편한 요소가 있어 (매 턴마다 직접 세균 표시를 바꿔 주어야 한다는 것) 하지 못하고, 컴퓨터 게임으로만 몇 번 본 적 있다. 그러나 이 세균전 게임을 8051 보드를 이용하여 구현하면 실제 공간 상에서도 충분히 즐길 수 있을 것이라고 판단되어 이를 제작하게 되었다.

목표

8051 보드를 사용하여 세균전을 구현한다. 실제 공간에서 게임을 진행하기 위해 플레이 보드를 만들어야 한다.
8051 보드에서는 전체적인 게임을 제어하며, 플레이 보드 부분에서는 입력과 상태 출력을 담당한다.

구현 모델

실제 게임 진행에 대해서는 세균전 페이지 참조.
컴퓨터 용으로 만들어진 이 게임과 같은 동작을 하게 될 것이다. 표시는 플레이 보드의 LED Matrix에, 입력은 플레이 보드의 버튼으로부터 받는다.

설계

전체적으로 플레이 보드에는 한 칸 유닛 - 8×8, 점수표시 FND × 2, 차례 표시 LED × 2 로 이루어져 있다.
(배치도는 4.3.1절 참조)
한 칸 유닛에는 두 색상의 LED, Tactile Button이 들어 있다. 이 유닛들을 8×8로 배치한다.
8051에서는 플레이 보드에 신호를 보내고, 플레이 보드에서는 이 신호를 처리하여 원하는 동작(입출력)을 진행한다.
포트 문제가 해결될 경우 소리가 나도록 할 수도 있다.

고려할 점

  • 포트 문제.
    포트를 4~10개까지 사용할 것으로 보이므로, 이를 어떻게 해결할 것인지가 관건이다.
  • 인공지능 구현.
    컴퓨터에서 구현했던 것보다 제한사항/고려할 것이 많을 듯 하다.

필요 부품

부품 종류 부품명 개수 단가 가격 구입처
Tactile Button YTP 1212F 64 220 14,080 http://www.microrobot.com
LED (2색-적녹) 2RG59HW-5 64 120 7,680 http://devicemart.co.kr
LED (대) 8파이 LED (빨강) 1 130 130 실험실
LED (대) 8파이 LED (녹색) 1 130 130 실험실
7-Segment UD1056 (Anode) 4 420 1,680 실험실
8255 82C55AC-2 1 2,050 2,050 http://eleparts.co.kr
Nand 74LS00 1 140 140 실험실
BCD to 7-Seg Decoder 74LS47 4 280 1,120 http://eleparts.co.kr
Decoder 74LS138 2 200 400 http://eleparts.co.kr
Priority Encoder 74LS148 1 320 320 http://eleparts.co.kr
Buffer 74LS241 2 285 570 http://eleparts.co.kr
Flip Flop 74LS273 2 245 490 http://eleparts.co.kr
Counter 74LS393 1 350 350 실험실
저항 51 Ω 8 5 40 실험실
저항 5.1 ㏀ 8 5 40 실험실
Array 저항 330 Ω (8개 DIP) 4 66 264 http://www.microrobot.com
만능기판 UNI-500G (195×245mm) 1 15,000 15,000 http://eleparts.co.kr
아크릴판 흰색 2 1,000 2,000 일반 구매
총계 46,534

진행 단계

기술 조사

포트 문제

프로젝트 구현에서 가장 문제되는 부분.

연구해 본 결과 잘 하면 25 라인까지도 줄일 수 있을듯 함.
(표시부 10, 입력부 5, 점수표시부 8, 순서 불 2) → 25 Line
일단 4 포트 이내로 내려가면 걱정이 덜하다.

사용할 수 있는 포트는
8255 칩을 사용할 경우 - 8255 확장 3포트, P1, LCD 포트 → 총 5포트
사용하지 않을 경우 - P1, P3(의 일부), LCD 포트 → 총 3포트

시간차로 데이터를 보내어 (F/F 사용) 포트 사용을 줄인다.

출력부

디스플레이부를 어떻게 할지를 위해 Dot Matrix LED 참고
8 × 8짜리가 16라인뿐이다. 행/열이 묶여 있으므로 시간별로 한 라인씩 돌아가면서 리프레쉬 해 주어야 한다.

각 색상을 동시에 표시할 게 아니라, 색 1을 모든 열에 대해 표시한 다음 색 2를 모든 열에 대해 표시하면 밝기는 줄어들겠지만 선을 반으로 할 수 있을 듯.
행 8×2 개에 앞 단에 Decoder를 달아서 한번은 색1로 신호를 보내고 (8열) 다음번엔 Sel.을 바꿔서 색2로 신호를 보내면(8열) 되겠다.
열 단을 1열 ~ 8열을 돌아가면서 신호를 내야 하는데 이는 8 - 3 Encoder 사용. 8051에서 timer로 열 바꿔가면서 신호 주거나 4 Bit Counter를 사용한다.
흐려지거나 깜박거리는 것이 문제.

시간 되면, 출력부에 글자를 찍어본다. 딱 켜면 세 - 균 - 전.

점수 표시부는 BCD to 7-Seg 사용하면 네 자리 숫자에 14선.
F/F 2개를 써서 7seg Player 1 숫자 표시 ~ Player2 숫자 표시 두 곳에 쓴다

입력부


한 칸 유닛 = Tactile 버튼, 2색 사각 LED
푸쉬 버튼 배열은 결국 키패드임. 키패드 방식을 사용한다면 8 + 8 → 16 선, Priority Encoder와 Decoder 사용하면 6선.
Counter를 사용하면 5선까지 줄일 수 있음.

버튼은 사각 투명 버튼 같은것.
스위치를 개조해서 LED를 넣어야 한다. 사각 LED를 스위치 위에 놓고, 투명 덮개를 그 위에 붙여서 LED를 통해 스위치가 눌리도록 함.

코딩

  • 사람 vs 사람 mode
  • 사람 vs 컴퓨터 mode

인공지능 필요. 기존 VB로 짠 코드를 C 언어로 포팅해야 함.
C 컴파일러를 쓰면 어셈블리일 때 보다 코드 크기가 크다.
시리얼로 입력받고 Hello world 출력하는 정도의 코드 - 어셈블리 54 byte, C 컴파일러 276 byte (SDCC)
5~10배 가량 되는데, 큰 코드에서는 늘어나는 비율이 작음. 컴파일 후 어셈블리어 코드와 비교하면서 최적화 할 수 있다.

관련 서적

해동에 있는 8051 관련 서적 읽음. (5/10 부터 약 3일)

개발 환경 설정

코드는 배열 부분 신경쓰기 힘들고 알고리즘에 집중하기 위해 C로 작성. 따라서 컴파일러 준비..
Cross Compiler (Keil uVision, SDCC) 구함.
보드와 잘 동작하는지 테스트. (했음)

부품 수급이 늦어져 약 2주간 지연되었다. 실험실에서 회로 작성 도구와 추가로 필요한 소자 구함.

플레이 보드 설계

개략적 회로도와 Multisim을 이용한 시뮬레이션 회로도를 작성하였다.
확인용 전체 회로도는 여기.

크기/배치

전체적인 고정 재료는 아크릴판(2장), 작성 어렵다면 하드보드지로..
만능기판 크기는 195x245mm, 버튼을 2cm라고 생각했을 때.
8051 보드는 플레이 보드 안에 넣어버리는게 모양이 좋으나, 파워/리셋스위치 접근이 좀 난감하다..

총 Line 수 : 25 선 (4 Port)
총 IC 수 : 14 개

상태 출력부


(개략적 그림, <회로도>)

Line : 10 선

LED 적녹 2색 × 64
Buffer 74LS241 × 2
Decoder 74LS138 × 1
Counter 74LS393 × 0.5
Nand 74LS00 × 0.25
8255 82C55AC-2 × 1

Buffer 쪽으로 신호 입력 (High), Decoder 쪽이 Low.
Clock 입력과 Reset 신호를 준다.

점수 표시부


(개략적 그림, <회로도>)

Line : 10 선

7-Segment LED 2 Digit × 2
Flip Flop 74LS273 × 2
BCD to 7-Segment Decoder 74LS47 × 4
Array 저항 2×8 Dip (330 Ω) × 4
Nand 74LS00 × 0.25
LED 10pi 적 × 1
LED 10pi 녹 × 1

저항값은 출력 전압 값에 따라 달라질 수 있다.
Select 신호를 준다.

입력부


(개략적 그림, <회로도>)

Line : 5 선

Switch Tactile Button × 64
Priority Encoder 74LS148 × 1
Decoder 74LS138 × 1
Counter 74LS393 × 0.5
Nand 74LS00 × 0.5
Array 저항 1×8 Sip (4.7 ㏀) × 1

만든 스위치를 8×8로 배치.
Decoder 쪽으로 신호 입력, Priority Encoder 쪽으로 받음 (Low).
Clock 입력과 Reset 신호를 준다.
P1로 연결하는 것이 좋다.

플레이 보드 작성

소자 상태가 양호한지 테스트 회로로 확인.
납땜 시간 주의.
연결 오류나 접접 불량이 나지 않도록 한다.

게임 코드 작성

  • 작성 환경 준비
    Compiler 설치.

  • 개요 짜기 단계
(Power On)
Intro 화면
플레이어 선택
사람 대 사람이면 ⓑ로 / 사람 대 컴이면 다음으로
선공 후공 선택
초기화
(화면 표시)
입력 (좌표)
올바른 입력이면 다음으로, 아니면 ⓓ로
세균 선택함
입력 (좌표)
올바른 입력이면 다음으로, 아니면 ⓔ로
세균 놓음
종료조건 확인
종료이면 ⓕ로, 아니면 다음으로
편 바꿈, 점수 표시
사람 대 컴이면 다음으로, 아니면 ⓒ로
인공지능 처리
ⓒ로 이동
종료 표시
입력 (다시 할 것인가)
입력 받으면 ⓐ로
  • 코드 작성, 포팅
    완료 (시뮬레이션 단계에서 4,800 Byte)
  • 시뮬레이션 단계
    테스트 함.
  • 보드와 통합
    TTL에 신호 입출력 (잘 됨)
    입력부에서 입력받도록 수정
    타이머 인터럽트로 변경 (화면 표시, 소리 출력)
    화면 표시 디자인 (시작 화면, 플레이어 선택, 종료 화면, 재시작 선택)
  • 코드 최적화
    코드를 수정하면서 크기가 커졌으므로 다시 최적화.

추가 구현

인공지능

이미 만들어 놓은 것 사용. 사람은 항상 최적의 자리에 놓는다고 가정한다.
먼저 움직일 수 있는 위치를 찾아서, 그 자리로 움직였을 때 몇 개를 자기 편으로 바꿀 수 있는지 계산한다.
컴퓨터가 움직일 수 있는 위치에 대해, '컴퓨터가 바꾸는 수 - 사람이 바꾸는 수'가 최대가 되는 점을 찾는다. (놓는 점)
그 점이 어디에서 움직일 수 있는 것인지 찾는다. (집는 점)
집는 점에서 놓는 점으로 움직인다.

이동하는 것 보다 복제하도록 하는 것이 결과가 좋음. (컴퓨터가 잘 하게 된다)

소리

스피커를 달아서 소리 효과가 나게 한다.
1 비트를 사용하여 구형파 형태로 파형을 생성, 타이머에서 출력 값이 바뀌고 이 타이머가 불리는 시간을 조절하여 주파수를 바꾼다.
멜로디의 재생을 이용하여 배열에 음 높이/음 길이 정보를 넣어서 순차적으로 재생하도록 한다.

확인 단계

  • 8255, 40 Pin Connector 매핑
  • 적절한 전압이 걸리고 전류가 흐르게 하기 위해 저항 값을 맞추어 준다. 맞추지 않을 경우 부품 파손의 우려가 있음.
  • IC로 값 출력/입력 받는 것이 제대로 되는지 확인
  • 손상 부품(LED) 대체
  • LED 밝기가 어두움. Refresh rate 조정하고 저항 값을 낮춤. (그래도 어둡다)
  • 초반 작업한 전선이 굵어서 접점 불량이 생긴다. 이로 인해 입력이 안 들어오거나 LED가 안 들어오는 경우가 있음. 카운터쪽 신호에 영향을 주는지 화면 출력이 몇 줄 밀리는 때가 있다.
  • 소리 나게 하고 스피커 달기.
  • LED에 화면 표시하는 방법 생각하고 만들 것
  • 코드 최적화 (다시)
  • 보드 케이스 만들기. (앞면 아크릴판과 버튼 투명 케이스는 붙이지 못하였다)

최종 발표

  • 결과 보고서 작성, 프레젠테이션 작성
  • 프로그램을 ROM에 담아가도록 한다. (시작 주소 0x0000으로 맞출 것)

코드 크기가 0x4000이 넘으면 안 들어가는 문제가 있음. 소리 출력쪽에서 주파수 계산을 위해 Floating point 연산을 하는데, 주파수 데이터를 미리 계산해서 넣고 코드 크기를 줄였다. 최종 코드 크기 3476 Byte.

  • 접점 불량 문제.. 케이스에 넣으면 줄어들 듯.
  • LED 밝기가 어두우니 불 끄고 시연할 것;; 이 문제가 좀 아쉬움.
  • 초기에 계획한 모든 내용 달성. LED 밝기 문제 때문에 총 달성율은 약 95%로 잡음.
  • 시연용 작품으로 채택;;

학교분류

Last modified 15 years ago Last modified on Oct 29, 2007, 12:40:08 AM

Attachments (12)

Download all attachments as: .zip