콘텐츠로 이동

챕터 13: 센서 조합의 힘 - 복합 감지 시스템

🎯 이 장에서 배우는 것

  • 두 개 이상의 센서를 동시에 연결하고 값을 읽을 수 있다
  • AND/OR 논리로 복합 조건을 작성할 수 있다
  • 조도센서와 초음파 센서를 조합한 스마트 시스템을 만들 수 있다
  • 실제 문제 해결을 위한 센서 조합을 설계할 수 있다

💡 왜 이걸 배우나요?

센서 하나로는 부족해!

지금까지 조도센서, 초음파 센서를 각각 사용해봤어. 그런데 실제 스마트 시스템은 센서 하나만 쓰는 경우가 거의 없어.

[현관 자동 조명의 비밀]

❌ 조도센서만 있으면?
   → 낮에도 손으로 가리면 조명이 켜짐 (낭비!)

❌ 거리센서만 있으면?  
   → 밝은 대낮에도 사람 오면 조명이 켜짐 (낭비!)

✅ 조도 + 거리 둘 다 있으면?
   → "어둡고 AND 사람이 가까이 오면" 조명 켜짐 (완벽!)

실생활 속 복합 센서 시스템

┌─────────────────────────────────────────────────────────────┐
│  🚗 자동차 후방 카메라                                       │
│     거리센서 + 카메라 = 가까울 때만 화면 표시                  │
│                                                             │
│  🏠 스마트 홈 조명                                           │
│     조도 + 모션 + 시간 = 필요할 때만 자동 점등                 │
│                                                             │
│  📱 스마트폰 화면 밝기                                       │
│     조도 + 근접센서 = 통화 중엔 화면 끔                       │
│                                                             │
│  🚽 자동 비데                                                │
│     거리 + 온도 + 착석감지 = 사람 앉으면 작동                  │
└─────────────────────────────────────────────────────────────┘

이번 챕터에서 배우는 핵심:

센서를 조합하면 더 똑똑하고 효율적인 시스템이 된다!


📚 핵심 개념

개념 1: 복합 조건 (AND / OR 논리)

비유로 시작: 복합 조건은 마치 놀이공원 입장 조건과 같아요. - "키 120cm 이상 AND 7세 이상" → 둘 다 만족해야 탈 수 있음 - "학생증 OR 청소년증" → 둘 중 하나만 있어도 할인

정확한 정의: 프로그래밍에서 and모든 조건이 참일 때만 참, or하나라도 참이면 참이야.

예시로 확인:

# AND 조건 - 둘 다 만족해야 함
어둡다 = True
가깝다 = True

if 어둡다 and 가깝다:
    print("조명 켜기!")  # 이게 실행됨

# OR 조건 - 하나만 만족해도 됨
버튼_눌림 = False
소리_감지 = True

if 버튼_눌림 or 소리_감지:
    print("알림 울리기!")  # 이것도 실행됨

쉽게 말하면: and는 "그리고", or는 "또는"이야!


개념 2: 센서 조합 설계 패턴

비유로 시작: 센서 조합은 마치 요리 레시피와 같아요. 재료(센서)를 어떻게 조합하느냐에 따라 완전히 다른 요리(시스템)가 나와요.

대표적인 조합 패턴:

┌─────────────────────────────────────────────────────────────┐
│  패턴 1: 조건 필터링 (AND)                                   │
│  ──────────────────────                                     │
│  "A이면서 B일 때만" 동작                                     │
│                                                             │
│  예시: 어두울 때만 거리 감지 작동                             │
│  ┌───────┐    ┌───────┐    ┌───────┐                       │
│  │ 조도  │───▶│ AND?  │───▶│ 거리  │───▶ LED              │
│  │ 어둡냐│    │       │    │ 가깝냐│                       │
│  └───────┘    └───────┘    └───────┘                       │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│  패턴 2: 다중 트리거 (OR)                                    │
│  ──────────────────────                                     │
│  "A거나 B면" 동작                                            │
│                                                             │
│  예시: 버튼 누르거나 손 가까이 오면 알림                       │
│  ┌───────┐                                                  │
│  │ 버튼  │───┐                                              │
│  └───────┘   │   ┌───────┐                                  │
│              ├──▶│  OR?  │───▶ 부저                        │
│  ┌───────┐   │   └───────┘                                  │
│  │ 거리  │───┘                                              │
│  └───────┘                                                  │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│  패턴 3: 단계적 반응                                         │
│  ──────────────────────                                     │
│  센서 값에 따라 다른 동작                                    │
│                                                             │
│  예시: 거리에 따라 다른 색 LED                               │
│  ┌───────┐    ┌────────────────────────────┐               │
│  │ 거리  │───▶│ >50cm: 초록  │ 20-50: 노랑 │───▶ LED       │
│  │ 센서  │    │ <20cm: 빨강  │             │               │
│  └───────┘    └────────────────────────────┘               │
└─────────────────────────────────────────────────────────────┘

