본문 바로가기
IoT 디바이스 활용/Arduino

Arduino - 피에조 부저

by cooluk 2020. 10. 15.

피에조 부저


피에조 부저

부저

  • Active Buzzer
    • 회로 내장형
    • 전원만 인가되면 단일음
  • Passive Buzzer
    • 회로 내장하지 않음
    • 필요한 음역대의 주파수(펄스)를 제공하여 멜로디 연주 가능
    • PWM 이용

회로구성

image-20200914152443597

능동 부저

int buzzerPin = 5;
void setup()
{
    pinMode(buzzerPin, OUTPUT);
}
void loop() {
    digitalWrite(buzzerPin,HIGH);
    delay(50);
    digitalWrite(buzzerPin,LOW);
    delay(400);
}

수동 부저

Passive Buzzer

  • 주파수

    • HIGH/LOW 신호의 비율
    • 신호음의 음 또는 음높이 결정
    • Hz 단위

제어 함수

  • tone(핀번호, 주파수 [, 기간])
    • 피에조 스피커에 특정 주파수를 발생
      • 주파수 : unsigned int
      • 기간 : unsinged long
    • tone(9, 2000)
      • 2000 Hz 주파수 소리를 냄
    • tone(9, 2000, 3000)
      • 9000 Hz 주파수 소리를 3초간 냄
  • noTone(핀번호)
    • 피에조 스피커에 주파수 발생 중지
int speakerPin = 5;
void setup()
{
}
void loop()
{
    tone(speakerPin, 5000, 1000); // 비동기 함수
    delay(2000); // 1초 동안 소리, 1초 동안 소리X
}

도레미파솔라시도 연주하기

int speakerPin = 5;
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
void setup()
{
    for (int i = 0; i < 8; i++)
    {
        tone(speakerPin, melody[i], 250);
        delay(400);
        noTone(speakerPin);
    }
}
void loop()
{
}

int speakerPin = 5;
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
void setup()
{
    pinMode(speakerPin, OUTPUT);
}
void loop()
{
    // 도파도솔
    tone(speakerPin, melody[0], 230);
    delay(250);
    tone(speakerPin, melody[3], 230);
    delay(250);
    tone(speakerPin, melody[0], 230);
    delay(250);
    tone(speakerPin, melody[4], 230);
    delay(250);
    delay(2000);
}

피에조 부저로 연주하기

#define C 262
#define D 294
#define E 330
#define _F 349
#define G 392
#define A 440
#define B 494
#define H 523
int pzoPin = 5;
int tempo = 200; // 음 재생 시간 설정
int notes[25] = {
    G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C};
void setup()
{
    pinMode(pzoPin, OUTPUT);
}
void loop()
{
    for (int i = 0; i < 12; i++)
    {
        tone(pzoPin, notes[i], tempo);
        delay(300);
    }
    delay(100);
    for (int i = 12; i < 25; i++)
    {
        tone(pzoPin, notes[i], tempo);
        delay(300);
    }
}

멜로디 만들기

  • 음계별 주파수

    C:\Program Files (x86)\Arduino\examples\02.Digital\toneMelody\pitches.h

    <문서>\Arduino\libraries\mylib\pitches.h로 복사

#include <pitches.h>
int speakerPin = 5;
int melody[] = {
    NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4,
};
// 음표의 길이 4 = 4분음표(한박자), 8 = 8분 음표(반 박자)
int noteDurations[] = {4, 8, 8, 4, 4, 4, 4, 4};
void setup()
{
    for (int thisNote = 0; thisNote < 8; thisNote++)
    {
        int noteDuration = 1000 / noteDurations[thisNote];
        tone(speakerPin, melody[thisNote], noteDuration);
        // 음을 구별하기 위해 그 사이에 최소한의 간격을 둔다.
        int pauseBetweenNotes = noteDuration * 1.30;
        delay(pauseBetweenNotes);
        noTone(speakerPin); // 멜로디 멈춤
    }
}
void loop() {}

'IoT 디바이스 활용 > Arduino' 카테고리의 다른 글

Arduino - 가변 저항 (PWMLed.h, AnalogSensor.h)  (0) 2020.10.15
Arduino - 버튼 (Led.h, Button.h)  (0) 2020.10.15
Arduino - 16x2 LCD  (0) 2020.10.15
Arduino - 3색 LED  (0) 2020.10.15
Arduino - LED (TrafficLight.h)  (0) 2020.10.15

댓글