본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/임베디드

[아두이노 기초] 초음파 센서

by 베니스상인 2020. 2. 15.

초음파 센서의 기초 개념에 대해 살펴보고 초음파 센서를 이용한 거리를 측정해본다. 

 

 

1. 회로도 구성

 

- HC-SR04 초음파 센서는 신호발생신호인 Trigger와 수신신호인 Echo를 아래와 같이 연결한다.전원은 아두이노의 5V 전원을 연결해서 사용한다.

   

  TRIG : A4

  ECHO :  A3

 

 

 

2. 기초개념

 

 

1) 초음파센서

- 초음파 센서는 초음파를 발사하고 장애물에서 반사된 신호를 수신하여 물체의 형태를 보거나 거리를 측정하는데 사용

- 초음파는 물 속에서 전달이 잘 되는 특성이 있어 잠수함이나 해상 선박에 많이 사용

 

- 초음파센서의 신호

    Trigger: 초음파 센서에 송신의 시작을 알리는 신호, 10us 펄스폭을 가지는 신호를 초음파 모듈로 보냄

    Echo: 송신 시작에서 반사후 수신된 신호까지의 시간을 펄스 형태의 신호로 발생

 

 

HCSR04.pdf
0.08MB

 

 

 

 

 

품명 HC-SR04
동작 전압 5V
소모 전류 15mA
동작 주파수 40KHz
측정거리 2~400cm

 

 

 

2) 초음파 센서를 이용한 거리측정

- 초음파 대역은 20kHz이상의 주파수를 말함

- 초음파 센서의 거리측정 방법

    ① 10us 펄스폭을 가지는 Trigger 신호를 초음파 모듈로 보냄

    ② 초음파 센서는 40Khz 주기의 펄스 8개를 burst 형태로 송신함

    ③ 물체에서 반사된 펄스들이 초음파 센서로 수신됨

    ④ 초음파 센서는 송신부터 수신된 시간에 해당되는 펄스폭을 Echo 신호로 출력함 

    

 

 

* 거리 계산하는 방법

- 초음파 센서에서 왕복거리에 해당되는 시간을 알게 되면 음파의 속도는 대략 340m/s이므로 아래 식을 이용하여 거리를 측정할 수 있음  

- 초음파 센서가 측정하는 거리는 2~400cm로 짧은 거리만 측정이 가능하므로 속도의 단위를 34000/1000000 cm/us으로 변경할 수 있음

 

 

 

 

 

3. 소스코드

 

 

AUNO_Basic_08_01_UltraSensor.ino
0.00MB

 

 

/*****************************************************/
/*  Project   : Arduino Basic Training Course
/*  Title     : 08_UltraSensor
/*  Descript  : Range measurement using ultra sensor
/*  Platform  : Arduion UNO
/*  IDE: Arduino Sketch 1.6/1.8 or vMicro
/*  Author    : Imported by Arduino example
/*  History   : Rev 1.0  2020.02.11  - Initial release 
/*
/*****************************************************/

#include 
#include 


// modify I2C address after finding your I2C address
LiquidCrystal_I2C lcd(0x27, 16, 2);


#define TRIG_PIN  4 
#define ECHO_PIN  3 
#define TIME      10
#define USEC_PER_CENTIMETER  2941.17647       // 1000000/340

#define LED_PIN   13

int tau = 0;
float Range = 0.0;


void setup() {

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  Serial.begin(9600);


  lcd.init();
  lcd.backlight();
  lcd.clear();
    
  lcd.setCursor(0,0);           
  lcd.print("UltraSensor Test");       

 
}


void loop() {


  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(TIME);
  digitalWrite(TRIG_PIN, LOW);

  tau   = pulseIn(ECHO_PIN, HIGH);
  Range = (float)(tau/USEC_PER_CENTIMETER/2);

    Serial.print("Range = "); Serial.print(Range);  Serial.println("m");
    
    lcd.setCursor(0,1);           
    lcd.print(" Range : +");       
    lcd.print(Range);       
    lcd.print("m ");       
  
}

 

728x90

댓글