본문 바로가기
Arduino(아두이노) 키트 강좌

Step.20-Arduino Uno 로 HC SR04 초음파센서를 이용해 부저로 멜로디 만들기

by 오마이엔지니어 2015. 9. 8.
반응형

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)

브래드 보드

HC-SR04 초음파 센서

점퍼케이블
가변저항 10K (Ohm)
부저모듈

 

사용된 키트

Arduino Starter kit (클릭)

지니어스 키트 Starter Pack (클릭)

구성 배선도 

 

 

사용된 예제소스  

HC-SR04 Theremin.txt

 

사용된 라이브러리
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 의 배선입니다

손으로 가리거나 초음파를 차단하는 물체를 가져다 대면 부져모듈을 통해 소리가 나게 됩니다

차단되는 거리에 따라서 부저의 음의 높낮이가 틀려 집니다

가변저항으로는 부저모듈의 소리크기 조절이 가능합니다

 

 

프로젝트 동영상
(동영상 소리가 작습니다, 컴퓨터 볼륨을 최대로 해서 확인하세요)


HC-SR04 Theremin.txt
0.0MB
Ultrasonic.zip
0.01MB
반응형

댓글