페이지

2026년 1월 14일 수요일

4.2.3. 거리 측정 표시기 만들기

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 LCD 화면에 "Hello"를 띄우며 아두이노와 디스플레이가 처음으로 대화하는 법을 배웠어요. 하지만 정적인 글자만으로는 조금 심심하셨죠? 그래서 오늘은 한 단계 더 나아가, 이전에 다뤘던 초음파 센서와 LCD를 결합해 보려고 합니다!

컴퓨터의 시리얼 모니터를 켜지 않고도, LCD 화면만으로 거리를 바로 확인할 수 있는 '나만의 휴대용 거리 측정기' 만들기! 지금 바로 시작해 볼까요?

Slide 1: 03. 거리 측정 표시기 만들기

초음파 센서와 LCD를 이용한 거리 측정기 프로젝트 소개

이번 프로젝트의 목표는 명확해요. 초음파 센서로 측정한 거리 값을 I2C LCD 화면에 실시간으로 표시하는 것이죠. 이 두 가지 부품을 함께 사용하면 아두이노가 주변 환경과 상호작용하고 그 결과를 시각적으로 보여주는, 훨씬 더 완성도 높은 작품을 만들 수 있답니다.

Slide 2: 거리 측정 표시기 회로

아두이노, 초음파 센서, I2C LCD를 연결한 회로도

이번 회로는 초음파 센서와 I2C LCD를 동시에 연결해야 해서 조금 복잡해 보일 수 있어요. 하지만 걱정 마세요! 전원(VCC, GND)을 브레드보드의 전원 레일(빨간색 +, 파란색 -)에 먼저 연결해두고 사용하면 아주 깔끔하게 정리할 수 있답니다.

✅ 준비물

  • 아두이노 우노
  • 초음파 센서 (HC-SR04)
  • I2C LCD
  • 브레드보드

✅ 회로 연결 방법

  1. 전원 공급 설정
    • 아두이노 5V → 브레드보드 빨간색 줄(+)
    • 아두이노 GND → 브레드보드 파란색 줄(-)
  2. I2C LCD 연결 (지난 시간과 동일해요!)
    • VCC → 브레드보드 빨간색 줄(+)
    • GND → 브레드보드 파란색 줄(-)
    • SDA → 아두이노 A4
    • SCL → 아두이노 A5
  3. 초음파 센서 연결 (새롭게 추가!)
    • VCC → 브레드보드 빨간색 줄(+)
    • GND → 브레드보드 파란색 줄(-)
    • TRIG → 아두이노 디지털 4번 핀
    • ECHO → 아두이노 디지털 3번 핀

슬라이드 그림처럼 각 부품의 VCC와 GND를 브레드보드 전원 라인에 연결하면, 여러 부품을 사용하더라도 선이 엉키지 않고 깔끔하게 회로를 구성할 수 있어요.

Slide 3: 거리 측정 코드 (1) - 핀 정의 및 초기화

거리 측정기 아두이노 코드의 초기 설정 부분

이제 코드를 살펴볼 시간이에요! 코드는 크게 '초기 설정' 부분과 '무한 반복' 부분으로 나뉩니다. 이번 슬라이드는 프로그램을 시작하기 전에 필요한 약속과 준비를 하는 초기 설정 부분이에요.

CODE 3.1 | 핀 정의 및 초기화
01// 01~04행: 핀 번호 정의 및 라이브러리 포함
02#define ECHO 3
03#define TRIG 4
04#include <Wire.h>
05#include <LiquidCrystal_I2C.h>
06
07// 08행: LCD 객체 생성
08LiquidCrystal_I2C lcd(0x20, 16, 2);
09
10// 10~16행: setup() 함수 - 초기 설정
11void setup() {
12 pinMode(TRIG, OUTPUT); // 초음파 발사 핀 (출력)
13 pinMode(ECHO, INPUT); // 초음파 수신 핀 (입력)
14
15 lcd.init(); // LCD 초기화
16 lcd.backlight(); // 백라이트 켜기
17}
  • #define: 초음파 센서의 ECHO 핀은 3번, TRIG 핀은 4번에 연결했다고 코드에 이름을 붙여주는 거예요. 이렇게 하면 나중에 핀 번호를 헷갈리지 않고 ECHO, TRIG라는 이름으로 편하게 사용할 수 있어요.
  • #include: I2C 통신에 필요한 Wire.h 라이브러리와 I2C LCD를 제어하기 위한 LiquidCrystal_I2C.h 라이브러리를 불러옵니다.
  • LiquidCrystal_I2C lcd(0x20, 16, 2);: 우리가 사용할 LCD의 정보를 알려주는 부분이에요. 주소는 0x20(만약 화면이 안 나오면 0x27로 바꿔보세요!), 가로 16글자, 세로 2줄짜리 LCD라고 선언하는 거죠.
  • setup() 함수: 아두이노에 전원이 켜지면 딱 한 번 실행되는 부분이에요.
    • pinMode(): TRIG 핀은 초음파를 '쏘는' 역할이므로 OUTPUT(출력), ECHO 핀은 돌아온 초음파를 '받는' 역할이므로 INPUT(입력)으로 설정해요.
    • lcd.init()lcd.backlight(): LCD를 사용하기 위해 초기화하고, 화면을 밝혀줍니다.

Slide 4: 거리 측정 코드 (2) - 핵심 로직

