콘텐츠로 이동

22장. 조도에 따른 자동 조명 시스템 만들기

🎯 이 장에서 배우는 것

  • [ ] map() 함수로 값의 범위를 변환할 수 있다
  • [ ] 어두워지면 LED가 밝아지는 자동 조명을 만들 수 있다

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


📚 핵심 개념

개념: map() 함수

비유: map()번역기와 같아요!

조도 센서는 0~65535 범위의 숫자를 말하고, LED는 0~100 범위만 이해해요. map() 함수가 이 둘 사이를 번역해줍니다.

flowchart LR A["조도 센서<br/>0~65535"] --> B["map() 번역기"] B --> C["LED 밝기<br/>0~100"] style B fill:#fff3e0,stroke:#f57c00

형식:

map(, 원래_최소, 원래_최대, 새_최소, 새_최대)


🔨 따라하기

Step 1: map 함수 만들기

def map(value, from_min, from_max, to_min, to_max):
    return (value - from_min) * (to_max - to_min) / (from_max - from_min) + to_min

Step 2: 자동 조명 완성

# 어두우면(값 작음) → LED 밝게(값 큼)
brightness = map(light, 0, 65535, 100, 0)  # 순서 반대!
led.duty(brightness)

📝 전체 코드

from machine import Pin, ADC, PWM
import time

# 설정
cds = ADC(Pin(34))
led = PWM(Pin(15), freq=1000)

def map(value, from_min, from_max, to_min, to_max):
    return (value - from_min) * (to_max - to_min) / (from_max - from_min) + to_min

# 실행
while True:
    light = cds.read_u16()
    brightness = int(map(light, 0, 65535, 100, 0))
    led.duty(brightness)
    time.sleep(0.1)

⚠️ 주의할 점

밝기 반전 잊지 마세요! - 어두울 때(조도↓) LED 밝게(밝기↑) → map(..., 100, 0) 순서!


✅ 점검하기

  1. map(32767, 0, 65535, 0, 100)의 결과는?
정답 확인약 50 (중간값은 중간으로 변환)
  1. 가로등은 왜 밤에 자동으로 켜질까요?
정답 확인조도 센서가 어두움을 감지하면 조명을 켜도록 프로그래밍되어 있기 때문

🔗 다음 장 미리보기

다음 장에서는 초음파 센서로 거리를 측정해볼 거예요! 🦇