Arduino

[Arduino] 3. HC-SR04 (초음파 센서)

Easyho.log 2024. 7. 26. 17:24

1. HC-SR04 센서

 DataSheet을 보면서 스펙을 따져보도록 하자.

DataSheet에 의한 스펙

무려 4m까지 측정이 가능하다고! (진짜...일까..?)


2. 초음파가 거리를 계산하는 방법

우리가 통상적으로 거리를 구할 때 거리는 속도 * 시간으로 알고 있다. 그렇다면 초음파의 속도는 얼마일까?

초음파도 소리이기 때문에 소리의 속도와 일반적으로 같다. (온도에 따라 다르지만) 일반적으로 소리의 속도는 343m/s이기에 초음파의 속도도 343m/라고 한다. 초음파가 물체에 도달하여 다시 돌아오는 원리로 거리를 계산하면 식은 다음과 같다.

거리 = 시간 * 속도 / 2

 

이를 이용해서 거리를 계산한다.


3. HC-SR04 결선

HC-SR04는 다음과 같다.

화질이.. 왜 저러지..?

5V Vcc와 0V GND, 그리고 Echo, Trig가 있다.

결선표는 다음과 같다.

Vcc 5V
GND GND
Echo D3
Trig D2

 

마침 HC-SR04 모듈이 2개가 있길래 그냥 2개 다 연결해보았다.


4. 코드 구현

나는 2가지 센서를 썼기 때문에 핀모드도 4개를 썼다.

const int trigPin1 = 2;
const int echoPin1 = 3;
const int trigPin2 = 4;
const int echoPin2 = 5;

void setup() {
  Serial.begin(9600);
  
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
}

void loop() {
  long duration1, distance1;
  long duration2, distance2;
  
  // 첫 번째 센서
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = duration1 * 0.034 / 2;
  
  // 두 번째 센서
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = duration2 * 0.034 / 2;
  
  // 결과 출력
  Serial.print("Sensor 1: "); Serial.print(distance1); Serial.print(" cm, ");
  Serial.print("Sensor 2: "); Serial.print(distance2); Serial.println(" cm");
  
  delay(1000); // 1초 간격으로 측정
}

 

그렇다면 결과는?

 

 

꽤 일정하다. 하지만 멀리까지 되는지는 잘 모르겠다.