콘텐츠로 이동

밝기를 조절하다 - PWM의 마법

🎯 이 장에서 배우는 것

  • PWM(펄스 폭 변조)의 원리를 설명할 수 있다
  • PWM의 주파수와 듀티 사이클 개념을 이해한다
  • LED의 밝기를 0%부터 100%까지 단계적으로 조절할 수 있다
  • 부드럽게 밝아졌다 어두워지는 breathing 효과를 구현할 수 있다

💡 왜 이걸 배우나요?

지난 장에서 LED를 켜고 끄는 법을 배웠어. 그런데 한 가지 아쉬운 점이 있지 않아?

"LED 밝기를 중간쯤으로 할 수는 없을까?"

스마트폰 화면 밝기, 노트북 키보드 백라이트, 침대 옆 무드등... 우리 주변의 조명들은 대부분 밝기 조절이 가능해.

일상 속 밝기 조절 예시:
┌─────────────────────────────────────────────────────────┐
│  📱 스마트폰 화면    [████████░░] 80%                   │
│  💡 스탠드 조명      [██████░░░░] 60%                   │
│  🌙 취침 무드등      [██░░░░░░░░] 20%                   │
│  🎮 게이밍 키보드    [██████████] 100% (반짝반짝!)      │
└─────────────────────────────────────────────────────────┘

그런데 이상하지 않아? 디지털 신호는 0(꺼짐)과 1(켜짐)밖에 없다고 했는데, 어떻게 "중간 밝기"가 가능한 걸까?

비밀은 바로 PWM(Pulse Width Modulation, 펄스 폭 변조)에 있어!

이번 장에서 PWM을 배우면: - 🌈 LED 밝기를 자유자재로 조절할 수 있어 - 🫁 숨 쉬는 것처럼 부드럽게 변하는 breathing 효과를 만들 수 있어 - 🔧 나중에 모터 속도 조절(선풍기!)에도 똑같은 원리를 적용할 수 있어


📚 핵심 개념

개념 1: 디지털의 한계

1단계: 비유로 시작

"디지털 신호는 마치 방의 조명 스위치와 같아요. 켜거나 끄거나, 둘 중 하나만 가능해요."

디지털 신호의 세계:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│    3.3V ─────────┐         ┌─────────┐         ┌──     │
│         (켜짐)   │         │         │         │       │
│                  │         │         │         │       │
│      0V ─────────┴─────────┴─────────┴─────────┴──     │
│         (꺼짐)                                          │
│                                                         │
│    → 높거나 낮거나, 딱 두 가지 상태만 존재!             │
└─────────────────────────────────────────────────────────┘

2단계: 정확한 정의

디지털 출력은 HIGH(3.3V)LOW(0V) 두 가지 상태만 가져. "2.5V로 출력해줘"라고 명령할 수 없어. 중간값이란 게 없는 거지.

3단계: 예시로 확인

# 디지털 출력의 한계
led.value(1)  # 완전히 켜짐 (3.3V) - 100%
led.value(0)  # 완전히 꺼짐 (0V) - 0%
# led.value(0.5)?  # 이런 건 없어! ❌

쉽게 말하면: 디지털은 "켜짐/꺼짐" 두 가지뿐이라 중간 밝기를 직접 만들 수 없어.


개념 2: PWM의 마법 - 눈속임의 과학

1단계: 비유로 시작

"PWM은 마치 아주 빠르게 손뼉을 쳐서 바람을 만드는 것과 같아요. 빠르게 ON/OFF를 반복하면, 우리 눈은 평균 밝기로 인식해요."

PWM의 비밀: 빠른 깜빡임 = 중간 밝기!
┌─────────────────────────────────────────────────────────┐
│                                                         │
│   실제 신호 (확대해서 보면):                              │
│   ┌──┐  ┌──┐  ┌──┐  ┌──┐  ┌──┐  ┌──┐  ┌──┐  ┌──┐     │
│   │  │  │  │  │  │  │  │  │  │  │  │  │  │  │  │     │
│   ┘  └──┘  └──┘  └──┘  └──┘  └──┘  └──┘  └──┘  └──    │
│                                                         │
│   우리 눈이 인식하는 것:                                  │
│   ═══════════════════════════════════════════════════   │
│   "어? 그냥 중간 밝기잖아?"                              │
│                                                         │
└─────────────────────────────────────────────────────────┘

2단계: 정확한 정의

PWM(Pulse Width Modulation, 펄스 폭 변조)은 디지털 신호를 아주 빠르게 ON/OFF 반복해서, 마치 아날로그처럼 중간값을 만들어내는 기술이야.

핵심 원리: - 1초에 수천~수만 번 깜빡임 - 사람의 눈은 약 60Hz 이상을 구분 못 함 - 결과적으로 "평균 밝기"로 인식

3단계: 예시로 확인

