스터디그룹/아두이노 튜토리얼

아두이노 HC-SR04 초음파센서 튜토리얼

Sparingcal_7 2020. 5. 3. 15:08

아두이노에는 여러기지 센서들이 존재한다. 그 중 우리는 아두이노 HC-SR04 초음파센서를 알아볼 것이다. HC-SR04 초음파를 이용하여 거리를 측정할  있다.  2~400cm 범위를 측정할  있지만, 거리가 멀거나 날씨, 장애물의 재질  환경적인 요건에 의해 오차가 발생한다. 초음파를 발사하고, 장애물에 닿은  다시 튕겨져 돌아오는 초음파를 센싱하여 거리 값을 측정한다

 

회로도

샘플 코드

 

#define OutputPin 7                  

#define InputPin 8                
void setup()

{

  Serial.begin (9600);              

  pinMode(OutputPin, OUTPUT);   

  pinMode(InputPin, INPUT);    
}

void loop()

{

  long lengthen, centimeter;                   

  digitalWrite(OutputPin, LOW);                 

  delayMicroseconds(2);                    

  digitalWrite(OutputPin, HIGH);                

  delayMicroseconds(10);                  

  digitalWrite(OutputPin, LOW);                

  lengthen = pulseIn(InputPin, HIGH);   

 
centimeter = lengthen * 17 / 1000;          




  if (centimeter >= 200 || centimeter <= 0)       

  {

    Serial.println("거리가 측정이 불가함");  

  }

  else                                                    

  {

    Serial.print(centimeter);                         

    Serial.println("cm");                           

                                                           

  }

  delay(500);                                         


}

코드 해설

*이 초음파 센서에는 trig와 echo가 있는데, trig는 초음파를 쏘는 것이고, echo는 물체에서 튕겨져나온 초음파를 수신하는 것 이다. 

 

 

*19~31줄에 있는 코드내용 해석

 

OutputPin핀에서 초음파를 발사하고 그 초음파가 다시 돌아 올 때까지 기다린다. 벽이나 장애물에 닿아서 다시 InputPin으로 돌아오면 걸린 시간을 centimeter에 저장한다.

 

 

 

*34번 줄에 있는 코드 centimeter = lengthen * 17 / 1000; 코드 

 

 

거리는 시간 X 속도이다. 음속은 340m/s이므로 시간 X 340m이고 cm로 바꾸기 위해서 34000cm로 바꾼다. 시간 값이 저장된 duration은 마이크로초 단위로 저장되어있기 때문에, 변환하기 위해 1000000을 나누어 준다. 그럼 시간 X 34000 / 1000000이라는 값이 나오고, 약분하여 시간 X 34 / 1000이 된다. 하지만 장애물에 닿고 돌아오기까지 총 2번의 시간(가는 시간, 오는 시간)이 걸렸으므로 2를 나누어 준다. 그럼, 시간 X 17/1000이라는 공식이 나오면서 코드에  그렇게 쓰이게 된 것이다.

 

 

 

 

동영상