반응형

초음파 센서인 HC-SR04를 이용하여 거리를 측정해보자.

이 센서는 나의 테스트 결과 1m 안의 물체에 대해서는 상당히 정확한 거리값을 구해 준다.

하지만 1m를 넘어가면 값이 별로 정확하지는 않은 것 같다.


초음파로 거리를 계산하는 원리는 다음과 같다.

초음파의 속도는 340m/s 이다.(일반적인 소리의 속도와 같다.) 초음파가 발생되어 대상물체에 부딪히게 되면 반사되어 돌아오게 된다. 이의 시간차를 계산하면 거리를 계산할 수 있다. 박쥐가 동굴에서 빛 없이도 장애물을 파악하고 피해가는 원리와 비슷하며, 번개가 치고 1초뒤 천둥소리가 들렸다면 번개가 친 곳과의 거리가 340m 인 것을 파악하는 원리와 같다고 생각하면 된다.

초음파 센서를 보면 스피커 같은 것이 2개가 달려 있는데 한 쪽은 초음파를 발생시키고 다른 한 쪽은 물체에 반사되는 초음파를 감지하는 역할을 한다. 즉, 초음파 발생 시간과 물체에 부딪혀 반사되어 오는 시간의 차를 이용하여 거리를 측정하게 되는 것이다.


위의 단자에서 Trig 가 초음파를 발생하는 신호이며, Echo가 반사되어 오는 초음파를 받는 역할을 한다. 데이터시트와 매뉴얼은 다음과 같다.


HC-SR04 데이터시트:

HCSR04.pdf


HC-SR04 매뉴얼:

HC-SR04Users_Manual.pdf



연결:

Vcc  ----  아두이노 5V

GND ----  아두이노 GND

Trig  ----  아두이노 디지털 9번핀

Echo ----  아두이노 디지털 8번핀


##소스##

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//출력핀(trig)과 입력핀(echo) 연결 설정, 다른 핀을 연결해도 됨.
int trigPin = 9;
int echoPin = 8;
 
//시리얼 속도설정, trigPin을 출력, echoPin을 입력으로 설정
void setup(){
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 
//초음파를 보낸다. 다 보내면 echo가 HIGH(신호받기) 상태로 대기
void loop(){
  float duration, distance;
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);
 
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration = pulseIn(echoPin, HIGH);
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.
  distance = ((float)(340 * duration) / 10000/ 2;
 
  //시리얼모니터에 Echo가 HIGH인 시간 및 거리를 표시해준다.
  Serial.print("Duration:");
  Serial.print(duration);
  Serial.print("\nDIstance:");
  Serial.print(distance);
  Serial.println("cm\n");
  delay(500);
}

cs



##결과##


위의 소스를 업로드 후 초음파 센서에서 7cm 거리에 물체를 두었다.

약간의 오차가 있지만 시리얼모니터상에서 거의 근접한 거리를 보여준다.



반응형

+ Recent posts