아두이노

아두이노 스피커 제어

기발개발 2022. 1. 9. 21:15

압전(piezo) 효과 

압전 정효과 : 압력 -> 전압발생

압전 역효과 : 전압 -> 압력변화

 

 

가청주파수

20Hz~20KHz 의 주파수로 사람이 들을 수 있는 소리의 주파수를 가청주파수라고 합니다.

20Hz이하의 주파수를 초저주파수, 20Khz 이상의 주파수를 초음파라고합니다.

단 가청주파수는 동물마다, 또 사람마다 다 다를 수 있다.

 

 

참고 : MHz, GHz 정도되면 무선통신에 사용합니다.    2.4GHz 블루투스 주파수

 

 

 

 

 

 

 

피에조 부저를 연주하려면  tone(pin번호, 주파수) ,   noTone()함수를 사용해야합니다.
ex) : tone(10, 32.7032)        // 피에조부저가 '도'로 울립니다.

      delay(1000);               //  1초 경과 

     noTone()                    //더 이상 안 울림

 

 

실습 1. 도레미파솔라시도  소리내보기

 

 

#define piezo 9

float tones[]={262,293,329,349,392,440,493,523};
void playSound(){
  int size=sizeof(tones); // 배열의 총 byte : 4byte x 8
  size=size/sizeof(float);   // 배열의 길이 
  for(int i=0; i<size ; i++){
    tone(piezo,tones[i]);
    delay(500);
  }
  noTone(piezo);
}
void setup() {
  pinMode(piezo,OUTPUT);
  playSound();

}

void loop() {
  // put your main code here, to run repeatedly:

}

 

 

 

 

실습2. 학교종이 땡땡땡


int do1=1047;
int re=1175;
int mi=1319;
int fa=1397;
int sol=1568;
int ra=1760;
int si=1976;


float musicData[]={sol,sol,ra,ra,sol,sol,mi,  sol,sol,mi,mi,re
                ,sol,sol,ra,ra,sol,sol,mi,   sol,mi,re,mi,do1};
int delayTime[]= {400,400,400,400,400,400,800,    400,400,400,400,800
                ,400,400,400,400,400,400,800,        400,400,400,400,800};

를 이용해서   학교종이 땡땡땡을 연주해보세요.

더보기
#define piezo 9
int do1=1047;
int re=1175;
int mi=1319;
int fa=1397;
int sol=1568;
int ra=1760;
int si=1976;
float musicData[]={sol,sol,ra,ra,sol,sol,mi,  sol,sol,mi,mi,re
                ,sol,sol,ra,ra,sol,sol,mi,   sol,mi,re,mi,do1};
int delayTime[]= {400,400,400,400,400,400,800,    400,400,400,400,800
                ,400,400,400,400,400,400,800,        400,400,400,400,800};
void playSound(){
  int size=sizeof(musicData);
  size=size/sizeof(float);   
  for(int i=0; i<size ; i++){
    tone(piezo,musicData[i]);
    delay(delayTime[i]);
  }
  noTone(piezo);
}
void setup() {
  pinMode(piezo,OUTPUT);
  playSound();

}

