콘텐츠로 이동

챕터 8: 빛을 숫자로 - 조도센서 기초

🎯 이 장에서 배우는 것

  • 아날로그와 디지털의 차이를 설명할 수 있다
  • ADC(아날로그-디지털 변환)의 개념을 이해할 수 있다
  • 조도센서를 Pico에 연결하고 빛의 밝기를 숫자로 읽을 수 있다
  • 조도 값의 의미를 해석하고 다양한 환경에서 테스트할 수 있다
  • 조도센서를 활용한 프로젝트 아이디어를 구상할 수 있다

💡 왜 이걸 배우나요?

지금까지 버튼은 "눌림/안눌림" 두 가지뿐이었어. 세상을 0과 1로만 보는 거지.

하지만 진짜 세상은 어때?

☀️ 햇빛이 쨍쨍한 날     → 아주 밝음
🌤️ 흐린 날              → 약간 밝음  
🏠 실내 형광등          → 중간 밝음
🌙 밤에 스탠드만        → 어두움
🌑 불 다 끈 방          → 아주 어두움

밝기는 "밝다/어둡다" 두 가지가 아니라 무한히 많은 단계가 있어. 이걸 어떻게 컴퓨터에게 전달할 수 있을까?

바로 아날로그 센서ADC의 마법이야!

실생활에서 조도센서는 어디에?

┌─────────────────────────────────────────────────────────────┐
│  📱 스마트폰 화면     → 어두우면 자동으로 화면 밝기 낮춤    │
│  🚗 자동차 헤드라이트 → 터널 들어가면 자동으로 켜짐        │
│  💡 가로등           → 해 지면 자동으로 켜짐               │
│  🌱 스마트 화분      → 빛 부족하면 LED 성장등 켜짐         │
└─────────────────────────────────────────────────────────────┘

이번 챕터에서 배우면, 너도 이런 것들을 직접 만들 수 있어!


📚 핵심 개념

개념 1: 디지털 vs 아날로그

비유로 시작: 디지털은 계단, 아날로그는 경사로야.

디지털 (계단)              아날로그 (경사로)
    ┌───┐                      ╱
    │   │                    ╱
┌───┘   └───┐              ╱
│           │            ╱
┘           └───       ╱

딱딱 끊어지는 값         부드럽게 연속되는 값
0 또는 1만 가능          무한히 많은 값 가능

정확히 말하면: - 디지털(Digital): 정해진 값만 가질 수 있어. 버튼은 0(안눌림) 또는 1(눌림) 딱 두 개. - 아날로그(Analog): 연속적인 값을 가질 수 있어. 밝기, 온도, 소리 크기 등 자연의 모든 것.

예시로 확인: | 구분 | 디지털 예시 | 아날로그 예시 | |------|------------|--------------| | 스위치 | ON/OFF | - | | 조명 | - | 밝기 0%~100% | | 시계 | 디지털 숫자 시계 | 아날로그 바늘 시계 | | 온도 | - | 실제 기온 (23.7°C) |

쉽게 말하면: 버튼처럼 딱딱 끊어지면 디지털, 볼륨 다이얼처럼 부드럽게 변하면 아날로그야.


개념 2: ADC (아날로그-디지털 변환)

비유로 시작: ADC는 "아날로그 통역사"야.

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   🌞 빛 (아날로그)                                          │
│        │                                                    │
│        ▼                                                    │
│   ┌─────────┐                                               │
│   │  조도   │  "지금 밝기가 이 정도야"                      │
│   │  센서   │  (전압으로 표현)                              │
│   └────┬────┘                                               │
│        │ 전압 (0V ~ 3.3V) ← 아날로그 신호                   │
│        ▼                                                    │
│   ┌─────────┐                                               │
│   │  ADC    │  "0V~3.3V를 0~65535 숫자로 바꿔줄게!"        │
│   │ (변환기)│                                               │
│   └────┬────┘                                               │
│        │ 숫자 (0 ~ 65535) ← 디지털 값                       │
│        ▼                                                    │
│   ┌─────────┐                                               │
│   │  Pico   │  "오! 지금 32000이네. 중간 밝기구나!"        │
│   │  코드   │                                               │
│   └─────────┘                                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

정확히 말하면: - ADC (Analog-to-Digital Converter): 아날로그 신호(전압)를 디지털 숫자로 변환하는 장치 - Pico의 ADC는 16비트 → 0부터 65535까지 (2^16 = 65,536가지) 표현 가능

왜 65535일까?

16비트 = 16자리 이진수
가장 큰 값 = 1111111111111111 (2진수)
         = 65535 (10진수)

0V   → 0
3.3V → 65535
1.65V → 약 32768 (중간)

쉽게 말하면: ADC는 "이 정도 밝기면 숫자로 32000쯤 되겠다"라고 번역해주는 통역사야.


개념 3: 조도센서의 원리

