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

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

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

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

Светодиод с резистором на макетной плате, подключённый к Arduino с кнопкой
Светодиод с резистором на макетной плате, подключённый к Arduino с кнопкой

Плавное затухание по команде встречается повсюду в реальных продуктах. Вот несколько практических способов использовать то, что вы здесь узнаете:

  • Индикаторы плавного выключения — вместо того чтобы лампа резко гасла, она плавно тускнеет при нажатии кнопки, что выглядит гораздо более аккуратно на бытовой технике и корпусах, напечатанных на 3D-принтере.
  • Режим сна / ожидания — нажмите кнопку, и яркий светодиод статуса плавно гаснет до чёрного, чтобы не мешать вам ночью, при этом схема остаётся под питанием.
  • Сценическое или модельное освещение с «затемнением до чёрного» — одна кнопка запускает плавное затухание светодиодной ленты или панели вместо резкого отключения.
  • Индикация экономии батареи — кратковременное нажатие кнопки даёт яркую вспышку подтверждения, которая плавно гаснет, так что светодиод светится на полную только короткое время.
  • Интерактивное искусство и реквизит — эффект «выдоха», запускаемый прикосновением, идеально подходит для косплея, диорам или музейных экспозиций.

Основная идея проста: кнопка сообщает Arduino «начинай затухание сейчас», и Arduino понижает яркость светодиода от 255 (полная) до 0 (выключено) небольшими шагами. Поскольку шаги маленькие и происходят быстро, ваш глаз видит плавное затухание, а не скачок.

Если вы никогда раньше не делали плавное затухание светодиода, основы управления яркостью описаны в Уроке 98-4: Плавное затухание светодиода с помощью Arduino: управление яркостью. Этот урок напрямую опирается на ту основу, добавляя кнопку в качестве триггера.

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

330_ohm_resistor
330_ohm_resistor

Это очень недорогая сборка — всё здесь является стандартным материалом из стартового набора:

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

Небольшое замечание о резисторе для светодиода: светодиоду нужно примерно 2 В напряжения и около 10 мА тока. При питании 5 В резистор должен погасить оставшиеся 3 В, поэтому по закону Ома получается около 300 Ω. Подойдёт всё от 300 Ω до 1000 Ω — более высокие значения просто делают светодиод тусклее. Использование резистора не является опциональным; без него светодиод потребляет слишком большой ток и сгорит.

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

Схема Arduino для светодиода с кнопкой
Схема Arduino для светодиода с кнопкой
Подключение Arduino для светодиода с кнопкой
Подключение Arduino для светодиода с кнопкой

Подключение намеренно минимальное. Анод светодиода (длинная ножка) подключается через резистор к цифровому выводу 3, а его катод (короткая ножка, с плоской стороной на корпусе) идёт на землю. Кнопка подключается между цифровым выводом 2 и землёй — внешний подтягивающий резистор не нужен, потому что код включает внутренний подтягивающий резистор Arduino.

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

Что касается кнопки, если вы используете 4-контактный тактильный переключатель, помните, что контакты внутри попарно соединены: два из четырёх контактов всегда соединены вместе. Используйте мультиметр в режиме прозвонки, чтобы найти пару, которая пищит при нажатии, затем используйте один контакт с каждой стороны. Одна сторона идёт на вывод 2, другая на землю.

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

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

const int pushButtonPin = 2;//the pin push button switch is connected to 
const int LEDPin = 3;//the pin LED is connected to
const int fadeAmount = 10;    // how many points to fade the LED by
const int fadeSpeed = 5;//fade time in milliseconds. the smaller the value, the faster the fading

pushButtonPin и LEDPin просто сообщают Arduino, к каким выводам вы подключили компоненты. Если вы переместите кнопку на вывод 4 или светодиод на вывод 9 (вывод с поддержкой ШИМ), просто измените эти два числа в соответствии с вашей схемой подключения. Обратите внимание, что вывод светодиода обязательно должен поддерживать ШИМ — на Uno это выводы 3, 5, 6, 9, 10 или 11 — потому что для плавного изменения яркости требуется analogWrite().

