본문 바로가기

아두이노로 장난하기

아두이노로 거리(초음파 센서)를 측정하기

아두이노 초음파센서




 

 

초음파 센서는 약 20kHz이상의 높음 주파수의 음파가 물체에 부딪힌 다음 반사파가 되어 돌아오는 시간을 측정하여 물체까지의 거리를 계산합니다.

 

초음파센서 원리

 

 

초음파 센서에는 4개의 핀이 있는데 왼쪽부터 VCC, Trig, Echo, GND가 있습니다. Trig는 VCC에 신호가 들어오면 초음파을 발신합니다. 발신된 초음파가 장애물이나 벽에 부딪혀 다시 돌아오게 됩니다. 이 신호를 Echo가 받아들입니다. Trig를 통해 초음파는 340m/s의 속도로 발신됩니다.

 

 

triger 핀에 10us 정도의 High 신호를 주면 초음파센서는 40khz 펄스를 자동적으로 8번을 발생시킵니다. 펄스를 발생시킨 직후에 echo 핀은 high 되고 반사된 초음파가 감지 되었을때 echo 핀이 low 가 됩니다. 이 echo 핀이 high 였다가 low 가 되는데 걸리는 시간을 측정하여서 그 시간을 초음파의 속도/2(즉 58)로 나누면 거리가 나옵니다.

 

[부품목록]

▶ 아두이노 보드: 1개

▶ 브레드보드: 1개

▶ 점프선

▶ 초음파 거리 측정 센서: 1개 (HC-SR04)

    (http://www.icbanq.com/P008113531)

▶ CLCD: 1개

 

아두이노

 

초음파 센서로 들어온 신호 값을 단위 변환 공식을 적용하여 cm단위로 LCD에 표시하는 예제입니다. 초음파를 거리로 변환하는 방법은 거리 = 속력 X 시간 공식을 사용합니다.

 


 

아두이노 예제

 

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
33
34
35
36
37
38
#include <LiquidCrystal.h>
 
float duration;
float distance;
 
//LCD 객체
LiquidCrystal lcd(12115432);
 
void setup( ) 
{
 
  //LCD의 열수와 행수를 설정
  lcd.begin(162);
  //trig 출력으로 설정
  pinMode(8, INPUT);
  //echo 입력으로 설정
  pinMode(9, OUTPUT);
  lcd.print("DISTANCE");
 
}
 
void loop( ) 
{
 
  //trig 5V 출력한다
  digitalWrite(9, HIGH);
  delay(10);
  //trig 0V 출력한다
  digitalWrite(9, LOW);
 
  //pulseIn함수의 단위는 ms(마이크로 세컨드)
  duration = pulseIn(8, HIGH);
  distance = ((34000*duration)/1000000)/2;
  lcd.Cursor(0,1);
  lcd.print(distance );
  delay(100);
 
}
cs

 

코드 해석

 

pulsIn함수pulsIn(핀번호, 핀상태)의 형태로 이루어져 있으며 핀 상태가 바뀌면 그때까지 경과한 시간을 ms(마이크로 세컨드)단위로 반환시켜줍니다.

초음파 센서에서는 echo핀이 HIGH였다고 초음파를 받으면서 LOW로 바뀌기 때문에 pulsIn함수를 이용해서 초음파가 날아온 시간을 측정할 수 있습니다.


위 코드를 해석한 후 요약하면 아래와 같이 진행됩니다.

trig(HIGH) - 초음파 발사 - trig(LOW) - 발사중지 - 물체에 맞고 돌아온 초음파를 echo(HIGH)핀으로 받음 - echo(LOW) - 거리계산 - 반복


distance = ((34000*duration)/1000000)/2;

거리를 cm단위로 측정하기 위해서 소리의 속도(340m/s)와 초음파가 돌아온 시간(마이크로세컨드)를 계산한 식 입니다. 그리고 초음파가 발사되서 돌아오는 시간에 나누기 2를 해주어서 편도 거리를 계산합니다.