안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
지난 시간에는 LCD 화면에 "Hello"를 띄우며 아두이노와 디스플레이가 처음으로 대화하는 법을 배웠어요. 하지만 정적인 글자만으로는 조금 심심하셨죠? 그래서 오늘은 한 단계 더 나아가, 이전에 다뤘던 초음파 센서와 LCD를 결합해 보려고 합니다!
컴퓨터의 시리얼 모니터를 켜지 않고도, LCD 화면만으로 거리를 바로 확인할 수 있는 '나만의 휴대용 거리 측정기' 만들기! 지금 바로 시작해 볼까요?
Slide 1: 03. 거리 측정 표시기 만들기
이번 프로젝트의 목표는 명확해요. 초음파 센서로 측정한 거리 값을 I2C LCD 화면에 실시간으로 표시하는 것이죠. 이 두 가지 부품을 함께 사용하면 아두이노가 주변 환경과 상호작용하고 그 결과를 시각적으로 보여주는, 훨씬 더 완성도 높은 작품을 만들 수 있답니다.
Slide 2: 거리 측정 표시기 회로
이번 회로는 초음파 센서와 I2C LCD를 동시에 연결해야 해서 조금 복잡해 보일 수 있어요. 하지만 걱정 마세요! 전원(VCC, GND)을 브레드보드의 전원 레일(빨간색 +, 파란색 -)에 먼저 연결해두고 사용하면 아주 깔끔하게 정리할 수 있답니다.
✅ 준비물
- 아두이노 우노
- 초음파 센서 (HC-SR04)
- I2C LCD
- 브레드보드
✅ 회로 연결 방법
- 전원 공급 설정
- 아두이노 5V → 브레드보드 빨간색 줄(+)
- 아두이노 GND → 브레드보드 파란색 줄(-)
- I2C LCD 연결 (지난 시간과 동일해요!)
- VCC → 브레드보드 빨간색 줄(+)
- GND → 브레드보드 파란색 줄(-)
- SDA → 아두이노 A4
- SCL → 아두이노 A5
- 초음파 센서 연결 (새롭게 추가!)
- VCC → 브레드보드 빨간색 줄(+)
- GND → 브레드보드 파란색 줄(-)
- TRIG → 아두이노 디지털 4번 핀
- ECHO → 아두이노 디지털 3번 핀
슬라이드 그림처럼 각 부품의 VCC와 GND를 브레드보드 전원 라인에 연결하면, 여러 부품을 사용하더라도 선이 엉키지 않고 깔끔하게 회로를 구성할 수 있어요.
Slide 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 객체 생성 |
| 08 | LiquidCrystal_I2C lcd(0x20, 16, 2); |
| 09 | |
| 10 | // 10~16행: setup() 함수 - 초기 설정 |
| 11 | void 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() 함수, 즉 핵심 로직 부분을 살펴볼게요. 이 코드는 전원이 꺼질 때까지 계속해서 반복 실행됩니다.
| 18 | // 18~41행: loop() 함수 - 무한 반복 |
| 19 | void 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단계로 동작해요.
- 초음파 발사 (19~24행): TRIG 핀에 아주 짧은 시간(10마이크로초) 동안 HIGH 신호를 보내 '삑!'하고 초음파를 발사시킵니다.
- 거리 계산 (27행):
pulseIn(ECHO, HIGH)함수를 이용해 초음파가 발사된 후 다시 돌아올 때까지 걸린 시간을 측정해요. 이 시간을58.2로 나누면 우리가 원하는 cm 단위의 거리가 계산됩니다. 소수점까지 정밀하게 계산하기 위해float(실수형) 변수를 사용했어요. - 화면 지우기 (31~32행): 새로운 값을 출력하기 전에 이전 값을 지워줘야 해요.
lcd.print(" ");처럼 공백 16개를 출력해서 첫 번째 줄을 깨끗하게 덮어쓰는 방식을 사용했답니다. 이 코드가 없으면 숫자가 겹쳐서 이상하게 보일 수 있어요. - 거리 정보 출력 (35~38행):
lcd.setCursor(0, 0)으로 커서를 맨 앞으로 옮기고, "Dist : ", 계산된 거리 값, " cm" 단위를 차례대로 출력합니다.lcd.print(dist, 1)에서 숫자1은 소수점 첫째 자리까지만 보여달라는 의미예요. - 1초 대기 (40행):
delay(1000)을 통해 이 모든 과정을 1초에 한 번씩 반복하도록 속도를 조절합니다.
Slide 5: 초음파 센서 측정 범위와 주의사항
프로젝트를 테스트하다 보면 신기한 현상을 발견할 수 있어요. 물체를 센서 코앞에 가져갔는데 "0cm"가 아니라 갑자기 300cm가 넘는 엉뚱한 값이 나오지 않던가요? 고장이 아니니 안심하세요! 이건 초음파 센서가 가진 '측정 한계' 또는 '눈앞의 사각지대' 때문이에요.
마치 산에서 "야호~!"하고 외쳤는데, 바로 앞 절벽에 소리가 부딪혀 메아리가 돌아오면 내 외침과 메아리가 겹쳐서 제대로 들을 수 없는 것과 같아요. 센서도 소리를 발사하고 수신하는 시간이 너무 짧으면 신호가 엉켜서 거리를 제대로 인식하지 못하는 거죠.
✅ 초음파 센서(HC-SR04) 측정 범위
- 정상 측정 범위: 약 2cm ~ 400cm
- 측정 불가 영역: 0cm ~ 2cm
- 이 영역에서는 너무 가까워서 인식을 못 하거나, 최대 거리 값 같은 오류를 출력해요.
- 우리가 사용하는 틴커캐드 시뮬레이터도 이런 물리적 한계를 똑같이 재현해 놓았답니다. 정말 대단하죠?
💡 핵심 권장 사항
거리를 측정할 때는 항상 센서와 물체 사이에 최소 2~3cm (손가락 두 마디 정도)의 거리를 유지해 주세요! 그래야 정확한 값을 얻을 수 있습니다.
오늘은 초음파 센서와 LCD를 결합하여 컴퓨터 없이도 스스로 작동하는 '휴대용 거리 측정기'를 만들어 보았어요. 이제 여러분은 아두이노가 주변 환경을 감지하고, 그 결과를 사용자에게 직접 보여주는 멋진 장치를 만들 수 있게 되었습니다!
이 원리를 응용하면 자동차 후방 감지 센서, 스마트 휴지통, 액체의 높이를 재는 수위 측정기 등 정말 무궁무진한 프로젝트로 발전시킬 수 있답니다.
오늘 배운 내용 중 궁금한 점이 있다면 언제든지 댓글로 질문해주세요. 그럼 다음 시간에도 더욱 재미있고 유익한 프로젝트로 다시 만나요! 👋
이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.
댓글 없음:
댓글 쓰기