본문 바로가기
아두이노 사운드

[사운드/수동 부저] 스피커 음을 생성하여 들어보자(passive buzzer)

by 작동미학 2015. 4. 9.
반응형

Passive Buzzer를 통해 음을 연주해본다.

 

▶ 이 가이드를 따라하면

- Buzzer의 원리를 알 수 있다

- 스타워즈를 연주할 수 있다.

 

▶ 먼저 읽으면 좋은 글

- 아두이노 기초 : http://bbangpan.tistory.com/1

 

▶ 부품 설명 및 회로 구성

Buzzer는 Active buzzer와 Passive buzzer가 있다. Active buzzer는 전원을 연결하면 스스로 소리를 내는 부품인데(삑~~하는), Passive buzzer는 주파수를 만들어 전류를 흘려주면 그 주파수 대로 음을 낸다.

스피커의 원리는 알려져있다시피, 전자석을 활용해 진동판을 앞뒤로 흔들어서 그 흔드는 주파수에 맞는 소리를 내도록 되어 있는데, 아두이노에서도 역시 디지털핀의 전압을 짧은 시간안에 계속 바꾸어가며 이러한 소리를 낼 수 있는 것이다.

그러면 직접 이 주파수를 만들 수 있을까? 그럴 수 있다. 예컨데 8번핀의 신호를 빠르게 HIGH, LOW를 바꿔주면 된다. 그런데 이렇게 하면 너무 번거로우므로 arduino에서 제공하는 기본 함수는 tone함수를 이용해보자.

<Keyes passive buzzer 모듈 / 상기와 같이 연결한다(+/-/S를 5V/GND/D8에 연결)>

<스피커 원리/sciencegood.com 발췌>

 

▶ 소스 코드 입력 및 구동

별도 라이브러리는 없고 본 소스는 http://www.instructables.com/id/How-to-easily-play-music-with-buzzer-on-arduino-Th/ 에서 발췌했다.

http://tny.cz/e525c1b2 에 가보면 소스를 복사할 수 있다. 아래 참조한다. 여기서는 D8에 buzzer의 S가 연결되었음을 가정한다.

친절하게도 스타워즈의 영화음악을 들어볼 수 있다. 계이름을 바꾸어 코딩하면 다양한 음악을 넣을 수 있다.

 

아두이노의 tone(pin, note, duration)함수는 특정 핀(pin)에 특정 주파수(note)로 어떤 시간(duration)동안 소리를 내도록 하는 것이 핵심이니 참고하기 바란다.

 

// http://www.instructables.com/id/How-to-easily-play-music-with-buzzer-on-arduino-Th/

//

// http://tny.cz/e525c1b2

//

// NB: ALL NOTES DEFINED WITH STANDARD ENGLISH NAMES, EXCEPT FROM "A"

//THAT IS CALLED WITH THE ITALIAN NAME "LA" BECAUSE A0,A1...ARE THE ANALOG PINS ON ARDUINO.

// (Ab IS CALLED Ab AND NOT LAb)

// 다양한 음을 정의하고 있다

#define    C0 16.35

#define    Db0    17.32

#define    D0    18.35

#define    Eb0    19.45

#define    E0    20.60

#define    F0    21.83

#define    Gb0    23.12

#define    G0    24.50

#define    Ab0    25.96

#define    LA0    27.50

#define    Bb0    29.14

#define    B0    30.87

#define    C1    32.70

#define    Db1    34.65

#define    D1    36.71

#define    Eb1    38.89

#define    E1    41.20

#define    F1    43.65

#define    Gb1    46.25

#define    G1    49.00

#define    Ab1    51.91

#define    LA1    55.00

#define    Bb1    58.27

#define    B1    61.74

#define    C2    65.41

#define    Db2    69.30

#define    D2    73.42

#define    Eb2    77.78

#define    E2    82.41

#define    F2    87.31

#define    Gb2    92.50

#define    G2    98.00

#define    Ab2    103.83

#define    LA2    110.00

#define    Bb2    116.54

#define    B2    123.47

#define    C3    130.81

#define    Db3    138.59

#define    D3    146.83

#define    Eb3    155.56

#define    E3    164.81

#define    F3    174.61

#define    Gb3    185.00

#define    G3    196.00

#define    Ab3    207.65

#define    LA3    220.00

#define    Bb3    233.08

#define    B3    246.94

#define    C4    261.63

#define    Db4    277.18

#define    D4    293.66

#define    Eb4    311.13

#define    E4    329.63

#define    F4    349.23

#define    Gb4    369.99

#define    G4    392.00

#define    Ab4    415.30

#define    LA4    440.00

#define    Bb4    466.16

#define    B4    493.88

#define    C5    523.25

#define    Db5    554.37

#define    D5    587.33

#define    Eb5    622.25

#define    E5    659.26

#define    F5    698.46

#define    Gb5    739.99

#define    G5    783.99

