마하전자기술연구소 LOGO

제품검색 고객센터053-604-2355
기술자료실

Home > 기술자료실 기술자료실

제 목 20. 광선총에 의한 빨리 쏘기 게임
첨부파일

 

                  PIC를 활용한 게임입니다. 일순간의 빛의 플래시를
                  검출하는 공작입니다.
                  광선총에 의한 빨리 쏘기 게임(하드웨어편)
                  
광선총에 의한 빨리 쏘기 게임(소프트웨어편)

 


광선총에 의한 빨리 쏘기 게임의 제작

마이크로칩사의 마이크로 컴퓨터 PIC16C/F84를 사용한 제작 예의
제작 방법의 소개입니다. ( 「게임 레버러토리'98/7, 8월호에 게재)



【개요】

우선 전체는 광선총 그 자체와적으로 되는 수광 세트의 2개로부터 생겨
있습니다.
게임의 방법은, 수광 세트의 전원을 ON로 하면(자), 몇초후에 버저가
울기 시작해 동시에, 숫자 표시기가 시간 카운트 표시를 시작합니다.
이것이 시작되면(자) 광선총의 과녁으로서 동작하기 시작한 것이 되어, 광선총
(을)를 발사해 맞으면, 그 시점의 시간에 시간 카운트가 정지해, 개시
시점으로부터의 시간을 10 msec 단위로 표시한 채로 정지합니다.
한번 더 광선총이 맞는다고 표시가 사라져 게임이 재개하기 때문에,
반복 게임을 즐길 수가 있습니다.
이것으로 빨리 쏘기의 시간을 겨루는 게임을 할 수 있습니다.


【광선총의 내용은? 】

광선총은 어떻게 만드는 것일까요?
먼 곳까지 닿는 강한 광선을 순간적으로 발광시키려면?
이것을 실현하는 아이디어는 카메라의 플래시에 있습니다. 즉, 높다
전압의 전기를 콘덴서에 충전해, 모인 전기를 순간적으로 램프에
흘리는 것으로 강한 빛을 순간적으로 낼 수 있습니다.
 그러나, 이것에 적절한 램프가 있을까요? 여러가지 찾기 실험한 결과
(은)는, 회중 전등에 사용되고 있는 머리가 렌즈가 되어 있는 램프가 제일의 모양
입니다. 렌즈의 덕분으로 빛을 먼 곳까지 날릴 수가 있습니다.
 이것으로 2~3 m는 닿습니다. 한층 더 먼 곳까지 날리기 (위해)때문에, 볼록 렌즈를 이제(벌써)
하나 램프의 전에 추가하면(자) 빛의 빔이 가늘게 수습할 수 있으므로, 5 m
정도까지는 닿도록(듯이) 할 수 있어 게다가 정확하게적으로 맞히는 기술을 겨룰 수 있는 것처럼도
할 수 있습니다만, 이번은, 케이스에 맞는 소형 렌즈를 찾아내는 것이 성과키
그리고 했으므로 렌즈는 붙이고 있지 않습니다.

밑그림이 광선총의 회로도에서 매우 간단한 회로입니다.


발광부는, 회중 전등용의 렌즈 첨부 램프(2.2V 0.2A)입니다만, 그대로
3 V정도의 전지로 번뜩거릴 수 있던 것 만으로는, 빛의 양이 부족해 목표까지 닿지 않습니다.
거기서 궁리입니다만, 전압을 높게 하면 밝게 빛납니다. 그러나 연속으로 높다
전압을 더하면 곧 램프가 끊어져 버리기 때문에, 카메라의 플래시와
같은 원리로, 콘덴서에 충전한 고전압을, 발단이 되는 스윗치를 눌러
시, 순간적으로 흘리는 것으로 순간 섬광 하도록(듯이) 합니다.
 콘덴서에 저축할 수 있었던 전기는 일순간으로 없어지기 때문에, 램프가 끊어진다
(일)것은 없습니다. 전압은 9 V전지를 사용합니다.
콘덴서의 용량은 큰 만큼 밝고 긴 시간 빛납니다만, 이번은
3000μF(16V)를 사용했습니다. 이것으로 섬광의 지속 시간(수광부의 출력 계속
시간)은, 약수10 msec 정도가 되었습니다.
 이 방법의 결점은, 한 번 빛을 방사하면(자), 2초 정도는 다음의 방사가 성과
없는 것입니다. 그 때문에 연속 빨리 쏘기 경쟁과 같은 경기는 할 수 없는 것에
됩니다.

밑그림을 할 수 있던 사진으로, 램프, 콘덴서를, 프린트 기판의 단재에
짜 비투명 플라스틱 케이스에 납입하고 있습니다.
케이스 측면의 램프의 전에 둥근 구멍을 뚫어 여분의 빛이 밖에 나오지 않게
하고 있습니다. 할 수 있으면, 이 구멍에 파이프를 접착해, 파이프의 끝에 렌즈를
붙이면 완벽한 광선총이 됩니다. 사진과 같이 손에 잡아 가져, 측면의
스윗치를 누르는 것으로 광선이 발사됩니다.




전지와 스윗치, 전구와 콘덴서, 저항, 이만큼으로 되어있습니다.

【수광 세트는? 】

밑그림이 수광 세트부의 전체 회로입니다. PIC16F84를 중심으로, 세그먼트(segment) 발광
다이오드 관련과 수광 소자, 버저가 접속되고 있습니다.
입력의 포토 다이오드의 감시는, 다이나믹점등의 반복 루프의
안으로 함께 처리하는 것처럼 합니다. 본회로도에서 광선총과 수광 세트를 약 2~
3 m의 거리까지 떼어 놓아도 확실히 동작했습니다.
 전원부는 상투적인 3 단자 레귤레이터를 사용하고 있습니다. 동작전류는,
세그먼트(segment) 발광 다이오드가 전형점 켜도 50 mA정도이므로 78 L타입의
레귤레이터로 충분합니다.




이것들을 소형 프린트 기판으로 짜 올려 소형비투명 플라스틱 케이스에
납입했습니다.
전면 패널에는 숫자 표시기용과 수광 소자용이 구멍을 뚫고 있습니다.
발광 다이오드의 창에는 물이 들어 아크릴을 붙이고 있습니다.




전면에는 3자리수의 세그먼트(segment) 발광 다이오드와 광검지용의 구멍이 나 있습니다.
내용은, 밑그림과 같이 PIC만으로 되어있습니다. 세그먼트(segment) 발광 다이오드는
세그먼트(segment)는 직접 PIC로 드라이브 해, 자리수 드라이브는 전류가 세그먼트(segment)의 화가 되어
많아지므로, 트랜지스터로 드라이브 하고 있습니다.
PIC의 아래 쪽으로 보이는 트랜지스터 타입의 물건이 포토 트랜지스터입니다.



【수광 소자와 당의 판정】

빛을 검지하는 소자에는, CdS, 포토 다이오드, 포토 트랜지스터의 3 종류
하지만 잘 사용됩니다.
 이 안에서 광선총의 섬광을 수신하는 수광 소자에는, 감도가 좋은 일과 응답
속도가 빠른 것으로부터 포토 트랜지스터를 사용했습니다. 게다가 소자의 전면에
렌즈가 붙어 있어 특히 고감도의 타입을 사용했습니다. 사용법으로서는,
포토 트랜지스터의 부하 저항을 크게 하면 감도가 오릅니다만, 나머지 감도
(을)를 너무 올리면(자) 실내의 빛만으로 반응해 버리기 때문에, 저항값을 적당하게
조정합니다. 고정 저항이 아니고 500KΩ정도의 볼륨으로 해 감도가 조정 성과
같게 해도 편리한 것으로 생각합니다. 케이스에 수납할 때에도, 주위로부터의 외광
하지만 들어가기 어렵게, 포토 트랜지스터의 전면에만 작은 구멍을 뚫어 머리 부분이
케이스 패널면으로부터 조금 인붐빈 것처럼 해 답니다.

 이 포토 트랜지스터의 출력은 상시 전원 전압으로, 빛을 검지하면(자) 0볼트
(이)가 되기 때문에, 직접 PIC의 입출력 핀에 접속할 수가 있습니다.
이 입출력 핀을 프로그램으로 입력 모드로 설정해, 상시 입력하면서
감시합니다.
 당 판정은, 한 번 빛을 검지하면(자), 일정시간 기다려, 한층 더 빛이 계속
하고 있는지 어떤지를 재확인해 확실히 빛을 검지하는 것으로 실시합니다만,
이 일정시간을 얼마나로 할까로, 당의 확률이 바뀝니다. 즉,
전자총으로부터의 섬광은 수십 msec의 지속 시간으로, 그것을 포토 트랜지스터로
검지한 후의 지속 시간은, 밑그림과 같이 총과 목표의 거리와 각도에 의해 변화해
. 가까워서 정면을 향하고 있는 만큼 검지 지속 시간이 섬광의 시간에 동일하고
되어 갑니다. 거기서 이 지속 시간을 긴(수십 msec)로 하는 것으로
정확하게 총의 빛이적으로 맞지 않으면 당으로 판정하지 않게도 할 수 있습니다.



 다음에 해야 할 것은, 한 번 맞아 판정을 하면(자), 빨리 쏘기의 시간을 표시한 채로
게임을 정지합니다.
 그 후 당분간은 빛을 검지해도 아무것도 하지 않게 할 필요가 있습니다.
그렇게 하지 않으면 시간표시가 차례차례로 변화해 버려 게임이 되지 않게 되어 섬
있습니다.
 이런 흐름을 프로그램으로 실현되기 위해서(때문에)는, 프로그램 플래그라는 것
(을)를 사용합니다. 즉, 한 번 맞아 판정을 하면(자) 플래그를 ON로 해, 이 플래그가
ON의 사이는, 시간의 카운트를 하지 않고 같은 표시치인 채로 합니다. 그리고 일정시간
경과(이것도 프로그램으로 카운트 한다) 후는, 다음의 빛을 검지하면(자) 표시 데이터
(을)를 공백으로 해 게임을 재개하도록(듯이) 합니다.

【부품표】

이번 광선총 게임에 사용하고 있는 부품은 아래 표와 같이 됩니다.

광선총의 부품 리스트

기호   설명  규격, 품명

수량

  플라스틱 케이스 130x40x25

1

  범용 기판 100x30

1

  렌즈 첨부 소형 램프 2.2V 0.2A

1

  전술용 소켓 고무 푸쉬 첨부

1

  전해 콘덴서 3000μF16V

1

  저항 1/4W 470Ω

1

  전지(9V) 006P

1

  전지 어댑터 리드 선 첨부

1

  푸쉬 버튼 스윗치 패널 매달려라

1


수광부의 부품 리스트
기호   설명  규격, 품명

수량

  플라스틱 케이스 120x60x25

1

  프린트 기판 86x54mm

1

SKT IC소켓 18pin

1

BZ 압전 버저 FUJI EB20

1

  7 세그먼트(segment) 발광 다이오드 GL8P03

3

  포토 트랜지스터 S601A

1

REG 3 단자 레귤레이터 78L05

1

BAT 9 V전지 건전지 006P

1

  전지 어댑터 리드 선 첨부

1

XTAL 크리스탈 발진자 10MHz

1

IC1 마이크로칩 PIC16F84-10

1

  트랜지스터 2SC1815

3

  저항 1/4W 150KΩ

1

    〃 200Ω

7

    〃 1KΩ

1

    〃 4.7KΩ

4

   세라믹 콘덴서 20pF

2

     〃   0.1μF

1

  전해 콘덴서 47μF10V

2

  기판용 3 P토글스위치 AC125V 0.3A

1

그 외 스페이서, 나사, 나트  

조금



 빨리 쏘기 게임의 제작 소프트웨어편

마이크로칩사의 마이크로 컴퓨터 PIC16C/F84를 사용한 제작 예의
프로그램 제작 방법의 소개입니다. ( 「게임 레버러토리'98/9월호에 게재)



【개요】

우선 전체는 광선총 그 자체와적으로 되는 수광 세트의 2개로부터 생겨
있습니다.
게임의 방법은, 수광 세트의 전원을 ON로 하면(자), 몇초후에 버저가
울기 시작해 동시에, 숫자 표시기가 시간 카운트 표시를 시작합니다.
이것이 시작되면(자) 광선총의 과녁으로서 동작하기 시작한 것이 되어, 광선총
(을)를 발사해 맞으면, 그 시점의 시간에 시간 카운트가 정지해, 개시
시점으로부터의 시간을 10 msec 단위로 표시한 채로 정지합니다.
한번 더 광선총이 맞는다고 표시가 사라져 게임이 재개하기 때문에,
반복 게임을 즐길 수가 있습니다.
이것으로 빨리 쏘기의 시간을 겨루는 게임을 할 수 있습니다.
게임의 프로그램은 모두, 수광 세트안에 있는, PIC16F84로 실행
하고 있습니다.


【프로그램의 개요】

이번 프로그램은다이나믹점등이라고 하는 표시 제어를 하기 때문에,
프로그램으로서는, 일순간도 멈출 수 없는 반복 처리가 있게 되어
.
 한 치에서도 멈추면, 표시가 완전하게 사라져 버리기 (위해)때문입니다.
따라서, 그 외의 처리는, 표시 처리의 반복의 사이에 해 버리는거야
차면 되지 않습니다.

거기서 활약하는 것이 「플래그」라고 불리는 소프트웨어의 스윗치의 기능을
하는 변수 데이터입니다. 이번 사용하고 있는 플래그는 3 종류로, 이것이 0이나 0으로
없는 것처럼 따라 프로그램의 흐름의 제어를 하고 있습니다.

SHOOT:수광 소자가 빛을 검지했다고 하는 플래그.

WAIT:수광 후, 일정시간다음의 수광을 무시하기 위한 카운터 겸용
     의 플래그.

RESTART:1회 게임이 완료해, 재개를 위해 수광 대기중을 나타내는 플래그.

이 3개의 플래그를 구사해 밑그림의 전체 플로우도와 같이, 프로그램
의 흐름의 제어를 실시하고 있습니다.
흐름이 대신하는 것은 히 해 형태의 판단 블록의 곳에서, 여기서 플래그에 의한 판정
(을)를 실시하고 있게 됩니다. 이른바 「if」문에 상당합니다.




【프로그램의 동작 설명】

플로우도의 흐름은, 우선, 이니셜라이즈로 포토의 설정을 한 뒤,
플래그의 리셋트를 해 다이나믹 표시를 하는 써브루틴을 실행해,
시간을 카운트업해 재표시를 한다고 하는 루프로 반복합니다.

표시의 써브루틴 중(안)에서, 빛을 검지했는가라고 하는 체크를 하고 있어,
빛을 검지하면(자) SHOOT 플래그가 ON가 되어 써브루틴으로부터 돌아와
오므로, 돌아온 곳에서 SHOOT 플래그의 판정을 하고 있습니다.

그 판단 박스를 우측으로 빠지면(자), RESTART 플래그의 판정에
가, 아직 처음이므로 그대로하에 빠져 WAIT 카운터의 카운트
다운을 해 돌아옵니다. 그리고 또 같은 루트를 다녀 WAIT 카운터를
감산해 빠진다고 하는 것을, WAIT 카운터가 제로가 될 때까지 반복
.
이 반복동안에, 광선총으로부터의 섬광은 없어지기 때문에, 1회의
광선총의 발사로 1회만의 맞아 판정을 할 수 있게 됩니다.

WAIT 카운터가 제로가 되면(자), 확실히 빛이 맞았다고 하는 루트를 다녀
RESTART 플래그가 ON, SHOOT 플래그가 OFF가 되어 돌아옵니다.
그렇다면, 다음의 루프는 게임 재개 기다리는 루프가 되어, 표시 시간도
카운트업되지 않기 때문에, 일정한 시간치(즉 개시부터 광선총의
빛을 검지할 때까지의 시간)을 표시한 채로 표시 루프를 반복하는 것에
됩니다.

이전에 한층 더 광선총의 빛을 검지하면(자), 재차 SHOOT 플래그가 ON와
되어 돌아옵니다만, RESTART 플래그가 ON이므로, 재개의 루트에
변경되어 최초의 초기화의 곳으로 돌아와, 게임이 재개되게 되어
. 이것으로 일순의 흐름을 완료한 것이 됩니다.



이 게임의 재개때에, 시간 카운트를 스타트 하기까지 지연의 시간
(을)를 삽입합니다만, 이 시간을 랜덤으로 해 게임한 것같게 하기 위해서,
전회의 시간치로부터 지연 타임을 계산해 매회 다른 지연 시간에
되도록(듯이) 하고 있습니다.

이 플로우도를 기초로 작성한 프로그램의 리스트가 아래와 같이 리스트입니다.
일본어의 코멘트를 넣어 두기 때문에, 플로우도와의 대응은 금방 할 수 있으면(자)
생각합니다.


  ★ 광선총에 의한 빨리 쏘기 게임 프로그램 리스트


【수치 데이터로부터 세그먼트(segment) 데이터에의 변환】

프로그램으로서 한 치 특수한 테크닉을 사용하고 있는 것이, 이 수치 데이터
(을)를, 표시 출력용의 세그먼트(segment) 데이터로 변환하는 써브루틴입니다.

이 때문에 사용하고 있는 명령이 「RETLW a」라고 하는 명령으로, 이것은, a라고 한다
값을 Wreg에 반환값으로서 가져 써브루틴으로부터 리턴 합니다.
이것을 이용해, 미리 0~F까지의 바이너리 데이터에 대해서 세그먼트(segment)
의 편성을 가진 16개의 RETLW 명령을 순서에 늘어놓은 테이블을 작성해,
「ADDWF PCL, F」라고 하는 명령으로, 변환원의 바이너리 데이터와 현재의 프로그라
무카운타치(PCL)를 덧셈 해, 테이블의 해당하는 RETLW 명령에 쟌
프 하도록(듯이) 해, 세그먼트(segment) 데이터를 반환값으로서 되돌리는 것처럼 하고 있습니다.



【다이나믹 표시 제어의 써브루틴】

3자리수의 표시 제어는, 각 형 마다 같은 써브루틴을 사용합니다. 그 1자리수 표시
의 써브루틴은, 포토에 출력하는 순서가 중요해, 우선, 표시 세그먼트(segment)
데이터를 RB1로부터 RB7에 출력해, 그 다음에 자리수 표시의 RA의 1비트를 ON와 섬
.
그리고 3 msec 기다리고 나서, RA를 OFF로 해 표시를 전소거해 둡니다.
이 전소거는, 다음의 자리수를 출력할 때까지의 순간만으로 되므로, 외형에
(은)는 느끼지 않습니다만, 표시부가 떨어져 있어, 신호의 파형이 무너져 지연이 발생해
라고 하고 등에, 일순간전의 자리수의 표시가 다음의 자리수에 치라트크의 것을 막는 기능이 있어

목록보기

www.1chip.com, www.1chip.co.kr
www.micom114.com
자료실바로가기

대구광역시 북구 산격2동 1629 산업용재관 10동 13호 (2층) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com