컴퓨터
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초 쉬고 다시 처음부터 반복
}
반응형