PWM으로 LED 밝기 조절하기¶
🎯 이 장에서 배우는 것¶
- [ ] PWM과 duty cycle 개념을 이해한다
- [ ] 코드로 LED 밝기를 조절할 수 있다
- [ ] 반복문으로 페이드 효과를 만든다
📚 핵심 개념¶
개념: PWM (Pulse Width Modulation)¶
비유: PWM은 마치 형광등을 초고속으로 껐다 켜는 것과 같아요. 너무 빨라서 눈에는 '밝기 조절'로 보이죠!
정의: 디지털 신호(켜짐/꺼짐)를 빠르게 반복해서 아날로그처럼 보이게 하는 기술
flowchart LR
A["켜짐 50%<br>꺼짐 50%"] --> B["👁️ 눈에는<br>중간 밝기"]
C["켜짐 100%"] --> D["👁️ 최대 밝기"]
Duty Cycle: 켜져 있는 시간의 비율 - 0% = 완전히 꺼짐 - 50% = 절반 밝기 - 100% = 최대 밝기
🔨 따라하기¶
Step 1: LED 절반 밝기로 켜기¶
코드:
from machine import Pin, PWM
led = PWM(Pin(15)) # 15번 핀을 PWM으로
led.freq(1000) # 주파수 설정
led.duty_u16(32768) # 50% 밝기 (0~65535 중 절반)
실행 결과:
LED가 중간 밝기로 켜집니다
💡
duty_u16()의 범위는 0~65535예요. 32768이 딱 절반!
Step 2: 페이드 효과 만들기¶
코드:
from machine import Pin, PWM
import time
led = PWM(Pin(15))
led.freq(1000)
# 점점 밝아지기
for brightness in range(0, 65536, 1000):
led.duty_u16(brightness)
time.sleep(0.05)
# 점점 어두워지기
for brightness in range(65535, -1, -1000):
led.duty_u16(brightness)
time.sleep(0.05)
실행 결과:
LED가 서서히 밝아졌다가 어두워집니다
📝 전체 코드¶
from machine import Pin, PWM
import time
led = PWM(Pin(15))
led.freq(1000)
while True:
# 밝아지기
for i in range(0, 65536, 1000):
led.duty_u16(i)
time.sleep(0.03)
# 어두워지기
for i in range(65535, -1, -1000):
led.duty_u16(i)
time.sleep(0.03)
⚠️ 주의할 점¶
- duty_u16 범위 초과: 65535보다 큰 값을 넣으면 오류!
- PWM 핀 설정: 일반
Pin(15, Pin.OUT)이 아닌PWM(Pin(15))로 선언하세요
✅ 점검하기¶
- PWM으로 밝기를 조절하는 원리는?
정답 확인
빠르게 켜고 끄는 것을 반복해서 눈을 속이는 것- duty_u16(0)일 때 LED 상태는?
정답 확인
완전히 꺼짐 (0%)- 최대 밝기를 위한 값은?
정답 확인
65535🔗 다음 장 미리보기¶
LED 밝기를 조절했으니, 다음은 버튼 입력 받기를 배워요. 버튼을 누르면 반응하는 프로그램을 만들어봅니다! 🔘