아두이노 초음파센서 HC-SR04 연결하기. (아두이노 HC-SR04 센서 알아보기.) pulseln() 함수 알아보기. 아두이노 초음파거리센서(아두이노 센서)

안멋진멋쟁이 2016-03-16 (수) 20:10 8년전 25243  

 

저렴한 HC-SR04 구매와 기술문의 바로가기

 

02cd46d8a607ca14b01d10ead866e139_1458126
 

 

초음파 거리센서 (HC-SR04)에 대해 알아보고,

이 센서를 응용하여 아두이노와 연결하는 방법에 대해 알아보도록 할게요.

①. 아두이노와의 연결을 통해 센서의 출력값을 시리얼 모니터로 확인하기.

②. 초음파 거리센서 출력값을 LED램프로 나타내기.

③. 초음파 거리센서를 이용해 인원 계수 (지나가는 사람 수) 구하기.

 

 

 

 

 [목차]

 

1. 초음파 거리센서 HC-SR04 알아보기

- 초음파 센서란?

- HC-SR04 스펙

- 핀 정보

- 초음파 센서의 원리

2. 아두이노와 연결하기 (①~③)

- 준비물

- 회로도

- 코드소스

- 동영상

3. 초음파거리센서 HC0SO04 사용후기

 

 

 

 

1. 초음파 거리센서 HC-SR04 알아보기

 

- 초음파 센서란? -

초음파란 사람의 귀에 들리지 않을 정도로 높은 주파수 (약 20 kHz 이상)의 소리를 말하며,

이를 이용한 것이 초음파 센서입니다. 이번에 이용하는 HC-SR04는 초음파를 이용해 거리를 측정하는 센서이며,

이외에도 초음파를 이용하여 속도 측정, 농도와 점성도 측정, 수위나 적설 측정 등 여러가지가 가능합니다. 

 

 

02cd46d8a607ca14b01d10ead866e139_1458126
 

[초음파센서 : HR-SR04]

 

 

- 스펙 -

동작전압 DC 5V

동작전류 15mA

동작 주파수 40Hz

발생 주파수 40kHz

측정 거리 2cm ~ 400cm

정밀도 0.3cm

측정 각도 15도

크기 45x20x15mm

 

- 핀 정보 -

Vcc : 전원 공급

Trig :  초음파 발신

Echo : 초음파 수신

Gnd : 접지 (선 연결)

 

 

- 초음파 센서의 원리 -

 Trig핀에서 특정 파형을 만들고, 일정 파형을 만들면 Echo핀이 High 상태로 변경됩니다.

이때 초음파를 감지하게되면 다시 Low상태로 변합니다. 이 사이의 시간으로 값을 측정합니다.

이 측정 값을 계산하는 식을 아두이노 코드로 만들면 원하는 단위로 센서값을 출력할 수 있습니다. 

 

02cd46d8a607ca14b01d10ead866e139_1458126
 

초음파센서 HR-SR04 데이터시트 : http://micropik.com/PDF/HCSR04.pdf

 

 

 

2-①. 센서의 출력값을 시리얼 모니터로 확인하기

02cd46d8a607ca14b01d10ead866e139_1458126
 

- 준비물 -

(1) 아두이노 보드

(2) HC-SR04 센서

(3) 브레드보드

(4) USB 케이블

(5) 점퍼 케이블

(클릭시 구매사이트 이동)

 

 

 

- 회로도 -

 

02cd46d8a607ca14b01d10ead866e139_1458126
 

VCC - 5V

Trig - 2번 핀

Echo - 3번 핀

GND - GND

 

 

- 소스코드 -

<<코드.ino 다운로드 받기 클릭>>

아래는 코드에 대한 해석입니다.

int trig = 2;                                      trig핀을 디지털 2번핀에
int echo = 3;                                   echo핀을 디지털 3번핀에

void setup()
{
  Serial.begin(9600);                          시리얼 통신을, 9600속도로
  pinMode(trig, OUTPUT);                   tirg (2번) 핀을 출력모드로
  pinMode(echo, INPUT);                   echo (3번) 핀을 입력모드로 
}

void loop()
{
  digitalWrite(trig, HIGH);                                             tirg 핀에 HIGH신호를.
  delayMicroseconds(10);                                          딜레이 (작동중지 시간)
  digitalWrite(trig, LOW);                                             tirg 핀에 LOW신호를

  int distance = pulseIn(echo, HIGH) * 17 / 1000;                아래에 따로 설명.         
  Serial.print(distance);                                              시리얼 모니터에 distance를 표시함
  Serial.println("cm");                                                  cm를 표시하고 줄바꿈.
  delay(100);                                                              딜레이 (작동중지 시간)
}

int distance = pulseln(3,HIGH) * 17 / 1000;

 

이식은 초음파센서의 출력값을 cm단위로 받기위한 식입니다.

distance의 값에 pulseln(3,HIGH) * 17 / 1000; 값을 대입한다는것인데 이게 어떻게 cm단위로 변하는 걸까요?

 

 

02cd46d8a607ca14b01d10ead866e139_1458126
...?

 

 

거리 = 시간 x 속도

이식을 대입한 것입니다.

 

먼저 pulseln()에 대해 알아보겠습니다.

 

pulseln(pin, HIGH또는LOW)

pin이 HIGH(또는LOW)가 될 때까지의 시간을 불러옴.

즉 Echo가 HIGH가 될때까지의 시간을 불러온다는 것입니다.

pulseln(echo,HIGH)가 나타내는것은 발신됬던 신호가 수신되기까지의 시간.

이유는 글 윗부분 초음파 센서의 원리를 참조해주세요.

결과값의 단위는 microseconds. 

 

17 / 1000

초음파의 속도는 초당 340m.

