Arduino/피에조 부저

피에조 부저와 아두이노를 연결해서 여러 음을 출력하기

DesignatedRoom 2020. 10. 29. 17:37

부저와 아두이노의 하드웨어 연결

부저를 자세히 보면, 부저에 (+) 모양이 보인다.

이 (+)모양의 선을 아두이노의 9번핀으로 연결한다.

그 밑에 있는 검은 선은 아두이노의 GND에 연결한다.

 

부저를 통해 기본 음을 출력해보자.

음의 출력을 위해서는 주파수를 알고 있어야 한다.

소스 코드

#define   SORI_PIN  9   //  부저의 핀으로 부저의 (+)를 아두이노의 9번핀으로 연결

//  부저의 주파수로 각 각 "도레미파솔라시도" 이다.
int um[8] = {262, 294, 330, 340, 392, 440, 494, 523};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0; i < 8; i++)
  {
    tone(SORI_PIN, um[i], 200); //  해당 주파수를 200은 길이

    delay(500);

    //  noTone(8);
  }
}

 

 

소방차 사이렌을 울려보자.

소스 코드

#define   SORI_PIN  9   //  부저의 핀으로 부저의 (+)를 아두이노의 9번핀으로 연결

//  소방차 사이렌 만들기
void setup() {
  // put your setup code here, to run once:
  pinMode(SORI_PIN,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  for (int hz = 300; hz <= 750; hz++)
  {
    tone(SORI_PIN, hz);

    delay(5);
  }

  for (int hz = 750; hz >= 300; hz--)
  {
    tone(SORI_PIN, hz);

    delay(5);
  }
}

 

 

이번에는 음악을 출력해보자.

우리가 출력할 음을 하나의 배열로 저장을 한다.

소스 코드

const int BUZZER_PIN = 9; //  부저의 (+)핀을 아두이노의 9번핀에 연결

const int C = 261;  //  도
const int D = 294;  //  레
const int E = 330;  //  미
const int F = 340;  //  파
const int G = 392;  //  솔
const int A = 440;  //  라
const int B = 494;  //  시
const int HC = 523; //  도

//  음과 음의 길이를 표현하는 구조체
typedef struct 
{
  int t;            //  음
  unsigned long d;  //  음의 길이
}TAD;

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},
  {D,100},{E,100},{C,200}
};

int musicLen; //  music 배열의 길이

void setup() {
  // put your setup code here, to run once:
  musicLen = sizeof(music) / sizeof(TAD);

  
}

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0; i < musicLen; i++)
  {
    tone(BUZZER_PIN,music[i].t);

    delay(music[i].d * 5);

    delay(30);
  }
  
  //  한 곡이 끝나고 1초 쉬자.
  delay(1000);
}