본문 바로가기
Embedded System/ATmega128

HC-SR04 Module (초음파 센서 모듈)

by xangmin 2020. 3. 27.
반응형

· 초음파 란?

 진동 주파수가 20kHz 이상으로 높아서 인간의 귀로 들을 수 있는 가청 최대 한계 범위를 넘어서는 주파수를 갖는 불가청 진동음파 (acoustic vibration)이다.

 

<HC-SR04 초음파 센서>

항 목

동작 전압

5V

동작 전류

15mA

동작 주파수

40KHz

측정 거리

2cm ~ 4m

측정 각도

15°

트리거 입력 신호

10us TTL 펄스

응답 출력 신호

측정 거리에 비례하는 TTL 펄스

크기

45 × 20 × 15 mm

· HC-SR04 ?

초음파 센서 모듈로 초음파 송신 부(Trig), 초음파 수신 부(Echo) 그리고 제어회로로 구성되어 있는데, 가격적으로 저렴하고 사용자가 간편하게 초음파를 제어해 거리를 측정할 수 있도록 만들어졌다.

 

 - VCC : +5V

 - TRIG : 센서의 입력을 트리거합니다. 마이크로 컨트롤러는 10 us 트리거 펄스를 HC- SR04 초음파 모듈에 적용합니다.

 - ECHO : 센서의 에코 출력. 마이크로 컨트롤러는이 핀을 읽거나 모니터하여 장애물을 감지하거나 거리를 찾는다.

 - GND : Ground


HC-SR04를 이용하여 거리 측정하기

< HC-SR04 module Timing Diagram >

· 타이밍 다이어그램 해석

1. HC-SR04 Trig Pin에 최소한 10 us의 트리거 펄스를 전송해야 합니다.

2. 그런 다음 HC-SR04는 자동으로 40 kHz의 음파 8를 보내고 Echo 핀에서 상승 에지 출력을 기다립니다.

3. 에코 핀에서 상승 에지 캡처가 발생하면 타이머를 시작하고 에코 핀에서 하강 에지를 기다립니다.

4. Echo 핀에서 하강 에지가 캡처되면 즉시 타이머의 카운트를 읽습니다. 이 시간 수는 센서가 물체를 감지하고 물체에서 되돌아오는 데 필요한 시간입니다.

 

· HC-SR04의 해상도 (CM, MM) 결정 방법

거리 = 속도 × 시간 / 2 = 소리의 속도(음속) × ((F-R TCNT) X 분주비 / F_CPU) / 2

 

1) 1MM 거리를 측정할 때

거리 = 속도 × 시간(T) / 2

1MM = 340m/s × 시간(T) / 2
1MM = 340,000mm/s × 시간(T) / 2
시간(T) = 5.88235294117...us 5.88us

1MM 거리를 측정하는데 약 5.88us의 시간이 소요된다.

 

2) 1CM 거리를 측정할 때

거리 = 속도 × 시간(T) / 2

1CM = 340m/s × 시간(T) / 2
1CM = 34,000cm/s × 시간(T) / 2
시간(T) = 58.8235294117...us 58.8us

1CM 거리를 측정하는데 약 58.8us의 시간이 소요된다.

 

3) 에코 펄스 시간 : 거리 = 소리의 속도(0.034 cm/us) x 에코 펄스시간 / 2

, 1CM 거리를 측정하는데 에코 펄스 구간은 58.8us가 된다.

< 1cm에 대한 Echo Pulse >

2CM를 측정할 때 에코 펄스 구간은? 117.6us

3CM를 측정할 때 에코 펄스 구간은? 176.4us

 

TCNT가 하나 카운트 될 때마다 어느 정도의 시간을 소요하는지에 따라 해상도를 결정할 수 있다.

 

결과적으로 분주비와 F_CPU 선택이 해상도에 영향을 준다는 것을 알 수 있다.


HC-SR04의 측정 주기분석

range = high level time *velocity (340M/s) / 2; we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.

 HC-SR04 Datasheet중 일부의 내용이다. Datasheet 중 HC-SR04 초음파 모듈의 측정 주기를 60ms의 주기로 측정하라고 나와 있다. 왜 측정 주기를 60ms 이상으로 주어야 하는 지에 대해 언급되어있는 점이 없어서 비슷한 제품인 HC-SRF04를 살펴보았다.

 

< HC-SRF04의 Timing Diagram >

 HC-SRF04HC-SR04의 다른 특징으로 측정 범위가 2cm~300cm를 갖는다. 300ms를 측정할 때, 300ms × 58.8us = 17.64ms의 에코 펄스 구간을 갖게 된다. 에코 펄스의 범위 값은 100us~18ms 을 갖는다.

 

최대 거리를 측정하는데 소요되는 시간 < 최대 에코 펄스 시간

 

 HC-SR04는 측정 가능 거리가 400CM이므로 HC-SRF04보다 Echo Pulse 시간이 보다 더 길 수 있다. 그리고 Echo Pulse가 Low로 떨어지게 되면 다시 Trigger에서 신호를 보낼 때까지 10ms의 Delay가 필요하다. 그 이유로는 40KHz8개 초음파 Pulse가 모두 사라질 때까지 대기해야 하기 때문이다. 만약 8개 중 1개가 제일 가까운 장애물을 감지하고 들어왔는데, 나머지 7개의 버스트가 들어오지 않았기 때문에 Delay가 필요하다는 것이다.

 

결과적으로 HC-SR04에서 입력주기를 왜 60ms로 해야하는지는 HC-SRF04의 Datasheet를 보고서 이해할 수 있다.


ATmega128을 이용한 HC-SR04 거리 측정

/*
 * HC_SR04.c
 * 초음파 PF0, PF2
 *  Author: KimSangmin
 */ 
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define Trigger_ON      PORTF|=0x01    //초음파 트리거 PF0
#define Trigger_OFF     PORTF&=~0x01
#define Echo           (PINF&0x04)     //초음파 에코 PF2

void hc_sr04_init(void);
unsigned int getEcho(void);

int main(void){
   DDRG = 0xFF;
   int range=0;
   hc_sr04_init();
   
    while(1){
        range=getEcho();
        if (range < 20)    {PORTG = 0x00; _delay_ms(1000);}
        else		   {PORTG = 0xFF; _delay_ms(1000);}
    }
}

unsigned int getEcho(void)
{
   Trigger_ON; _delay_us(10); Trigger_OFF;  // 10uS
   while(Echo==0x00); TCCR1B=0x02; TCNT1=0x00;
   while(Echo!=0x00); TCCR1B=0x08;
   return (TCNT1/58); //cm
}

void hc_sr04_init(void)
{
   DDRF=0x03;               // PF0 ouput Trigger, PF2 input Echo
   TCCR1B=0x08;             // Set timer up in CTC mode
   TCCR0 = 0x1F;
   OCR0 = 243;
}
반응형

'Embedded System > ATmega128' 카테고리의 다른 글

Balancing Robot  (0) 2020.04.04
C-LCD 8-bit Control and 4-bit Control  (4) 2020.04.04
NEO-7M (GPS module)  (1) 2020.03.28
HC06 Bluetooth Module (Master / Slave 연동하기)  (0) 2020.03.28
HC06 (Bluetooth Module) Mobile 연동하기  (0) 2020.03.27

댓글