아두이노와 초음파센서를 활용한 초음파거리계

초음파란

소리는 일종의 파동입니다. 소리의 진동은 공기의 분자를 진동시키며 공기를 압축 또는 확장 시킴으로써 파동을 갖게 되는 음파입니다. 사람이 들을 수 있는 소리의 주파수는 20Hz~20kHz입니다.
초음파(ultrasound)란 음파 또는 진동의 주파수가 사람 귀가 들을 수 있는 범위를 초과하는 것을 말합니다. 초음파의 주파수가 너무 낮으면 노이즈가 증가하고 초음파의 주파수가 너무 높으면 감쇠가 증가하여 도달 거리가 짧아집니다. 측정 가능한 거리 범위 내에서는 최대한 측정주파수를 높여야만 반사파의 측정이 쉽고 높은 거리정확도를 얻을 수 있습니다. 
일반적으로 사용되는 초음파 주파수 범위는 20kHz~40kHz입니다. 초음파는 직선으로 발사하더라도 계속 퍼지므로 손실이 발생하게 되며 거리가 멀수록 손실은 커지게 됩니다. 일반적으로 초음파센서가 측정할 수 있는 최대 거리는 10미터이며, 대부분의 경우 최대 2~5미터의 초음파센서가 가장 많이 사용되고 있습니다.
초음파 모듈로 거리를 측정하는 원리는 다음과 같습니다. 초음파 센서에서 초음파를 발사함과 동시에 타이머를 동작시킵니다. 초음파는 공중으로 전파되어 장애물에 부딪히면 다시 반사되며, 초음파 수신기가 반사파를 수신하면 카운트를 멈추게 되는데, 측정된 시간은 초음파 모듈과 물체 사이의 왕복 시간이 됩니다. 초음파는 초당 약 340미터의 속도로 공기 중에서 이동하기 때문에 초음파 모듈과 물체 사이의 거리는 (왕복시간/2)*340미터가 됩니다

초음파 모듈과 동작원리

여기서는 HC-SR04 초음파 모듈을 사용합니다. HC-SR04는 VCC, TRIG, ECHO, GND의 4개의 핀을 가지고 있으며 5V로 구동됩니다. 검출 거리는 2cm~400cm이며 정밀도는 0.3cm입니다.
초음파 모듈의 동작 원리는 다음과 같습니다. 먼저 아두이노 보드에서 초음파 모듈의 Trig로 약 5μs의 짧은 펄스를 측정 시작 신호로 보냅니다. 초음파 모듈은 측정 시작 신호를 받자마자 8개의 40kHz 펄스(200μs)를 발사합니다. 이 초음파 신호가 물체에 반사되어 되돌아오면 초음파 모듈은 Echo 핀을 통해 1개의 PWM 신호를 아두이노 보드로 전달합니다. 이 PWM 신호는 초음파가 이동한 왕복 시간을 의미합니다. 초음파의 속도는 초당 340m이고 이는 29μs/cm와 같습니다. 따라서 초음파 모듈과 물체와의 거리는 (왕복시간μs/2)/29 cm가 됩니다.

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// 아두이노 초음파 거리 측정 실험
#include <LiquidCrystal.h>

LiquidCrystal lcd(7,8,9,10,11,12);//RS,E,DB4,DB5,DB6,DB7

#define TRIG 3
#define ECHO 4
#define DELAY 500

long duration, distance;

void setup()
{
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.write("WWW.SCIPIA.CO.KR");
  lcd.setCursor(0,1);
  lcd.write("LCD1602 TEST OK!");

  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
}

void loop()
{
  delay(DELAY);

  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  duration = pulseIn(ECHO, HIGH);

  distance = duration/58.2;

  String disp = String(distance);
  lcd.clear();
  lcd.write("Distance :");
  lcd.setCursor(0,1);
  lcd.print(disp);
  lcd.print(" cm");
}


Tags