Код для поиска

Урок 98-4: Плавное затухание светодиода с помощью Arduino: управление яркостью

Урок 98-4: Плавное затухание светодиода с помощью Arduino: управление яркостью

Светодиоды повсюду — индикаторы, дисплеи, декоративное освещение — но большинство новичков останавливаются на простом включении и выключении. Этот проект делает следующий шаг: плавное затухание и разгорание светодиода с использованием встроенной в Arduino функции ШИМ (широтно-импульсной модуляции). Вместо резкого мигания вы получаете постепенное нарастание и спад яркости, которое имитирует естественное затемнение, эффект дыхания и аналоговое управление с чисто цифрового вывода. Это один из самых приятных первых проектов, потому что результат виден сразу, и та же техника лежит в основе управления скоростью двигателей, громкостью звука и регулировкой подсветки в реальных продуктах.

Светодиод 5 мм зелёный

Как только вы поймёте, как работает затухание, вы сможете применять его в самых разных практических проектах:

  • Создание «дышащего» индикатора состояния на устройстве, который мягко пульсирует, а не мигает отвлекающе
  • Автоматическое затемнение светодиодного ночника в зависимости от окружающего освещения или времени суток
  • Управление яркостью подсветки ЖК- или OLED-дисплея
  • Создание атмосферного освещения или декоративных ламп с плавными переходами между уровнями яркости
  • Имитация медленного будильника-рассвета, который постепенно становится ярче, чтобы разбудить вас естественно
  • Добавление регулировки скорости к небольшим двигателям постоянного тока или вентиляторам (применяется тот же принцип ШИМ)

Этот урок является частью пошагового курса Robojax по Arduino и специально охватывает проект 4 из 10: Затухание светодиода с помощью Arduino. Полная программа доступна для скачивания ниже статьи.

Аппаратное обеспечение и компоненты

330_ohm_resistor
Резистор 330 Ом 0,25 Вт

Список деталей для этого проекта минимален — если вы уже работали с Arduino, скорее всего, у вас уже есть всё необходимое:

  • 1× плата Arduino (Uno, Nano, Mega или любая совместимая плата)
  • 1× светодиод (5 мм или 3 мм, любого цвета)
  • 1× резистор (от 200Ω до 1000Ω — диапазон от 300Ω до 1 кΩ подходит хорошо)
  • Макетная плата и соединительные провода DuPont
  • USB-кабель для программирования и питания

Одно важное замечание о светодиоде: длинная ножка — это анод (плюс), а короткая ножка — или сторона с плоским краем на пластиковом корпусе — это катод (минус). Если перепутать, светодиод просто не загорится, поэтому проверьте ещё раз перед включением питания.

Что касается номинала резистора, в расшифровке видео разбирается расчёт (в видео на 03:49): типичный светодиод имеет падение напряжения около 2 В и требует примерно 10 мА тока. При питании 5 В оставшиеся 3 В должны упасть на резисторе, что даёт R = V/I = 3 В / 0,01 А = 300Ω. На практике подойдёт всё от 300Ω до 1000Ω — более высокие значения просто дают более тусклый светодиод. Для затухания это на самом деле нормально, поскольку вы всё равно изменяете яркость.

Руководство по подключению

Arduino schematic for two LEDs see saw
Схема Arduino для двух светодиодов «качели»
Arduino wiring for two LEDs see saw
Подключение Arduino для двух светодиодов «качели»

Подключение настолько простое, насколько это вообще возможно. Анод светодиода подключается через резистор к выводу Arduino с поддержкой ШИМ — в этом проекте это вывод 3. Катод подключается к земле.

Почему именно вывод 3? Потому что не все выводы Arduino поддерживают ШИМ. На большинстве плат Arduino выводы с поддержкой ШИМ обозначены символом тильды (~) — обычно это выводы 3, 5, 6, 9, 10 и 11 на Uno. Если использовать вывод без ШИМ, analogWrite() не даст переменного выходного сигнала; светодиод будет просто включён или выключен.

Подключите схему следующим образом:

  1. Вставьте светодиод в макетную плату, отметив, какая ножка является анодом (длинная), а какая катодом (короткая/плоская сторона).
  2. Подключите анод светодиода к выводу 3 Arduino через резистор.
  3. Подключите катод светодиода к выводу GND Arduino.
  4. Подключите Arduino к компьютеру через USB.

Объяснение кода

Скетч для этого проекта основан на классическом примере Arduino «Fade» с небольшими изменениями. Вместо объяснения каждой строки давайте сосредоточимся на частях, которые вы захотите настроить для своих собственных экспериментов.

Пользовательские переменные

В верхней части кода три переменные управляют всем поведением:

