Плавное затухание светодиода с PWM на Pico (эффект дыхания)
Светодиод больше не просто мигает — он дышит! С помощью PWM (широтно-импульсной модуляции) Raspberry Pi Pico яркость светодиода медленно растёт и медленно падает, как огонёк спящего MacBook. Изучи класс machine.PWM, duty_u16() (16-битная яркость 0–65535), частоту PWM (freq(1000) — 1000 циклов вкл/выкл в секунду, мерцания не видно), циклы range() с шагом (вверх и вниз) и почти аналоговый выход с цифрового пина.

Видео
Схема

Исходный код
1# ─────────────────────────────────────────
2# BlueGrays · bluegrays.com
3# Плавное затухание светодиода с PWM на Pico (эффект дыхания)
4# ─────────────────────────────────────────
5# С помощью PWM яркость светодиода плавно растёт и падает (эффект
6# дыхания). STEP задаёт изменение яркости за шаг, а STEP_DELAY_MS паузу
7# между шагами; один вдох длится около 1,3 с.
8#
9# Пины:
10# GP14 -> Зелёный светодиод (резистор 220 ohm, катод к GND)
11
12from machine import Pin, PWM
13from time import sleep_ms
14
15# ============ НАСТРОЙКА PWM ============
16led = PWM(Pin(14))
17led.freq(1000) # без заметного мерцания
18
19STEP = 512 # Шаг яркости (0-65535)
20STEP_DELAY_MS = 5 # Пауза на шаг (мс)
21
22# ============ ГЛАВНЫЙ ЦИКЛ ============
23while True:
24 # Разгорание (0 -> 65535)
25 for duty in range(0, 65536, STEP):
26 led.duty_u16(duty)
27 sleep_ms(STEP_DELAY_MS)
28
29 # Затухание (65535 -> 0)
30 for duty in range(65535, -1, -STEP):
31 led.duty_u16(duty)
32 sleep_ms(STEP_DELAY_MS)
33
Частые вопросы
Какие значения принимает duty_u16()?
Она принимает 16-битное значение от 0 до 65535: 0 — полностью выключено, 65535 — полная яркость, а 32768 — примерно половина.
Почему частота PWM 1000 Hz?
Светодиод, который включается и выключается 1000 раз в секунду, глаз видит как ровный свет без мерцания. На очень низких частотах (например, 50 Hz) мерцание может быть заметным.
Как сделать эффект дыхания естественнее?
Если увеличивать яркость не линейно, а квадратично или экспоненциально, это совпадёт с тем, как глаз воспринимает свет. Короткая пауза в самой тусклой точке тоже больше похожа на настоящий ритм дыхания.
Может ли каждый пин Pico выдавать PWM?
Да, все пины GPIO у Pico могут генерировать PWM. У Pico 8 слайсов PWM (16 каналов); два пина на одном слайсе должны использовать одну частоту.
