HC-SR04는 초음파를
이용하여 거리를 측정할
수 있습니다. 약 2~400cm 범위를 측정할
수 있지만, 거리가 멀거나 날씨, 장애물의 재질 등 환경적인 요건에
의해 오차가 발생합니다. 초음파를 발사하고, 장애물에 닿은 후 다시 튕겨져
돌아오는 초음파를 센싱하여
거리 값을 측정합니다.

HC-SR04 구매 링크 바로가기 (2018년 기준)
■ 진행 전 알면 좋은 내용
·
아두이노란 무엇인가요?
·
아두이노 통합개발환경 알아보기
·
디지털 출력 사용하기
■ 준비물 (Items)
·
HC-SR04
초음파 거리센서
·
아두이노 우노 보드
·
우노 케이블 (USB - B)
·
400핀
브레드 보드
·
M-M 케이블
■ 사양
(Specification)
·
초음파 거리 측정
·
작동 전압: 5V
·
작동 전류: 15mA
·
동작 주파수: 40Hz
·
발생 주파수: 40KHz
·
측정 거리: 2~400cm
·
크기: 45 x
20 x 15 mm
■ 연결 회로도
(Fritzing)

■ 샘플코드 (Sample Code)
#define trigPin 13 // trigPin을 13으로 설정합니다.
#define echoPin 12 // echoPin을 12로 설정합니다.
void setup()
{
Serial.begin (9600); // 시리얼 모니터를 사용하기 위해 보드레이트를 9600으로 설정합니다.
pinMode(trigPin, OUTPUT); // trigPin 핀을 출력핀으로 설정합니다.
pinMode(echoPin, INPUT); // echoPin 핀을 입력핀으로 설정합니다.
}
void loop()
{
long duration, distance; // 각 변수를 선언합니다.
digitalWrite(trigPin, LOW); // trigPin에 LOW를 출력하고
delayMicroseconds(2); // 2 마이크로초가 지나면
digitalWrite(trigPin, HIGH); // trigPin에 HIGH를 출력합니다.
delayMicroseconds(10); // trigPin을 10마이크로초 동안 기다렸다가
digitalWrite(trigPin, LOW); // trigPin에 LOW를 출력합니다.
duration = pulseIn(echoPin, HIGH); // echoPin핀에서 펄스값을 받아옵니다.
/*
trigPin핀에서 초음파를 발사하였고 그 초음파가 다시 돌아 올 때까지 기다립니다.
만약 벽이나 장애물에 닿아서 다시 echoPin으로 돌아왔다면 그동안의 시간을 duration에 저장합니다.
*/
distance = duration * 17 / 1000; // duration을 연산하여 센싱한 거리값을 distance에 저장합니다.
/*
거리는 시간 * 속도입니다.
속도는 음속으로 초당 340mm이므로 시간 * 340m이고 cm단위로 바꾸기 위해 34000cm로 변환합니다.
시간 값이 저장된 duration은 마이크로초 단위로 저장되어 있어, 변환하기 위해 1000000을 나눠줍니다.
그럼 시간 * 34000 / 1000000이라는 값이 나오고, 정리하여 거리 * 34 / 1000이 됩니다.
하지만 시간은 장애물에 닿기까지와 돌아오기까지 총 두 번의 시간이 걸렸으므로 2를 나누어줍니다.
그럼 시간 * 17 / 1000이라는 공식이 나옵니다.
*/
if (distance >= 200 || distance <= 0) // 거리가 200cm가 넘거나 0보다 작으면
{
Serial.println("거리를 측정할 수 없음"); // 에러를 출력합니다.
}
else // 거리가 200cm가 넘지 않거나 0보다 작지 않으면
{
Serial.print(distance); // distance를 시리얼 모니터에 출력합니다.
Serial.println(" cm"); // cm를 출력하고 줄을 넘깁니다.
// distance가 10이면 10 cm로 출력됩니다.
}
delay(500); // 0.5초동안 기다립니다.
}
■ 동영상
(Video)
최신댓글