-
아두이노 | 피에조 부저Technology/Arduino 2023. 11. 3. 18:00
1. 피에조 부저
압전 효과(piezoelectric effect)는 수정이나 세라믹 같은 결정체에 압력을 가했을 때 전압이 발생하는 현상이다. 반대로 결정체에 전압을 가하면 물리적인 변형을 일으킬 수 있는데, 이를 역압전 효과(inverse piezoelectric effect)라고 한다. 결정체에 전압를 흘려주면 역압전효과를 이용해 빠르게 진동하는 구동기를 만들 수 있다.
피에조 부저는 역압전 효과를 이용해 소리를 발생시키는 소자이다. 결정체에 전압을 가해 결정체와 결합된 얇은 금속판을 진동시켜 소리를 발생시킨다. 아두이노 플랫폼에서 자주 사용하는 피에조 부저에는 사전에 설정된 주파수의 소리만 낼 수 있는 능동형(active type) 부저와 특정 주파수 신호를 입력하여 해당 주파수에 해당하는 소리를 내는 수동형(passive type) 부저가 있다. 능동형 부저와 수동형 부저는 아래 링크로 접속하면 구매할 수 있다.
2. 제어 방법
능동형 부저는 일정값 이상의 전압만 가해주면 사전에 설정된 주파수의 소리를 낼 수 있지만, 수동형 부저를 동작시키기 위해서는 금속판이 진동할 수 있도록 사각파 형태의 전압을 가하는 알고리즘을 작성해야 한다. 아두이노 플랫폼에서 수동형 부저를 동작시킬 수 있도록 사각파 형태의 전압을 생성하는 함수를 지원하고 있어, 사용자가 수동형 부저를 동작시키기 위한 알고리즘을 직접 구현할 필요가 없다. 아래 제시된 표에서 음계에 해당하는 주파수를 아두이노 플랫폼에서 제공하는 함수에 입력하면, 수동형 부저를 해당 음계로 동작시킬 수 있다.
옥타브별 주파수(Hz) 옥타브 1 2 3 4 5 6 7 8 C(도) 33 65 131 262 523 1047 2093 4186 C# 35 69 139 277 554 1109 2217 4335 D(레) 37 73 147 294 587 1175 2349 4699 D# 39 78 156 311 622 1245 2489 4978 E(미) 41 82 165 330 659 1319 2637 5274 F(파) 44 87 175 349 698 1397 2794 5588 F# 46 93 185 370 740 1480 2960 5920 G(솔) 49 98 196 392 784 1568 3136 6272 G# 52 104 208 415 8311 1661 3322 6645 A(라) 55 110 220 440 880 1760 3520 7040 A# 58 117 233 466 932 1865 3729 7459 B(시) 62 123 247 494 988 1976 3951 7902 3. 예제
3.1. 회로 구성
아두이노 플랫폼에서 주로 사용하는 피에조 부저는 일반적으로 극성을 가지고 있다. 피에조 부저의 윗면이나 측면을 살펴보면 어느 단자가 양극인지 표시되어 있다.
3.2. 프로그램 작성 - 능동형 부저
void setup() { pinMode(11, OUTPUT); // 디지털 11번 핀을 출력(OUTPUT) 모드로 설정 } void loop() { digitalWrite(11, HIGH); // 디지털 11번 핀에 디지털 신호 HIGH 출력 delay(1000); // 1000 ms 대기 digitalWrite(11, LOw); // 디지털 11번 핀에 디지털 신호 LOW 출력 delay(1000); // 1000 ms 대기 }
3.3. 프로그램 작성 - 수동형 부저
void setup() { pinMode(11, OUTPUT); // 디지털 11번 핀을 출력(OUTPUT) 모드로 설정 } void loop() { tone(11, 523); // 디지털 11번 핀에 주파수 523 Hz인 디지털 신호 출력 delay(1000); // 1000 ms 대기 tone(11, 659); // 디지털 11번 핀에 주파수 659 Hz인 디지털 신호 출력 delay(1000); // 1000 ms 대기 noTone(11); // 디지털 11번 핀에 디지털 신호 미출력 delay(1000); // 1000 ms 대기 tone(11, 523, 1000); // 디지털 11번 핀에 주파수 523 Hz인 디지털 신호를 1000 ms동안 출력 delay(1000); // 1000 ms 대기 tone(11, 659, 1000); // 디지털 11번 핀에 주파수 659 Hz인 디지털 신호를 1000 ms동안 출력 delay(1000); // 1000 ms 대기 noTone(11); // 디지털 11번 핀에 디지털 신호 미출력 delay(1000); // 1000 ms 대기 int Duration = 1000; // 정수형 변수 정의 후 1000으로 초기화 // 디지털 11번 핀에 주파수 523 Hz인 디지털 신호를 Duration 시간동안 출력 tone(11, 523, Duration); delay(Duration*1.3); // Duration의 1.3배 시간만큼 대기 // 디지털 11번 핀에 주파수 659 Hz인 디지털 신호를 Duration 시간동안 출력 tone(11, 659, Duration); delay(Duration*1.3); // Duration의 1.3배 시간만큼 대기 noTone(11); // 디지털 11번 핀에 디지털 신호 미출력 delay(1000); // 1000 ms 대기 }
[함께 읽으면 좋은 페이지]
참고문헌
- 최훈. (2022). 팅커캐드 & 아두이노. 길벗캠퍼스.
- SM. (2015). Play a Melody using the tone() function. Arduino. https://docs.arduino.cc/built-in-examples/digital/toneMelody. 2023.10.20.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 프로젝트 | 젤다의 전설 시간의 오카리나 (0) 2023.11.17 아두이노 프로젝트 | 디지털 피아노 (0) 2023.11.10 아두이노 프로젝트 | 밝기 조절이 가능한 스탠드 (0) 2023.09.01 아두이노 | 가변저항 (0) 2023.08.25 아두이노 아날로그 신호 출력: PWM (0) 2023.08.18