컴퓨터

ARDUINO [강의 3강] 피에조 부저 (Piezo Buzzer)

조이팜 2025. 12. 18. 22:29

1. 피에조 부저란?

 

피에조 부저는 압전 효과(Piezoelectric Effect)를 이용해 소리를 내는 부품입니다. 얇은 압전 소자 판에 전기 신호를 주면 판이 수축과 팽창을 반복하며 떨립니다. 이 진동이 공기를 울려 소리가 나는 원리죠.

2. 구분: 능동(Active) vs 수동(Passive)

피에조 부저는 능동과 수동으로 나뉩니다. 아두이노 수업에서는 대부분 tone() 함수를 사용하는 수동을 사용합니다. 그리고 부품도 대부분은 수동 피에조 부저입니다.

능동과 수동의 차이는

구분
능동 부저 (Active Buzzer)
수동 부저 (Passive Buzzer)
특징
내부에 자체 발진 회로가 내장됨
내부에 발진 회로가 없음
작동
전원(5V)만 공급하면 즉시 소리가 남
주파수(PWM) 신호를 줘야 소리가 남
소리
단조로운 '삐-' 소리 (음계 조절 불가)
도레미파솔라시도 음계 표현 가능
용도
단순 경고음, 알람
멜로디 연주, 다양한 효과음
코드
digitalWrite(HIGH) 사용
tone() 함수 사용

3. 아두이노와 연결 및 사용법 (수동 부저 기준)

수동 부저를 사용하여 멜로디를 만드는 방법입니다.

연결 방법 (Wiring)

부저는 극성(+, -)이 있습니다. (다리가 긴 쪽이 + 입니다)

  • (+) 핀: 아두이노의 디지털 핀 (예: 8번)
  • (-) 핀: 아두이노의 GND
  • (선택 사항) 소리가 너무 크거나 거슬리면 100Ω~1kΩ 저항을 직렬로 연결해 볼륨을 줄일 수 있습니다.

 

 

int buzzerPin = 8; // 부저를 8번 핀에 연결

void setup() {
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  // tone(핀번호, 주파수, 지속시간)
  tone(buzzerPin, 262, 500); // 도 (C4)
  delay(500);
  tone(buzzerPin, 294, 500); // 레 (D4)
  delay(500);
  tone(buzzerPin, 330, 500); // 미 (E4)
  delay(500);
  
  noTone(buzzerPin); // 소리 끄기
  delay(1000);
}

 

능동과 수동을 구분하는 방법은 코드를 입력해서 화음 소리가 나면 수동, 안나면 능동이라고 생각하시면 됩니다.

/*
 * 주제: 변수를 활용해 '학교종' 연주하기
 * 목표: 멜로디의 순서와 박자(리듬) 개념 익히기
 */

const int BUZZER_PIN = 8; // 부저 핀

// 1. 필요한 음계만 변수로 만들기 (학교종에 나오는 음들)
int Do  = 262; // 도
int Re  = 294; // 레
int Mi  = 330; // 미
int Sol = 392; // 솔
int La  = 440; // 라

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  // === 첫 번째 소절: 학교종이 땡땡땡 (솔솔라라 솔솔미) ===
  
  // 솔, 솔, 라, 라 (짧게 4번)
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, La);  delay(500);
  tone(BUZZER_PIN, La);  delay(500);

  // 솔, 솔, 미~ (마지막 미는 길게!)
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Mi);  delay(1000); // 1초 동안 길게 (2분음표)
  
  // 소리 잠깐 끊어주기 (음이 뭉치지 않게)
  noTone(BUZZER_PIN); delay(100); 


  // === 두 번째 소절: 어서 모이자 (솔솔 미미 레) ===
  
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Mi);  delay(500);
  tone(BUZZER_PIN, Mi);  delay(500);
  
  // 레~ (길게)
  tone(BUZZER_PIN, Re);  delay(1000); // 1초 동안 길게
  
  noTone(BUZZER_PIN); delay(100);


  // === 세 번째 소절: 선생님이 우리를 (솔솔라라 솔솔미) ===
  // 첫 번째 소절과 똑같음!
  
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, La);  delay(500);
  tone(BUZZER_PIN, La);  delay(500);
  
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Mi);  delay(1000); // 길게

  noTone(BUZZER_PIN); delay(100);


  // === 네 번째 소절: 기다리신다 (솔미 레미 도) ===
  
  tone(BUZZER_PIN, Sol); delay(500);
  tone(BUZZER_PIN, Mi);  delay(500);
  tone(BUZZER_PIN, Re);  delay(500);
  tone(BUZZER_PIN, Mi);  delay(500);
  
  // 도~ (끝나는 느낌으로 아주 길게)
  tone(BUZZER_PIN, Do);  delay(1500); 

  // === 연주 끝 ===
  noTone(BUZZER_PIN); // 소리 끄기
  delay(3000);        // 3초 쉬고 다시 처음부터 반복
}

 

 

 

반응형