반응형
오늘은 초음파센서를 활용하여 부저를 제어하는 방법에 대해 알아보겠습니다.
초음파센서로 거리를 측정하여 거리에 따라 다른 음이 나오도록 부저의 주파수를 조정하도록 하겠습니다.
준비물
- 아두이노 우노
- 수동형 부저
- 브레드 보드
- 점퍼선
- 초음파 센서
1) 초음파센서로 부저 제어하기
회로도
소스코드
#define Trig 5 //Trig에 연결하는 핀 설정
#define Echo 6 //Echo에 연결하는 핀 설정
#define Buzz 11 //Buzz에 연결하는 핀 설정
//아래는 부저의 음계를 설정하는 코드
#define Do 261 // 도
#define Re 293 // 레
#define Mi 329 // 미
#define Pa 349 // 파
#define Sol 392 // 솔
#define Ra 440 // 라
#define Si 493 // 시
#define Do2 523 // 도
void setup() {
Serial.begin(9600); //시리얼 통신 시작
pinMode(Trig, OUTPUT); //Trig 핀은 초음파를 쏘아내는 핀이므로 출력 핀으로 설정
pinMode(Echo, INPUT); //Echo 핀은 초음파를 받아들이는 핀이므로 입력 핀으로 설정
pinMode(Buzz, OUTPUT); //Buzz 핀은 출력하는 핀으로 설정
}
void loop()
{
long duration, distance;
digitalWrite(Trig, LOW); //Trig 핀을 초기화합니다.
delayMicroseconds(2); //2마이크로초만큼 대기합니다.
digitalWrite(Trig, HIGH); //Trig핀을 이용해 초음파를 쏩니다.
delayMicroseconds(5); //5마이크로초만큼 대기합니다.
digitalWrite(Trig, LOW); //Trig 핀을 초기화합니다.
//초음파가 반사되어 돌아온 시간을 변수 duration에 저장합니다.
//이때 시간의 단위는 마이크로초(ms)입니다.
duration = pulseIn (Echo, HIGH);
//(물체까지의 거리) = (초음파가 반사되어 돌아온 시간) x 340 / 2 / 10,000
//음파의 속력은 340m/s = 34,000cm/s
//물체까지의 거리는 왕복값이 아니라 편도 값으로 계산해야하므로 2를 나눠줍니다.
//마이크로초를 초(s)로 변환하기 위해 10,000을 나눠줍니다.
//1초는 1,000,000마이크로초입니다.
//아래 코드는 cm 기준으로 작성한 코드입니다.
distance = duration * 17 / 1000;
//시리얼모니터에 distance 값을 출력합니다.
Serial.print("Distance : ");
Serial.print(distance);
Serial.println("cm");
//0.3초의 딜레이를 줍니다.
//아두이노의 delay()함수는 밀리세컨드(ms) 기준이므로 1초의 딜레이를 주기 위해서는 1,000의 값을 줘야합니다.
delay(300);
//거리에 따라 부저의 음계를 설정합니다.
if (distance >= 1 && distance <= 5) {
tone(Buzz, Do, 250);
delay(500);
noTone(Buzz); //noTone()함수를 이용해 부저를 끕니다.
}
else if (distance >= 7 && distance <= 9) {
tone(Buzz, Re, 250);
delay(500);
noTone(Buzz);
}
else if (distance >= 10 && distance <= 13) {
tone(Buzz, Mi, 250);
delay(500);
noTone(Buzz);
}
else if (distance >= 14 && distance <= 16) {
tone(Buzz, Pa, 250);
delay(500);
noTone(Buzz);
}
else if (distance >= 17 && distance <= 19) {
tone(Buzz, Sol, 250);
delay(500);
noTone(Buzz);
}
else if (distance >= 20 && distance <= 22) {
tone(Buzz, Ra, 250);
delay(500);
noTone(Buzz);
}
else if (distance >= 23 && distance <= 26) {
tone(Buzz, Si, 250);
delay(500);
noTone(Buzz);
}
else if (distance >= 27 && distance <= 29) {
tone(Buzz, Do2, 250);
delay(500);
noTone(Buzz);
}
//조건이 충족되지 않는다면 아래 명령어를 실행합니다.
else {
noTone(Buzz);
}
}
-tone(핀번호, 소리주파수, 소리지속시간)함수를 이용해 음을 울립니다.
-지속시간은 ms기준입니다.
-noTone() : 부저 소리 끄기
반응형
'피지컬컴퓨팅 > 아두이노' 카테고리의 다른 글
저항없이 버튼 활용하기(LED, 모터 제어하기-선풍기 모듈) (0) | 2024.03.17 |
---|---|
푸시 버튼 활용하기(LED, 모터 제어하기-선풍기 모듈) (0) | 2024.03.15 |
부저 활용하기(버튼으로 제어-버튼 피아노) (0) | 2024.03.15 |
서보 모터 제어하기(가변저항 이용) (0) | 2024.03.11 |
아날로그 핀 사용하기(가변저항 이용) (0) | 2024.03.11 |