HC-SR04 초음파 센서 사용법 | 아두이노에 LCD1602와 3색 LED 다이오드 적용
HC-SR04 초음파 센서는 거리 측정에 사용되는 센서입니다. 이 센서는 초음파를 이용해 물체와의 거리를 측정하며, 아두이노와 같은 마이크로컨트롤러와 연결하여 사용할 수 있습니다.

HC-SR04 초음파 센서 특징:
작동 전압 : DC 5V
최대 측정거리 : 약 4m
측정 각도 : 15도
정확도 : 3m
HC-SR04 동작 원리:
- 초음파 발사 : 트리거 핀에 짧은 신호(10us)를 주면 초음파가 발사됩니다.
- 초음파 반사 : 발사된 초음파가 물체에 반사되어 돌아옵니다.
- 에코 신호 수신핀 : 반사된 초음파가 수신될 때까지의 시간을 에코 핀에서 측정합니다.
- 거리 계산 : 수신된 시간에 소리의 속도(340m/s)를 곱해 물체까지의 거리를 계산합니다.
거리 계산 공식:
D = (t x v/2)
t : 에코핀에서 측정된 시간(초)
v : 소리의 속도(340m/s)
2 : 신호가 물체에 도달했다가 다시 되돌아오는 시간
HC-SR04 핀 기능:
VCC : DC5V
GND : 접지
Trig : 초음파 신호 발사
Echo : 초음파 신호 수신
이번 프로젝트는 아두이노에 초음파 센서를 사용하여 측정된 거리를 LCD1602 디스플레이에 현시하여 주고, 측정된 값에 따라 3색 LED 다이오드를 제어하는 방법을 설명해보도록 하겠습니다.
준비 부품:
준비품으로는 아두이노 우노 R3, HC-SR04 초음파센서, LCD1602 디스플레이, 3색 RGB LED 다이오드 등이 사용됩니다.

구성 부품들이 준비되면 아래 회로도를 참고하여 회로연결을 합니다.
회로 연결:
아두이노 우노 R3 | HC-SR04 | RGB LED 다이오드 | LCD1602 디스플레이 |
+5V | VCC | VCC | |
GND | GND | Common | GND |
D4 | Trig | ||
D5 | Echo | ||
D6 | R | ||
D7 | G | ||
D8 | B | ||
A4 | SDA | ||
A5 | SCL |

회로 연결이 끝나면 아두이노 IDE에 다음과 같이 코드를 작성합니다.
전체 코드:
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LCE패널 함수 선언
// 초음파센서의 Trig, Echo 핀을 매크로 상수로 선언
#define TRIG 4
#define ECHO 5
// 삼색 LED의 R, G, B에 해당하는 핀들을 매크로 상수로 선언
#define RED 6
#define GREEN 7
#define BLUE 8
LiquidCrystal_I2C lcd (0x27,16,2);
void setup() {
// 초음파센서의 Trig를 출력모드, Echo를 입력 모드로 설정
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
lcd.init(); // LCD 초기화
lcd.backlight(); // LCD 뒷 전등 켬
}
void loop() {
// 초음파센서의 Trig에서 초음파를 발사하는 코드
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
// pulseIn 명령어를 통해 Echo핀에 초음파가 들어오는 시간 계산
// 반환된 값에 58.2를 나누어 시간을 cm로 변경
long distance = pulseIn(ECHO, HIGH)/58.2;
// 3색 LED의 R, G, B를 모두 255로 설정하여 LED를 끔
analogWrite(RED, 255);
analogWrite(GREEN, 255);
analogWrite(BLUE, 255);
if(distance < 10){
// 거리가 10cm 이내이면 빨간색으로 표시
analogWrite(RED, 0);
}else if(distance < 20){
// 거리가 10 ~ 20 이내이면 초록색으로 표시
analogWrite(GREEN, 0);
}else if(distance < 30){
// 거리가 20 ~ 30 이내이면 파란색으로 표시
analogWrite(BLUE, 0);
}
// LCD에서 한번 현시되고 측정된 값이 바뀌면 지우고 다시 현시
lcd.clear();
// LCD의 커서를 첫번째 열에 두번째행으로 설정
lcd.setCursor(0, 0);
// 측정된 거리값을 LCD에현시
lcd.print(distance);
lcd.print("cm"); // 측정 값 뒤에 "cm"글자 표시
lcd.setCursor(0, 1);
lcd.print("COLOR : ");
if(distance<10){
lcd.print("RED");
}else if(distance<20){
lcd.print("GREEN");
}else if(distance<30){
lcd.print("BLUE");
}
delay(200); // 0.2초간 지연
}
코드 작성 후 컴파일한 다음 아두이노 우노 R3에 업로드하여줍니다.
그러면 다음과 같은 출력 결과를 볼 수 있습니다.
출력 영상:
https://www.fromrus.su/index.php?/gallery/image/494-11/
Awesome https://is.gd/tpjNyL
Very good https://shorturl.at/2breu
Good https://shorturl.at/2breu
Awesome https://lc.cx/xjXBQT
Awesome https://lc.cx/xjXBQT
Awesome https://short-url.org/10VGf
Awesome https://t.ly/tndaA
Very good https://urlr.me/zH3wE5
Awesome https://rb.gy/4gq2o4