콘텐츠로 이동

Chapter 10: 조도 센서로 빛의 밝기 측정하기

🎯 이 장에서 배우는 것

  • [ ] 조도 센서의 아날로그 값을 읽을 수 있다
  • [ ] ADC(아날로그-디지털 변환) 개념을 이해한다
  • [ ] 밝기 변화를 숫자로 확인할 수 있다

⏱️ 예상 학습 시간: 약 45분


📚 핵심 개념

개념: ADC (Analog-to-Digital Conversion)

비유로 시작할게요 🎵

ADC는 마치 아날로그 음악을 MP3로 변환하는 것과 같아요!

flowchart LR A["🎸 연속적인 소리<br/>(아날로그)"] --> B["🔄 ADC<br/>변환기"] --> C["💾 숫자 데이터<br/>(디지털)"] style A fill:#fff3e0,stroke:#ff9800 style B fill:#e3f2fd,stroke:#2196f3 style C fill:#e8f5e9,stroke:#4caf50

정확한 정의: - 빛의 밝기는 연속적인 값 (아날로그) - ESP32는 이를 0~4095 숫자로 변환 (디지털) - 12비트 해상도: 2¹² = 4,096단계

예시로 확인: | 상황 | 아날로그 값 | 의미 | |------|------------|------| | 어두움 | 0~500 | 센서에 빛이 거의 없음 | | 실내 | 1000~2500 | 일반적인 조명 | | 밝음 | 3000~4095 | 강한 빛 |


🔨 따라하기

Step 1: 회로 연결하기

조도 센서(포토레지스터)를 연결해요.

조도 센서 → ESP32
━━━━━━━━━━━━━━━━
VCC      → 3.3V
GND      → GND
OUT      → GPIO 34 (ADC1)

💡 GPIO 34, 35, 36, 39는 입력 전용 핀이에요. ADC 읽기에 적합해요!


Step 2: 밝기 값 읽기

코드:

from machine import ADC, Pin
import time

# 조도 센서 설정 (GPIO 34)
light_sensor = ADC(Pin(34))
light_sensor.atten(ADC.ATTN_11DB)  # 0~3.3V 범위

while True:
    value = light_sensor.read()  # 0~4095
    print(f"밝기: {value}")
    time.sleep(0.5)

실행 결과:

밝기: 2847
밝기: 2851
밝기: 1203  ← 손으로 가렸을 때
밝기: 3891  ← 조명 비췄을 때

체크포인트: 손으로 센서를 가리면 값이 낮아지나요?


📝 전체 코드

from machine import ADC, Pin
import time

# 조도 센서 초기화
light_sensor = ADC(Pin(34))
light_sensor.atten(ADC.ATTN_11DB)

def get_brightness_level(value):
    """밝기 수준 판단"""
    if value < 1000:
        return "어두움 🌙"
    elif value < 2500:
        return "보통 💡"
    else:
        return "밝음 ☀️"

# 측정 시작
while True:
    value = light_sensor.read()
    level = get_brightness_level(value)
    print(f"측정값: {value}{level}")
    time.sleep(1)

⚠️ 주의할 점

  1. ADC 핀 선택: GPIO 34, 35, 36, 39만 ADC 입력 가능
  2. 감쇠 설정: ATTN_11DB를 설정해야 0~3.3V 전체 범위 측정

✅ 점검하기

  1. ADC가 하는 역할은 무엇인가요?
정답 확인연속적인 아날로그 신호를 디지털 숫자(0~4095)로 변환합니다.
  1. ESP32의 ADC 해상도는 몇 비트인가요?
정답 확인12비트 (0~4095, 총 4096단계)
  1. 센서를 손으로 가리면 값이 어떻게 변하나요?
정답 확인빛이 차단되어 값이 낮아집니다.

🔗 다음 장 미리보기

다음 장에서는 수온 센서(DS18B20)로 물의 온도를 측정해볼 거예요. 디지털 통신 방식인 1-Wire 프로토콜을 배워봅니다! 🌡️