음성인식 선풍기- 2010 졸업작품 최종 보고서 -목 차1. 서론1.1 동기 및 목표1.2 개요2. 본론2.1 Block Diagram2.2 작품 구성2.2.1 MCU2.2.2 음성인식2.2.3 서보모터2.2.4 DC모터2.2.5 LED2.2.6 Text LCD2.2.7 각 부분 동작설명2.3 주요 소스코드 분석3. 결론3.1 처음 설정했던 목표3.2 구현된 기능3.3 졸업작품 후기4. 별첨 및 참고문헌1. 서론1.1 동기 및 목표여름방학 집에 들어와서 가장 먼저 하는 일은 발로 선풍기와 컴퓨터를 켜고 책상 앞에 앉는 일입니다. 그러다 바람이 약하거나 방향이 조금 다르다면 다시 일어나서 방향을 바꾸거나 바람의 세기를 조절해야 합니다. 물론 리모컨 선풍기가 시중에 나와 있지만, 한가득 어질러진 책상 위에서 작은 리모컨 선풍기를 찾기란 여간 힘든 것이 아닙니다. 리모컨 선풍기를 찾느니 직접 가서 버튼을 누르고 오는 것이 빠를 것 같다는 생각이 듭니다. 이런 작은 불편을 전자공학부 학생으로서 졸업 작품 프로젝트를 통해 조금이나마 편리하게 바꿔 보고 싶은 마음이 들었습니다. 음성으로 선풍기를 제어해 가뜩이나 더운 여름 조금 더 시원하게 지내보고자 이 프로젝트를 제안하게 되었습니다.우선 음성인식의 프로세스를 완벽히 이해하는 것이 첫 번째 목표입니다. 음성인식 과정과 처리방법을 익혀 이론적으로나마 음성인식을 이해하고 이를 JT-1000이라는 음성인식 모듈로 구현하는 과정을 이해하는 것이 첫째의 목표입니다.두 번째로, AVR의 이해 입니다. 우리가 선정한 ATMEGA128의 PORT 입출력에 관한 이해와 인터럽트로 PWM의 제어를 하는것이 두 번째 목표입니다.세 번째로, 모터제어의 이해 입니다. 서보모터를 사용하여 선풍기를 회전 시키고, DC모터를 사용하여 선풍기 날개를 돌리고 또한 강약을 조절하게 될 것입니다. 이에 앞서 선정한 AVR과 연계하여 모터제어에 관한 이해를 하는 것이 저희의 네번째 목표입니다.1.2 개요저희가 가장 중점적으로 생각한 부분은 PWM을 이용한 Dic-logic unit 산술논리 연산장치)는 중앙처리장치의 일부로서 컴퓨터 명령어 내에 있는 연산자들에 대해 연산과 논리동작을 담당한다. 몇몇 프로세서들에서는 ALU가 연산장치(AU)와 논리장치(LU)의 두 부분으로 나뉘어져있는 경우도 있다? ATmega128이 하버드구조와 2단계 파이프라인 처리방식으로 프로그램 명령을 인출하여 실행하는 동작을 에 보였다. AVR의 이러한 진보된 설계 기술은 결국 CPU가 시스템 클럭의 1주기에 평균적으로 1개의 명령을 실행하도록 함으로써 클럭 주파수 1MHz당 1MIPS의 처리속도에 해당하는 매우 높은 성능을 발휘하는 것이 가능하도록 하였다.[1]? 과 같이 1클럭 사이클 동안에 1개의 명령에서 2개의 레지스터 오퍼랜드가 사용되는 연산을 수행하고 그 결과를 다시 destination register에 저장하고 처리한다.2.2.1.4 AVR128의 외부구조ATmega128의 핀 배치는 아래 [그림1] 과 같다.?? VCC(21,52) : 마이크로프로세서가 동작하도록 공급하는 전원으로 두 가지 타입에 따라 전원의 범위가 다르다. ( ATmega128L : 2.7V ~ 5.5V / ATmega128 : 4.5V ~ 5.5V )? GND(22,53,63) : 신호의 접지 핀으로 사용된다.? XTAL1, XTAL2(23,24) : 수정발진기의 입/출력 핀으로서 크리스털이나 오실레이터를 접속 한다.? RESET(20) : 리셋 입력 핀으로서 50ns 이상의 Low level 입력이 지속되면 리셋이 발생한다.? PORT A/B/C/D/E : 반이중 I/O 포트로 내부 풀업저항된 8비트/양방향/병렬/범용 포트이다. DDRX, PORTX, PINX 의 레지스터를 이용해 제어를 한다.? PORT F : 반이중 I/O 포트로 내부 풀업저항된 8비트/양방향/병렬/범용 포트이다. A/D 컨버터의 입력포트로도 사용된다.?? PORT G : 반이중 I/O 포트로 내부 풀업저항된 5비트/양방향/병렬/범용 포트이다.?? AVCC(64) : A/D 컨이’, ‘삼’, 그리고 물체를 내려주는 ‘내려’, 다시 처음 상태로 돌아와서 다음 작업을 수행하게 하는 ‘복귀’ 이렇게 8가지의 명령을 사용한다. 각각의 명령은 미리 training 이라는 작업을 통해 저장되어 있으며 후에 변경이 가능하다. 사용하는 모듈은 화자종속 방식으로서 입력한 사람의 목소리 밖에 인식할 수 없으나 실제 사용해본 결과 다른 사람의 목소리에도 꽤 높은 인식률을 보였다. 음성인식모듈에서 보내주는 신호는 1.45V 정도였는데 이것은 AVR이 신호로 인식하기에는 작은 값이었으므로 이를 5V로 승압하는 회로가 필요했다. LM339(Comparator)를 이용하여 0.7V를 reference voltage로 설정하고 Vcc에 5V를 걸어주었다. 이 회로를 적용한 결과 신호인 1.45V가 나올 때는 AVR에 5V가 0.7V 미만의 전압은 0V가 AVR에 입력으로 들어갔다.(1) 음성인식개요음성은 인간이 사용하고 있는 통신의 매체 중 가장 자연스러운 형태이다. 즉, 자신의 의사표명 혹은 정보의 생성에 있어서 음성을 이용하는 비중이 매우 높다. 따라서, 음성을 매체로 한 man-machine interface의 필요성이 크게 대두되었으며, 1970년대 중반 이후 음성인식에 대한 연구가 활발히 전개되어 오고 있다. 초기 (1980년대 초반까지) 음성인식 시스템은 주로 인공지능 기법에 기반을 두고 개발되었는데, 이는 실제 사람이 음성을 인식하는데 적용하는 지식을 컴퓨터에 구현한 것이었다. 그 뒤, IBM에서는 hidden Markov model (HMM) 이라는 통계적 기법을 이용하여 대규모의 음성인식 시스템을 개발하였는데, HMM은 1980년대 중반 이후 거의 모든 대형 음성인식 시스템에서 채택되어 음성인식 기법의 대표주자로 자리잡고 있다. 1990년대 이후의 음성인식은 단순히 인식의 차원을 뛰어넘어, 주어진 음성의 뜻을 파악하고 그에 맞는 대응을 수행하는 음성이해의 단계에 와있는데, 이는 음성인식 기술과 자연어 처리 기술의 결합으로 이루어지고 있다.음성인계를 알 수 없다.- 동시 조음으로 단어경계를 결정하기가 어려워 문장의 인식에 부적절하 다.(5) 음성인식모듈음성인식 모듈로는 JT-2000을 이용하였는데 이 모듈은 음성인식 명령어를 받아 시리얼 출력을 하는 모듈이다. 우리는 이 시리얼 출력을 ATmega128로 입력을 받아 그 신호를 처리하여 사용하였다.*JT-20001) 음성인식 결과의 Parallel 출력은 JP1 의 핀3 ~ 핀7에서 출력된다.2) 음성인식 결과의 Serial 출력은 JP1 의 핀9(TX)에서 출력된다.3) GREEN LED는 음성인식 진행사항을 나타낸다.4) YELLOW LED는 음성인식 패턴인식 중임을 나타낸다.5) SPK. OUTPUT은 음성 출력단자이다.6) MIC. OUTPUT은 마이크 입력단자이다.7) 화자 종속 방식8) CL (Continuous Listening) 모드9) 10단어 인식10) 음성 인식 결과를 LED를 통해 출력2.2.3 서보모터서보모터는 AVR의 PWM(Pulse Width Modulation)출력에 의해서 제어하였다. ATmega128에서는 타이머0~3까지 PWM출력을 낼 수 있다. 우리는 타이머1의 PWM을 이용하였다. 타이머 1의 Phase Correct Mode를 이용하여 Top으로 OCR1A를 100으로 설정해주었다.이렇게 하면 f=16*1000000/(8/100)=20000Hz가 되어 20ms의 서버컨트롤을 위한 주기가 생긴다.사용한 서보 : mts-a410se- Operating voltage range: DC 4.8 ~ 6.0[V]- Operating speed: 0.19/0.15sec at 4.8V/6.0V- Maximum torque: 3.5kg.f.cm at 4.8V / 4.3kg.f.cm at 6.0V- Dimension: 40×20×36.6mm- Weight: 40g- Potentiometer: Ultra prolonged life- Bearing: Ultra Resin Bushing(1) DC 서보모터의 구조DC 서보모터의 구조는 많이 사용하는 L298모듈을 사용하였다. 이는 MCU를 이용해서는 모터를 돌릴 만큼 많은 전류를 공급할 수 없는바 모터를 구동 하기 위한 신호만 주고 이를 받아서 모터에 전류를 공급하여 주는 드라이버를 사용하는 것이다. L298드라이버는 과전류방지, 과열방지, 빠른 응답속도 등으로 대부분의 DC모터 제어에 사용된다.(4) PWM 제어DC모터의 속도를 제어하는 방법에는 크게 두가지가 있다. 첫 번째로 가변저항을 이용한 아날로그 제어방법과 PWM방법이 있습니다.간단한 모터의 속도 제어방법으로는 모터와 전원부 사이에 가변저항을 두어 저항볼륨으로 모터로 가는 전류량을 조절하고, 결과적으로 모터의 속도를 조절할 수 있지만, 사용되지 않는 전력은 저항에서 열로 손실되며, 이는 큰 낭비이자 비 효율적인 제어가 됩니다.이에반해 PWM제어란, 일정 구간내에서 모터에 인가되는 전압의 High Low의 비율을 달리하여 출력하는 제어방식으로, 인덕터 형태의 코일로 구성된 소자에 대해 인가되는 평균전압을 변화시킨다.(5) PWM 제어의 원리t1의 시간동안은 스위치를 on, t2의 시간동안은 스위치를 off하는 과정의 비율을 조절하게 되는데, 이를 듀티비(Duty Ratio)라고 한다. 볼륨 등의 가변으로 인한 외부의 소스 전압에 따라 t1의 시간이 조절되게 되는데 조절되는 정도는 t1의 시간이 0-100%까지 조절 되도록 되어 있고 t1이 on/off 1주기 중에서 5%의 기간이라면, 그 평균치는 5%이고 100%가 열려 있다면 당연히 100%가 됩니다.이런식으로 모터에 흐르는 전류를 주기적으로 시간에(t1+t2) 변화하는 t1의 %에 해당하는 만큼만 모터에 전력을 공급하게 되면 순간적으로는 모터에 100%의 전기를 공급하는 것이긴 하나 t1_t2의 1주기는 약 20khz의 주파수로 사람의 가청 대역을 벗어나는 높은 주파수로 되어 있고 그 시간이 매우 빠르기 때문에 모터가 반응하는 속도는 기계적으로 한계가 있으므로 t1의 평균치에 해당하는 만큼의 출력을 일정하게 나타내게 되고 전자 전송