Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Аналоговые примеры chevron_right Fading — плавное мигание светодиода с помощью PWM

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