거리 측정기 아두이노 코드의 loop() 함수 핵심 로직 부분

이제 실제 거리 측정이 이루어지는 loop() 함수, 즉 핵심 로직 부분을 살펴볼게요. 이 코드는 전원이 꺼질 때까지 계속해서 반복 실행됩니다.

CODE 4.1 | 핵심 로직 (loop)
18// 18~41행: loop() 함수 - 무한 반복
19void loop() {
20 // 1. 초음파 발사!
21 digitalWrite(TRIG, LOW);
22 delayMicroseconds(2);
23 digitalWrite(TRIG, HIGH); // 10마이크로초 동안 초음파 발사
24 delayMicroseconds(10);
25 digitalWrite(TRIG, LOW);
26
27 // 2. 돌아온 시간 측정 및 거리 계산
28 float dist = pulseIn(ECHO, HIGH) / 58.2;
29
30 // 3. LCD 화면 갱신 (이전 글자 지우기)
31 lcd.setCursor(0, 0);
32 lcd.print(" "); // 공백 16개로 덮어쓰기
33
34 // 4. 거리 정보 출력
35 lcd.setCursor(0, 0); // 커서를 첫째 줄 맨 앞으로
36 lcd.print("Dist : ");
37 lcd.print(dist, 1); // 거리 값을 소수점 1자리까지 출력
38 lcd.print(" cm");
39
40 delay(1000); // 1초마다 갱신
41}

이 코드는 크게 4단계로 동작해요.

  1. 초음파 발사 (19~24행): TRIG 핀에 아주 짧은 시간(10마이크로초) 동안 HIGH 신호를 보내 '삑!'하고 초음파를 발사시킵니다.
  2. 거리 계산 (27행): pulseIn(ECHO, HIGH) 함수를 이용해 초음파가 발사된 후 다시 돌아올 때까지 걸린 시간을 측정해요. 이 시간을 58.2로 나누면 우리가 원하는 cm 단위의 거리가 계산됩니다. 소수점까지 정밀하게 계산하기 위해 float (실수형) 변수를 사용했어요.
  3. 화면 지우기 (31~32행): 새로운 값을 출력하기 전에 이전 값을 지워줘야 해요. lcd.print(" "); 처럼 공백 16개를 출력해서 첫 번째 줄을 깨끗하게 덮어쓰는 방식을 사용했답니다. 이 코드가 없으면 숫자가 겹쳐서 이상하게 보일 수 있어요.
  4. 거리 정보 출력 (35~38행): lcd.setCursor(0, 0)으로 커서를 맨 앞으로 옮기고, "Dist : ", 계산된 거리 값, " cm" 단위를 차례대로 출력합니다. lcd.print(dist, 1)에서 숫자 1은 소수점 첫째 자리까지만 보여달라는 의미예요.
  5. 1초 대기 (40행): delay(1000)을 통해 이 모든 과정을 1초에 한 번씩 반복하도록 속도를 조절합니다.

Slide 5: 초음파 센서 측정 범위와 주의사항

초음파 센서의 측정 범위와 사각지대에 대한 설명

프로젝트를 테스트하다 보면 신기한 현상을 발견할 수 있어요. 물체를 센서 코앞에 가져갔는데 "0cm"가 아니라 갑자기 300cm가 넘는 엉뚱한 값이 나오지 않던가요? 고장이 아니니 안심하세요! 이건 초음파 센서가 가진 '측정 한계' 또는 '눈앞의 사각지대' 때문이에요.

마치 산에서 "야호~!"하고 외쳤는데, 바로 앞 절벽에 소리가 부딪혀 메아리가 돌아오면 내 외침과 메아리가 겹쳐서 제대로 들을 수 없는 것과 같아요. 센서도 소리를 발사하고 수신하는 시간이 너무 짧으면 신호가 엉켜서 거리를 제대로 인식하지 못하는 거죠.

✅ 초음파 센서(HC-SR04) 측정 범위

  • 정상 측정 범위: 약 2cm ~ 400cm
  • 측정 불가 영역: 0cm ~ 2cm
    • 이 영역에서는 너무 가까워서 인식을 못 하거나, 최대 거리 값 같은 오류를 출력해요.
    • 우리가 사용하는 틴커캐드 시뮬레이터도 이런 물리적 한계를 똑같이 재현해 놓았답니다. 정말 대단하죠?

💡 핵심 권장 사항

거리를 측정할 때는 항상 센서와 물체 사이에 최소 2~3cm (손가락 두 마디 정도)의 거리를 유지해 주세요! 그래야 정확한 값을 얻을 수 있습니다.

오늘은 초음파 센서와 LCD를 결합하여 컴퓨터 없이도 스스로 작동하는 '휴대용 거리 측정기'를 만들어 보았어요. 이제 여러분은 아두이노가 주변 환경을 감지하고, 그 결과를 사용자에게 직접 보여주는 멋진 장치를 만들 수 있게 되었습니다!

이 원리를 응용하면 자동차 후방 감지 센서, 스마트 휴지통, 액체의 높이를 재는 수위 측정기 등 정말 무궁무진한 프로젝트로 발전시킬 수 있답니다.

오늘 배운 내용 중 궁금한 점이 있다면 언제든지 댓글로 질문해주세요. 그럼 다음 시간에도 더욱 재미있고 유익한 프로젝트로 다시 만나요! 👋

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.

댓글 없음:

댓글 쓰기