= 파장이 돌아온 시간 x 340   / 나누기2 (왕복거리)

= 파장이 돌아온 시간 x 170 

pulseln의 결과값의 단위가 microseconds기 때문에

cm로 결과값을 받기위해서는 170 x 0.0001 =  17/1000 

 

 

- 동영상 -

 

 

 

 

2-②. 센서의 출력값을 LED램프로 나타내기

 

02cd46d8a607ca14b01d10ead866e139_1458126
 

 

- 준비물 -

(1) 아두이노 보드

(2) 점퍼 케이블

(3) HC-SR04

(4) LED램프 x3

(5) 220옴 저항 x3

(6) USB 케이블

(7) 브레드보드

- 회로도 -

02cd46d8a607ca14b01d10ead866e139_1458126
 

2-① 회로도에서 LED램프 3개를 추가하였습니다.

LED의 (-)에 220옴 저항을 통해 GND로 연결해주고,

RED는 디지털 8번, YELLOW는 디지털 9번, GREEN은 디지털 10번으로 연결해줍니다.

-소스코드-

소스코드2.ino 다운로드 받기 클릭

아래는 코드에 대한 해석입니다.

int trig = 2;                                                            2-①에서 새로 추가된 부분만 알아볼게요
int echo = 3;
int RED = 8;                                                                  RED를 디지털 8번 핀에
int YELLOW = 9;                                                           YELLOW를 디지털 9번 핀에
int GREEN = 10;                                                            GREEN을 디지털 10번 핀에

void setup()
{
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(RED, OUTPUT);                                           LED가 연결된 핀들을 출력모드로.
  pinMode(YELLOW, OUTPUT);
  pinMode(GREEN, OUTPUT);
}

void loop()
{
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);

  int distance = pulseIn(echo, HIGH) * 17 / 1000;
  Serial.print(distance);
  Serial.println("cm");
  delay(100);
  if (distance > 20)                                                     distance(거리) 가 20보다 크면
  {
    digitalWrite(GREEN, HIGH);                                     GREEN이 연결된 핀에 HIGH 신호(5V)를, 
    digitalWrite(YELLOW, LOW);                                    YELLOW가 연결된 핀에 LOW 신호(0V)를,
    digitalWrite(RED, LOW);                                           RED가 연결된 핀에 LOW신호(0V)를.
  }
  if (distance > 10 & distance <= 20)                            distance(거리)가 10초과~20이하 일때
  {
    digitalWrite(GREEN, LOW);                                       같은내용이므로 여기부턴 생략..
    digitalWrite(YELLOW, HIGH);
    digitalWrite(RED, LOW);
  }
  if (distance > 0 & distance <= 10)
  {
    digitalWrite(GREEN, LOW);
    digitalWrite(YELLOW, LOW);
    digitalWrite(RED, HIGH);
  }
}

 

- 동영상 -

 

 

2-③. 센서를 이용해 인원 계수 (지나가는 사람 수) 구하기

 

02cd46d8a607ca14b01d10ead866e139_1458126
 

빛의 속도가 소리의 속도보다 빠르기 때문에 적외선 센서가 더 유리할 수도 있겠지만,

저가의 초음파센서 HC-SR04를 이용해도 큰 문제없이 인원계수를 할 수 있었어요.

보다 정확한 시스템을 위해서는 다수의 HC-SR04센서를 사용해주세요.

본 시스템을 구현하면서 가정한 바는 다음과 같아요.

 

1) 한번에 한사람씩 지나간다.

2) 사람과 사람이 지나갈 때의 시차는 2초가 넘는다.

3) 센서앞에 사람이 2초이상 머무르지 않는다.

준비물, 회로도는 2-①과 동일해요.

소스코드만 살짝 바꿔주도록 할게요.

 

-소스코드-

소스코드3.ino 다운로드 받기 클릭

 

변경(추가)된 코드는 아래와 같아요.

if (distance <=80)

{

count = count +1;

Serial.println(count);

delay(2000);

}

 

즉, 80cm 안쪽으로 출력값이 나올경우 +1 을 해주는 방식으로,

 

중복계산을 막기위해 딜레이 2초를 넣어줬어요.

Serial.begin(57600) 확인하시고~ 시리얼 모니터에서 57600보드레이트로 변경해주세요.

 

-동영상-

 

 

3. 초음파 거리센서(HC-SR04) 사용후기

 

HC-SR04 초음파 센서는 저가의 센서로 가격대비 거리가 BEST인 제품입니다. 이 제품의 측정 최대거리는 4m이지만 

물체의 표면 거칠기 및 패턴에 따라 반사되는 음파의 양상이 달라지기 때문에 4m까지 측정이 어려울 수도 있습니다.

 

중간에 노이즈 등의 값이 들어올 경우에는 소프트웨어적으로 해결하는것이 최선책이며, 보다 좋은 센서도 존재하지만

센서는 정밀도, 분해능에 따라 가격이 천차만별입니다. 적외선 센서와의 sensor intergration도 생각할 수 있습니다.

HC-SR04에 비해 정밀한 거리를 센싱하는 제품으로는 Maxbotix LV-EZ1 등이 있습니다.

 

 

글 마무리..

 

여기까지 아두이노와 초음파센서 HC-SR04의 연결에 대해 알아봤습니다.

이외에도 아두이노를 어떻게 활용하느냐에 따라 다양한 방식으로 센서의 값을 이용할 수 있습니다.

LCD를 활용해 출력해준다던지, 센서 값에 따라 변하는 무언가를 만든다던지,

와이파이 모듈을 이용해 서버로 값을 받는다던지 등등 여러가지 방법으로 말이죠.

 

여러분들의 무한한 상상력으로 다양한 아이디어를 구현해보도록합시다. ^^

 

 

메카리워즈 Image Map


모바일 버전으로 보기