영화 원리와 같아!
┌─────────────────────────────────────────────────────────┐
│                                                         │
│   영화: 1초에 24장의 사진 → 움직이는 영상으로 보임       │
│                                                         │
│   PWM: 1초에 1000번 깜빡임 → 중간 밝기로 보임            │
│                                                         │
│   둘 다 "눈의 잔상 효과"를 이용한 눈속임!               │
│                                                         │
└─────────────────────────────────────────────────────────┘

쉽게 말하면: 아주 빠르게 껐다 켰다 하면, 눈은 평균 밝기로 인식해!


개념 3: 듀티 사이클 (Duty Cycle) - 밝기의 열쇠

1단계: 비유로 시작

"듀티 사이클은 마치 하루 중 일하는 시간의 비율과 같아요. 8시간 일하면 33%, 12시간 일하면 50%, 24시간 내내 일하면 100%!"

듀티 사이클 = 켜져 있는 시간의 비율
┌─────────────────────────────────────────────────────────┐
│                                                         │
│   한 주기 (1 cycle)                                      │
│   ├──────────────────────────────────────────────┤      │
│                                                         │
│   ┌─────────────────┐                                   │
│   │     켜짐 ON     │     꺼짐 OFF                      │
│   └─────────────────┴────────────────────────────┘      │
│                                                         │
│   듀티 사이클 = ON 시간 ÷ 전체 시간 × 100%              │
│                                                         │
└─────────────────────────────────────────────────────────┘

2단계: 정확한 정의

듀티 사이클(Duty Cycle)은 한 주기 동안 신호가 HIGH(켜짐) 상태인 시간의 비율이야.

  • 듀티 사이클 0% = 항상 꺼짐 (밝기 0%)
  • 듀티 사이클 50% = 절반 켜짐, 절반 꺼짐 (밝기 50%)
  • 듀티 사이클 100% = 항상 켜짐 (밝기 100%)

3단계: 예시로 확인

듀티 사이클에 따른 밝기 변화:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│   25% 듀티 사이클 → 어두움                               │
│   ┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐                          │
│   │ │   │ │   │ │   │ │   │ │     💡 (어둡게)          │
│   ┘ └───┘ └───┘ └───┘ └───┘ └───                       │
│                                                         │
│   50% 듀티 사이클 → 중간 밝기                            │
│   ┌───┐   ┌───┐   ┌───┐   ┌───┐                        │
│   │   │   │   │   │   │   │   │   💡💡 (중간)          │
│   ┘   └───┘   └───┘   └───┘   └───                     │
│                                                         │
│   75% 듀티 사이클 → 밝음                                 │
│   ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐                      │
│   │     │ │     │ │     │ │     │ 💡💡💡 (밝게)        │
│   ┘     └─┘     └─┘     └─┘     └─                     │
│                                                         │
│   100% 듀티 사이클 → 최대 밝기                           │
│   ────────────────────────────────  💡💡💡💡 (최대!)    │
│                                                         │
└─────────────────────────────────────────────────────────┘

쉽게 말하면: 듀티 사이클이 높을수록 LED가 더 밝아져!


개념 4: 주파수 (Frequency) - 얼마나 빨리 깜빡이나

1단계: 비유로 시작

"주파수는 마치 심장 박동 속도와 같아요. 1초에 몇 번 뛰는지를 나타내요."

2단계: 정확한 정의

주파수(Frequency)는 1초 동안 ON-OFF를 몇 번 반복하는지를 나타내. 단위는 Hz(헤르츠).

  • 1000Hz = 1초에 1000번 깜빡임
  • 주파수가 높을수록 더 부드러워 보임
  • LED에는 보통 500~5000Hz 사용
주파수와 사람 눈의 관계:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│   10Hz (1초에 10번)   → 깜빡이는 게 보임 😵             │
│   60Hz (1초에 60번)   → 거의 안 보임 😊                 │
│   1000Hz (1초에 1000번) → 전혀 안 보임 ✨               │
│                                                         │
│   ※ 일반적으로 60Hz 이상이면 깜빡임을 감지 못함         │
│                                                         │
└─────────────────────────────────────────────────────────┘

3단계: 예시로 확인

# Pico에서 PWM 주파수 설정
pwm = PWM(Pin(16))
pwm.freq(1000)  # 1초에 1000번 깜빡임 (충분히 빠름!)

쉽게 말하면: 주파수는 "1초에 몇 번 깜빡이나"이고, 빠를수록 자연스러워!


📌 알아보기: PWM의 핵심 두 가지

``` ┌─────────────────────────────────────────────────────────┐ │ PWM 제어의 핵심 │ ├────────────────────────┬────────────────────────────────┤ │ 주파수 (freq) │ 듀티 사이클 (duty) │ ├────────────────────────┼────────────────────────────────┤ │ 얼마나 빨리 깜빡이나 │ 켜져 있는 시간의 비율 │ │ │ │ │ 단위: Hz (헤르츠) │ 단위: % (퍼센트) │ │ │ │ │ 너무 낮으면: │ 0% = 꺼짐 │