피에조 스피커는 전기적 신호를 소리로 변환하는 전자 부품으로, 다양한 크기와 전압에 맞춰 사용할 수 있습니다. 피에조 효과의 원리와, 피에조 스피커를 아두이노와 연결해 간단한 멜로디 연주를 하는 방법에 대해 알아보겠습니다.
1. 피에조 스피커와 피에조 효과란?
- 피에조 효과: 특정 물질에 전기적 신호가 주어질 때 수축하거나 확장하는 특성으로, 스피커는 이 효과를 통해 공기를 진동시켜 소리를 발생시킵니다.
- 작동 원리: 피에조 스피커 내부의 얇은 판이 전기 신호에 따라 진동하면서 소리를 만듭니다. 사람의 성대나 마이크와 유사하게 공기를 진동시키는 원리입니다.
- 피에조 스피커: 전기적 신호를 이용해 소리를 내는 전자부품으로 동작하는 전압에 따라 크기가 작은 것부터 큰 것 까지 다양합니다.
2. 아두이노로 멜로디 연주하기
필요한 준비물:
- 피에조 스피커 1개
- 점퍼 와이어 2개
- 브레드보드 1개
- 아두이노 보드
연결 방법:
- 피에조 스피커의 플러스와 마이너스를 확인하여 브레드보드에 연결합니다.
- 아두이노 보드의 그라운드 핀과 스피커의 마이너스를 연결하고, 8번 핀과 스피커의 플러스를 연결합니다.
코드 작성:
- 아두이노의 tone() 함수를 이용해 멜로디를 구현합니다. tone(핀 번호, 헤르츠, 재생 시간) 구조로 사용하며, 핀 번호는 연결된 아두이노 핀을, 헤르츠는 소리의 주파수, 재생 시간은 밀리초 단위로 입력합니다.
- 예를 들어, 4옥타브 도를 1초간 소리내려면 tone(8, 262, 1000);를 사용합니다.
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
void setup(){
for(int i=0; i<8; i++){
tone(8, melody[i]);
delay(400);
noTone(8);
}
}
void loop(){
}
tone(): 피에조 스피커로 소리를 내는 함수
- 구조: tone(핀 번호, 헤르츠, 재생 시간)
- 핀 번호: 피에조 스피커가 연결된 핀 번호
- 헤르츠: 소리낼 음의 헤르츠 값
- 재생 시간: 음을 소리내고자 하는 시간. 단위는 밀리초.
- 반환 값: 없음
tone(8, 262, 1000); // 8번 핀에 연결된 피에조 스피커로 4 옥타브 도(262)를 1초간 소리낸다.
noTone(): 피에조 스피커의 소리를 끄는 함수
- 구조: noTone(핀 번호)
- 핀 번호: 피에조 스피커가 연결된 핀 번호
- 반환 값: 없음
noTone(8); // 8번 핀에 연결된 피에조 스피커의 소리를 끈다.
3. 미니 디지털 피아노 만들기
피에조 스피커와 버튼을 활용해 간단한 디지털 피아노를 만들어 볼 수 있습니다.
추가 준비물:
- 피에조 스피커 1개
- 버튼 3개
- 10k 옴 저항 3개
- 점퍼 와이어 13개
- 브레드보드 1개
- 아두이노 보드
설치 및 연결:
- 피에조 스피커와 버튼을 브레드보드에 설치합니다.
- 각 버튼을 디지털 핀 2, 3, 4번에 연결하고, 피에조 스피커와 함께 브레드보드에 연결합니다.
int pins[] = {2,3,4};
int notes[] = {262, 294, 330};
void setup(){
for(int i =0; i<3; i++){
pinMode(pins[i], INPUT);
}
}
void loop(){
for(int i=0; i<3; i++){
if(digitalRead(pins[i])== HIGH){
tone(8, notes[i], 100);
delay(100);
noTone(8);
}
}
}
- 모드 설정에 따라 버튼을 눌렀을 때만 연주하기
char data;
boolean mode;
int pins[] = {2,3,4};
int notes[] = {262, 294, 330};
void setup(){
Serial.begin(9600);
for(int i =0; i<3; i++){
pinMode(pins[i], INPUT);
}
}
void loop(){
if(Serial.available()){
data = Serial.read();
if(data == '1'){
mode = true;
}else{
mode = false;
}
Serial.println(mode);
}
if(mode == true){
for(int i=0; i<3; i++){
if(digitalRead(pins[i])== HIGH){
tone(8, notes[i], 100);
delay(100);
noTone(8);
}
}
}
}
'IT개발및프로그래밍 > 아두이노' 카테고리의 다른 글
아두이노 6: 삼색 LED 색 변경하기(버튼, 자동) (0) | 2024.10.28 |
---|---|
아두이노 5 : PWM을 이용한 LED 제어 및 버튼 활용하기 (0) | 2024.10.28 |
아두이노 4: 디지털과 아날로그 신호 (0) | 2024.10.22 |
아두이노 3: 아두이노 프로그래밍 기초 (0) | 2024.10.22 |
아두이노 2: 아두이노 준비하기 (1) | 2024.10.22 |