콘텐츠로 이동

2주차 통합 미션 - 스마트 접근 알림 시스템

📍 Part 2: 거리와 빛으로 세상 감지


🎯 이 장에서 배우는 것

  • 조도센서와 거리센서를 하나의 시스템으로 통합할 수 있다
  • 거리에 따른 다단계 경고(시각 + 청각)를 구현할 수 있다
  • 환경 조건(밝기)에 따라 동작을 변경하는 로직을 만들 수 있다
  • 실제 설치 장소를 고려한 프로토타입을 완성할 수 있다
  • 2주차에 배운 모든 개념을 종합 활용할 수 있다

💡 왜 이걸 배우나요?

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│  🏠 현관 자동 조명         🚗 후방 감지 센서                 │
│  ┌─────────────┐          ┌─────────────┐                  │
│  │  어두우면   │          │ 가까워지면  │                  │
│  │  + 사람 오면│          │ 삐삐빅!     │                  │
│  │  = 불 켜짐  │          │             │                  │
│  └─────────────┘          └─────────────┘                  │
│                                                             │
│  🏪 자동문                 📱 스마트폰 근접 센서            │
│  ┌─────────────┐          ┌─────────────┐                  │
│  │ 다가가면    │          │ 얼굴 가까이 │                  │
│  │ 문이 열림   │          │ → 화면 꺼짐 │                  │
│  └─────────────┘          └─────────────┘                  │
│                                                             │
│         💡 이 모든 것의 공통점?                              │
│         → "센서 조합 + 조건에 따른 반응"                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2주차 동안 조도센서와 거리센서를 따로따로 배웠어. 이제 이것들을 합쳐서 진짜 쓸모 있는 물건을 만들어볼 시간이야!

실제 세상의 스마트 기기들은 하나의 센서만 쓰는 경우가 거의 없어. 여러 센서를 조합해서 더 똑똑하게 동작하지. 오늘 만들 "스마트 접근 알림 시스템"은:

  1. 거리를 감지해서 누가 다가오는지 알고
  2. 밝기에 따라 민감도를 조절하고
  3. 단계별 경고로 시각과 청각 피드백을 줘

화장실 앞, 개인 사물함, 내 책상 영역... 실제로 설치할 장소를 상상하면서 만들어보자!


📚 핵심 개념

개념 1: 다중 센서 시스템

비유로 시작: 너의 몸은 다중 센서 시스템이야. 눈(시각) + 귀(청각) + 피부(촉각)가 동시에 정보를 수집해서 뇌가 종합 판단하지. 눈만으로는 뒤에서 다가오는 사람을 모르지만, 귀가 발소리를 듣고 알려주잖아?

정확한 정의: 다중 센서 시스템은 2개 이상의 센서에서 데이터를 동시에 수집하고, 이를 조합하여 판단하는 시스템이야.

예시로 확인:

단일 센서:  거리 < 30cm  →  경고
다중 센서:  거리 < 30cm  AND  어두움  →  더 강한 경고
                                        (밤에는 더 민감하게!)

쉽게 말하면: 센서 여러 개를 합치면 더 똑똑한 판단이 가능해!


개념 2: 다단계 경고 시스템

비유로 시작: 자동차 후방 센서 생각해봐. 멀 때는 "삐...삐...삐", 가까워지면 "삐.삐.삐", 아주 가까우면 "삐삐삐삐삐!" 이렇게 거리에 따라 경고 강도가 달라지지.

정확한 정의: 측정값의 범위를 여러 단계로 나누고, 각 단계마다 다른 출력을 제공하는 시스템이야.

┌─────────────────────────────────────────────────────────────┐
│                     다단계 경고 구조                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  거리(cm)   0     10      30       50      ∞                │
│            ├──────┼───────┼────────┼───────┤               │
│            │위험⚠️ │ 주의🟡 │ 안전🟢  │ 무반응 │               │
│            │      │       │        │       │               │
│  LED       │빨강🔴 │노랑🟡  │초록🟢   │ 꺼짐   │               │
│  부저      │경고음 │짧은 삐 │ 없음    │ 없음   │               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

쉽게 말하면: 센서 값에 따라 "안전/주의/위험" 같은 단계를 만들어 반응해!


개념 3: 환경 적응 로직

비유로 시작: 휴대폰 자동 밝기 기능처럼! 밝은 곳에서는 화면이 밝아지고, 어두운 곳에서는 어두워지잖아. 환경에 맞춰서 동작이 바뀌는 거야.

정확한 정의: 센서 A의 값에 따라 센서 B의 동작 기준(임계값)이나 출력 방식을 변경하는 로직이야.

예시로 확인:

# 환경 적응 로직 예시
if 조도 < 300:  # 어두운 환경
    경고_거리 = 50  # 더 먼 거리에서도 경고 (민감하게)
