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) 순서!
✅ 점검하기¶
map(32767, 0, 65535, 0, 100)의 결과는?
정답 확인
약 50 (중간값은 중간으로 변환)- 가로등은 왜 밤에 자동으로 켜질까요?
정답 확인
조도 센서가 어두움을 감지하면 조명을 켜도록 프로그래밍되어 있기 때문🔗 다음 장 미리보기¶
다음 장에서는 초음파 센서로 거리를 측정해볼 거예요! 🦇