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

Урок 98-10: Светофор на Arduino

Урок 98-10: Светофор на Arduino

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

Светофор в реальной жизни с тремя цветами

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

  • Создание реалистичной модели светофора для железнодорожного макета или диорамы
  • Создание системы индикации с таймером для мастерской или гаража (например, сигналы «можно входить» / «подождите»)
  • Изучение основы для пешеходных светофоров с фазами, запускаемыми кнопкой
  • Прототипирование последовательности реле с таймером для промышленных задач или задач домашней автоматизации
  • Обучение детей последовательности, таймингу и электронике с помощью знакомого, узнаваемого объекта

Самое лучшее: после загрузки всё работает автономно. Вы программируете Arduino один раз с компьютера, затем питаете его от батареи или адаптера, и он работает бесконечно — ПК не требуется (в видео на 12:27).

красный, зелёный и жёлтый светодиоды на макетной плате для проекта светофора
красный, зелёный и жёлтый светодиоды на макетной плате для проекта светофора

Как работает светофор

Светофор на самом деле — это просто временная последовательность из трёх выходов. Arduino включает по одному светодиоду за раз, ждёт заданное количество секунд, выключает его и переходит к следующему. Затем цикл повторяется. В примере тайминга из видео зелёный горит 3 секунды, жёлтый — 1 секунду, а красный — 3 секунды, но все эти значения можно настроить в коде (в видео на 49:44).

тайминг светофора: красный свет
тайминг светофора: красный свет
тайминг светофора: жёлтый свет
тайминг светофора: жёлтый свет
тайминг светофора: зелёный свет
тайминг светофора: зелёный свет

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

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

Список деталей для этого проекта минимален:

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

В видео рекомендуется использовать три светодиода явно разных цветов, чтобы эффект светофора был сразу виден — иначе их пришлось бы подписывать (в видео на 02:04).

Понимание ограничения тока светодиода

Каждому светодиоду нужен токоограничивающий резистор, включённый последовательно. Вот почему: у светодиода почти фиксированное прямое напряжение (обычно около 2 В для стандартных светодиодов 5 мм), и если подключить его напрямую к 5 В, ток резко возрастёт и уничтожит его. Резистор поглощает избыточное напряжение.

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

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

Схема светофора на Arduino
Схема светофора на Arduino
Подключение светодиодного светофора на Arduino
Подключение светодиодного светофора на Arduino

Каждый светодиод подключается одинаково: анод (длинная ножка) соединяется с цифровым пином Arduino, а катод (короткая ножка, плоская сторона корпуса светодиода) соединяется через резистор с землёй.

В схеме из видео красный светодиод подключается к пину 2, жёлтый/оранжевый — к пину 3, а зелёный — к пину 4 (в видео на 50:50). Все три резистора используют общую шину земли на макетной плате. Порядок цветов на макетной плате не важен — важно, чтобы номера пинов в вашем коде совпадали с пинами, которые вы фактически использовали.

Полезный совет из видео: резистор можно разместить с любой стороны светодиода. Вы можете поставить его между выводом Arduino и анодом светодиода или между катодом светодиода и землёй — электрически это одно и то же (в видео на 51:52).

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

Полная программа доступна ниже статьи. Здесь мы сосредоточимся на частях, которые вы захотите настроить.

В начале скетча три определения выводов сопоставляют каждый светодиод с цифровым выводом. Если вы подключили светодиоды к другим выводам, измените эти значения:

const int greenLED = 4;
const int yellowLED = 3;
const int redLED = 2;

Далее идут константы времени. Они управляют тем, как долго горит каждый свет, в миллисекундах. В видео по умолчанию используется 5000 мс для зелёного, 1000 мс для жёлтого и 5000 мс для красного — но во время демонстрации они были изменены на 3 с / 1 с / 3 с, а позже на 10 с / 3 с / 10 с (в видео на 56:27):

const int greenOnTime = 5000;
const int yellowOnTime = 1000;
const int redOnTime = 5000;

Чтобы изменить ритм вашего светофора, просто отредактируйте эти три значения. Хотите медленный, реалистичный перекрёсток? Попробуйте 10000, 3000, 10000. Хотите быструю демонстрацию? Попробуйте 1000, 300, 1000.

Внутри loop() последовательность проста: включить зелёный, подождать, выключить зелёный; включить жёлтый, подождать, выключить жёлтый; включить красный, подождать, выключить красный; затем вернуться к зелёному. Монитор порта выводит каждое изменение состояния, чтобы вы могли убедиться, что время соответствует ожидаемому.

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

После загрузки кода Arduino выполняет цикл самостоятельно. В видео сначала загорается зелёный светодиод, затем после его длительности ненадолго включается жёлтый, затем красный, и цикл немедленно перезапускается (в видео на 55:20).

Монитор порта отражает это в текстовом виде — "green LED on", "green off", "yellow on" и так далее — что отлично помогает убедиться, что ваши значения времени работают как задумано. Когда вы будете готовы запустить устройство автономно, отключите USB и подключите литий-ионный аккумулятор или адаптер на 5 В; Arduino продолжит цикл без компьютера (в видео на 56:11).

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

Главы

  • [00:00] Обзор 10 проектов со светодиодами на Arduino
  • [01:22] Введение в пошаговый курс по Arduino
  • [02:29] Что такое светодиод: символ, анод и катод
  • [03:49] Расчёт токоограничивающего резистора для светодиода
  • [49:25] Введение в проект светофора
  • [49:44] Объяснение времени работы светофора
  • [50:34] Схема подключения светофора
  • [52:13] Объяснение кода светофора
  • [54:32] Живая демонстрация с монитором порта
  • [55:30] Изменение значений времени
  • [56:11] Работа светофора от батареи

Изображения

traffic light timing: green light
traffic light timing: green light
тайминг светофора: желтый свет
тайминг светофора: желтый свет
тайминг светофора: красный свет
тайминг светофора: красный свет
Принципиальная схема светофора на Arduino
Принципиальная схема светофора на Arduino
traffic_lights
traffic_lights
Схема подключения светодиодного светофора на Arduino
Схема подключения светодиодного светофора на Arduino
красный, зеленый и желтый светодиоды на макетной плате для проекта светофора
красный, зеленый и желтый светодиоды на макетной плате для проекта светофора
942-Lessson 98-LED-10: Arduino code traffic light
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

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

Файлы📁

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

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