fadeAmount управляет размером каждого шага яркости. Яркость изменяется от 0 до 255, поэтому fadeAmount равный 10 означает, что светодиод затухает примерно за 25 шагов. Большее число делает затухание более грубым и быстрым; меньшее число делает его более плавным и медленным.

fadeSpeed — это задержка в миллисекундах между каждым шагом. Это самый важный параметр для того, как эффект ощущается. Значение 5 мс даёт быстрое, резкое затухание; значение 30 мс или больше даёт медленное, плавное угасание. В сочетании с fadeAmount эти два значения позволяют настроить затухание именно с тем характером, который вам нужен.

Также стоит знать о внутренней переменной:

int brightness = 255;    // how bright the LED is
int pushButtonStatus = 0; // push value from pin 2

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

Сама логика работает так: цикл считывает состояние кнопки. Если она нажата (LOW, из-за внутреннего подтягивающего резистора), цикл while выполняется, пока brightness больше нуля. Внутри этого цикла Arduino записывает текущую яркость на светодиод, вычитает fadeAmount, ждёт fadeSpeed миллисекунд и повторяет. Когда кнопка не нажата, на светодиод просто записывается 0, и он остаётся выключенным.

Одна важная деталь: внутренний подтягивающий резистор означает, что вывод читается как HIGH, когда кнопка не нажата, и как LOW, когда она нажата. Именно поэтому код проверяет LOW для обнаружения нажатия. Если вы когда-нибудь перейдёте на внешний стягивающий резистор, вам нужно будет изменить это сравнение на HIGH.

Живой проект и демонстрация

После загрузки поведение становится мгновенным и приятным. Нажмите кнопку, и светодиод сразу загорается на полную яркость, затем заметно тускнеет до нуля за период, который вы контролируете. Отпустите кнопку, и светодиод гаснет; нажмите снова, и затухание начнётся заново с полной яркости.

В видео затухание демонстрируется с несколькими настройками, чтобы вы могли услышать и увидеть разницу. При fadeAmount = 20 затухание быстрое и ступенчатое — оно достигает нуля за несколько видимых шагов. Снижение до fadeAmount = 10 значительно сглаживает его, а fadeAmount = 3 делает затухание заметно более длительным и почти непрерывным. Значение fadeSpeed оказывает столь же dramatic эффект: установка его на 1 мс делает затухание почти мгновенным, а большие значения растягивают его.

Попробуйте этот эксперимент: установите fadeAmount = 5 и fadeSpeed = 30. Вы получите медленное, плавное угасание, похожее на свет, который засыпает. Затем установите fadeAmount = 50 и fadeSpeed = 1 для резкого, быстрого отключения. Ни один из вариантов не является «неправильным» — всё зависит от настроения, которое вы хотите создать.

Поведение переключения той же кнопки рассматривается отдельно в Уроке 98-3: Как включить/выключить переключаемый светодиод с помощью кнопки на Arduino, а более простая версия с нажатием для включения — в Уроке 98-2: Как включить и выключить светодиод с помощью кнопки на Arduino.

Поскольку затухание запускается кратковременным контактом, эта же схема естественно подходит для управления реле или MOSFET вместо светодиода — вы можете плавно регулировать 12 В лампу, плавный пуск двигателя или прогрев нагревательного элемента. Кнопка — это всего лишь триггер; что именно вы будете регулировать, зависит от вас.

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

Главы

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

Изображения

Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
светодиод с резистором на макетной плате, подключенный к Arduino с кнопкой
светодиод с резистором на макетной плате, подключенный к Arduino с кнопкой
937-Lessson 98-LED-5: Arduino code to fade the LED when push button is pressed
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

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

Файлы📁

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

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