#define    Ab5    830.61

#define    LA5    880.00

#define    Bb5    932.33

#define    B5    987.77

#define    C6    1046.50

#define    Db6    1108.73

#define    D6    1174.66

#define    Eb6    1244.51

#define    E6    1318.51

#define    F6    1396.91

#define    Gb6    1479.98

#define    G6    1567.98

#define    Ab6    1661.22

#define    LA6    1760.00

#define    Bb6    1864.66

#define    B6    1975.53

#define    C7    2093.00

#define    Db7    2217.46

#define    D7    2349.32

#define    Eb7    2489.02

#define    E7    2637.02

#define    F7    2793.83

#define    Gb7    2959.96

#define    G7    3135.96

#define    Ab7    3322.44

#define    LA7    3520.01

#define    Bb7    3729.31

#define    B7    3951.07

#define    C8    4186.01

#define    Db8    4434.92

#define    D8    4698.64

#define    Eb8    4978.03

// DURATION OF THE NOTES (다양한 음 지속 시간을 정의하고 있다. )

#define BPM 120 // you can change this value changing all the others

#define H 2*Q //half 2/4

#define Q 60000/BPM //quarter 1/4

#define E Q/2 //eighth 1/8

#define S Q/4 // sixteenth 1/16

#define W 4*Q // whole 4/4

 

void setup() {

//pinMode(11, OUTPUT);

//pinMode(13, OUTPUT);

//digitalWrite(13,LOW);

}

 

// the loop routine runs over and over again forever:

void loop() {

//tone(pin, note, duration)

tone(8,LA3,Q);

delay(1+Q); //delay duration should always be 1 ms more than the note in order to separate them.

tone(8,LA3,Q);

delay(1+Q);

tone(8,LA3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

 

tone(8,LA3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,H);

delay(1+H);

 

tone(8,E4,Q);

delay(1+Q);

tone(8,E4,Q);

delay(1+Q);

tone(8,E4,Q);

delay(1+Q);

tone(8,F4,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

 

tone(8,Ab3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,H);

delay(1+H);

 

tone(8,LA4,Q);

delay(1+Q);

tone(8,LA3,E+S);

delay(1+E+S);

tone(8,LA3,S);

delay(1+S);

tone(8,LA4,Q);

delay(1+Q);

tone(8,Ab4,E+S);

delay(1+E+S);

tone(8,G4,S);

delay(1+S);

 

tone(8,Gb4,S);

delay(1+S);

tone(8,E4,S);

delay(1+S);

tone(8,F4,E);

delay(1+E);

delay(1+E);//PAUSE

tone(8,Bb3,E);

delay(1+E);

tone(8,Eb4,Q);

delay(1+Q);

tone(8,D4,E+S);

delay(1+E+S);

tone(8,Db4,S);

delay(1+S);

 

tone(8,C4,S);

delay(1+S);

tone(8,B3,S);

delay(1+S);

tone(8,C4,E);

delay(1+E);

delay(1+E);//PAUSE QUASI FINE RIGA

tone(8,F3,E);

delay(1+E);

tone(8,Ab3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,LA3,S);

delay(1+S);

 

tone(8,C4,Q);

delay(1+Q);

tone(8,LA3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,E4,H);

delay(1+H);

 

tone(8,LA4,Q);

delay(1+Q);

tone(8,LA3,E+S);

delay(1+E+S);

tone(8,LA3,S);

delay(1+S);

tone(8,LA4,Q);

delay(1+Q);

tone(8,Ab4,E+S);

delay(1+E+S);

tone(8,G4,S);

delay(1+S);

 

tone(8,Gb4,S);

delay(1+S);

tone(8,E4,S);

delay(1+S);

tone(8,F4,E);

delay(1+E);

delay(1+E);//PAUSE

tone(8,Bb3,E);

delay(1+E);

tone(8,Eb4,Q);

delay(1+Q);

tone(8,D4,E+S);

delay(1+E+S);

tone(8,Db4,S);

delay(1+S);

 

tone(8,C4,S);

delay(1+S);

tone(8,B3,S);

delay(1+S);

tone(8,C4,E);

delay(1+E);

delay(1+E);//PAUSE QUASI FINE RIGA

tone(8,F3,E);

delay(1+E);

tone(8,Ab3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

 

tone(8,LA3,Q);

delay(1+Q);

tone(8,F3,E+S);

delay(1+E+S);

tone(8,C4,S);

delay(1+S);

tone(8,LA3,H);

delay(1+H);

 

delay(2*H);

 

}

 

▶ 구매 가이드

Passive buzzer : http://www.aliexpress.com/premium/keyes-buzzer-arduino.html?ltype=wholesale&SearchText=keyes+buzzer+arduino

 

강의 키워드

아두이노 사운드, passive buzzer, 수동 부저, active buzzer, 스타워즈 음악, starwars Arduino

 

반응형