본문으로 바로가기

  아두이노(Arduino) 기초 센서 4편 - 초음파 거리센서  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.



안녕하세요. 애드라이프입니다.

이번엔 초음파를 이용한 거리측정 센서를 가지고 포스팅하겠습니다.

저는 개인적으로 이 센서의 생김새가 옛날 오디오 처럼 생겨서 좋아하는 센서입니다.


초음파 거리센서(HC-SR04)

인가전압 : +5V

주파수 : 40khz

최대측정거리 : 3M 

최소측정거리 : 3cm

<측정거리는 반사체의 재질과 주변환경에 영향에 따라 조금 차이가 있을 수 있습니다.>

아두이노 초음파거리센서



어떻나요? 옛날 오디오 모양처럼 생겼죠?

실제로 초음파을 이용하여 거리를 측정하는것은 주변에 많이 쓰이고 있습니다.

자동차의 거리감지 센서나 선박의 충돌방지센서 등이 대표적이라 할 수 있죠.

(박쥐나 돌고래 같은 동물들도 초음파을 사용하죠.)


그럼 어떤 원리로 거리를 측정하는 걸까요?

간단한 그림으로 그려봤습니다만...그림실력은 장담 못합니다.

초음파거리센서의 원리


저와 같은 수.알.못을 위한 설명이 있어야 겠죠?

그림에서 음속은 340m/s라고 되어있습니다.


1초에 340m이동한다는 소리입니다.

1m =100cm = 1초/340 = 2.9ms 임으로

1m이동하는데 2.9ms가 걸린다는 해석이 나옵니다.

그럼 1cm = 29μs가 되겠죠?


이 수치를 기준으로 구하고자 하는 거리를 계산하면 됩니다.


거리를 계산하는 법도 알았으니 회로를 봐볼까요?

아두이노 초음파거리센서 연결 회로

이번 포스팅은 프로그램 자체가 응용이라고 할 수 있기 때문에 회로가 

아두이노와 초음파 거리센서만으로 구성되어있습니다.



그럼 바로 프로그램으로 넘어가겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int echoPin = 3;                                                //초음파 거리센서의 Echo핀을 디지털포트 3번에 연결
int trigPin = 2;                                                //초음파 거리센서의 Trig핀을 디지털포트 2번에 연결
 
void setup() {
  Serial.begin(9600);                                          //통신속도 9600
  pinMode(trigPin, OUTPUT);                                     //디지털포트 2번을 OUPUT으로 설정
  pinMode(echoPin, INPUT);                                      //디지털포트 3번을 INPUT으로 설정
}
 
void loop() {
  
    digitalWrite(trigPin, LOW);                                 //초음파을 발생시키는 코드입니다. 
    digitalWrite(echoPin, LOW);
    delayMicroseconds(2);                                       //마이크로세컨드 단위의 딜레이
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
 
    unsigned long duration = pulseIn(echoPin, HIGH);              //echoPin의 HIGH신호가 지속되는 시간을 마이크로세크단위로 반환합니다.
    float distance = ((float)(340 * duration) / 10000/ 2;       //duration(초음파가 발생되고 물체에 반사되어 돌아오는 시간)/2*음속(cm/s)
    
    Serial.print(distance);                                      //시리얼 모니터에 거리값을 cm로 출력
    Serial.println("cm");
    delay(500);
}
cs

프로그램의 전체적은 흐름은 주석을 참고해 주세요.


프로그램에서 처음으로 나온 함수가 있습니다.

pulseIn(PinNumber, value)(링크)

자세한 내용은 위 링크를 클릭하시면 볼수 있습니다. ▲

간단히 설명하면 PinNumber에 설정된 Pin의 상태가 HIGH 또는 LOW인지를 체크하는 함수입니다.

이 함수를 이용하여 초음파가 발생되고 나서 물체에 반사되어 

다시 돌아오는 시간을 마이크로 단위로 반환 받을 수 있습니다.

주의 해야 할 점은 10마이크로 초부터 3분까지의 펄스신호에 반응한다는 것입니다.



실제 프로그램을 업로드하여 시리얼 모니터에 출력되는 값을 확인하면서 포스팅을 끝내겠습니다.


여러분들도 초음파센서에서 물체를 가까이 또는 멀리 하면서 거리를 측정해 보세요.

단, 철사나 실 같은 초음파가 반사되지 않는 물질을 사용할 경우에는 제대로 측정 되지 않을 수 있습니다.


지금까지 아두이노(Arduino) 기초 센서 4편 - 초음파 거리센서 포스팅이였습니다.

계속해서 도움되는 포스팅으로 찾아뵙겠습니다.

by 애드라이프