Fading — плавное мигание светодиода с помощью PWM
Используем аналоговый выход (PWM пин) для плавного управления яркостью светодиода через ШИМ.
В этом уроке разберём, как плавно менять яркость светодиода с помощью аналогового вывода (Pulse Width Modulation (PWM)) и техники PWM. Суть проста: цифровой выход очень быстро переключается между состояниями HIGH и LOW, а соотношение времени включения и выключения задаёт воспринимаемую яркость. Чем дольше сигнал остаётся HIGH за один цикл — тем ярче светит светодиод. Этот принцип называется ШИМ (широтно-импульсная модуляция, PWM).
Как работает PWM
Ардуино не умеет выдавать настоящее аналоговое напряжение на цифровых пинах, зато умеет очень быстро переключать их. Функция analogWrite(pin, value) задаёт скважность сигнала: значение 0 — вывод всегда LOW (светодиод выключен), 255 — всегда HIGH (максимальная яркость), 127 — половина времени HIGH, половина LOW (средняя яркость). Частота переключения достаточно высокая, чтобы глаз воспринимал её как плавное изменение яркости, а не мерцание.
Важно: analogWrite работает только на пинах с пометкой ~ (тильда) на плате — это и есть PWM-выходы.
Необходимые компоненты
- Arduino Board
- Светодиод (любой стандартный 5 мм)
- Резистор 220 Ом
- Провода-перемычки
- Макетная плата
Схема подключения
Светодиод подключается к цифровому выводу ~9 через резистор 220 Ом. Резистор ограничивает ток и защищает светодиод от перегорания — без него светодиод почти наверняка выйдет из строя.

Схема подключения: Arduino UNO соединён с макетной платой — светодиод и резистор подключены к выводу ~9.
Принципиальная схема

Принципиальная схема: Arduino UNO, резистор 220 Ом и светодиод соединены последовательно между выводом ~9 и GND.
Код
В скетче два цикла for выполняются поочерёдно: первый плавно увеличивает значение на выводе ~9 от 0 до 255, второй — плавно уменьшает обратно до 0. Получается эффект «дыхания» светодиода.
/*
Fading
Пример показывает, как плавно менять яркость светодиода с помощью функции analogWrite().
Схема:
- светодиод подключён от цифрового пина 9 к GND.
создан 1 ноя 2008
автор David A. Mellis
изменён 30 авг 2011
автор Tom Igoe
Код примера находится в открытом доступе.
https://www.arduino.cc/en/Tutorial/Fading
*/
int ledPin = 9; // светодиод подключён к цифровому пину 9
void setup() {
// в setup ничего не происходит
}
void loop() {
// плавное увеличение яркости от минимума до максимума с шагом 5:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
// устанавливаем значение (диапазон от 0 до 255):
analogWrite(ledPin, fadeValue);
// ждём 30 миллисекунд, чтобы был виден эффект затухания
delay(30);
}
// плавное уменьшение яркости от максимума до минимума с шагом 5:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
// устанавливаем значение (диапазон от 0 до 255):
analogWrite(ledPin, fadeValue);
// ждём 30 миллисекунд, чтобы был виден эффект затухания
delay(30);
}
}
Практические замечания
- Полярность светодиода важна. Длинная ножка (анод) идёт к резистору и пину, короткая (катод) — к GND. Если перепутать, светодиод просто не загорится.
- Резистор обязателен. 220 Ом — хороший выбор для стандартного красного или зелёного светодиода при питании 5 В. Для синих и белых светодиодов можно взять 100–150 Ом.
- Пин должен быть PWM. Убедитесь, что используете пин с тильдой (
~3,~5,~6,~9,~10,~11на UNO). На обычном цифровом пинеanalogWriteне даст плавного изменения. - Задержка
delay()влияет на скорость эффекта. Увеличьте значение вdelay()— переход будет медленнее и плавнее; уменьшите — быстрее.
Типичные ошибки
- Светодиод не светится совсем — скорее всего, перепутана полярность или нет контакта на макетной плате.
- Яркость не меняется, а светодиод просто горит — вы используете обычный цифровой пин без поддержки PWM.
- Светодиод мигает рывками — слишком большой шаг в цикле
forили слишком большая задержка. Попробуйте уменьшить шаг до 1 и задержку до 5–10 мс.
Где пригодится
Плавное управление яркостью через PWM — базовая техника, которая используется повсюду: в подсветке дисплеев, управлении скоростью моторов, регуляторах громкости и даже в системах умного дома для создания атмосферного освещения.
Дополнительные материалы
Больше базовых примеров можно найти в разделе built-in examples.
Также рекомендуем заглянуть в language reference — подробный справочник по языку программирования Arduino.
Последнее обновление: 29.07.2015, SM