재료

  • 저항 1개
  • 아두이노 우노 1개
  • 부저(Buzzer) 1개
  • 점프 와이어 4개
  • USB 케이블 1개
  • 트랜지스터 1개
  • 브래드 보드 1개

 이번 프로젝트는 펄스 폭 변조(PWM)를 이용해서 부저를 연주해보도록 합시다. 펄스 폭 변조(PWM)이란 펄스폭을 조절해서 전류를 조정한다는 의미인데, 앞선 프로젝트에서 아날로그 신호를 이용해 LED의 밝기를 서서히 조작했던 원리와 같습니다. 마찬가지로 아날로그 핀을 이용하여 부저가 다양한 소리를 출력할 수 있도록 해봅시다.




STEP1. 준비물

아두이노 보드, USB 케이블, 브래드 보드, 부저(Buzzer), 저항, 트랜지스터, 점프 와이어 4개



STEP2. 회로도


이전에도 설명드렸듯이 저항은 전류의 흐름을 방해하는 역할을 합니다. 그렇기 때문에, 너무 큰 저항을 사용하면 부저의 소리가 작게 출력되어 잘 들리지 않을 수 있으니 적당한 크기의 저항을 사용하도록 하세요.


STEP3. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const int Buzzer=8;
int Tone_num=10;
int tones[]={261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
 
void setup() {
  // put your setup code here, to run once:
}
 
void loop() {
  // put your main code here, to run repeatedly:
  int i;
 
  for(i=0; i<Tone_num; i++){
    tone(Buzzer, tones[i]);
    delay(500);
  }
  noTone(Buzzer);
  delay(1000);
}
cs

이번 프로젝트에서는 배열을 사용하는데, 배열을 3번 라인과 같이 선언하면 배열 선언과 동시에 각각의 항에 차례대로 값이 저장됩니다.


STEP4. 결과 확인



STEP5. 응용

회로는 그대로 사용하시고, 스케치를 다르게 작성하여 다양한 연주로 응용해보도록 합시다.

코드를 아래와 같이 수정하시면 <학교 종이 땡땡땡>으로 연주할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const int Buzzer = 8;
const int C = 261;    //도
const int D = 294;    //레
const int E = 330;    //미
const int F = 349;    //파
const int G = 392;    //솔
const int A = 440;    //라
const int B = 494;    //시
 
typedef struct  {  
  int tone;
  unsigned long delay;
} TAD; //Tone And Delay
 
TAD music[] = 
{
    {G, 100}, {G, 100}, {A, 100}, {A, 100}, {G, 100}, 
    {G, 100}, {E, 200}, {G, 100}, {G, 100}, {E, 100}, 
    {E, 100}, {D, 200}, {G, 100}, {G, 100}, {A, 100}, 
    {A, 100}, {G, 100}, {G, 100}, {E, 200}, {G, 100}, 
    {E, 100}, {D, 100}, {E, 100}, {C, 200}
};
 
int musicLen;
 
void setup() {
  musicLen = sizeof(music) / sizeof(TAD);
}
 
void loop() {
  for(int i = 0; i < musicLen; i++) {
    tone(Buzzer, music[i].tone);
    delay(music[i].delay*5);
    noTone(Buzzer);
    delay(30);
  }
  noTone(Buzzer);
  delay(1000);
}
cs


스케치를 업로드하시면 아래와 같은 결과를 확인할 수 있습니다.



이 코드의 출처는 http://code-cook.tistory.com/입니다.

댓글 0

MADE BY

김민정

사물인터넷, 아두이노