비유로 시작: 조도센서는 "빛을 먹고 전기를 내뿜는 작은 태양광 패널" 같아.

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   빛이 강할 때 (밝음)         빛이 약할 때 (어두움)         │
│                                                             │
│      ☀️☀️☀️                        🌙                      │
│        │││                          │                       │
│        ▼▼▼                          ▼                       │
│   ┌─────────┐                  ┌─────────┐                  │
│   │ 조도    │                  │ 조도    │                  │
│   │ 센서    │                  │ 센서    │                  │
│   └────┬────┘                  └────┬────┘                  │
│        │                            │                       │
│   높은 전압 출력                낮은 전압 출력              │
│   (3.0V 근처)                   (0.5V 근처)                 │
│        │                            │                       │
│        ▼                            ▼                       │
│   ADC → 큰 숫자                ADC → 작은 숫자              │
│   (50000~65535)                (0~10000)                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

정확히 말하면: - 조도센서 안에는 포토레지스터 또는 포토다이오드가 있어 - 빛을 받으면 전기적 특성이 변해서 전압이 달라짐 - 이 전압 변화를 ADC가 숫자로 변환

Grove 조도센서 특징: - 측정 범위: 0 ~ 1000 Lux (일반 실내 조명 충분히 측정) - 출력: 아날로그 전압 (0V ~ 3.3V) - 연결: Grove 케이블로 간단 연결

쉽게 말하면: 밝으면 큰 숫자, 어두우면 작은 숫자가 나와!


🤔 생각해보기

잠깐! 디지털은 0과 1뿐이라면서, 왜 0~65535까지 숫자가 나와?

좋은 질문이야! 65535도 결국 0과 1의 조합이야.

32768 = 1000000000000000 (2진수, 16자리)
65535 = 1111111111111111 (2진수, 16자리)
컴퓨터는 내부적으로 모든 걸 0과 1로 처리하지만, 우리에게는 편하게 10진수로 보여주는 거야!


🔨 따라하기

Step 1: 조도센서 연결하기

목표: Grove 조도센서를 Pico에 연결한다.

준비물: - Raspberry Pi Pico (또는 Pico W/Pico 2) - Grove Shield for Pico - Grove 조도센서 (Light Sensor v1.2) - Grove 케이블 1개

연결 방법:

┌─────────────────────────────────────────────────────────────┐
│  Grove Shield for Pico                                      │
│                                                             │
│   ┌─────────────────────────────────────┐                   │
│   │                                     │                   │
│   │    [A0] [A1] [A2]  ← 아날로그 포트  │                   │
│   │     ↑                               │                   │
│   │     │                               │                   │
│   │  조도센서                           │                   │
│   │  연결                               │                   │
│   │                                     │                   │
│   │    [D16] [D18] [D20] ← 디지털 포트  │                   │
│   │                                     │                   │
│   └─────────────────────────────────────┘                   │
│                                                             │
│   ⚠️ 조도센서는 반드시 A0, A1, A2 중 하나에 연결!          │
│      (디지털 포트에 연결하면 안 돼요)                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

연결 순서: 1. Pico를 Grove Shield에 꽂는다 (USB 포트 방향 확인!) 2. Grove 케이블의 한쪽을 조도센서에 연결 3. 케이블의 다른 쪽을 Shield의 A0 포트에 연결 4. USB 케이블로 Pico를 컴퓨터에 연결

여기서 잠깐! 🤔

A0? 그게 뭐야?

A = Analog(아날로그)의 약자 0 = 첫 번째 포트

아날로그 센서(조도, 소리 크기 등)는 반드시 A0, A1, A2 포트에 연결해야 해! D16, D18 같은 디지털 포트에 연결하면 제대로 값을 읽을 수 없어.


Step 2: 첫 번째 코드 - 조도 값 읽기

목표: 조도센서의 값을 읽어서 화면에 출력한다.

코드:

# === WHAT: 조도센서 값 읽기 ===
# 조도센서로 현재 밝기를 측정해서 숫자로 출력하는 코드

# --- WHY: 필요한 이유 ---
# 빛의 밝기를 숫자로 알아야 "어두우면 불 켜기" 같은 자동화가 가능해

from machine import ADC, Pin  # ADC: 아날로그 값을 읽는 기능
import time                    # time: 시간 관련 기능

# HOW: 조도센서 설정
# A0 포트는 GPIO 26번에 연결되어 있음
light_sensor = ADC(Pin(26))    # ADC 객체 생성, GPIO 26번 사용

# 무한 반복하며 값 읽기
while True:
    # 조도센서 값 읽기 (0 ~ 65535)
    light_value = light_sensor.read_u16()  # u16 = unsigned 16-bit (0~65535)

    # 화면에 출력
    print("밝기:", light_value)

    # 0.5초 대기 (너무 빠르면 읽기 힘들어)
    time.sleep(0.5)

실행 결과 (환경에 따라 다름): ``` 밝기: 45231