캡스톤디자인(3-1)/아두이노

[아두이노] 초음파 센서, HC-SR04

av0nr3pus 2024. 7. 4. 00:13

초음파 센서 HC-SR04 구매처

https://www.navimro.com/g/445999/

 

초음파 거리 센서 모듈(HC-SR04), YwRobot, 445999 - 나비엠알오

특징 초음파 거리 센서 모듈 형식 전압: 5V 감지 거리: 2-450cm 정확도: 0.3cm 주의사항 반품불가한 상품이오니 신중한 구매 부탁드립니다. / No.1 기업 전용 쇼핑몰 나비엠알오(NAVIMRO)입니다.

www.navimro.com

아마 이 모듈은 다른 엘레파츠나 에듀이노 같은 사이트에서도 구매 가능할거다! 여러 가지 찾아보다가 제일 여러가지 정보가 많길래 이 모듈을 구매하기로 결정했고, 이 글은 gpt랑 구글링이 도와줬다.. 물론 나도 공부를 했지만 👍🏻


1. HC-SR04

Vcc: 5V input pin

Trig: 간단하게 거리 측정을 시작하는 역할, 짧은 전기 신호 전송 시 이를 감지하고 초음파 신호를 발사함. 또한, arduino 프로그램에서 따로 핀을 지정해주어야 함.

Echo: 반사된 초음파 신호 수신, 반사되어 돌아올 때까지의 시간을 측정함. 시간이므로 거리 계산으로 변환도 해주어야 함!(수식은 밑에서 설명함.) 또, 얘도 arduino 프로그램에서 핀을 따로 지정해주어야 함.

GND: 다 알듯이 접지

2. 준비물

1) HC-SR04(Ultrasonic sensor)
2) breadboard
3) 점퍼선 (암-수)
4) arduino UNO board
5) USB cable(arduino UNO board, 컴퓨터 연결 시 사용)

3. 구현할 기능

1) serial monitor에 앞의 물체와 초음파 센서 사이의 간격이 얼마인지 cm로 표시
2) 감지 거리를 변수로 지정하여
- fiezo buzzer로 경고음 출력
- LCD I2C로 경고문 출력
- 라인트레이서 모듈 조정하여 현재 자리에 멈춤 기능
- .. 아마 추가될 수도 있을 듯 하다.

4. Tinkercad 회로도

- fiezo buzzer를 나중에 사용할거라 빵판 위에 꽂아두긴했는데 초음파 센서만 사용하는 경우라면 생략 가능하다.

5. 실제 연결

1) Vcc pin -> arduino uno board의 5V 핀에 연결
2) Trig pin -> 5번 핀에 연결
3) Echo pin -> 3번 핀에 연결
* 아두이노 보드 핀 옆에 있는 ~표시: PWM 기능을 지원하는 것인데 초음파 센서에서는 굳이 필요없으므로 Trig, Echo는 아무 디지털 핀 중 하나에 연결해줘도 됨.
4) Gnd -> 5V 밑에 있는 Gnd 핀에 연결

6. arduino IDE program code

 

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
36
const int trigPin=5// Set trigPin 
const int echoPin=3// Set echoPin
 
long duration;
long distance_cm; // 변수 지정
 
void setup(){
  Serial.begin(9600); 
  pinMode(trigPin, OUTPUT); // Set OUTPUT trigPin
  pinMode(echoPin, INPUT); // Set OUTPUT echoPin
}
 
void loop(){
  long duration;
  long cm;
  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  cm = duration * 0.034 / 2// 감지된 정보를 cm로 변환 
  
  Serial.print("Distance: ");
  Serial.print(cm);
  Serial.println("cm"); // Serial monitor에 정보 출력
  
  delay(3000);
 
  if (cm <= 5){
    // Your code here
  } // 5cm 이내에 들어왔을 시 행해야 할 코드 입력
}
 
cs

* 거리 계산: 시간을 이용해 계산하면 됨,
소리의 속도는 약 340m/s 이므로 1cm 이동시 약 29.4us 소요
왕복 시간이므로 나누기 2를 해주어야 함.

거리 = 시간*소리의 속도/2
-> cm = duration*0.034/2 를 이용해 계산

** Trig, Echo pin은 각각 상수로 지정해주어야 값이 변화될 때에도 편리

*** 밑에 if 문에서는 구현하려고 했던 기능들을 lcd I2C나 fiezo buzzer 모듈을 달아서 구현해주면 됨
 

암튼 저 코드로 입력해주고 serial monitor를 실행시키면 이렇게 거리가 표현이 될 것이다.

-> serial monitor output도 기회가 된다면 추가하도록 하겠음! 다음엔 RGB 모듈을 써봐야겠다.