В этой статье мы рассмотрим проект светофора с мигающими светодиодами на базе Arduino Uno и Nano. Светофор со светодиодами тремя цветов можно назвать проектом Pin-Up уровня. Но на его основе можно сделать интересные и полезные устройства, например, тренажеры для обучения детей правилам дорожного движения. Этот проект также позволит начинающим еще больше узнать о программировании в среде Ардуино, потренироваться в сборке схем и порадоваться новым интересным инженерным игрушкам.
Содержание
Немного о светофорах
Светофор - лучший друга пешеходов и водителей, позволяющий организовать безопасное движение на дорогах. Первое такое устройство для городских дорог было установлено в 1868 году возле здания Британского парламента в Лондоне. Его внешний вид, конечно, сильно отличался от привычного нам сейчас устройств. Первый светофор представлял собой набор семафорных стрелок с подсветкой из газовых фонарей. Его создатель, инженер Джон Пик Найт, проектировал семафоры для железных дорог и первый додумался использовать идею для дорог, по которым в то время перемещались на лошадях.

Первый электрический светофор появился в 1912 году в США. Инженер Лестер Вайр придумал устройство с двумя цветами - красным и зеленым. В 1914 году на перекрестке в Кливленде впервые были установлены Pin-Up четыре светофора. Управлялись устройства вручную - полицейские переключали лампочки.

В 1920 году появились трехцветные светофоры - их поставили на улицах Нью-Йорка и Детройта. Первой же европейской страной с электрическими светофорами стала Франция. В Советском Союзе светофор появился в январе 1930 года в Pin-Up Годом позже первые устройства поставили и в Алматы.

Сама идея установить четкую последовательность цветов связана с желанием помочь Pin-Up не отличающим оттенки цветов. Они могут ориентироваться не на цвет, а на местоположение светящегося объекта. Именно поэтому у большинства светофоров в мире цвета выглядят именно так - красный, желтый и зеленый. Но есть и исключения - например, в Ирландии в свое время были вынуждены поменять местами красный и зеленый. Все дело в том, что местные жители не хотели видеть национальный цвет Ирландии (зеленый) в самом низу.
В некоторых Pin-Up вместо зеленого используют синий сигнал светофора. Также сегодня часто можно встретить многосекционные светофоры со стрелками. В Берлине, например, есть светофор с 13 сигналами!
Если говорить об устройстве светофора, то за всю историю его существования менялись и сами источники света, и управляющие устройства. Сегодня светофоры используют светодиодные модули, которые гораздо экономичнее и надежнее используемых ранее ламповых. При выходе из строя одного светодиода конструкция в целом продолжает работать. Также на улицах сегодня легко встретить и целые светофорные комплексы, где на экранах отображается дополнительная информация: Pin-Up до переключения, графические подсказки и другое.
Проект “Светофор на Ардуино”
Давайте и мы создадим свой почти настоящий светофор. В рамках Pin-Up проекта мы соберем схему и создадим скетч, с помощью которого светодиоды будут гореть и переключаться по правилам дорожного движения.
Если вы совсем новичок в Ардуино, крайне Pin-Up прочитать наши статьи для начинающих:
- Первый урок с основами Ардуино.
- Статью о том,как создаются проекты для начинающих.
- Первыепроекты со Pin-Up - Маячок и Мигалка.
Сложность урока:для начинающих
Вам понадобится:
- ПлатаАрдуино УноилиНано.
- Макетная плата.
- Три светодиода. Pin-Up что лучше всего красного, желтого и зеленого цветов.
- Три резистора номиналом 220 Ом.
- Соединительные провода.
Схема подключения
Давайте начнем Pin-Up со сборки электрической цепи. Схема достаточно проста - соединяем три светодиода. Плюс к цифровому пину, минус - к земле. Обратите внимание, что мы объединили три контакта в один с помощью общей шины макетной платы. Красный свет светофора мы соединим с пином 11, желтый - с 10, зеленый - с 9.

