시중에서 쉽게 구할 수 있는 저가형 초음파 센서 모듈(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 3NewPing 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로 변환했음에 유의하자. 이렇게 해야 정확한 실수값이 구해지게 된다.
'하드웨어 > 아두이노' 카테고리의 다른 글
아두이노 아날로그핀 연습문제 (0) | 2015.11.11 |
---|---|
아두이노의 tone() 함수로 멜로디 연주하기 (0) | 2015.11.04 |
갈릴레오(galileo) 보드 개요 (1) | 2015.06.15 |
아두이노 두에(Due) 보드의 아날로그 출력(PWM) (1) | 2015.06.15 |
아두이노 두에(Due) 보드 개요 (2) | 2015.06.15 |