Arduino Uno 로 HC-SR04 초음파 센서를 사용해 부저로 멜로디 소리를 만들어 보는 프로젝트 입니다
HC-SR04 초음파 센서는 VCC, Trig, Echo, GND 4핀으로 구성된 초음파 원리를 이용해
거리를 측정 할 수 있는 센서입니다
측정거리는 20~5000mm 이며, 측정 유효 각도는 15도 이내 입니다
5V전원 공급후 Trig 핀을 통해 10us 의 펄스를 인가하면 센서는 8개의 40KHz 펄스를 발생시키고, 측정된 거리에 따라 150us~25ms의
펄스를 Echo 핀을 통해 출력하는 방식 입니다
사용된 부품
Arduino Uno R3 (Italy)
브래드 보드
점퍼케이블
가변저항 10K (Ohm)
부저모듈
사용된 키트
지니어스 키트 Starter Pack (클릭)
구성 배선도
사용된 예제소스
사용된 라이브러리
Ultrasonic.zip
첨부된 예제소스에서는 라이브러리를 사용하지 않았지만 라이브러리를 사용한 다양한 프로젝트가
오픈소스로 공개되고 있으므로 참고용으로
HC-SR04 초음파 센서 라이브러리를 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요
//핀 번호 선언
int analogPin = A0;
int piezoPin = 3;
int echoPin = 12;
int trigPin = 13;
//변수 선언
int volumeLevel, distance;
float duration;
int amp = 0;
void setup(){
//핀모드 선언
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(piezoPin, OUTPUT);
}
void loop(){
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance = ((float)(340 * duration) / 10000) / 2; //왕복시간을 통해 거리를 계산
int sensorReading = analogRead(analogPin);
volumeLevel = map(sensorReading, 0, 1023, 0, 255);
//음량과 음 높이를 변화시키는 함수 호출
changeVolume();
changeNote(duration, amp);
delay(100);
}
//거리에 따라 음량을 변화시키는 함수
void changeVolume() {
amp = volumeLevel / 10;
}
void changeNote(float time, int amp) {
if((distance >0) && (distance <= 5)) { //거리가 0이상 5이하면
intervals(1910);
}
else if(distance <= 10 ){ //거리가 10이하면
intervals(1703);
}
else if(distance <= 15) { //거리가 15이하면
intervals(1517);
}
else if (distance <= 20) { //거리가 20이하면
intervals(1432);
}
else if (distance <= 25) { //거리가 25이하면
intervals(1276);
}
else if (distance <= 30) { //거리가 30이하면
intervals(1137);
}
else if (distance <= 35) { //거리가 35이하면
intervals(1012);
}
else if (distance <= 40) { //거리가 40이하면
intervals(995);
}
}
//거리에 맞게 음을 출력해 주는 함수
void intervals(int scale) {
for(long i = 0; i < 1000000; i=i+2552) {
digitalWrite(piezoPin,1);
delayMicroseconds(amp);
digitalWrite(piezoPin,0);
delayMicroseconds(2*scale - amp);
}
}
주의사항
배선시 HC-SR04 핀맵에 맞게 센서의 방향을 잘 확인해야 합니다
핀맵은 VCC, Trig, Echo, GND 순 입니다
VCC-VCC, Trig-D13핀, Echo-D12핀, GND-GND 의 배선입니다
손으로 가리거나 초음파를 차단하는 물체를 가져다 대면 부져모듈을 통해 소리가 나게 됩니다
차단되는 거리에 따라서 부저의 음의 높낮이가 틀려 집니다
가변저항으로는 부저모듈의 소리크기 조절이 가능합니다
프로젝트 동영상
(동영상 소리가 작습니다, 컴퓨터 볼륨을 최대로 해서 확인하세요)
'Arduino(아두이노) 키트 강좌' 카테고리의 다른 글
Step.22-Arduino Uno 로 L9110S 듀얼 모터 드라이버를 사용해 DC 모터 구동 시키기 (0) | 2015.11.19 |
---|---|
Step.21-Arduino Uno 로 L9110S 듀얼 모터 드라이버를 사용해 2상 바이폴라 스테핑 모터 구동 시키기 (0) | 2015.11.19 |
Step.19-Arduino Uno 로 DHT11 온습도센서를 이용해 실내 온습도 1602LCD로 출력하기 (0) | 2015.06.24 |
Step.18-Arduino Uno 로 직류 DC 모터 구동 시키고, 속도 제어해 보기 (0) | 2015.06.02 |
Step.17-Arduino Uno 로 SG90 서보 모터 구동 시키기 (0) | 2015.06.02 |
댓글