아두이노에서는 피에조부저를 이용해서 간단하게 소리를 낼 수가 있다.
이를 이용하여 간단한 멜로디를 만들어보자.
피에조 부저의 모습
아두이노와 피에조 부저의 연결은 다음과 같다.
피에조 부저는 극성이 있다. 핀이 긴쪽이 + 이고 짧은쪽이 - 이다.
짧은쪽은 GND에 긴쪽은 아두이노 디지털 단자에 연결해 준다.
##소스 1##
BEEP 음을 1초 마다 내는 소스, tone() 의 파라미터를 조절하면 다양한 음을 만들 수 있다.
1 2 3 4 5 6 7 8 9 | int speakerpin = 12; //스피커가 연결된 디지털핀 설정 void setup() { } void loop() { tone(speakerpin,500,1000); //500: 음의 높낮이(주파수), 1000: 음의 지속시간(1초) delay(2000); } | cs |
##소스 2##
도레미파솔라시도를 연주한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int speakerpin = 12; //스피커가 연결된 디지털핀 설정 int note[] = {2093,2349,2637,2793,3136,3520,3951,4186}; //도레미파솔라시도 void setup() { int elementCount = sizeof(note) / sizeof(int); for (int i=0; i < elementCount; i++) //note를 play { tone(speakerpin,note[i],500); delay(750); } } void loop() { } | cs |
##결과 2##
위와 같이 도레미파솔라시도를 연주할 경우 각각의 음계의 tone값을 적어주어야 한다. 만약 tone값을 모를 경우 멜로디를 만들기가 아주 힘들다. 이런 경우 사용할 수 있도록 tone값에 대해서 미리 정의해 놓은 pitches.h 라는 헤더파일을 만들어 이용하면 손쉽게 멜로디를 만들 수 있다.
※ 참조: https://www.arduino.cc/en/Tutorial/Tone
아래의 소스를 pitches.h 라는 이름으로 프로그램과 같은 폴더에 저장해 놓고 프로그램에서 include하여 사용하면 된다.
## pitches.h ##
아래의 소스를 pitches.h 라는 이름으로 프로그램과 같은 폴더에 저장
/*************************************************
* Public Constants
*************************************************/
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
##소스 3##
pitches.h를 이용하여 '학교종이 떙땡땡' 노래를 연주한다.
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 | #include "pitches.h" int speakerpin = 12; //스피커가 연결된 디지털핀 설정 //음계 데이터 (24개) int melody[] = {NOTE_G7,NOTE_G7,NOTE_A7,NOTE_A7,NOTE_G7, NOTE_G7,NOTE_E7,NOTE_G7,NOTE_G7,NOTE_E7, NOTE_E7,NOTE_D7,NOTE_G7,NOTE_G7,NOTE_A7, NOTE_A7,NOTE_G7,NOTE_G7,NOTE_E7,NOTE_G7, NOTE_E7,NOTE_D7,NOTE_E7,NOTE_C7}; //음의길이, 4:4분음표, 2:2분음표 int noteDurations[] = {4,4,4,4,4,4,2,4,4,4,4,1,4,4,4,4,4,4,2,4,4,4,4,1}; void setup() { for (int thisNote = 0; thisNote < 24; thisNote++) { int noteDuration = 1000 / noteDurations[thisNote]; tone(speakerpin, melody[thisNote], noteDuration); //소리를 낸다. int pauseBetweenNotes = noteDuration * 1.30; //delay 계산식 delay(pauseBetweenNotes); //delay noTone(speakerpin); //대상핀 출력 중단 } } void loop() { } | cs |
'아두이노' 카테고리의 다른 글
[아두이노] 서보모터(Servo Motor)의 제어 (0) | 2015.09.04 |
---|---|
[아두이노] 불꽃감지 센서(포토 트랜지스터, Photo Transistor)의 사용 (0) | 2015.09.04 |
[아두이노] 빛의 감지, 포토레지스터(Photo Resistor)의 사용 (0) | 2015.09.03 |
[아두이노] 적외선(IR)센서의 사용 - VS1838B (4) | 2015.09.03 |
[아두이노] 초음파센서(HC-SR04)를 이용한 거리측정 (8) | 2015.08.31 |