쉽게 말하면: 센서 여러 개를 어떤 규칙으로 연결하느냐가 설계의 핵심이야!


개념 3: 센서 동시 읽기

비유로 시작: 센서 동시 읽기는 마치 두 손으로 동시에 온도계와 습도계 확인하는 것과 같아요.

정확한 정의: 하나의 프로그램에서 여러 센서의 값을 순서대로 빠르게 읽어서 마치 동시에 읽는 것처럼 처리해.

while True:
    # 센서 1 읽기
    밝기 = 조도센서.read()

    # 센서 2 읽기  
    거리 = 초음파센서.read()

    # 둘 다 사용해서 판단
    if 밝기 < 1000 and 거리 < 30:
        LED.on()

    time.sleep(0.1)  # 0.1초마다 반복

쉽게 말하면: 컴퓨터가 매우 빨라서 순서대로 읽어도 "동시"처럼 느껴지는 거야!


🔨 따라하기

Step 1: 두 센서 동시에 연결하기

목표: 조도센서와 초음파 센서를 동시에 Pico에 연결하고 값 읽기

회로 연결:

┌─────────────────────────────────────────────────────────────┐
│                    Pico + Grove Shield                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌──────────────┐     연결:                                 │
│  │              │                                           │
│  │   [조도]     │────▶ A0 (아날로그)                        │
│  │              │                                           │
│  │   [초음파]   │────▶ D16 (디지털)                         │
│  │              │                                           │
│  │   [LED 빨강] │────▶ D18                                  │
│  │   [LED 노랑] │────▶ D19                                  │
│  │   [LED 초록] │────▶ D20                                  │
│  │              │                                           │
│  │   [부저]     │────▶ D21                                  │
│  │              │                                           │
│  └──────────────┘                                           │
│                                                             │
│  💡 팁: Grove Shield 덕분에 여러 센서를 쉽게 연결!           │
└─────────────────────────────────────────────────────────────┘

코드:

# === WHAT: 두 센서 동시에 값 읽기 ===
# 조도센서와 초음파 센서의 값을 동시에 읽어서 출력

from machine import Pin, ADC
import time

# --- WHY: 각 센서마다 다른 방식으로 연결 ---
# 조도센서 = 아날로그 (0~65535 범위의 숫자)
# 초음파 = 디지털 (시간 측정으로 거리 계산)

# HOW: 조도센서 설정 (아날로그 입력)
light_sensor = ADC(Pin(26))  # A0 = GP26

# HOW: 초음파 센서 설정 (Trigger와 Echo 핀)
trigger = Pin(16, Pin.OUT)   # 신호 보내는 핀
echo = Pin(17, Pin.IN)       # 신호 받는 핀

# --- 초음파 센서로 거리 측정하는 함수 ---
def get_distance():
    # 초음파 신호 보내기
    trigger.low()
    time.sleep_us(2)
    trigger.high()
    time.sleep_us(10)
    trigger.low()

    # 신호가 돌아오는 시간 측정
    while echo.value() == 0:
        start = time.ticks_us()
    while echo.value() == 1:
        end = time.ticks_us()

    # 시간 → 거리 변환 (소리 속도 이용)
    duration = time.ticks_diff(end, start)
    distance = (duration * 0.0343) / 2  # cm 단위

    return distance

# --- 메인 루프: 두 센서 동시에 읽기 ---
print("=== 두 센서 동시 읽기 시작! ===")
print("조도센서와 초음파 센서 값을 확인해보세요")
print()

while True:
    # 센서 1: 조도 읽기
    light_value = light_sensor.read_u16()

    # 센서 2: 거리 읽기
    distance = get_distance()

    # 두 값 함께 출력
    print(f"밝기: {light_value:5d} | 거리: {distance:5.1f}cm")

    time.sleep(0.5)  # 0.5초마다 측정

실행 결과:

=== 두 센서 동시 읽기 시작! ===
조도센서와 초음파 센서 값을 확인해보세요

밝기: 45230 | 거리:  85.3cm
밝기: 44890 | 거리:  42.1cm
밝기: 12340 | 거리:  15.7cm  ← 손으로 가리고 가까이 댐
밝기: 11200 | 거리:   8.2cm

여기서 잠깐! 🤔

센서가 "동시에" 읽히는 걸까?

사실 컴퓨터는 한 번에 하나씩 순서대로 읽어. 하지만 너무 빨라서 (0.001초도 안 걸림) 우리 눈엔 동시처럼 보여!

시간 흐름 →
────────────────────────────────────
[조도 읽기] [거리 읽기] [출력] [0.5초 대기] [반복...]
   0.001초    0.01초    0.001초

Step 2: AND 조건으로 스마트 조명 만들기

목표: "어둡고 AND 가까이 오면" LED가 켜지는 스마트 조명

``` ┌─────────────────────────────────────────────────────────────┐ │ 📋 동작 시나리오 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 조건 1: 밝기 < 20000 (어두움)