[12호]MP SET(MP3 + HEADSET)
2011 디바이스마트
캡스톤 디자인 공모전 입선작
MP SET(MP3 + HEADSET)
팀명 | 三人三色
참가자 | 인천대학교 전자공학과 김민지, 김소정, 최수지
심사평
본 작품은 주변 소음 중에서 안전과 관련된 자동차 경적과 같은 소리를 감지하여 헤드셋의 볼륨을 조절하여 사용자의 안전을 확보한다는 개념을 가지고 있다. 결론적으로 본 작품은 성공하지 못했다. 그러나 심사위원의 입장에서 성공하지 못한 작품이라고 가치가 없다고 볼 수는 없다. 실제 본 작품이 가지는 메인 컨셉이 쉽게 성공하지 못할 수도 있다는 것을 알고 있었지만, 지원자들이 당시 학부 2학년임을 감안해서 선정된 작품이었다. 실제 본 리포트를 읽어보는 독자들이 어느 정도 실력이 있는 독자들이라면, 이들이 시도하고, 또 실패하고, 다시 시도하는 과정에서 살짝 미소를 지을 수도 혹은 안타까울 수도 있다. 그러나 작품을 만들기 위해 시도하고 분석하는 과정이 학부 2학년(그것도 당시엔 2학년 1학기) 학생들의 수준에서는 상당히 우수하고 참신하다고 심사위원들은 판단했다.
1. 三人三色
三人三色조는 팀명에서 알 수 있듯이 세 명의 팀원으로 구성되어있습니다. 세 명 모두 인천대학교 전자공학과의 ‘MAMA’라는 소모임에 소속된 2학년 여학우들입니다. 디바이스마트의 공모전을 통해 처음으로 캡스톤 디자인을 도전하고 공부중입니다.
三人三色조의 구성원 및 담당분야입니다.
·김민지 – Hardware & Board 개발환경 구성
·김소정 – 음성처리 알고리즘제작 및 수정
·최수지 – 볼륨조절기능Programming
2. MP SET (MP3+HEADSET)
■ MP SET의 개발동기
MP3를 사용하다보면 볼륨조절을 하지 못해 위급상황시 위험을 감지하지 못하는 상황들이 있습니다. 또 headset과 MP3를 동시에 휴대하기 불편한 점이 있기 때문에 이를 개선하기 위해 MP SET을 생각하게 되었습니다.
■ MP SET이란?
MP3와 Headset의 줄임말로, Headset에 MP3 기능을 추가한 것입니다. MP SET의 장점 및 주기능은 Headset 자체에 MP3 기능을 추가하여 이용에 더욱 편리함을 주는 것입니다. 또 음량을 자동으로 줄임으로써 자동차 경적, 경고음 등 갑작스런 위급상황을 알리는 소리를 들을 수 있게 되어 위험을 피할 수 있다는 점이 주된 기능이고 프로젝트 목표입니다.
■ MP SET 프로젝트 과정
위 그림은 ‘MP SET’의 프로그램 동작 과정을 한눈에 알아 볼 수 있도록 그림으로 표현한 것입니다. 이 동작 과정을 순서로 이번 프로젝트를 진행하였습니다.
먼저 간단하게 ‘MP SET’의 동작과정을 설명하면, 마이크를 통해 소리를 받아들이게 됩니다. 계속해서 외부소리가 마이크로 들어오는데 어느 순간 큰 소리가 발생하게 되면 이를 ‘MP SET’이 감지하여 MP3의 볼륨을 낮추게 됩니다.
■ 프로젝트 핵심 문제 & 해결방안
3. MP SET 속으로
■ 마이크
프리엠프 내장 콘덴서 마이크(FK648)와 다이나믹 마이크 프리엠프(FK647) |
마이크의 종류가 매우 적었습니다. FK648, FK647의 각각 제품 설명만을 보고 차이점을 정확히 알 수 없었습니다. 하지만 두 종류 모두 저렴해서 둘 다 사용해보고 더 알맞은 마이크를 결정하기로 하였습니다.
마이크 두 종류를 납땜하고 오실로스코프로 각각 동작을 확인해 보았습니다. 둘 다 마이크에 소리를 입력하기 전과 입력 후의 파형은 차이가 있었으나 소리 폭의 변화가 작았습니다. 데이터 시트와 오실로스코프의 실험결과로 FK648보다 FK647의 증폭정도가 높다는 것을 알았습니다. 들어오는 소리의 증폭을 확실히 하기위해 FK647를 증폭기로 사용하기로 했습니다.
마이크에 소리입력 전 / FK648만 있을 때 / FK647을 증폭기로 사용 후 |
■Band Pass Filter
MP SET의 기능에서 특정주파수의 소리를 걸러내는 작업이 필요합니다. 여기서 Band Pass Filter가 필요하여 MAX268BENG+을 선택하였습니다.
마이크로 들어오는 다양한 소리 중 MP SET이 반응해야하는 소리를 구분하기 위해 Band Pass Filter를 사용하기로 했습니다. 특정주파수를 걸러내는 작업을 하기 전 소리를 잘라내는 Band Pass Filter의 동작을 확인하기 위해 데이터시트에서 주어진 두 가지 회로를 실험해보았습니다.
Breadboard에 소자들을 꽂아 오실로스코프의 파형을 살펴보았으나 주파수를 잘라내는 것을 실패하였습니다.
Band Pass Filter의 동작을 실험 하던 중 자동차 경적과 비슷한 주파수 대역을 갖는 소리들이 매우 많음을 알았고 MP3로 소리들을 구분해내기 어려울 것이라 판단하였습니다. 따라서 음량을 자동으로 줄이는 기능이 필요 없는 소리에 반응하지 않게 하기 위해서 주파수가 아닌 큰소리에 반응하는 것으로 기술적인 면을 바꾸었고 때문에 Band Pass Filter가 필요하지 않아졌습니다.
■ OP AMP
LM386N-1의 증폭회로를 Bread Board에 배치한 상태 |
특정주파수를 구분하기전 먼저 들어온 소리들을 증폭하는 작업이 필요합니다. 또 Band Pass Filter에서 특정소리를 필터링하면 그 소리를 증폭시키는 일을 하는 OP AMP가 필요하여 LM386N-1을 선택하게 되었습니다.
OP AMP로 신호를 증폭시키는 실험을 직접 하기 전에 OrCAD로 회로를 구성하였습니다. 그 후 Breadboard에 실험하려 했으나 MP3 음량을 자동으로 줄이는 기능이 주파수가 아닌 큰소리에 반응하는 것으로 기술적인 면을 바꾸게 되었습니다. 또한 마이크에서 FK637을 증폭기로 사용하기 때문에 OP AMP를 통한 증폭회로는 필요하지 않아졌습니다.
■ MP3 Board
교육용 MP3보드의 종류가 많지 않았지만 이번 프로젝트에서 연습용으로 사용하기에 부담이 적고, 가격도 저렴한 편이어서 이레소프트사의 MY MP3P를 선택하게 되었습니다.
① MP3의 기본소스에서 필요 부분 파악 및 컴파일 방법
주어진 소스를 AVR Studio4로 열게 되면 MP3를 구동하기 위한 여러 가지 Header file과 Source file이 들어있음을 알 수 있습니다. 많은 파일들 중 음량을 줄이는 기능은 주로 Source file의 main.c에서 다루게 됩니다.이번 프로젝트의 목표는 MP3를 만들어 내는 것이 아니라 MP3의 ‘볼륨 자동 조절’기능을 만드는 것입니다. 그렇기 때문에 기본적인 MP3의 동작소스는 이레소프트사에서 주어지는 것을 사용하였고, 여기에’자동 볼륨 조절’기능의 소스를 첨가하였습니다.
main.c에서 void Play_MP3File() 함수를 집중적으로 다루어야 할 것이며, 함수 내부에 있는 KEY_VOL_UP & KEY_VOL_DOWN 또한 살펴보아야 할 부분이 될 것입니다.
< 컴파일 방법 >
MP3 보드에 소스를 넣기 위해서는 먼저 컴퓨터와 보드가 서로 연결 되어야 합니다.
ISP와 MP3보드의 결선 및 커넥터를 연결하여 사용하게 됩니다.
위의 사진은 컴퓨터와 MP3의 연결모습입니다.
② MP3 Board에 마이크를 연결하고 ADC후 LCD에 그 값을 나타냄
‘자동 볼륨 조절’을 실행시키기 위해서는 먼저 마이크를 통해 외부의 소리를 받아 MP3로 보내는 작업이 필요합니다. 마이크로 들어온 값(Analogue)을 MP3가 받은 후 Digital값으로 바꾸어야 하는데 여기서 ADC가 필요합니다.
ADC를 사용하기 위해 MP3 AVR128칩의 ADC 0인 61번 핀(F포트)과 제작한 마이크의 Output을 연결하고 보드의 GND와 마이크의 GND를 연결 합니다.
마이크와 보드를 연결한 후 LCD창으로 ADC가 되고 있는지 확인해야합니다. 이때 MP3가 실행되면 LCD창에서 ADC를 확인할 수 없게 됩니다. 그렇기 때문에 MP3기능이 실행되지 않도록 int main()함수 안에서 printFirstScr(), loadSetup(), Dispfiles()를 주석으로 처리합니다.
printFirstScr()은 LCD창에 MP3구동 첫 화면을 띄우게 하고, loadSetup()은 MP3 Play 환경초기화, Dispfiles()는 SD카드안의 메모리를 읽어오는 일을 합니다. 이 세가지 모두 주석 처리후 LCD창에 아무것도 뜨지 않을 때 ADC소스를 첨가하게 되면 ADC 결과를 볼 수 있게 됩니다.
int main() 함수 마지막부분에 ADC를 실행시키는 소스를 추가합니다. 추가한 소스는 앞서 Tester Board로 ADC를 공부했을 때 만들었던 소스에서 PORT만 수정한 것입니다.
소스를 컴파일 한 결과 LCD창에 알 수 없는 문자가 뜨고 ADC 변환 값은 연속적으로 뜨지 않았습니다. ADC의 다음 변환 값을 보려면 Reset버튼을 눌러야만 하는 문제점도 있었습니다.
DDRF와 PORTF의 설정 |
ADC 변환 값으로 이상한 문자가 뜨는 모습 |
ADC소스 실험 과정
ADC를 성공하기까지 수차례의 수정 과정이 있고 다양한 방식으로 도전했던 소스들이 있었습니다. 작은 숫자에도 달라지는 것이 소스이기 때문에 그동안 실패했던 소스들의 수는 매우 많습니다. 그러나 보고서에는 최소 3가지 유형으로만 줄여서 설명하겠습니다. |
□ 실험 1 □
이 소스는 위에서 말한 ‘Tester Board로 ADC를 공부했을 때 만들었던 소스에서 PORT만 수정한 것’입니다. 여기서 LCD에 출력할 ADC변환 값은 빨간 동그라미로 표시한 변수 a입니다.
위 소스를 MP3에 넣어 실험해본 결과 알 수 없는 문자가 뜨고, 연속적인 값의 변화를 볼 수 없는 등 문제점이 있었습니다. 그 원인이 잘못된 레지스터 설정에 있을 것 같아 빨간 네모박스로 표시한 부분들의 숫자를 바꾸어가며 많은 경우의 수를 실험했습니다. 많은 경우의 수를 바꾸어가며 넣었지만 그 결과는 알 수 없는 문자, 아예 실행이 안되는 것 이 둘 중의 하나였습니다.
□ 실험 2 □
AVR128의 ADC를 통해 나온 10비트 값을 8비트로 Shift시켜준 뒤, 이 값(a)을 그대로 LCD창에 띄우게 되면 우리가 원하는 16진수로 표현되지 않게 됩니다. 16진수로 값을 보기위해 8비트의 앞자리와 뒷자리를 따로 변수로 받은 뒤 각각 아스키코드화 시킨 후 두변수를 배열로 하나의 16진수 값처럼 보이도록 묶어 표시하기로 하였습니다.
8비트(a)를 각각 AND와 Shift를 통해 i와 j라 지정하고 값을 따로 받게 합니다. i 와 j는 각각 0×0으로 값을 받게 되기 때문에 0~15까지의 값을 갖게 됩니다. 여기서 아스키코드 값을 찾아보게 되면, 16진수의 0 ~ 9, a ~ f로 표현하기 위해서 i와 j의 값은 각각 0×30 ~ 0×39 혹은 0×61 ~ 0×66값을 갖아야 합니다. i와 j가 지금 받고 있는 값은 0×0이기 때문에 범위를 나누어 0~9까지는 0×30을 OR 해주고, 10~15까지는 0×60을 OR 해줍니다. 그리고 배열로 묶어 변수 st라 지정합니다. st값을 LCD로 보내면 LCD창에 Analogue 값의 소리 값이 16진수로 Digital화 되어 표현된 것을 확인할 수 있을 것입니다.
연산적인 곳에는 큰 문제가 없었고, LCD에 원하는 16진수로 표현됨을 눈으로 확인할 수 있었습니다. 하지만 소리가 Analogue인 만큼 연속적으로 값이 계속 마이크로 들어오게 되는데 LCD창은 처음 보드가 실행되었을 때 받은 값만이 표시될 뿐 연속적인 표현이 되지 않았습니다.
□ 실험 3 □
LCD에 연속적으로 표현하기 위해 레지스터들의 설정 값을 또 가능한 많은 경우의 수로 고쳐가며 실험해보았습니다. 또한 연산과정 중 고쳐야 할 부분이 있어 수정하고, 연산표현을 간략화 하였습니다. 수많은 수정 끝에 LCD에 연속적인으로 값을 띄우는데 성공하였고 위 소스처럼 최종 ADC 성공 소스를 얻어 낼 수 있었습니다.
③ ‘자동 볼륨 조절’기능
‘자동 볼륨 조절’기능을 만들기 앞서 보드 회로 중 불편한 점을 하나 개선시켰습니다. 마이크와 MP3보드는 필요한 전원 값이 달라 각각 전원을 주어야 했습니다. 따라서 두 개의 전원공급기가 필요했고, 보드에 연결되는 선도 많아져 불편한 점도 많았습니다. 이런 점은 개선하여 하나의 전원으로 전선 수도 줄이면서 불편함을 개선하기 위해 전원부를 새로 만들게 되었습니다.
새로운 전원부의 오실레이터와 커패시터를 통하여 한쪽은 MP3보드의 전원공급(5V)을 하고 다른 한쪽은 마이크의 전원공급(9V)을 하게됩니다. 이 새로운 전원부에 하나의 전원 (9V)를 공급하게 되면 오실레이터를 통하여 MP3보드로 가는 전원은 5V로 잘려지게 됩니다.
‘자동 볼륨 조절’기능을 실행하기 위해서는 표준 값인 평상시 주변소리의 크기를 알아야 합니다. 앞의 과정에서 마이크로 들어오는 값을 ADC하는 소스를 만들어 놓았기 때문에 이를 이용하여 평상시 주변소리를 측정했습니다. 그 결과 소리는 파동이기 때문에 0a~ff까지 다양한 값이 파동적으로 측정되었습니다.
표준 값을 정할 수 없어 먼저 소리의 크기에 따른 값을 비교하기 위해 마이크에 큰소리를 낸 뒤 그 값이 어떻게 나오는 지를 확인하였습니다. 확인 결과 큰소리가 나면 00 값이 연속적으로 나옴을 확인하였습니다. 이 특징으로 평상시 값과 구분을 할 수 있게 되었습니다. 하지만 조용한 상태에서도 측정해본 결과 평상시 값과 다르지 않아 두 상태에 대해 구분하기에 어려움이 있음을 알게 되었습니다.
처음 이 프로젝트를 계획할 때 ‘자동 볼륨 조절’은 위험한 상황과 공공장소 같은 조용한 상황, 이 두 가지 상황에서 동작하게 구상하였습니다. 하지만 마이크로 직접 소리 값을 측정해본 결과 조용한 상태를 인식할 수 없어 이 기능을 동작시키기 어려울 것 같다는 결론을 얻게 되었습니다.
위험한 상황을 알리는 소리(큰소리)를 듣게 하기위해 큰 소리가 나면 00이 많이 나오는 특징을 이용하여’자동 볼륨 조절’을 실행시키도록 구상하였습니다. 또 MP3보드가 큰소리를 인식했다는 것을 확인하기 위해 LCD 화면에 on이라는 글자가 뜨도록 프로그램을 만들도록 했습니다.
앞에서 먼저 완성한 ADC 소스를 기본으로 큰소리가 났을 때 00이 연속적으로 나오는 특징을 이용하여 ADC값을 10번 받아들일때 7번이상 00이 나오면 그것이 큰소리임을 인식하도록 소스를 작성였습니다. 그리고 그때 LCD에 ‘ON’이라는 글자를 띄워 인식함을 확인하였습니다.
MP3보드가 큰소리를 인식하여 ‘ON’을 표시한 모습 |
큰소리를 인식하는 소스를 이용하여 “ON”을 띄우는 부분만 소리를 줄이는 소스로 수정하면’자동 볼륨 조절’기능이 완성됩니다.
소스를 수정하기 위해 MP3 기본 작동소스 중 소리설정과 관련한 소스를 찾아본 결과 위 쪽 빨간 박스를 참고하기로 했습니다.
최종적으로 수정한 ‘자동 볼륨 조절’ 기능 소스는 위와 같습니다.
마지막으로 void Play_MP3File() 함수 내부 들어가야 하는 곳을 찾아 소스를 추가 하였습니다. 그리고 처음에 주석 처리한 MP3기능을 실행시키는 부분들의 주석을 풀어 실제로 MP3의 기능을 작동시키고 ‘자동 볼륨 조절’기능이 실행되는지를 확인하였습니다.
‘자동 볼륨 조절’소스가 들어가야 되는 위치 |
‘자동 볼륨 조절’ 소스 ⓐ |
‘자동 볼륨 조절’ 소스 ⓑ |
④ ‘자동 볼륨 조절’ON/OFF 메뉴
사용자가 이 기능의 사용 여부를 결정할 수 있도록 ON/OFF 메뉴를 만들기로 하였습니다. ON/OFF 메뉴를 설정하기 위해 새로운 ‘mode’라는 변수를 만들고 ‘자동 볼륨 조절’ 기능을 if문으로 묶은 뒤 ‘mode = 1′일 때 기능을 사용하고, ‘mode=0′일 때 기능을 사용하지 않도록 소스를 작성하였습니다. 이 ON/OFF 메뉴를 MP3 작동 맨 처음 결정하도록 소스의 위치를 정하였습니다.
int main() 마지막 부분에 다음과 같은 메뉴설정 소스를 추가합니다. 그리고 아래 그림과 같이 ‘자동 볼륨 조절’소스도 수정합니다.
⑤ MP SET 동작 모습
■PCB제작
MP3 보드의 크기를 줄이기 위해 PCB를 제작하기로 결정하였습니다. 그러기 위해서 먼저 OrCAD로 전체회로를 그리고 PADS에서 부품재배치를 하였습니다.
① OrCAD 파일 전체 모습과 부품별 모습
② PADS 모습
③ PCB 납땜과정
제작된 PCB에 납을 묻혀줍니다. PADS와 CAD파일을 비교해보고 위치를 찾아 부품을 올립니다. 가열기에 올려 PCB 판의 납을 녹인 후 핀셋을 이용해 부품을 눌러 고정시켜줍니다. 부품이 손으로 납땜할 수 있는 경우 인두기를 이용하여 납땜해줍니다. 뜨거운 판을 식혀 멀티미터를 이용해 접촉상태를 확인 해 줍니다. 가열을 실패하면 PCB판이 탈 수도 있습니다.
4. 완성모습
PCB 제작 중 필요한 부품이 한 종류 누락되어 왔었습니다. 재 주문한 결과 조금 늦게 받게 되었습니다. 늦게 도착한 부품을 납땜하고 테스트를 하기에 시간이 많이 모자랐습니다.
PCB 특성상 잦은 실패와 실패한 경우 원인을 찾기도 매우 힘이 듭니다. 완성되지 않았지만 지금까지의 모습을 보여드리겠습니다.
PCB 성공 시 작품 완성모습입니다. PCB 제작 시 기본적인 부품크기와 기타 선이 지나가는 자리를 고려하다보니더 이상 작게 축소 할 수 없었습니다. |
PCB 실패 시 연습으로 사용했던 MP3보드 그대로 붙인 상태입니다. |
5. 제작 그 후
■ 김민지
공부삼아 도전삼아 떨어져도 좋은 공부가 된다 생각해 사실 붙을꺼라 생각도 안한 채 피피티를 보냈다. 쟁쟁하신 분들 사이에서 우리팀이 3팀안에 들었다는 사실에 놀랍고 기쁘기도 했지만 걱정이 되기도 했다. 초반에는 아무것도 모르는 상태라 공부와 함께 프로젝트를 진행하니 진전이 느릴수 밖에 없었다. 방학동안에도 학교에 나오며 많은 선배분들께 조언과 도움을 구하며 민폐덩어리가 되기도 했다. 그러면서 느리게나마 프로젝트는 진행되었고 여기까지 왔다. 비록…우리의 미천한 실력과 능력으로 인해 진행속도도 느리고 부족한 점도 많지만 여기까지 온 것만으로도 참으로 모두에게 감사드리고 고맙다. 이번 프로젝트로 진로에 대해서도 많은 생각을 하게 되었고 학습적인 부분과 그 외 부분들에서도 많은 것을 느끼게 되었다.
■ 김소정
처음 해보는 프로젝트여서 기대 반 걱정 반으로 시작하였습니다. 아이들과 모여 아이디어 회의도 해보고 나온 것이 이 mp set이였습니다. 막상 프로젝트를 시작해보니 처음부터 막혀 막막하기도 하고 모르는 부분은 도움을 받아가며 해결해나갔습니다. 한걸음 한걸음씩 나아가다보니 이렇게 끝이 왔네요. 특히 소스 짤 때는 어디부분이 잘못됐는지 또는 어느 부분에 추가해야하는지를 모르기 때문에 이것저것 시도도 많이 해보고 이곳저곳에도 많이 추가해보고.. 보고서엔 그런 과정들까진 나오진 않았지만 정말 맘고생이 많았던 부분이었습니다. 그리고 처음 낸 아이디어처럼 완벽하게 되지 않아 많이 아쉽습니다. 노력 한다고 했는데 결과를 보니 아무것도 없어보여서 아쉽네요. 이번 프로젝트가 이제 막 시작하는 저에게 큰 도움이 된 것 같습니다.
■ 최수지
학과 관련한 프로젝트에 참여해보는 것도 좋을 것 같다는 생각을 할 때쯤 디바이스마트 공모전을 알게 되었습니다. 처음이지만 이번 공모전이 기회라 생각되어 도전정신으로 프로젝트를 시작하게 되었습니다. 이제 막 전공과목도 접하게 되었고, 아는 것이 하나도 없는 무지한 상태여서 인지 프로젝트의 과정 하나 하나가 어려움의 연속이었습니다. 좌절도 많이 했고 답답함에 속앓이도 많이 했습니다. 또 팀장이라는 이름을 달고 있지만 팀장으로서 더 잘하는 것도, 팀원을 이끌어 나가는 것도 제대로 해낸 것 하나 없었습니다. 하지만 작은 것 하나를 이루었을 때의 성취감은 말로 할 수 없을 만큼 큰 기쁨이었습니다. 서툴고 모자란, 또 완벽하게 이루진 못했지만 이번 프로젝트는 많은 것을 느끼게 해줬고 경험하게 했습니다.