#160Новичок

Плавное затухание светодиода с PWM на Pico (эффект дыхания)

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

0.0(0)
4 собрано
Плавное затухание светодиода с PWM на Pico (эффект дыхания)
Светодиод, который спокойно дышит, как огонёк устройства в режиме ожидания. Raspberry Pi Pico медленно увеличивает яркость светодиода, а затем медленно уменьшает её, и этот цикл не заканчивается. Ты своими глазами видишь, что пин умеет не только «вкл» и «выкл»: он может светиться с любой яркостью между ними.

Видео

Схема

Плавное затухание светодиода с PWM на Pico (эффект дыхания) - Circuit

Исходный код

MicroPython
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 каналов); два пина на одном слайсе должны использовать одну частоту.