안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
지난 시간에는 아두이노와 초음파 센서를 이용해 사물과의 거리를 측정하는 방법을 배웠죠? 오늘은 여기서 한 걸음 더 나아가, 이 거리 측정 기술을 실생활에 유용한 장치로 만들어보는 시간을 가질 거예요. 바로 자동차의 '후방 감지기'입니다!
자동차가 후진할 때 장애물과의 거리에 따라 경고음의 빠르기가 달라지는 것, 다들 경험해보셨죠? 오늘 우리가 만들 장치가 바로 그 원리를 그대로 구현한답니다. 그럼, 지금부터 저와 함께 안전 운전을 도와줄 똑똑한 후방 감지기 만들기를 시작해볼까요?
Slide 1: 3장. 자동차 후방 감지기 만들기
이번 시간의 목표는 명확해요. 바로 초음파 센서로 측정한 거리 값에 따라 '소리'로 경고를 보내는 자동차 후방 감지기를 만드는 것이죠. 거리가 가까워질수록 경고음이 더 빠르고 긴박하게 울리도록 만들어, 실제 자동차의 후방 센서처럼 실감 나게 동작하는 장치를 완성해볼 거예요.
Slide 2: 후방 감지기 회로 구성
가장 먼저 하드웨어를 준비하고 연결해야겠죠?
✅ 준비물
- 아두이노 UNO
- 초음파 센서 (HC-SR04)
- 피에조 부저 (Piezo Buzzer)
- 작은 브레드보드와 점퍼선
이번 회로는 지난 시간에 만들었던 초음파 센서 회로에 '소리'를 내는 피에조 부저 하나만 추가하면 완성돼요. 정말 간단하죠?
✅ 회로 연결 방법
- 초음파 센서 (기존 회로 유지):
Vcc핀 → 아두이노5VGND핀 → 아두이노GNDTrig핀 → 아두이노 디지털4번핀Echo핀 → 아두이노 디지털3번핀
- 피에조 부저 (새로 추가!):
- 부저를 잘 보면 다리 길이가 다른데요, 긴 다리가 플러스(+)극, 짧은 다리가 마이너스(-)극이에요. 윗면에
+표시로 구분할 수도 있답니다. - 긴 다리(+) → 아두이노 디지털
11번핀 (신호를 받는 쪽) - 짧은 다리(-) → 아두이노
GND(전기가 흐르는 길)
- 부저를 잘 보면 다리 길이가 다른데요, 긴 다리가 플러스(+)극, 짧은 다리가 마이너스(-)극이에요. 윗면에
브레드보드의 빈 공간에 부저를 꽂고, 위 설명대로 점퍼선을 연결해주세요. 이렇게 하면 하드웨어 준비는 끝입니다!
Slide 3: 후방 감지기 코드 (1) - 거리 측정
이제 아두이노에 생명을 불어넣을 코드를 살펴볼 차례예요. 코드의 첫 번째 부분은 지난 시간에 배운 '거리 측정' 로직과 완전히 똑같아요. 복습하는 기분으로 가볍게 살펴볼까요?
| 10 | void loop() { |
| 11 | // 1. 거리 측정하기 |
| 12 | digitalWrite(TRIG, LOW); |
| 13 | delayMicroseconds(2); |
| 14 | digitalWrite(TRIG, HIGH); |
| 15 | delayMicroseconds(10); |
| 16 | digitalWrite(TRIG, LOW); |
| 17 | |
| 18 | long dist = pulseIn(ECHO, HIGH) / 58.2; // 거리 계산 (cm) |
| 19 | Serial.println(dist); // 거리 값 확인용 출력 |
| 20 | } |
- 12~16줄:
TRIG핀에 짧은 순간(10 마이크로초) 동안HIGH신호를 보내 초음파를 '발사!' 시켜요. - 18줄:
pulseIn()함수를 이용해ECHO핀으로 초음파가 되돌아올 때까지의 시간을 측정하고, 이 시간을58.2로 나누어 센티미터(cm) 단위의 거리로 변환해요. 이 값을dist라는 변수에 저장합니다. - 19줄:
Serial.println(dist)를 통해 측정된 거리 값을 시리얼 모니터에서 눈으로 확인할 수 있어요. 코드가 잘 동작하는지 확인할 때 아주 유용하죠.
이 부분은 우리가 만든 감지기의 '눈' 역할을 하는 핵심 로직이랍니다.
Slide 4: 후방 감지기 코드 (2) - 위험/주의 경고
거리를 측정했다면, 이제 그 거리에 따라 다른 행동을 하도록 만들어야겠죠? 여기서 바로 프로그래밍의 꽃, 조건문(if-else if)이 등장합니다.
| 21 | // 2. 거리에 따른 경고음 울리기 |
| 22 | if (dist < 10) { // 거리가 10cm 미만이면 (매우 위험) |
| 23 | tone(11, 362, 100); // 11번 핀 부저 울리기 |
| 24 | delay(100); // 아주 짧게 쉬기 (빠른 박자) |
| 25 | } |
| 26 | else if (dist < 20) { // 거리가 20cm 미만이면 (주의) |
| 27 | tone(11, 362, 100); |
| 28 | delay(250); // 적당히 쉬기 (중간 박자) |
| 29 | } |
🚨 10cm 미만 (매우 위험)
if (dist < 10): 만약 거리가 10cm보다 가깝다면, 가장 긴급한 상황이에요!tone(11, 362, 100): 11번 핀에 연결된 부저를 362Hz 음으로 0.1초간 울립니다.delay(100): 0.1초 동안 아주 짧게 쉬어줘요.- 결과: 소리가 나고 아주 잠깐 쉬는 동작이 빠르게 반복되면서 "삐-삐-삐!" 하는 다급한 경고음이 들리게 됩니다.
⚠️ 10cm ~ 20cm (주의)
else if (dist < 20): 10cm 이상이지만 20cm보다 가깝다면, '주의'가 필요한 상황이죠.tone(...)함수로 소리를 내는 것은 같지만,delay(250)으로 쉬는 시간이 0.25초로 조금 길어졌어요.- 결과: 중간 빠르기의 "삐- 삐-" 하는 경고음이 울립니다.
Slide 5: 후방 감지기 코드 (3) - 관심/안전 알림
계속해서 다른 거리 조건들도 살펴볼까요?
| 30 | else if (dist < 30) { // 거리가 30cm 미만이면 (관심) |
| 31 | tone(11, 362, 100); |
| 32 | delay(500); // 길게 쉬기 (느린 박자) |
| 33 | } |
| 34 | else { // 거리가 30cm 이상이면 (안전) |
| 35 | noTone(11); // 소리 끄기 |
| 36 | } |
🟡 20cm ~ 30cm (관심)
else if (dist < 30): 20cm 이상, 30cm 미만의 '관심' 구간이에요.delay(500)으로 쉬는 시간이 0.5초로 더 길어졌어요.- 결과: "삐-- 삐--" 하고 여유 있는, 느린 경고음이 울립니다.
🟢 30cm 이상 (안전)
else: 위 모든 조건에 해당하지 않을 때, 즉 거리가 30cm 이상일 때는 안전하다는 의미겠죠?noTone(11): 11번 핀에서 나던 소리를 완전히 끕니다.- 결과: 아무 소리도 나지 않는 조용한 상태가 됩니다.
코드를 업로드하고 센서 앞에 손을 가까이 가져갔다 멀리 떼어보세요. 거리에 따라 경고음의 박자가 달라지는 것을 들으면 정말 신기할 거예요!
Slide 6: 후방 감지기 동작 원리 정리
오늘 우리가 만든 후방 감지기의 핵심 원리를 정리해볼까요?
- 다단계 경고 시스템: 단순히 '장애물이 있다/없다'가 아니라, 거리를 4단계(매우 위험, 주의, 관심, 안전)로 나누어 각기 다른 빠르기의 경고음을 보냈어요.
- 조건 판단의 핵심
if-else if: 이 다단계 시스템을 구현할 수 있었던 것은 바로if-else if-else조건문 덕분이에요. 측정된 거리(dist) 값에 따라 어떤 코드를 실행할지 아두이노가 스스로 판단하게 만들었죠. - 실제 기술과의 연결: 이 원리는 놀랍게도 실제 자동차 후방 센서와 거의 동일해요. 거리가 가까울수록 경고음이 긴박하게 울리는 것, 바로 오늘 우리가 배운 내용이랍니다!
어떠셨나요? 오늘은 초음파 센서라는 부품 하나에 조건문이라는 프로그래밍 논리를 더해, 우리 생활에 정말 유용한 '후방 감지기'를 만들어 보았어요. 단순한 거리 측정을 넘어, 상황에 따라 다른 피드백을 주는 스마트한 장치를 직접 구현해 본 것이죠.
오늘 배운 내용을 응용하면 더 재미있는 프로젝트도 가능해요. 예를 들어 경고음의 높낮이를 바꿔보거나, 거리 단계를 더 세분화할 수도 있겠죠? 여러분만의 아이디어를 더해 멋진 작품으로 발전시켜 보세요!
오늘도 정말 수고 많으셨습니다. 다음 시간에는 더 흥미로운 센서 이야기로 돌아올게요! 궁금한 점이 있다면 언제든 댓글로 남겨주세요! 👋
이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초] **-** 페이지에 수록된 내용입니다.
댓글 없음:
댓글 쓰기