Урок 98-4: Плавное затухание светодиода с помощью Arduino: управление яркостью
Светодиоды повсюду — индикаторы, дисплеи, декоративное освещение — но большинство новичков останавливаются на простом включении и выключении. Этот проект делает следующий шаг: плавное затухание и разгорание светодиода с использованием встроенной в Arduino функции ШИМ (широтно-импульсной модуляции). Вместо резкого мигания вы получаете постепенное нарастание и спад яркости, которое имитирует естественное затемнение, эффект дыхания и аналоговое управление с чисто цифрового вывода. Это один из самых приятных первых проектов, потому что результат виден сразу, и та же техника лежит в основе управления скоростью двигателей, громкостью звука и регулировкой подсветки в реальных продуктах.
Как только вы поймёте, как работает затухание, вы сможете применять его в самых разных практических проектах:
- Создание «дышащего» индикатора состояния на устройстве, который мягко пульсирует, а не мигает отвлекающе
- Автоматическое затемнение светодиодного ночника в зависимости от окружающего освещения или времени суток
- Управление яркостью подсветки ЖК- или OLED-дисплея
- Создание атмосферного освещения или декоративных ламп с плавными переходами между уровнями яркости
- Имитация медленного будильника-рассвета, который постепенно становится ярче, чтобы разбудить вас естественно
- Добавление регулировки скорости к небольшим двигателям постоянного тока или вентиляторам (применяется тот же принцип ШИМ)
Этот урок является частью пошагового курса Robojax по Arduino и специально охватывает проект 4 из 10: Затухание светодиода с помощью Arduino. Полная программа доступна для скачивания ниже статьи.
Аппаратное обеспечение и компоненты
Список деталей для этого проекта минимален — если вы уже работали с 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 с поддержкой ШИМ — в этом проекте это вывод 3. Катод подключается к земле.
Почему именно вывод 3? Потому что не все выводы Arduino поддерживают ШИМ. На большинстве плат Arduino выводы с поддержкой ШИМ обозначены символом тильды (~) — обычно это выводы 3, 5, 6, 9, 10 и 11 на Uno. Если использовать вывод без ШИМ, analogWrite() не даст переменного выходного сигнала; светодиод будет просто включён или выключен.
Подключите схему следующим образом:
- Вставьте светодиод в макетную плату, отметив, какая ножка является анодом (длинная), а какая катодом (короткая/плоская сторона).
- Подключите анод светодиода к выводу 3 Arduino через резистор.
- Подключите катод светодиода к выводу GND Arduino.
- Подключите 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 byled— Определяет, к какому пину подключён светодиод. По умолчанию это пин 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).
Прелесть этого проекта в том, что вы можете видеть эффект от изменений в коде немедленно — не нужно менять схему подключения, просто отредактируйте переменные и загрузите код заново. Такая быстрая обратная связь делает его отличным способом развить интуицию о том, как взаимодействуют ШИМ и тайминг.
Если вы хотите пойти дальше и запускать затухание нажатием кнопки вместо непрерывного выполнения, это рассматривается в отдельном уроке — смотрите раздел связанных проектов ниже.
Связанные проекты из этого видео
- Урок 98-1: Как включить и выключить светодиод с помощью Arduino
- Урок 98-2: Как включить и выключить светодиод с помощью кнопки на Arduino
- Урок 98-3: Как включать/выключать светодиод с фиксацией с помощью кнопки на Arduino
- Урок 98-5: Плавное затухание света при нажатии кнопки на Arduino
- Урок 98-6: Игра «Качели» со светодиодами на Arduino
- Урок 98-7: Бегущий огонь с использованием Arduino и 5 светодиодов
- Урок 98-8: Бегущий огонь с кнопкой и светодиодами на Arduino
- Урок 98-9: Индикатор уровня напряжения на светодиодах с Arduino или бегущий огонь с потенциометром
- Урок 98-10: Светофор на Arduino
Главы
- [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
This code has not been parsed yet. Please return to the admin panel to parse it.
Вещи, которые могут вам понадобиться
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
Ресурсы и ссылки
-
ДокументацияДокументация для набора 3 в 1 IoT/умный автомобиль/обучающий комплект SunFounderdocs.sunfounder.com
-
Внешний
-
Внешний
-
Внешний
Файлы📁
Библиотеки Arduino (zip)
-
Исходный код обучающего набора 3-в-1 Smart Car от SunFounder
3in1-kit-main-v2.zip12.80 MB
Руководство пользователя
-
Руководство по сборке 3-в-1 Arduino Smart Car от SunFounderВ этом документе показана пошаговая сборка 3-в-1 Arduino Smart Car от SunFounder
SunFounder_car_assembly_manual.pdf1.20 MB