Плавное мигание светодиода — эффект Fading с analogWrite()
Учимся плавно управлять яркостью светодиода через ШИМ-сигнал с помощью функции analogWrite() на Arduino.
В этом уроке мы разберём, как заставить светодиод плавно разгораться и гаснуть — без резких скачков, а с красивым эффектом затухания. Для этого используется функция analogWrite() и принцип pulse width modulation (PWM) (широтно-импульсная модуляция): цифровой пин очень быстро переключается между HIGH и LOW, и за счёт разного соотношения времени «включено/выключено» глаз воспринимает разную яркость.
Что понадобится
- Arduino Board
- Светодиод (любого цвета)
- Резистор 220 Ом
- Соединительные провода
- Макетная плата (breadboard)
Важно: функция
analogWrite()работает только на пинах с поддержкой ШИМ. На Arduino UNO это пины 3, 5, 6, 9, 10 и 11 — они обозначены символом~на плате. В этом уроке мы используем пин 9.
Схема подключения
Подключите анод светодиода (длинная ножка, «плюс») к пину 9 через резистор 220 Ом. Катод (короткая ножка, «минус») соедините напрямую с GND.
Резистор обязателен — он ограничивает ток через светодиод и защищает его от перегорания.

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

Принципиальная схема: Arduino UNO, пин ~9 подключён через резистор 220 Ом к светодиоду, второй вывод которого соединён с GND.
Код и как он работает
После объявления пина 9 как ledPin функция setup() в этом скетче остаётся пустой — никакой дополнительной инициализации не требуется.
Функция analogWrite(), которую мы используем в основном цикле, принимает два аргумента: номер пина и значение PWM от 0 до 255. Значение 0 — светодиод полностью выключен, 255 — горит на полную яркость.
Чтобы получить эффект плавного нарастания и угасания, значение PWM постепенно увеличивается от 0 до 255, а затем так же плавно возвращается к 0. В скетче текущая яркость хранится в переменной brightness, а шаг изменения — в переменной fadeAmount.
Каждый проход через loop() значение brightness изменяется на величину fadeAmount. Когда brightness достигает крайних значений (0 или 255), знак fadeAmount меняется на противоположный: если было 5, становится -5, и наоборот. Это заставляет яркость то нарастать, то убывать — снова и снова.
Функция analogWrite() может менять значение PWM очень быстро, поэтому задержка в конце скетча управляет скоростью эффекта. Попробуйте увеличить или уменьшить значение delay и понаблюдайте, как меняется характер мигания.
Типичные ошибки
- Светодиод не светится вообще — проверьте полярность: длинная ножка к пину, короткая к GND. Также убедитесь, что резистор подключён, а не закорочен.
- Светодиод горит, но не мигает — скорее всего, вы используете пин без поддержки ШИМ. Убедитесь, что выбрали пин с символом
~. - Мигание слишком быстрое или слишком медленное — отрегулируйте значение в
delay(). Стандартное значение 30 мс даёт приятный плавный эффект. - Перепутаны аргументы
analogWrite()— первый аргумент всегда номер пина, второй — яркость (0–255).
Где это пригодится
Эффект плавного изменения яркости используется повсюду: в ночниках с диммером, индикаторах зарядки, декоративной подсветке, «дышащих» светодиодах в умных устройствах. Освоив этот принцип, вы сможете управлять не только светодиодами, но и яркостью RGB-лент, скоростью моторов через драйвер и другими устройствами, поддерживающими аналоговое управление.
Последнее обновление: 29.07.2015, SM