심사평
NtrexLab
일반적인 리모콘에 적용할 수 있다는 것과 한글화까지 고민한 점. 간단한 아이디어이지만 리모콘 신호를 분석하고 적용한 점 등이 높게 평가된다. 특히 접근적 방식이 논리적이라는 점이 아주 좋으며 깔금한 문서화 작업에도 좋은 점수를 받을만 하다.
JK전자
LED 전광판의 내용을 무선 송신을 이용해서 수정한다는 아이디어는 좋음. 추가 기능으로 전광판에 표시되는 텍스트에 효과를 줄 수 있는 방법도 추가되었으면 더 좋았을 것 같고, QWERTY 키보드로 PS2 인터페이스를 활용했다면 구조가 조금 더 단순하게 구현 될 수도 있었을 것 같음. 적외선 무선 송수신 방법 대신에 2.4GHz대의 RF를 사용했다면 거리와 신뢰성에 있어서 조금 더 좋았을 것 같습니다.
싱크웍스
요즘 LCD 전광판을 이용한 광고를 많이 보게 되는데 실용적으로 쓰이고 있거나, 쓰일 것 같은 작품이다. 기술적으로도 오토마타에 대해 공부를 많이 했을 것 같다. 일반 리모콘으로도 잘 동작이 된다면 학생 입장에서 구할 수 있는 자원을 최대한 활용한 것이라 판단된다.
작품개요
목표 천지인 키보드(리모컨)를 이용하여 무선으로 그래픽 LCD에 한글을 입력하고, 그 문장이 전광판에 지나가도록 설계.
결과 천지인 키보드(리모컨)를 통해 한글/영문/숫자를 무선으로 입력하였고, 그 문장을 출력하는 광고판 설계함. 자체적으로 제작한 리모컨으로 천지인 스위치 광고판을 제어함.
개선 방향 천지인 키보드(리모컨) 제어거리 개선 필요. 상업성을 위해 천지인 키보드방식(특허에 관한 문제점)이 아닌 다른 한글입력방식 구상이 필요함.
작품설명
제작동기
기존에 제작된 입력장치(스위치)는 내장된 전광판이 사용자의 손이 닿는 곳에 있어야 했다. 이런 불편함을 해소하기 위해 무선으로, 즉 리모컨을이용하여 입력할 수 있도록 설계해 보았다. 한글 오토마타에서는 시중에 많이 쓰이는 3×4 행렬식 스위치(천지인스위치:3G 삼성 휴대폰으로 한글 입력방식)를 이용하여 한글을 입력하는 방식에 대해 연구해보고 싶었다. 그래서 QWERTY 키보드로 한글입력이 가능한 전광판을 한 단계 발전시켜, 삼성리모컨을 활용하여 천지인 스위치로 한글입력이 가능한 전광판을 설계하였다. 이 과정은 아래와 같다.
1) 도트매트릭스
목표 글자(영문)가 지나가는 광고판 설계.
결과 POWER SYSTEM이라는 글자가 지나가는 광고판 설계. 처음으로 ATMEGA128을 이용하여 작품 설계.
개선 방향 개발자가 아닌 일반 사용자가 출력 글자를 변경하기 힘듦. (내부 프로그램을 바꾸어야 하기 때문)
2) 3×4 스위치를 이용하여 영문을 입력 후 출력하는 광고판
목표 3×4 키 스캔을 사용하여 영문을 입력 후 출력하는 광고판 설계. 디코더 칩을 활용하여 적은 포트로 다수의 LED를 제어.
결과 1~3번을 입력하여 영문을 입력 후, 그 글자를 광고판에 출력한다. 채터링에 의한 오동작을 프로그래밍에서 해결한다.
개선 방향 입출력에 관한 모든 사항을 전광판에서 확인하기 때문에 완성도가 떨어지며, 기존의 사용자를 외국인이 아닌 한국인으로 잡고 있기 때문에 한글 입출력 제어기술이 필요하다.
3) QWERTY 키보드를 통해 한글/영문/숫자를 입력하여 출력하는 광고판
목표 QWERTY 키보드에서 그래픽 LCD에 한글 입력하기.
결과 QWERTY 키보드를 통해 한글/영문/숫자를 입력하여 출력하는 광고판 설계.
개선 방향 QWERTY 키보드가 차지하는 외형적인 공간이 많기 때문에, 적은 양의 스위치로 제어할 수 있는 한글 입력 기술이 필요함.
주요 동작 및 특징
1) 하드웨어 구조
천지인 전광판
천지인 전광판은 입력장치인 리모컨 센서와 출력장치인 그래픽 LCD, 전광판으로 구성되어 있다. 전반적인 동작은 리모컨으로 입력한 데이터는 리모컨 센서를 통해 MCU로 넘어가고, 그 데이터와 상황을 분석하여 그래픽 LCD 또는 전광판의 출력 글자를 변경하도록 설계되어 있다.
리모컨 송신기
리모컨 송신기는 입력장치인 행렬식 스위치와 출력장치인 리모컨 송신소자로 구성되어 있다. 전반적인 동작은 행렬식 스위치를 통해 입력받는 스위치에 따라 삼성리모컨 프로토콜대로 전송하도록 설계되어 있다.
하드웨어 설명
1) 리모컨 제어
리모컨 센서 (KSM603)의 전기 광학 특성
그림 8. KSM603(수신부)
그림 9. CL-1L5R(송신부)
37.9㎑의 주파수와 데이터가 함께 와야 KSM603에서 인식할 수 있다. 여기서 우리가 제작할 리모컨 송신기은 삼성 리모컨이다. 삼성 리모컨의 프로토콜과 데이터, 전반적인 시스템은 밑에서 정확히 설명하겠다.
2) 키보드
비행렬식 키보드
비행렬식 키보드
그림 10는 마이크로 컨트롤의 입력 핀과 스위치를 1:1로 연결하는 방식으로 구성되어 있다.
그림 10의 회로는 스위치가 OFF인 경우 마이크로 컨트롤의 입력 핀에 GND값이 들어가고, 스위치가 ON인 경우 마이크로 컨트롤의 입력 핀에 VCC Main값이 들어간다.
행렬식 키보드
행렬식 키보드
그림 11는 4×4 행렬식 키보드로 구성되어 있다. 행렬식 키보드는 스위치가 NxM 행렬로 구성되어 있으며, NxM의 행렬식 키보드를 제어하는데 필요한 핀은 N+M개이다.
마이크로 컨트롤의 출력포트(A포트)에서 특정한 하나의 비트 출력만 선택하여 레벨을 변화시키고, 마이크로 컨트롤의 입력포트(B포트)에서 4비트를 입력받아 어떤 스위치가 눌러졌는지 인지하는 방법이다.
행렬식 키보드와 비행렬식 키보드의 비교
행렬식 키보드는 비행렬식 키보드에 비해 하드웨어 구조와 프로그램이 복잡하다. 하지만 그림 12과 같이 행렬식 키보드와 비행렬식 키보드에서 스위치 개수가 증가함에 따라 행렬식과 비행렬식의 마이크로 컨트롤의 핀 개수의 차이가 현저히 난다는 것을 알 수 있다.
3) SLM1606M
SLM1606M 타이밍 차트
SLM1606M의 타이밍 차트이다. 참고하여 256픽셀마다 데이터를 입력하여 제어하면 된다.
전체 시스템 구성
1) 전체 시나리오
전체 시스템 시나리오
동작모드에서 리모컨을 이용하여 글자입력 및 색깔 설정 모드로 변경하고, 원하는 문장을 입력 후 동작 모드로 변경하면, 전광판에 입력한 문장이 지나가도록 설계하였다.
2) 기능 설명
입력 및 설정모드
입력 및 설정모드
모드는 입력 및 설정 모드와 출력 모드 크게 2가지로 구성되어 있다. 입력 및 설정모드는 문장 입력 모드와 색깔 설정 모드로 구성되어 있다. 문장 입력 모드는 한글, 대소문자, 숫자를 입력할 수 있다. 그리고 색깔 설정 모드는 총 12가지 색깔로 설정할 수 있다.
3) 입력 장치 리모컨 설명
삼성 리모컨을 천지인 키보드로 옮긴 모습
삼성 리모컨을 천지인키보드로 옮긴 모습
그림에서 검은색 글자는 그 리모컨 프로토콜의 데이터이다. 그리고 초록색 박스 안에 있는 스위치로 한글, 영어, 숫자를 입력하고, 노란색 안에 있는 스위치로 동작 모드, 문장 입력 모드, 색깔 설정 모드 등을 설정한다.
개발 환경
1) 리모컨 시스템
리모컨의 데이터 형식은 아래 그림과 같다. 처음에 리더 펄스가 나온다. D6121(구 삼성, 구 LG)형식은 리더 펄스의 길이가 13.5msec이고 TC9012(삼성. LG)형식은 리더 펄스의 길이가 9msec이다.
다음에 32 비트의 데이터가 따라 오는데, 처음 2 바이트는 커스텀 코드이고, 다음 1 바이트는 데이터, 마지막 바이트는 데이터 1의 보수이다.
각 비트는 1 또는 0을 나타내는데 펄스 폭의 길이로 구별한다. (아래 그림 참조) 즉, 펄스 폭이 긴 것(A)이 1을 나타내고, 짧은 것(B)은 0을 나타낸다. 시간은 각각 0.5625msec와 1.6875msec이다.
아래에 삼성 리모컨(TV, VCR)의 코드 값을 예로 들었다. 우리는 이 코드표를 사용하는 것이 아니라, 프로그램을 통해서 이 코드 값을 알아내고(표와 일치여부 확인), 알아낸 코드 값을 이용해서 LCD를 제어하도록 하겠다. 삼성 리모컨뿐만 아니라 TC9012나 D6121형식의 리모컨은 어느 것이나 코드 값을 알아내서 사용하는 것이 목적이다.
아래의 표는 리모컨의 프로토콜의 값들이다. 처음에는 삼성 리모컨으로 프로토콜을 확인해 보고 향후 제작할 리모컨에 이 리모컨 프로토콜대로 값을 넣어보도록 한다.
2) 한글관련 시스템
한글은 모아쓰기 방식을 이용하여 자음과 모음을 조합해 하나의 폰트로 이루어지며 글자의 개수는 뷁,햏,앟 등 같은 글자를 제외하고 정확한 한글폰트만 2,350자로 구성되어 있다. 그리고 뷁, 햏, 앟 등 잘 쓰지 않는 폰트의 개수를 합치면 총 11,172자로 구성된다.
영어는 풀어쓰기 방식을 이용하여 자음과 모음이 하나의 폰트로 이루어지며 대소문자의 폰트로만 구성되어 있기 때문에 총 26개의 폰트만 가진다.
폰트의 데이터 크기
1byte의 크기는 256bits이기 때문에 1byte로 한 글자를 매칭 한다면 최대 256개의 글자를 표현할 수 있다. 영어는 총 26자이기 때문에 1byte에 충분히 모든 문자를 입력하는 것이 가능하다. 반면, 한글의 개수는 256자를 넘기 때문에 1byte로 표시될 수 없다. 하지만 2bytes의 크기는 65,536이기 때문에 2bytes로 매칭한다면 최대 65,536자를 표현할 수 있다. 따라서 초성, 중성, 종성을 조합해서 만드는 한글 코드 형식은 2bytes 내에서 표현이 가능하다. 그렇기 때문에 영어와 다르게 한글은 한 글자의 데이터 길이가 2bytes로 구성된다.
3) 한글 코드의 종류
바이트 한글 코드
3bytes 한글 코드는 한글 한 음절을 초성, 중성, 종성으로 나누고 각각 한 byte씩 배정하여 처리하는 것으로 한글 한 음절을 처리하기 위해서 3bytes를 사용한다. 일종의 조합형 코드이지만 한글 1음절을 표현할 때 2bytes 조합형 코드보다 1byte를 더 많이 사용하기 때문에 비효율적이다.
ksc5601
한글을 음절 단위로 순서대로 배치하여 각각의 코드 값을 부여하는 방식이다. 구현 방식을 보면 첫 번째 byte와 두 번째 byte 모두 164~256까지의 영역만을 사용한다. 따라서 한글 표현의 한계 및 한글의 자소 분리, 입출력 문제 등을 가진다.
상용 조합형 한글 코드
한글 한 음절을 초성, 중성, 종성으로 나누어 각각 5bits씩 배정하고 7bits 아스키코드에서 사용하지 않는 최상위 비트(MSB)에 1로 배정하여 2bytes로 처리한다. 최상위 비트가 1로 되었으면 한글 한 음절로 해석하고 0으로 되어 있으면 영문자로 구분한다. 완성형 코드의 문제를 다소 개선하였다.
유니코드
유니코드2.0에서는 한글은 두 가지 영역으로 배정받았다. 첫 번째는 현대 한글 11,172자를 완성형 방식의 코드순으로 배열한 것인데, 한글 11,172자는 완성형처럼 완성된 음절을 기준으로 배정하였다. KSC5601 완성형 코드와는 다르게 일정한 조합 규칙을 유지하고 있어서 사용하기 편리하다. 두 번째는 모음과 자음만 따로 사용할 경우인데 그 데이터에 대한 코드 값은 일정한 값으로 지정되어 있다.
4) 조합형 코드의 필요성
조합형 코드는 다른 코드 방식에 비해 한글 오토마타에 적합한 데이터 형식이다. 조합형 코드를 알아보고 한글 오토마타에 적합한지 알아보았다.
조합형 코드의 데이터 용량
조합형 폰트 코드의 용량은 초성(20) x 8벌 x 32Kbytes + 중성(22) x 4벌 x 32Kbytes + 종성(28) x 4벌 x 32Kbytes = 11,520Kbytes (약 11Kbytes)가 된다. ATMEGA128의 프로그래밍이 가능한 용량이 128Kbytes이기 때문에 충분이 코딩이 가능한 용량이다.
완성형 폰트가 사용될 수 없는 이유
조합형 코드를 이용하지 않은 모든 한글의 폰트를 사용 할 경우 11,172(글자) x 32Kbytes = 357,504Kbytes(약 349Kbytes)를 차지한다. ATMEGA128은 코딩용량이 128Kbytes를 넘기 때문에 완성형 코딩으로 코딩이 불가능하다.
완성형 코드와 조합형 코드
조합형 코드가 아닌 완성형의 경우는 2,350자를 저장해야 하므로 2,350자 x 32Kbytes = 75,200Kbytes(약 73Kbytes)의 용량을 차지하지만 ATMEGA128은 128Kbytes까지 코딩이 가능하기 때문에 불가능한 코딩이 아니다. 그러나 한글의 모든 글자를 표시 할 수 없기 때문에 원래 설계의 목표를 벗어나게 된다. 그래서 한글 테이블을 사용하여 조합형 한글 코드를 코딩해야 한다.
유니코드와 조합형코드
유니코드는 모든 완성된 글자 즉, 초성과 중성 또는 초성과 중성과 종성으로 구성된 글자의 폰트규칙에 의해 결정된다. 그러나 자음 또는 모음이 단독으로 쓰일 경우에는 규칙이 아닌 정해진 특정 값에 의해 결정된다. 그에 반해 조합형 코드는 모든 완성된 글자뿐만 아니라 자음 또는 모음이 단독으로 쓰일 경우에도 규칙에 의해 결정된다. 따라서 조합형 코드가 유니코드보다 한글 입력하는 시스템을 구축하는데 더욱 유리하다.
5) 조합형 코드의 특징
조합형 코드의 폰트의 형태
글자 형태에 따른 자음 ‘ㄱ’형태
초성, 중성, 종성의 글자를 조합하여 코딩 되어 있기 때문에 글자 형태가 좋지 않을 것이라고 착각할 수 있다. 그러나 위와 같이 일반적인 글자 폰트처럼 ‘가’의 ㄱ, ‘갈’의 ㄱ, ‘고’의 ㄱ등이 모두 같은 초성의 ㄱ 이지만 모양과 크기가 다르다. 조합형 코드는 한글 테이블을 이용하면 각 글자의 상황에 맞는 글자의 폰트가 들어가기 때문에 사용하여도 글자 폰트의 형태는 크게 나쁘지 않다.
조합형 코드의 데이터 형식
조합형 코드 표
최상위 bit는 1로 정해져있고 그 다음부터 5bits는 초성의 데이터가 들어오고 그 다음부터 5bits는 중성의 데이터가 들어오고 그 다음 5bits는 종성의 데이터가 들어온다. 초성과 중성 그리고 종성의 데이터는 표에 의해 결정된다. 예를 들어 표에 의하면 ‘한’ 이라는 글자를 조합할 경우 초성: 0b10100, 중성: 0b00011, 종성: 0b00101의 값을 가진다. 따라서 ‘한’의 조합코드는 0b110110001100101 이라는 값을 가지게 된다. 한글 오토마타의 구성에서의 장점은 모든 글자 즉, 완성된 형태의 한글(초성과 중성 또는 초성과 중성 그리고 종성으로 이루어진 글자)이 아닌 글자도(초성 또는 중성 또는 종성 예) ㄱ, ㅏ, ㄳ 등) 조합형 코드의 표에 의해 결정되고 출력된다. 예를 들어 ㄱ의 초성은 초성:0b00010, 중성:0b00010, 종성:0b00001으로 값을 가진다. 따라서 “ㄱ”의 글자 조합형 코드는 0b1000100001000001라는 값을 가진다.
조합형 코드에서의 한글과 아스키코드의 구별법
한글과 아스키코드의 구별법
위 그림은 입력받은 문자열을 한글과 아스키코드를 구별하는 흐름도이다. 조합형 코드는 16bits 중 최상위 bit가 1의 값을 가진다. 그에 반해 아스키코드는 8bits 중 최상위 bit가 0의 값을 가진다. 이를 이용하여 한글일 경우 16bits를 읽고 아스키코드일 경우는 8bits를 읽는다.
조합형 코드에서 초성만 입력하더라도 하위 8bits의 값은 0의 값을 가지지 않는다. 조합형 코드 표에서 중성과 종성의 값들을 보면 fill code라고 불리는 아무런 값을 가지지 않는 코드가 종성일 경우 0b00001의 값을 가지고 중성일 경우 0b00010의 값을 가진다. 즉, 한글의 하위 8bits는 0b00100001의 값을 가진다. 그렇기 때문에 한글과 영어를 입력하지 않은 경우에는 0의 값을 가진다.
한글 오토마타 시스템
1) 한글 오토마타 구현 내용
전반적인 한글 오토마타 흐름도
종성만 출력되는 경우를 제외하고 모든 경우에 출력되도록 설계된 구상도이다. 위에서 설명했듯이 초성과 종성에서 같은 자음도 있지만 다른 자음도 존재한다. 만약 초성과 종성을 자음만 출력하고 싶은 경우에는 글자를 출력해야 하는 부분이 초성과 종성 중에서 어느 것을 출력해야 하는지가 명확하지 않기 때문에 완성도를 높이기 위해 종성을 제외한 한글 오토마타를 출력하기 위한 순서도를 작성하였다.
설명 1은 아무런 입력도 하지 않은 경우에서 ‘ㅏ’와 같이 모음을 입력할 경우에는 중성이 입력되고 다음 칸으로 넘어간다. ‘ㄱ’과 같이 자음을 입력할 경우에는 초성에 자음이 들어간다.
설명 2는 초성만 입력된 경우에서 ‘ㅏ’와 같이 모음을 입력할 경우에는 이전의 입력된 초성과 중성이 조합되어 입력된다. ‘ㄱ’과 같이 자음을 입력할 경우에는 그 다음 칸에 초성의 자음이 들어간다.
설명 3은 초성과 중성이 조합되어 입력된 경우에서 ‘ㅏ’와 같이 모음을 입력할 경우 이전의 중성과 비교하여 조합이 가능하지 판별하고 가능 할 경우에는 이전의 중성 대신 조합된 중성이 들어간다. 만약 불가능할 경우에는 다음 칸에 중성이 입력되고 그 다음 칸으로 넘어간다. 또한 ‘ㄱ’과 같이 자음을 입력할 경우에는 종성에 자음이 들어간다.
설명 4는 초성과 조합된 중성이 조합되어 입력된 경우 ‘ㅏ’와 같이 모음을 입력할 경우에는 다음 칸에 중성이 입력되고 그 다음 칸으로 넘어간다. 그리고 ‘ㄱ’과 같이 자음을 입력할 경우에는 종성에 자음이 들어간다.
설명 5는 초성과 중성 그리고 종성이 조합되어 입력된 경우 ‘ㅏ’와 같은 모음을 종성 뒤에 입력할 때 기존에 입력된 초성과 중성으로만 글자를 형성하고 그 다음 칸에 그 전에 입력한 종성이 초성으로 넘어가고 새롭게 입력한 모음이 중성으로 입력된다. 그리고 ‘ㄱ’과 같이 자음을 입력할 경우에는 이전의 종성과 비교하여 조합이 가능한지 판별하고 가능할 경우에는 이전의 종성 대신 조합된 종성이 들어간다. 만약 불가능할 경우 다음 칸에는 초성이 입력된다.
설명 6은 초성과 중성 그리고 조합된 종성이 조합되어 입력된 경우 ‘ㅏ’와 같이 모음을 입력할 때 기존에 입력된 초성과 중성 그리고 조합하기 이전에 입력된 종성만 글자를 형성하고 그 다음 칸에 조합되기 직전에 입력된 종성이 초성으로 들어가 새롭게 입력한 모음이 중성으로 입력된다. 그리고 ‘ㄱ’과 같이 자음을 입력할 경우에는 다음 칸에 초성의 자음이 들어간다.
단계별 제작 과정
1) 그래픽 LCD에 한글 출력
단순 제어 -> 아스킨 코드 제어 -> 한글 제어
2) SLM 1606M 제어
단순 제어 -> 한글 제어
3) 리모컨 컨트롤
리모컨 수신 -> 리모컨 송신 테스트 -> 리모컨 송신기 제어
4) 한글 입력
쿼티 키보드 제어 -> 천지인 키보드 제어
기타
1) 참고문헌
[1] 권훈 ,김정희, 곽호영, “유니 코드를 바탕 으로 한 프로그램 상에서의 한글 자/모 구 별방법에 따른 연구”, 2004년도 한국 정보 과학회 가을 학술 발표 논문집, 2004
[2] 박장식, 윤병우 , “(AT90CAN128을 이 용한)CAN 통신 실무”, 2009.09
[3] 신동욱, 오창헌, “알기 쉽게 배우는 AVR ATmega128”, 2006.01
[4] http://cafe.daum.net/8051plus
[5] http://cafe.naver.com/carroty
[6] 쿼티 키보드의 한글 오토마타 개발과 ATMEGA128을 이용한 한글 전광판 시스템 설계 박찬진, 이장주, 김민재, 서태준, 문용식, 정정원 |