Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Основы chevron_right Плавное мигание светодиода — эффект Fading с analogWrite()

Плавное мигание светодиода — эффект 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 и понаблюдайте, как меняется характер мигания.

built-in examples

language reference

Типичные ошибки

  • Светодиод не светится вообще — проверьте полярность: длинная ножка к пину, короткая к GND. Также убедитесь, что резистор подключён, а не закорочен.
  • Светодиод горит, но не мигает — скорее всего, вы используете пин без поддержки ШИМ. Убедитесь, что выбрали пин с символом ~.
  • Мигание слишком быстрое или слишком медленное — отрегулируйте значение в delay(). Стандартное значение 30 мс даёт приятный плавный эффект.
  • Перепутаны аргументы analogWrite() — первый аргумент всегда номер пина, второй — яркость (0–255).

Где это пригодится

Эффект плавного изменения яркости используется повсюду: в ночниках с диммером, индикаторах зарядки, декоративной подсветке, «дышащих» светодиодах в умных устройствах. Освоив этот принцип, вы сможете управлять не только светодиодами, но и яркостью RGB-лент, скоростью моторов через драйвер и другими устройствами, поддерживающими аналоговое управление.

Последнее обновление: 29.07.2015, SM