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

Урок 98-7: Ходячий свет с использованием Arduino и 5 светодиодов

Урок 98-7: Ходячий свет с использованием Arduino и 5 светодиодов

Бегущий огонь (также называемый «догоняющим» или огнём «Knight Rider») — один из классических проектов для начинающих на Arduino, и не зря. Он учит управлять несколькими выходами последовательно, рассчитывать события по времени и думать о токоограничивающих резисторах, а результат при этом выглядит эффектно. В этом проекте вы подключите пять светодиодов к Arduino и запрограммируете их так, чтобы каждый загорался по очереди, создавая иллюзию одного огонька, «бегущего» вдоль ряда.

5 leds on breadboard with resistor shown connected to Arduino UNO
5 leds on breadboard with resistor shown connected to Arduino UNO

Разобравшись с этим шаблоном, вы сможете применять его в удивительно большом числе реальных проектов:

  • Декоративная подсветка: бегущая рамка для полки, фоторамки или макета.
  • Указатели направления: эффект последовательного поворотника для бутафорского автомобиля или электровелосипеда.
  • Индикатор прогресса или состояния: ряд светодиодов, продвигающийся по мере завершения процесса.
  • Реквизит для игр и табло: «движущаяся цель» или индикатор уровня.
  • Учебное пособие: максимально наглядная демонстрация цифровых выходов и работы с задержками.

Та же схема подключения пяти светодиодов используется ещё в нескольких проектах этого курса, поэтому собранное здесь оборудование становится многоразовой платформой.

Как работает бегущий огонь

Принцип точно такой же, как при включении одного светодиода, — просто повторённый пять раз (в видео на 30:47). Каждый светодиод подключён к своему выводу Arduino через собственный токоограничивающий резистор, а все резисторы соединены с общей шиной земли. Затем скетч подаёт на один вывод HIGH, ждёт, подаёт LOW, ждёт и переходит к следующему выводу. Поскольку в каждый момент горит только один светодиод, глаз воспринимает последовательность как движение.

Именно два значения времени и придают эффекту его характер. Время включения определяет, как долго каждый светодиод остаётся горящим, а время выключения — паузу перед загоранием следующего светодиода. Короткое время включения при длинном времени выключения даёт быстро движущуюся одиночную точку; длинное время включения при коротком времени выключения даёт более плавное, почти непрерывное перемещение (в видео на 35:00).

Оборудование и компоненты

  • 1 × плата Arduino (Uno, Nano или аналогичная)
  • 5 × светодиодов (любого цвета; если смешать цвета, эффект читается легче)
  • 5 × резисторов — хорошо подойдут от 300 Ω до 1 кΩ
  • 1 × макетная плата
  • Соединительные провода
  • USB-кабель или батарейный блок для питания

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

Выбор номинала резистора

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

Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button

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

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino

Вставьте пять светодиодов в макетную плату так, чтобы их аноды (более длинная ножка) смотрели в одну сторону. Подключите каждый катод (более короткую ножку со скошенной стороной) к своему резистору, а дальние концы всех пяти резисторов соедините с общей шиной земли. Затем протяните соединительный провод от каждого анода к выводу Arduino.

В этой сборке светодиоды назначены на выводы 3, 4, 5, 6 и 7 (в видео на 31:29). Номера выводов заданы в начале скетча, поэтому, если вы предпочитаете другое расположение, достаточно изменить только эти пять строк.

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

Скетч намеренно сделан простым, чтобы новичок мог разобрать каждую строку. Редактировать под свою схему нужно только блок в самом верху.

const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;
int offTime = 30;  // the time each LED waits in the OFF state
int onTime = 100;  // the time each LED is ON

Определения выводов. Пять строк const int сопоставляют каждый светодиод с физическим выводом Arduino. Поскольку они объявлены как const, их значения нельзя изменить позже в программе — это полезная привычка, предотвращающая случайное переназначение. Если вы подключите светодиоды к другим выводам, измените числа здесь и больше ничего.

onTime и offTime. Эти два целых числа — единственные переменные «поведения» в проекте, и именно с ними вам захочется поэкспериментировать:

  • onTime — как долго (в миллисекундах) горит каждый светодиод. Большие значения делают каждый шаг медленнее и более размеренным.
  • offTime — пауза после выключения светодиода перед тем, как загорится следующий. Меньшие значения заставляют свет двигаться быстрее.

Попробуйте onTime = 200 и offTime = 200 для равномерного бегущего огня средней скорости или onTime = 30 и offTime = 30 для очень быстрого, почти размытого эффекта (в видео на 36:06).

Функция setup() выполняется один раз и просто устанавливает все пять выводов в режим OUTPUT. Затем функция loop() повторяет один и тот же четырёхшаговый шаблон для каждого светодиода: подать на вывод HIGH, подождать onTime, подать LOW, подождать offTime. Когда пятый светодиод завершает цикл, цикл начинается с первого, создавая бесконечное движение.

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

С значениями по умолчанию светодиоды шагают по ряду в расслабленном темпе. Загрузка скетча со значениями onTime и offTime, установленными на 200 мс, даёт ровный, равномерный марш; снижение обоих до 30 мс заставляет свет проноситься по ряду почти слишком быстро, чтобы уследить (в видео на 36:21).

Два полезных эксперимента, которые стоит попробовать, когда всё заработает:

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

Та же схема подключения пяти светодиодов используется в следующем проекте, где нажатие кнопки продвигает свет на один шаг за раз. Эта сборка рассматривается в Уроке 98-8: Бегущий свет с кнопкой и светодиодами на Arduino.

Если вы предпочитаете управлять рядом с помощью аналогового входа вместо кнопки, смотрите Урок 98-9: Индикатор уровня напряжения на светодиодах с использованием Arduino или бегущий свет с потенциометром.

Идём дальше

Когда базовое движение работает, естественным следующим шагом будет заставить свет отражаться туда и обратно вместо перехода от последнего светодиода к первому. Это чисто программное упражнение — без дополнительного оборудования — и хороший способ попрактиковаться в циклах и массивах. Вы также можете объединить этот проект с версией с кнопкой, чтобы построить дисплей с ручным продвижением.

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

Главы

  • [00:00] Обзор десяти проектов со светодиодами
  • [01:22] Введение в пошаговый курс по Arduino
  • [02:29] Что такое светодиод и как определить его выводы
  • [03:49] Расчёт токоограничивающего резистора
  • [30:47] Представление проекта бегущего света
  • [31:06] Схема подключения для пяти светодиодов
  • [32:52] Разбор кода бегущего света
  • [34:39] Демонстрация и изменение значений времени
  • [36:41] Продвижение света с помощью кнопки (отдельный урок)
  • [42:25] Светодиодная шкала напряжения с потенциометром (отдельный урок)
  • [49:25] Светофор на Arduino (отдельный урок)

Изображения

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
5 светодиодов на макетной плате с резистором, подключенные к Arduino UNO
5 светодиодов на макетной плате с резистором, подключенные к Arduino UNO
939-Lessson 98-LED-7: Arduino code walking LED light
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

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

Файлы📁

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

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