아두이노 HC-SR04 초음파센서 예제코드 / 소스코드

메이커 2018-08-19 (일) 21:59 1년전 5387  

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

 

7595aa66b97a8262ba54081667a4c0aa_1534683

 

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) 

 

 

7595aa66b97a8262ba54081667a4c0aa_1534683
 

 

 샘플코드 (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)

 

▶아래 플러스 친구 버튼을 통해 다양한 정보와 교제 자료 및 이벤트등의 소식을 받아보실 수 있습니다.




모바일 버전으로 보기