오늘은 초음파 센서 (HC-SR04)의 사용법에 대해 알아보겠습니다.

 

초음파 센서(HC-SR04)란 초음파를 발생시키고 초음파가 장애물에 부딪히고 돌아오는 시간을 측정하여 거리를 측정할 수 있는 센서입니다.

 

아래는 초음파 센서 종류중 하나인 HC-SR04 입니다. 2cm~400cm 까지의 거리를 측정할 수 있는 모듈입니다.

 

 

초음파 센서(HC-SR04) 에는 두개의 스피커 비슷하게 생긴것이 달려있는데 하나는 초음파를 발생시키는 부분이고, 나머지 하나는 장애물에 부딪히고 돌아온 초음파를 감지하는 부분입니다.

 

HC-SR04 모듈의 동작은 아래 타이밍과 같이 이루어집니다.

우선 HC-SR04 모듈을 동작하기 위해서는 Trig 핀에 10uS 길이의 펄스를 넣어주어야 합니다. 펄스가 들어오면 HC-SR04 모듈은 초음파를 발생시키고, 초음파가 돌아오기 까지의 시간을 측정하게 됩니다. 초음파가 돌아오면 ECHO 핀으로 펄스를 출력하는데 이 펄스의 길이는 초음파가 돌아오는데 걸린 시간에 비레하게 됩니다. 따라서 이 펄스의 길이를 측정하여 길이를 측정할 수 있습니다. 

 

초음파가 돌아오는데 걸리는 시간을 거리로 바꾸는 식은

( 거리 = 속력 * 시간 ) 을 통해 구하게 되는데 속력은 소리의 속력인 340 m/s 와 시간을 곱하여 구하게 됩니다.

 

HC-SR04의 데이터 시트에 따르면 ECHO 핀으로 출력된 펄스의 uS 시간을 58로 나누면 cm가 된다고 언급하고 있습니다.

따라서 cm = uS / 58

 

 

※아두이노 구현

 

보드는 아두이노 우노(UNO)를 사용하여 구현하였습니다.

 

초음파 센서(HC-SR04)의 Trig에 펄스를 인가하고, Echo로 출력된 펄스를 입력받기 위해서 Trig는 아두이노 8번핀, Echo는 9번핀에 연결하도록 하겠습니다.

 

아두이노 우노를 사용한 회로 구현은 아래와 같습니다.

 

 

- 아두이노 소스 코드

 

#define TRIG 8
#define ECHO 9

int us;   // microsecond time
int cm;   //

 

void setup() {
  Serial.begin(9600);
  pinMode(TRIG,OUTPUT); 
  pinMode(ECHO,INPUT);
}

 

void loop() {
  digitalWrite(TRIG,HIGH);   //send Pulse
  delayMicroseconds(10);
  digitalWrite(TRIG,LOW); 

  us = pulseIn(ECHO,HIGH,50000);    //get return time
  cm = us/58;

  Serial.print("cm : ");
  Serial.print(cm);
  Serial.print("\n");
  delay(60);
}

 

측정된 거리를 컴퓨터로 출력하기 위해 시리얼 통신을 사용하였습니다.

ECHO 핀을 통해 출력된 펄스의 길이를 측정하는데에는 아두이노 내장함수인 pulseIn 함수를 사용하였습니다. pulseIn 함수는 펄스가 입력되면 그 시간을 측정하여 반환하는 함수입니다. pulseIn(ECHO,HIGH,50000) 와 같이 사용하면 ECHO(9번)핀에 HIGH가 되었다가 LOW가 되는 펄스의 길이를 측정하여 uS 단위로 반환하며, 이때 50000 uS가 초과해도 펄스가 들어오지 않으면 0을 반환하여 측정이 실패하였음을 알리게 됩니다.

 

초음파 센서(HC-SR04)는 2cm~400cm까지 측정이 가능하므로 400cm를 초과하는 거리는 측정이 불가능합니다. 따라서 400cm이상의 거리에서는 ECHO핀에 펄스가 입력되지 않아 0이 출력될 것입니다.

 

입력된 펄스의 시간을 58로 나누어 cm단위의 거리로 바꾸고 이를 시리얼포트를 통해 출력하는 코드를 구현하였습니다.

 

- 아두이노 동작

 

 

 

블로그 이미지

1lime

아두이노와 프로그래밍, 전자공학 학생의 개인적 프로젝트 모음

,