April 16, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[7호]2010 캡스톤 우수상 – 전자 오카리나


07FCAP0132010 디바이스마트

캡스톤 디자인 공모전 우수작

전자 오카리나

팀명 : Soul Music
참가자 : 백제동

07FCAP017 Soul music 팀 구성 및 소개
코딩과 납땜으로 지친 몸과 마음을 오카리나라는 피리를 불며 달래는 평범한 공대생입니다. 뼛속까지 엔지니어의 피가 흐르는지 어쩐지 잘 모르겠지만 광운대 전자과를 졸업하고 대학원까지 도전 하게 된 석사과정 3학기 백재동이라고 합니다. 항상 새로운 작품을 갈구하며 눈치를 보다 캡스톤 공모전에 도전하게 되었습니다.대학교 졸업작품으로 홍릉과학출판사를 통해 공저자로 무선통신과 임베디드 시스템을 활용한 종합설계라는 책도 출간해 보았고, 허접하지만 블로그(http://rabe.egloos.com)도 운영하고 있습니다.
07FCAP008 오카리나 소개
오카리나는 도자기피리 또는 흙피리로 불리는 악기입니다. 이런 예명을 갖게 된 이유는 진흙으로 모양을 만들고 가마에서 구워서 완성되기 때문입니다. 연주하기에 쉽고 가격도 비교적 저렴하고 소리도 좋아 취미로 많이 각광받고 있습니다.

악기 소리의 특징 및 설계방향

악기 소리와 기계적인 비프음의 차이는 크게 두 가지가 있습니다. 첫번째로 악기는 음계의 정확한 주파수에 맞는 소리파형을 만들어 낸다는 것입니다. 두번째로 악기는 하모닉스 또는 배음이라고 하는 음계 주파수 이외의 높은 주파수를 포함하고 있습니다.
음계 주파수는 440Hz를 기본 ‘라’ 음으로 하고, 한 옥타브가 높을 경우 주파수가 2배가 되고 한 옥타브가 낮을 경우 반으로 줄어들게 됩니다. 한 옥타브에 포함되는 음계의 수는 반음을 포함하여 12개가 있는데 한 음이 올라갈 때마다 이전 음계 주파수에 2112를 곱하면 됩니다.

그림1. 오카리나 소리의 주파수 스펙트럼

그림1. 오카리나 소리의 주파수 스펙트럼

그림1-오카리나 소리의 주파수 스펙트럼은 녹음된 오카리나의 주파수 스펙트럼인데 기본음계 주파수의 크기가 가장크고 2배음~6배음까지는 작은 것이 보일겁니다.  실제 오카리나와 최대한 비슷하게 구현하여야 하겠지만, 현실적으로 배음을 똑같이 합성하기 위해서는 굉장히 많은 연산을 수행하여야 합니다.
그래서 필자는 이와 비슷하게 배음 성분을 가지고 있으면서 파형을 합성할 때 연산량이 획기적으로 적은 톱니파를 사용하기로 하였습니다. 톱니파의 모양과 주파수 스펙트럼은 다음 그림과 같습니다. 톱니파의 합성의 경우 단순히 바이너리 카운트 값을 DAC로 입력하여 주기만 하기 때문에 간단하면서도 그럭저럭 괜찮은 소리를 합성하는 효과적인 방법이고 할 수 있습니다.

그림2. 톱날파의 파형과 주파수 스펙트럼

그림2. 톱날파의 파형과 주파수 스펙트럼

터치센서

최근 터치센서 IC가 많이 출시되어 스위치 대용으로 사용되고 있습니다. 디바이스트에서 판매중인 ADM801 터치센서의 경우 가격, 반응속도, 사용상의 편의성 등이 상대적으로 우수합니다. 또한, 예전에는 정전방식의 터치센서를 사용하기 위해서는 IC 주위에 특정 용량의 저항과 캐패시터를 필요로 하고, 손이 닫는 메탈 플레이트 부분도 따로 제작하거나 구입하여야 했는데 ADM801은 VCC, GND, Vout 만 연결하면 되기 때문에 사용하기에 간편합니다.
아직은 터치 센서가 버튼 보다 비싸긴 하지만 여러모로 장점이 있습니다. 터치 센서는 버튼과 비교하여 과도한 힘이 들어가지 않으며 눌렀을 때 기계적인 ON/OFF 소음이 없고, ON/OFF 순간의 노이즈가 적습니다.

그림3. 터치센서(ADM801)

그림3. 터치센서(ADM801)

전체 회로 설명

그림4. 전자오카리나 전체 회로 구조

그림4. 전자오카리나 전체 회로 구조

전자 오카리나는 크게 FPGA 부분과 마이크로컨트롤러(AVR) 부분으로 나누어집니다. FPGA에서는 터치센서에서 입력되는 값을 오카리나의 운지법에 맞게 음계 바이너리 값으로 변환하는 역할과 바람세기의 값에 따라 톱날파의 진폭을 조절하며 디지털 파형을 출력하는 역할을 합니다. 마이크로 컨트롤러에서는 내장된 ADC를 사용하여 기압센서에서 입력되는 바람세기 값을 FPGA로 보내주는 역할과 FPGA에서 보내주는 음계 값을 LED로 표시하는 역할을 합니다.
FPGA에서 생성된 디지털 파형은 DAC를 통하여 아날로그 전압의 형태로 변환된 후 에코회로를 통과 후 앰프로 증폭된 후 스피커를 통하여 소리로 변환됩니다.

FPGA 회로구성

그림5. XC3S400 FPGA 모듈

그림5. XC3S400 FPGA 모듈

FPGA는 M2CV에서 제작한 모듈을 사용하였고, 모듈의 핀에 연결된 회로는 <표 1>과 <표 2>에 표시되어 있습니다.

07FCAP018 07FCAP019
FPGA J1 커넥터 연결 부품 FPGA J2 커넥터 연결 부품

AVR 회로구성

AVR 모듈(MAT128-10)

AVR 모듈(MAT128-10)

AVR 모듈은 MAT128-10을 사용하였고, 핀 할당은 그림 7에 나타나 있습니다. 음계 표시 LED는 2색 LED를 사용하여 AVR에서 두 개의 포트를 사용합니다. PORTE는 UART 통신을 위하여 비워두고 나머지 포트를 사용했습니다.

그림 7. AVR 연결

그림 7. AVR 연결

DAC 회로구성
FPGA 내부에서 생성한 디지털 파형을 현실 세계의 아날로그 파형으로 변환하기 위하여 DAC 칩을 사용하였습니다. DAC 부품을 선택할 때 가장 중요하게 보았던 부분은 DIP 타입의 패키지로 납땜이 쉬우면서도 디지털 파형 입력을 쉽게 할 수 있는지 여부입니다. 이러한 면에서 DAC0800은 제일 적합하였지만 -5V를 필요로 하는 방식이기에 많이 망설였습니다. 제어하기 쉬운 장점도 있었고 비동기 방식으로 디지털 파형을 입력하므로 높은 주파수의 파형을 출력 할 때에는 노이즈 성분도 많이 발생하였습니다.

그림8. DAC 연결

그림8. DAC 연결

FPGA HDL 코딩

그림9. FPGA 내부 파형 생성 블록 다이어그램

그림9. FPGA 내부 파형 생성 블록 다이어그램

<그림 9>는 FPGA 내부의 소리를 합성하는 부분의 블록도입니다.
음계 인코더 부분은 오카리나의 운지에 따라 도는 1, 레는 2,… 이런식으로 변환을 하여 줍니다. 음계 주파수 카운터 롬은 각각의 음계의 정확한 주파수를 출력하기 위하여 출력 파형의 한 샘플을 FPGA의 기본클럭(80Mhz)으로 카운트 하면서 유지하여야 하는지에 대한 값입니다. 카운터는 8비트 카운터로 음계 주파수 카운터 롬에서 입력되는 값만큼 카운터를 하면 출력 카운터를 1 증가시키는 역할을 합니다. 예를 들어 음계 주파수 카운터 롬에서 10 이라는 숫자가 카운터 블록에 입력되면 톱날파 한 주기를 출력하는데는 10 × 256 = 2560 의 클럭이 소요된 것이고, 이를 실제 시간으로 변환할 경우 12.5[ns] × 2560 = 32[us]가 되고, 최종적으로 톱니파의 주파수는 1/0.000032 = 31.250[KHz] 가 됩니다.

AVR 펌웨어 개발
AVR 펌웨어를 컴파일 하기 위하여 필자는 코드비전 2.x 를 사용하였습니다. 코드비전은 프로젝트를 생성할 때 GUI 형태로 옵션을 설정하면 기본적인 코드가 생성되어 AVR을 잘 모르는 초보가 사용하기에 편합니다. 필자 역시 AVR은 초보이기에 코드비전 밖에는 사용할 줄 모르지만 코디비전으로 바람센서에서 사용했던 ADC기능을 간단하게나마 알려드리겠습니다.
ADC를 가장 쉽고 안전하게(?) 사용하는 방법은 ADC 동작 클럭을 최대한 낮추는 것입니다. 프로젝트 생성 시에 Chip 옵션중에 Crystal Oscillator Divider Enabled 라는 옵션이 있는데, 이것은 기본 클럭을 분주해서 사용하겠다는 의미 입니다. 필자의 경우 기본클럭을 64로 나누라고 설정하였습니다. 이렇게 클럭 분주 옵션을 설정하게 되면 ADC 탭의 동장 주파수 부분도 맞춰서 낮아지게 됩니다.

07FCAP003 07FCAP002
그림 10. 코드비전의 프로젝트 생성 중 Chip 설정 그림 11. 코드비전의 프로젝트 생성 중 ADC 설정

소스코드 부분은 ADC와 관련된 부분만 추려서 기재하였습니다. PF0에 연결된 바람센서의 전압값을 읽어오기 위해서는 read_adc(0); 을 호출하고 리턴값을 사용하면 됩니다.
<소스코드 1>은 AVR의 핀을 사용하고 실제 회로를 납땜하는 문제 때문에 PORTF에 바람센서의 ADC 입력과 바람의 크기의 디지털 출력이 할당하게 되어 두 기능이 충돌되지 않도록 동작하는 코드입니다.

<소스코드 > AVR 펌웨어의 주요 소스코드

unsigned char adc_tmp;
while (1) {

// 기압센서의 바람세기를 FPGA로 출력
adc_tmp = read_adc(0); // ADC값을 읽어옴
adc_tmp = (adc_tmp >> 1) & 0b01111110; //출력핀에 맞게 조정
adc_tmp = PORTF | adc_tmp; //PORTF의 다른핀의 값과 합침
PORTF = adc_tmp; //핀으로 출력
//바람세기 LED 출력
(생략)..
//음계 LED 출력
(생략)…
};

에코 이펙트 회로

그림11. 에코 이펙트 회로

그림11. 에코 이펙트 회로

음향관련 분야에서 보았을 때 이펙트는 소리를 보다 듣기 좋게 꾸며주는 역할을 합니다. 마치 사진을 찍고 난 후 포토샵을 통해서 보기 좋게 수정하는 것과 같다고 보시면 됩니다. 노래방 마이크에는 에코 이펙트가 추가되어있어서 노래방에서 부르면 더 잘 부르는것처럼 들려지게 들립니다. 에코는 노래 뿐만 아니라 악기 연주 시에도 많이 사용되며 특히 오카리나와 같은 관악기에는 거의 필수적으로 사용됩니다.
에코 이펙트는 소리를 메아리처럼 울리는 역할을 합니다. 에코 이펙트 회로를 분석하기 위해 디바이스마트에서 판매중인 MX044(3채널 가라오케 마이크 믹서) 키트를 사용하여 에코 IC의 성능도 확인하였고, 어떤 IC를 사용하는지도 확인하였습니다.

회로 완성

07FCAP013 07FCAP006 07FCAP005
그림12. 전자 오카리나 사진 그림13. 전자 오카리나의 윗면 회로 그림14. 전자 오카리나의 아랫면 회로

회로가 복잡하여 실제 연주가 가능한 형태로 제작하기 위해 2개의 기판을 사용하게 되었습니다. 윗면에는 FPGA, 터치센서, DAC, 에코 이펙터 회로가 있고, 아랫면에는 AVR, 바람센서, LED, 앰프회로가 있습니다. 바람센서(MPX5010DP) 부분에 취구는 멜로디언의 취구를 사용하였는데 조잡하기도 하고 위생적으로도 문제가 있어 많은 개선이 필요합니다.

공모전 후기

혼자서 캡스톤 공모전 프로젝트를 진행하였는데 생각보다 규모가 방대해서 많이 힘들었습니다. 다른 팀원이 있었더라면 부품구입, 데이터쉬트 분석, 납땜, 문서작업 등의 잡다한 일들을 나누어서 할 수 있었을 테지만 혼자서 모든 일을 하느라 정신도 없고 실수도 많이 한 것 같습니다. 부족한 작품을 공개하기가 많이 부끄럽지만 그래도 누군가에게는(?) 도움이 될 것이라고 믿습니다. 끝으로 캡스톤 공모전을 통해 다양한 부품을 돈 걱정 없이 사용할 수 있도록 경제적인 지원을 해주신 디바이스마트 관계자 분들께 감사하다는 말을 드리고 싶습니다.

Leave A Comment

*