본문 바로가기

IoT

HC-SR04 초음파센서

728x90

HC-SR04 초음파 센서 사용


스펙

동작 전압 : 5V

소비 전력 : 2mA 미만

측정 각도 : 15도

측정 거리 : 2cm ~ 5m



초음파 센서 기본 원리

공기를 통해 전달되는 40000 Hz의 초음파를 내고

물체나 장애물이 있으면 반사되어 다시 들어 옵니다. 

반사되어 들어온 시간과 소리의 속도를 계산하여 거리를 측정할수 있습니다



하드웨어 연결

HC-SR04 초음파 모듈에는 GND, VCC, Trig, Echo의 4 핀이 있으며 보통 기반에 명시되어 있습니다

모듈의 GND와 VCC 핀은 연결할 MCU의 GND5v 핀에 각각 연결되어야하며 

trig와 echo 핀은 MCU의 디지털 I/O 핀에 연결해야 합니다

(클릭시 확대)




제어

기존적으로 HC-SR04 초음파 모듈은 초기 위와 같은 동작 타이밍을 갖습니다

따라서 초기 트리거를 10us 만큼 High로 주면 40Khz로 8회 초음파가 발생되고 물체에 반사되어 회신되는 초음파가 일정 시간후 들어오게 됩니다

Echo핀에서는 반송되어 들어오기까지 시간이 측정되어 이 시간을 공기중 초음파전달 속도에 도입 계산하여 거리를 측정하게 됩니다



아두이노 지원 (ATmega328P)

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
27
28
29
30
31
32
33
34
35
// 디지털 핀에 Trigger핀과 Echo핀 연결 넘버 정의
const int trigPin = 9;
const int echoPin = 10;
 
long duration;
int distance;
 
void setup() 
{
    pinMode(trigPin, OUTPUT); // Trigger 핀을 출력으로 설정
    pinMode(echoPin, INPUT); // Echo 핀을 입력으로 설정
    Serial.begin(9600); // 시리얼 통신 설정 
}
 
void loop() 
{
    // 트리커 핀 초기화
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
 
    // 트리거 핀을 10 micro sec 동안만 HIGH로 설정
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
 
    // Echo 핀에서 값을 읽어오기 
    duration = pulseIn(echoPin, HIGH);
 
    // 거리 계산 
    distance= duration*0.034/2;
 
    // 시리얼에 결과 출력 
    Serial.print("Distance: "); 
    Serial.println(distance);
}
cs


MBED 지원 (STMicroelectronics NUCLEO-L432KC)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// MBED 지원 사용자 라이브러리 활용  
// https://manguring@os.mbed.com/users/ejteb/code/HC_SR04_Ultrasonic_Library/
#include "ultrasonic.h"
 
void dist(int distance)
{
    //거리 변화가 있으면 이 함수 호출됨
    printf("Distance changed to %dmm\r\n", distance);
}
 
// 인자로 Trigger핀, Ecdho핀, 업데이트 속도(초), 타임아웃(초), 거리변화시 호출함수를 줄 수 있습니다
ultrasonic mu(D10, D11, .11&dist);
 
int main()
{
    mu.startUpdates(); // Trigger 시그널을 발생합니다   
    mu.checkDistance(); // Echo로부터 값을 받아 거리를 계산하고 등록한 dist함수가 호출됩니다
}
cs


728x90