부품설명

자주 사용하는 부품들의 사용법에 대하여 알아봅니다.

푸시버튼 x 피에조 부저-음의 높낮이 조절하기

2014-08-08 15:10:54

개요


출처 : 'Simple note' 프로젝트 -  simple-note-an-arduino-musical-instrument
아두이노는 소리를 생성하여 출력하거나 외부 쉴드와 결합하여 다양한 악기로도 활용될수 있습니다.
위 사진을 보면 엉성하고 투박해보이지만 나름 피아노의 기능을 할 수 있는 브레드 보드 피아노입니다.
전자 피아노처럼 고급스러운 사운드는 아니지만, 쉽게 따라할 수 있고,
푸시버튼과 스피커 혹은 피에조부저 만 있으면 누구나 만들어 연주할 수 있는 프로젝트입니다.

그럼 실습에 앞서 '소리'에 대해 간단히 알아보겠습니다.
소리는 기본적으로 물체의 진동을 통해 공기중의 압련을 변화시키고, 이를 파형(Wave)의 형태로 귀에 전달 되게 됩니다.

출처 : 소리의 전달 과정 - multimedia.kaywon.ac.kr

소리의 기본 요소로는 사이클과 주기가 있는데
사이클(cycle)은  일정한 시간 간격마다 반복되는 동일한 모양
주기(period) 는 한 사이클이 걸리는 시간을 의미합니다. 
어느 정도의 주기를 갖고 있는 사운드가 그렇지 않은 사운드보다 음악적으로 들리게 됩니다.
 
소리를 구성하는 3 요소를 보면,
주파수(frenquency)은 음의 높낮이와 관련이 있고, 
진폭(amplitude)은 음의 크기와 관련이 있으며,
음색(tone color)은 음의 특성을 결정 짓습니다.


출처 : 주파수와 진폭의 관계 - multimedia.kaywon.ac.kr
 
그럼 본격적으로 실습을 통해
음의 주파수와 주기를 이용하여 소리의 5가지 음계를 연주할수 있는 미니 피아노를 만들어 보겠습니다.


 

 

부품목록

본 학습에는 총 6종류의 부품이 필요합니다.
 
NO 부품명 수량 상세설명
1 오렌지 보드 1 아두이노 호환보드
2 피에조 1 피에조
3 브레드보드 1 브레드보드
4 10㏀ 저항 5 저항
5 점퍼 케이블 14 점퍼 케이블
6 푸시버튼 5 푸시버튼
 
부품명 오렌지 보드  10㏀ 저항 브레드보드 점퍼케이블 푸시 버튼
파트 x1 x5 x1 x14  x5
부품명 피에조
파트 x1

 

 

하드웨어 Making

 

회로도

브레드보드 레이아웃


 

 

소프트웨어 Coding

 

/*코드 출처 - 아두이노 for 인터랙티브 뮤직 */
void setup(){
pinMode(2,INPUT);//2번 핀을 입력으로 설정
pinMode(3,INPUT);//3번 핀을 입력으로 설정
pinMode(4,INPUT);//4번 핀을 입력으로 설정
pinMode(5,INPUT);//5번 핀을 입력으로 설정
pinMode(6,INPUT);//6번 핀을 입력으로 설정
pinMode(7,OUTPUT);//7번 핀을 출력으로 설정

}

void loop(){
  if(digitalRead(2)==1){sol();}//만약 2번핀이 1의상태(눌림상태)라면 솔을 실행합니다.
 if(digitalRead(3)==1){la();}//만약  3번핀이1의상태(눌림상태)라면 라 를 실행합니다
  if(digitalRead(4)==1){Do();}//만약 4번핀이 1의상태(눌림상태)라면 도 를 실행합니다.

  if(digitalRead(5)==1){re();}//만약 5번핀이 1의상태(눌림상태)라면 레 를 실행합니다.

   if(digitalRead(6)==1){mi();}//만약 6번핀이 1의상태(눌림상태)라면 미 를 실행합니다.
}
void sol(){
  digitalWrite(7,1); delayMicroseconds(1276);//'솔'음을 내기위한 주기
  digitalWrite(7,0); delayMicroseconds(1276);
}
void la(){
    digitalWrite(7,1); delayMicroseconds(1137);//'라'음을 내기위한 주기

  digitalWrite(7,0); delayMicroseconds(1137);//'미'음을 내기위한 주기
}
  void Do(){
    digitalWrite(7,1); delayMicroseconds(955 );//'도'음을 내기위한 주기
  digitalWrite(7,0); delayMicroseconds(955);
  }
  void re(){
    digitalWrite(7,1); delayMicroseconds(852);//'레'음을 내기위한 주기
  digitalWrite(7,0); delayMicroseconds(852);
  }
  void mi(){
    digitalWrite(7,1); delayMicroseconds(759);
  digitalWrite(7,0); delayMicroseconds(759);
  }

 

소프트웨어 & 하드웨어 설명

 

void sol(){
  digitalWrite(7,1); delayMicroseconds(1276);//'솔'음을 내기위한 주기
  digitalWrite(7,0); delayMicroseconds(1276);
}

 


delayMicroseconds() 는 마이크로초만큼 지연시키는 명령어입니다.
이 명령어를 이용하여 해당 음을 내게 됩니다.
각 음정별로 주파수와 주기를 지니는데 아래의 표를 참고하여 자신이 원하는 음을 내보세요.



출처 : 음높이에 따른 주기(ms)-  www.phys.unsw.edu.au
 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

푸시버튼, 피에조부저, 아두이노, 오렌지보드