콘텐츠로 이동

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)

⚠️ 주의할 점

  1. duty_u16 범위 초과: 65535보다 큰 값을 넣으면 오류!
  2. PWM 핀 설정: 일반 Pin(15, Pin.OUT)이 아닌 PWM(Pin(15))로 선언하세요

✅ 점검하기

  1. PWM으로 밝기를 조절하는 원리는?
정답 확인빠르게 켜고 끄는 것을 반복해서 눈을 속이는 것
  1. duty_u16(0)일 때 LED 상태는?
정답 확인완전히 꺼짐 (0%)
  1. 최대 밝기를 위한 값은?
정답 확인65535

🔗 다음 장 미리보기

LED 밝기를 조절했으니, 다음은 버튼 입력 받기를 배워요. 버튼을 누르면 반응하는 프로그램을 만들어봅니다! 🔘