시중에서 쉽게 구할 수 있는 저가형 초음파 센서 모듈(HC-HR04)는 그림과 같이 4핀 인터페이스를 갖는다. Vcc/GND는 전원핀이고 Trig는 초음파를 발생시키는 펄스 신호를 내보내는 핀이며 Echo는 반사파가 감지되었음을 알려주는 신호선이다. 따라서 이 모듈을 사용하려면 아두이노의 디지털 핀 두 개가 필요하다.


초음파 센서 모듈인 HC=SR04를 이용하기 위해서 아두이노의 NewPing 라이브러리를 이용해 보자. 압축된 zip 파일을 다운로드 받은 후에 다음과 같이 아두이노 IDE에서 등록할 수 있다.


스케치 > Include Library > Add .ZIP Library


설치하였다면 다음과 같이 메뉴에 항목이 새로 만들어진다. 이것을 선택하면 프로그램에 #include “NewPing.h” 가 추가되고 라이브러리 함수를 사용할 수 있다.



NewPing 라이브러리의 생성자는 다음과 같다.


NewPing sonar(trigger_pin, echo_pin [, max_cm_distance]);


해당되는 핀 번호 두 개와 최대 측정 거리(기본값 500 cm)를 주게 되어 있으며 최대 측정 거리는 생략할 수 있다.

이 라이브러리는 다양한 함수를 제공하고 있으나 여기에서 사용할 함수는 sonar.ping() 이다. 이 함수는 초음파가 발사되고 그 반사파가 감지될 때까지 걸린 시간을 microsecond 단위의 정수로 반환한다. 따라서 이 값을 라이브러리에 기정의된 상수 US_ROUNDTRIP_CM 으로 나누면 장애물까지의 거리를 cm단위로 얻을 수 있다.


sonar.ping(); // 반사파가 감지될 때 까지의 시간을 us 단위의 정수로 반환
// 감지 가능 거리 내에 장애물 없을 때 0을 반환
US_ROUNDTRIP_CM // us를 cm단위로 바꾸어주는 상


완전한 예제는 다음과 같다. trig 는 2번 핀에 echo 는 3번 핀에 연결되었다고 가정한다.


#include <NewPing.h>
#define TRIGGER_PIN  2
#define ECHO_PIN     3
NewPing sonar(TRIGGER_PIN, ECHO_PIN);
void setup() {
 Serial.begin(9600);
}

void loop() {
 float fDist = (float)sonar.ping()/US_ROUNDTRIP_CM;
 Serial.print("Ping: ");
 Serial.print(fDist);
 Serial.println(" cm");
 delay(100);
}


위에서 fDist 변수값을 구하는데 sonar.ping()함수의 반환값을 float로 변환했음에 유의하자. 이렇게 해야 정확한 실수값이 구해지게 된다.




Posted by 살레시오