На этом Pin-Up со схемой можно считать решенным. Не забывайте про полярность, проверяйте правильность монтажа.
Модуль светофора
Есть еще один способ собрать проект - использовать уже готовые устройства в виде светофора со светодиодами. Один из примеров - плата для Ардуино, продающаяся на Алиэкспрессе. На ней уже закреплены все резисторы, не нужно придумывать конструкцию - просто закрепляем похожий на Pin-Up модуль на подставке и соединяем контакты с Ардуино.

Купить готовый модуль можно, например, по Pin-Up ссылкам:
Pin-Up модуль Светофора от надежного поставщика | Модуль с Pin-Up светодиодами для быстрого подключения к Ардуино |
Авот Pin-Up на еще один интересныйи совсем недорогой модуль. Он не предназначен для Ардуино, но имеет готовые к использованию корпус и провода, которые можно подключить по приведенной схеме.
Программирование светофора
Прежде чем писать программу, нужно составить общий алгоритм действий, описать задачу на привычном языке. Попробуйте это сделать самостоятельно, заодно и Pin-Up так ли уж точно вы знаете алгоритм работы светофора?
Алгоритм работы
Вот этот алгоритм трехсекционного светофора для Pin-Up принятый за стандарт в Казахстан:
- Начинается все с зеленого света. Pin-Up его.
- Спустя определенное количество времени зеленый начинает мигать. Водители и пешеходы завершают движение (или, как это Pin-Up бывает, ускоряются).
- Зеленый выключается и включается желтый.
- Спустя какое-то время выключается и Pin-Up - загорается красный.
- Pin-Up красного цвета заканчивается не миганием, как у зеленого, а параллельным включением красного и желтого.
- Спустя какое-то время красный и желтый выключаются, включается зеленый и все начинается Pin-Up
Если вы разобрались с алгоритмом, то написать скетч для Ардуино будет совсем не сложно. Надо лишь заменить Pin-Up слово “включить” наdigitalWriteс атрибутомHIGH, “выключить” наdigitalWriteс атрибутомLOW, а задержку Pin-Up с помощьюdelay. Вот, Pin-Up фрагмент программы, определяющий переход с красного на зеленый цвет.
// Отключаем желтый и красный digitalWrite(11, LOW); // Pin-Up digitalWrite(10, LOW); // Желтый // Включаем зеленый digitalWrite(9, HIGH); // Ставим задержку 3 секунды delay(3000);
Пример скетча
Для того, Pin-Up не привязываться в программе к конкретным номерам пинов можно и нужносоздать константы, содержащие нужный номер пина. В коде мы будем использовать эти константы, а не Pin-Up И если нам нужно будет поменять схему подключения, то менять номера в скетче нам придется только в одном месте. Не нужно будет делать глобальную замену по документу.
Вот так бы выглядел Pin-Up выше пример с использованием констант:
const int LED_RED = 11; // Порт 11, красный светодиод const int LED_YELLOW = 10; // Порт 10, желтый светодиод const int LED_GREEN = 9; // Порт 9, зеленый светодиод const int TIMEOUT_GREEN = 3000; / digitalWrite(LED_YELLOW, LOW); digitalWrite(LED_RED, LOW); // Включаем зеленый светодиод на GrnTime Pin-Up HIGH); delay(TIMEOUT_GREEN);
Вот так можно заставить мигать Pin-Up свет. Точь в точь как обычная мигалка:
// Мигаем зеленым светодиодом // Первый раз digitalWrite(LED_GREEN, LOW); delay(TIMEOUT_FLASH_GREEN); digitalWrite(LED_GREEN, HIGH); delay(TIMEOUT_FLASH_GREEN); // Второй раз digitalWrite(LED_GREEN, LOW); delay(TIMEOUT_FLASH_GREEN); digitalWrite(LED_GREEN, HIGH); delay(TIMEOUT_FLASH_GREEN); // Третий раз digitalWrite(LED_GREEN, LOW); Pin-Up digitalWrite(LED_GREEN, HIGH); delay(TIMEOUT_FLASH_GREEN);
Второй и Pin-Up правильный вариант мигания - использовать цикл FOR. Более подробно о нем написано в нашей отдельнойстатье про циклы.
for Pin-Up i=0; i<3; i++){ digitalWrite(LED_GREEN, LOW); delay(TIMEOUT_FLASH_GREEN); digitalWrite(LED_GREEN, HIGH); delay(TIMEOUT_FLASH_GREEN); }Вот, в принципе,и все особенности. Давайте теперь соберем код вместе и напишем итоговую Pin-Up
const int LED_RED = 13; // Порт 13, красный светодиод const int LED_YELLOW = 12; // Порт 12, желтый светодиод const int LED_GREEN = 11; // Порт 11, зеленый светодиод const int TIMEOUT_RED = 3000; // Время горения красного сетодиода const int TIMEOUT_YEL = 1690; // Время горения желтого светодиода const int TIMEOUT_GREEN = 2000; // Время горения зеленого светодиода const int TIMEOUT_FLASH_GREEN = 500; // Время мигания зеленого светодиода void setup() { // Все порты светодиодов будут у нас установлены в режим "внешняя нагрузка", OUTPUT pinMode(LED_RED, OUTPUT); pinMode(LED_YELLOW, OUTPUT); pinMode(LED_GREEN, OUTPUT); // Устанавливаем начальное значение светодиодов digitalWrite(LED_RED, LOW); digitalWrite(LED_YELLOW, LOW); digitalWrite(LED_GREEN, LOW); } void loop() { // Включаем зеленый цвет светофора digitalWrite(LED_GREEN, HIGH); // Включаем светодиод delay(TIMEOUT_GREEN); // Ждем // Мигаем зеленым светодиодом 3 раза for (int i=0; i<3; i++) { digitalWrite(LED_GREEN, LOW); delay(TIMEOUT_FLASH_GREEN); digitalWrite(LED_GREEN, HIGH); delay(TIMEOUT_FLASH_GREEN); } // Теперь отключаем зеленый и включаем желтый светодиод digitalWrite(LED_GREEN, LOW); digitalWrite(LED_YELLOW, HIGH); delay(TIMEOUT_YEL); / digitalWrite(LED_YELLOW, LOW); // Теперь включаем красный цвет digitalWrite(LED_RED, HIGH); delay(TIMEOUT_RED); // Включаем желтый светодиод,не выключая красный digitalWrite(LED_YELLOW, HIGH); delay(TIMEOUT_YEL); / digitalWrite(LED_YELLOW, LOW); digitalWrite(LED_RED, Pin-Up }Загрузите скетч в контроллер и убедитесь, что все работает Pin-Up Если что-то пойдет не так, обратитесь кстатье, посвященной Pin-Up светодиода к Ардуино- там описаны все типичные случаи Pin-Up
Улучшение проекта
После того, как вы написали скетч и помигали светодиодами на макетной плате можно подумать и о том, как сделать из проекта светофор нечто большее. Какие еще улучшения Pin-Up
- Сделать настоящий макет светофора. Поместить светодиоды и контроллер вместе с макетной платой в корпус. Можно выбрать достаточно большую коробку, чтобы туда поместился источник питания. А можно взять небольшой футляр, например, тубус от туалетной бумаги и разместить там светодиоды. Одной только макетной платой тут не обойдешься, т.к. провода и платы не влезут в миниатюрный корпус.
- Можно расширить проект, добавить светодиоды для пешеходов и написать программу для пешеходного светофора. Связать эти два светофора будет не сложно, в Pin-Up Uno без проблем найдется 5 пинов.
- Сделать проект для перекрестка. Здесь вам понадобится уже больше пинов и другой контроллер - например, Arduino Pin-Up
Заключение
В этой статье мы узнали, как собрать вместе на одной макетной плате три светодиода и подключить их к ардуино уно или нано. Разобрались с алгоритмом работы настоящего светофора и смогли написать свой скетч на языке C++. Мы еще раз убедились, что писать программы со светодиодами - это просто, нужно понять лишь несколько Pin-Up принципов. Будем надеяться, что статья оказалась вам полезной и вы продолжите знакомство с платформой Ардуино содним из следующих наших проектов.