int led = 3;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 3;    // how many points to fade the LED by
  • led — Определяет, к какому пину подключён светодиод. По умолчанию это пин 3, но вы можете изменить его на любой пин с поддержкой ШИМ (обозначенный символом ~ на вашей плате). Если вы переместите светодиод на другой пин, обновите это значение accordingly.
  • brightness — Текущий уровень яркости, от 0 (выключено) до 255 (полная яркость). В коде он начинается с 0, но вы можете начать с любого значения в этом диапазоне.
  • fadeAmount — Это самый интересный параметр для экспериментов. Он управляет тем, сколько «шагов» яркости выполняется за каждый цикл. Маленькое значение, например 3, обеспечивает медленное, постепенное затухание. Большее значение, например 20, заставляет светодиод очень быстро разгораться и гаснуть. В транскрипте это демонстрируется (в видео на 22:37) — изменение с 5 на 20 dramatically ускоряет эффект.

Как работает затухание

Основа затухания реализована в двух строках внутри loop():

analogWrite(led, brightness);
brightness = brightness + fadeAmount;

При каждом проходе цикла текущее значение яркости записывается на светодиод с помощью analogWrite(), затем яркость увеличивается на fadeAmount. Функция analogWrite() использует ШИМ для имитации аналогового напряжения — она быстро переключает пин включённым и выключенным, и соотношение времени включения к времени выключения определяет воспринимаемую яркость.

Когда яркость достигает 0 или 255, код меняет направление, изменяя знак fadeAmount:

if (brightness <= 0 || brightness >= 255) {
  fadeAmount = -fadeAmount;
}

Именно это заставляет светодиод разгораться, затем гаснуть, затем снова разгораться — непрерывный цикл «дыхания». delay(30) в конце цикла управляет общей скоростью анимации. Меньшая задержка ускоряет затухание; большая задержка замедляет его.

Эксперименты со значениями

Две переменные дают вам наибольший контроль над визуальным эффектом:

  • Увеличьте fadeAmount для более быстрого и dramatic затухания. Попробуйте 10 или 20.
  • Уменьшите fadeAmount для медленного, плавного эффекта «дыхания». Попробуйте 1 или 2.
  • Настройте значение delay() для изменения темпа. Меньшие задержки делают весь цикл быстрее; большие задержки растягивают его.

Сочетание маленького fadeAmount с короткой задержкой создаёт чрезвычайно плавное, почти органичное затухание — отлично подходит для ambient освещения. Большой fadeAmount с короткой задержкой создаёт эффект быстрого пульсирования.

Демонстрация живого проекта

После загрузки кода вы увидите, как светодиод медленно разгорается от выключенного состояния до полной яркости, затем снова тускнеет, повторяя это бесконечно. В транскрипте показано поведение по умолчанию (в видео на 22:25) — плавное затухание с умеренной скоростью.

Когда fadeAmount изменён на 20, светодиод разгорается и гаснет очень быстро — почти как мерцание. При значении 3 затухание занимает заметно больше времени, создавая расслабленный, постепенный переход. Это наглядно демонстрируется в видео на (в видео на 23:02).

Прелесть этого проекта в том, что вы можете видеть эффект от изменений в коде немедленно — не нужно менять схему подключения, просто отредактируйте переменные и загрузите код заново. Такая быстрая обратная связь делает его отличным способом развить интуицию о том, как взаимодействуют ШИМ и тайминг.

Если вы хотите пойти дальше и запускать затухание нажатием кнопки вместо непрерывного выполнения, это рассматривается в отдельном уроке — смотрите раздел связанных проектов ниже.

Связанные проекты из этого видео

Главы

  • [00:00] Обзор 10 проектов со светодиодами на Arduino
  • [01:22] Введение в курс и необходимые компоненты
  • [02:29] Понимание светодиодов: обозначения, полярность и типы
  • [03:49] Расчёт сопротивления резистора для светодиода по закону Ома
  • [05:53] Проект 1: Включение и выключение светодиода
  • [12:43] Проект 2: Управление светодиодом с помощью кнопки
  • [17:13] Проект 3: Переключение светодиода кнопкой
  • [20:12] Проект 4: Плавное затухание светодиода — разбор кода
  • [22:25] Демонстрация затухания и настройка скорости затухания
  • [23:20] Проект 5: Плавное затухание светодиода по нажатию кнопки
  • [27:32] Проект 6: Эффект «Качели» на светодиодах
  • [30:47] Проект 7: Бегущий огонь с 5 светодиодами
  • [36:41] Проект 8: Бегущий огонь, управляемый кнопкой
  • [42:25] Проект 9: Индикатор уровня напряжения на светодиодах с потенциометром
  • [49:25] Проект 10: Светофор на Arduino

Изображения

Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
936-Lessson 98-LED-4: Arduino code to fade the LED light
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Вещи, которые могут вам понадобиться

Файлы📁

Библиотеки Arduino (zip)

Руководство пользователя