void loop() {
  // put your main code here, to run repeatedly:

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

실습3. 원하는 음악 연주해보기  

 

구글에 동요를 검색해보시고 원하는 음악을 만들어보세요.

----------------------------------------------------------------------------------------------------

동요 외 음악 구현해보기.

https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody

 

Play a Melody using the tone() function

Open-source electronic prototyping platform enabling users to create interactive electronic objects.

www.arduino.cc

에서 음계 복사.   

(피에조부저 특성상 음이 울리기 때문에 고음에서 해야 명확하게 들립니다.

원래음보다 2~3옥타브 이상의 음을 사용해 작성해보세요)

 

 

 

음표.

 

 

음 길이 구하기
//기본 음표
#define n1 4                                  //온음표
#define n2 2                                  //2분음표
#define n4 1
#define n8 0.5
#define n16 0.25
#define n32 0.125

//점음표 

#define n2s 3                                    //점2분음표
#define n4s 1.5                                 //점4분음표
#define n4ss 1.75                               //점점2분4분음표
#define n8s 0.75                                 //점8분음표

//셋잇단음표
#define n4t 0.66 
#define n8t 0.333
#define n16t 0.165

 

템포 구하기

의미 : 1분에 4분음표 100개 연주되는 속도

1분 : 60000ms    

60000ms 동안 4분음표 100개 연주

4분음표 1개 길이= 60000/100=600

#define tempo 600

 

※ 실제 음 길이 

4분음표 :   n4*tempo

8분음표 :   n8*tempo

 

 

정답 : 

더보기
#define B0  31
#define C1  33
#define CS1 35
#define D1  37
#define DS1 39
#define E1  41
#define F1  44
#define FS1 46
#define G1  49
#define GS1 52
#define A1  55
#define AS1 58
#define B1  62
#define C2  65
#define CS2 69
#define D2  73
#define DS2 78
#define E2  82
#define F2  87
#define FS2 93
#define G2  98
#define GS2 104
#define A2  110
#define AS2 117
#define B2  123
#define C3  131
#define CS3 139
#define D3  147
#define DS3 156
#define E3  165
#define F3  175
#define FS3 185
#define G3  196
#define GS3 208
#define A3  220
#define AS3 233
#define B3  247
#define C4  262
#define CS4 277
#define D4  294
#define DS4 311
#define E4  330
#define F4  349
#define FS4 370
#define G4  392
#define GS4 415
#define A4  440
#define AS4 466
#define B4  494
#define C5  523
#define CS5 554
#define D5  587
#define DS5 622
#define E5  659
#define F5  698
#define FS5 740
#define G5  784
#define GS5 831
#define A5  880
#define AS5 932
#define B5  988
#define C6  1047
#define CS6 1109
#define D6  1175
#define DS6 1245
#define E6  1319
#define F6  1397
#define FS6 1480
#define G6  1568
#define GS6 1661
#define A6  1760
#define AS6 1865
#define B6  1976
#define C7  2093
#define CS7 2217
#define D7  2349
#define DS7 2489
#define E7  2637
#define F7  2794
#define FS7 2960
#define G7  3136
#define GS7 3322
#define A7  3520
#define AS7 3729
#define B7  3951
#define C8  4186
#define CS8 4435
#define D8  4699
#define DS8 49784978



//계이름     내부적으로 A0~A5 는 14~19였는데 아날로그핀 사용은 이제 14 15로 직접 설정해주자 
//템포   4분음표가 1분에 몇개 있냐 
//4분음표=100  ==> 1분에 4분음표 100개 
//1분은 60000ms,  60000/100=600  
//4분음표=100 인 악보에서의 tempo는 600
// n4 * tempo 하면 4분음표 1개만큼의 길이 
#define tempo 600
//기본 음표
#define n1 4
#define n2 2
#define n4 1
#define n8 0.5
#define n16 0.25
#define n32 0.125
#define n64 0.0625
//점음표  s는 점5분표,  ss는 점점5분표, t는 3ㅂ
#define n2s 3
#define n4s 1.5
#define n4ss 1.75
#define n8s 0.75

#define n4t 0.66
#define n8t 0.333
#define n16t 0.165

#define piezo 9

float gye[]={AS5,G6,F6,G6,F6,DS6,AS5,G6,C6,D6,C6,AS5,C6,C7,G6,AS6,FS6,G6,F6,G6,D6,DS6,C6,AS5,D7,C7,AS6,GS6,G6,GS6,C6,D6,DS6};
float note[]={n8,n4s+n8,n8,n8,n4s,n4,n8,n4,n32,n64,n64,n64,n64,n4,n8,n4s,n4,n8,n4s,n4,n8,n4s,n4s,n8,n8,n8,n16,n16,n16,n16,n16,n16,n4s};
void setup() {
 int size=sizeof(gye)/sizeof(float);
  for(int i=0;i<size;i++){
    if(gye[i]!=size-1){
      if(gye[i]==gye[i+1]){     //다음 음이랑 같은 계이름일 경우 조금 쉬었다가 울리게
         tone(piezo,gye[i]);
        delay(tempo*note[i]-50);
        noTone(piezo);
        delay(50);
      }else{                           //아니면 그냥 울리게
         tone(piezo,gye[i]);
        delay(tempo*note[i]);
        noTone(piezo);
      }
    }else if(gye[i]==size-1){  //마지막도 그냥 울리게
      tone(piezo,gye[i]);
        delay(tempo*note[i]);
        noTone(piezo);
    }
}
}
void loop() {
  // put your main code here, to run repeatedly:

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

실습: 스위치를 이용해서 피아노 만들어 보기 

--하고싶으신분만 해보세요--