else:           # 밝은 환경
    경고_거리 = 30  # 가까이 와야 경고 (덜 민감하게)

쉽게 말하면: 밤에는 예민하게, 낮에는 느긋하게 반응하도록!


🔨 따라하기

Step 1: 회로 연결 - 모든 부품 합체!

목표: 조도센서, 거리센서, LED 3개, 부저를 모두 연결

┌─────────────────────────────────────────────────────────────┐
│                    스마트 접근 알림 시스템                     │
│                      전체 회로 구성                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   [Raspberry Pi Pico]                                       │
│   ┌─────────────────┐                                       │
│   │                 │                                       │
│   │ GP28 ←─────────── [조도센서] (A2 포트)                  │
│   │                 │    │                                  │
│   │ GP6  ──────────── [초음파 Trig]                         │
│   │ GP7  ←─────────── [초음파 Echo] (D7 포트)               │
│   │                 │                                       │
│   │ GP18 ──────────→ [빨간 LED] (D18 포트)                  │
│   │ GP19 ──────────→ [노란 LED] (D19 포트)                  │
│   │ GP20 ──────────→ [초록 LED] (D20 포트)                  │
│   │                 │                                       │
│   │ GP16 ──────────→ [부저] (D16 포트)                      │
│   │                 │                                       │
│   └─────────────────┘                                       │
│                                                             │
│  📍 Grove Shield 포트 연결:                                  │
│     • A2 포트 → 조도센서                                     │
│     • D7 포트 → 초음파 거리센서                              │
│     • D18 포트 → 빨간 LED                                   │
│     • D19 포트 → 노란 LED                                   │
│     • D20 포트 → 초록 LED                                   │
│     • D16 포트 → 부저                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

실제 연결 모습:

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│        [조도센서]         [초음파센서]                        │
│            │                  │                             │
│            ▼                  ▼                             │
│  ┌─────────────────────────────────────┐                   │
│  │     Grove Shield for Pico           │                   │
│  │  ┌─────────────────────────────┐   │                   │
│  │  │    Raspberry Pi Pico        │   │                   │
│  │  └─────────────────────────────┘   │                   │
│  └─────────────────────────────────────┘                   │
│            │       │       │       │                        │
│            ▼       ▼       ▼       ▼                        │
│        [빨강]   [노랑]   [초록]   [부저]                      │
│         LED      LED      LED                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

여기서 잠깐! 🤔

부품이 많아서 복잡해 보이지만, 각각은 이미 배운 것들이야! - 조도센서: Chapter 11에서 배움 - 거리센서: Chapter 12에서 배움
- LED, 부저: 1주차에서 배움

새로운 건 "합치는 것"뿐이야!


Step 2: 기본 시스템 - 거리 단계별 LED

목표: 거리에 따라 초록 → 노랑 → 빨강 LED 켜기

코드: ```python

=== WHAT: 거리 단계별 LED 신호등 ===

거리에 따라 3단계로 LED가 바뀌는 기본 시스템

from machine import Pin, ADC import time

--- WHY: 각 핀에 연결된 부품을 제어하기 위해 ---

초음파 센서 핀

trig = Pin(6, Pin.OUT) # 초음파 발사 echo = Pin(7, Pin.IN) # 반사파 수신

LED 3개 (신호등 역할)

led_red = Pin(18, Pin.OUT) # 빨강: 위험! led_yellow = Pin(19, Pin.OUT) # 노랑: 주의 led_green = Pin(20, Pin.OUT) # 초록: 안전

HOW: 거리 측정 함수 (Chapter 12에서 배운 것)

def measure_distance(): """초음파로 거리(cm) 측정""" # 초음파 발사 (10us 동안) trig.low() time.sleep_us(2) trig.high() time.sleep_us(10) trig.low()

# 반사파 대기 (타임아웃 방지)
timeout = time.ticks_us()
while echo.value() == 0:
    if time.ticks_diff(time.ticks_us(), timeout) > 30000:
        return -1  # 타임아웃
    start = time.ticks_us()

while echo.value() == 1:
    if time.ticks_diff(time.ticks_us(), timeout) > 30000:
        return -1  # 타임아웃
    end = time.ticks_us()

# 거리 계산: 시간(us) × 음속(cm/us) ÷ 2(왕복)
duration = time.ticks_diff(end, start)
distance = duration * 0.0343 / 2

return distance

HOW: 모든 LED 끄는 함수 (깔끔하게 관리하기 위해)

def all_leds_off(): """모든 LED 끄기""" led_red.low() led_yellow.low() led_green.low()

--- 메인 루프: 거리 측정 → LED 제어 ---

print("🚦 거리 단계별 LED 시스템") print("─" * 30)

while True: distance = measure_distance()

if distance < 0:
    print("측정 실패")
else:
    # 모든 LED 끄고 시작
    all_leds_off()

    # 거리에 따라