В статье рассказано, как сделать макет “умного светофора” для проектов серии “Умный Город” и “Интернет Вещей”. Макет послужит также занимательным пособием для изучения платформы Arduino в школе и дома. Статья предназначена для участников конкурсов JuniorSkills, их тренеров-методистов и радиолюбителей.

Направления тренировки JuniorSkills

“Cхемотехника”, “Программирование микроконтроллеров”, “Интернет вещей”, “Умный город”.

Использование проекта

Описание проекта и примеры программного кода можно свободно распространять и модифицировать для некоммерческого применения с указанием ссылки на данную публикацию. В случае коммерческого использования, например, в составе обучающих наборов, следует предварительно обратиться к автору проекта.

Идея проекта

В проектах конкурса компетенций JuniorSkills “Умный город” и “Интернет вещей” иногда обделяют вниманием простое, но важное устройство – городской светофор. Незначительно усложнив конструкцию светофора, его можно наделить новыми свойствами:

  1. Дистанционное управление и программирование режимов, в том числе по беспроводному каналу связи (следует предусмотреть переход в автономный режим при разрыве связи с центром управления движением).
  2. Контроль исправности освещения городских улиц в ночное время, сбор “больших данных” о колебаниях интенсивности солнечного света в течение дня.
  3. Автоматическое переключение в режим “зеленая волна” при приближении автомобилей специальных служб. Используются передатчик и приемник инфракрасного диапазона.

Конструкция и компоненты

Макет обычного светофора состоит из четырех вертикальных групп, по три лампы в каждой группе. Традиционное решение – использовать в качестве ламп макета светодиоды красного, желтого и зеленого цвета. Управление светодиодами можно организовать динамически, непосредственно через порты микроконтроллера. Но такой подход не оптимален – в общей сложности для прямого управления светодиодами потребуется семь линий, которые занимают семь портов микроконтроллера и используют семь соединительных проводов.

Можно значительно сократить количество линий коммутации и занятых портов, если встроить в макет специальную микросхему управления светодиодами MAX7219 или микросхему расширителя портов PCF8574 которые соединяются с микроконтроллером по шине I2C и занимают всего два порта. Но использование микросхем усложнит конструкцию макета и увеличит расходы на компоненты.

Для упрощения и удешевления конструкции предлагаю использовать в макете активные RGB светодиоды со встроенным контроллером, управляемые по однопроводному последовательному интерфейсу. В этом случае для управления светофором потребуется только один порт микроконтроллера. Светодиод имеет четыре вывода: два вывода питания, вход данных и выход данных. Светодиоды соединяются цепочкой: выход данных одного светодиода соединяется со входом данных следующего светодиода. Обычно такие светодиоды монтируют на светодиодную ленту (рис. 1), которую можно приобрести в магазинах радиодеталей или светотехники.

Светодиодная лента является идеальным готовым сырьем для изготовления макета светофора. Достаточно нарезать ленту на фрагменты из трех светодиодов и наклеить их на основание в виде квадратного бруска. Разумеется, можно приобрести отдельные светодиоды и смонтировать их на самодельные печатные платы. Пример недорогой и качественной ленты на светодиодах WS2812B можно найти на сайте aliexpress.com. Для макета светофора оптимальным сырьем является лента из 60 светодиодов на один метр длины. При этом стоимость ленты на момент работы над проектом составляла около 7 рублей за один светодиод. Это даже меньше, чем розничная цена обычного светодиода.

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

Рис. 1. Светодиодная лента на управляемых RGB светодиодах

Цвет и яркость свечения светодиода зависят от цифрового кода, записанного во встроенный контроллер светодиода. Поток последовательных данных поступает на вход DI (Data In) и записывается в память контроллера. Если команда установки цвета получена контроллером светодиода, а данные продолжают поступать, то предыдущая команда вытесняется на выход DO (Data Out) и поступает в следующий светодиод. Когда светодиоды соединены в цепочку, мы можем назначить любому светодиоду произвольный цвет и яркость свечения, последовательно выгрузив команды цвета на вход первого светодиода. Данные пройдут по цепочке и в каждый светодиод будет записана нужная команда цвета и яркости свечения.

Упрощенная электрическая схема макета светофора изображена на рис. 2. Очевидно, что эта схема предельно проста. Группа #N – это группа из трех светодиодов на одной стороне светофора.

Рис. 2. Упрощенная схема макета светофора на основе светодиодной ленты

Чтобы задать цвет свечения всех светодиодов ленты, необходимо последовательно выгрузить на вход DI команды цвета/яркости для всех светодиодов, начиная с самого дальнего. Это важно для понимания конструкции и принципа работы макета.

Изготовление макета светофора из отрезков светодиодной ленты

Макет может иметь произвольную конструкцию на основе имеющихся материалов. Хорошо подойдут детали, изготовленные на 3D принтере. Работа по созданию таких деталей интересна сама по себе и может послужить основой для независимой презентации на конкурсе школьных проектов.

Отрезаем от светодиодной ленты четыре фрагмента по три светодиода на каждом.

Изготавливаем основание для монтажа фрагментов ленты. Это может быть, например, деревянный брусок со стороной 10 мм, с просверленным вдоль отверстием для стойки и проводов.

Для удобства монтажа “блоки ламп” макета следует располагать с чередованием направления, как показано на рис. 3.

Рис. 3. Схема соединения блоков ламп светофора

Напомню, что направление подачи данных имеет принципиальное значение для светодиодной ленты. На рис. 3 оно показано синими стрелками. В моем варианте макета провода проходят снизу вверх через трубчатую стойку светофора и подключаются к первому блоку ламп сверху. Выход DO первого блока снизу подключается ко входу DI второго блока, и так далее. Промежуточные соединения между отрезками ленты выполняются тонким монтажным проводом МГТФ или проводом в лаковой изоляции.

Приемник и передатчик инфракрасного сигнала

Обратите внимание, что у приемника и передатчика кодированного инфракрасного сигнала должна совпадать несущая частота. Поэтому случайно выбранные приемник и передатчик могут оказаться взаимно несовместимы. Рекомендую приобретать приемник и передатчик в комплекте, например, как изображенный на рис. 4 комплект стоимостью 90 центов.

Рис. 4. Комплект инфракрасного приемника и передатчика дистанционного управления

Сборка макета

Макет предназначен для установки на обычную беспаечную макетную плату. К небольшому отрезку текстолитовой макетной платы припаяна гайка под резьбу M6х1 и рядные разъемы. В гайку с небольшим усилием ввернута пластмассовая трубка:

Рис. 5. Крепление стойки светофора к плате

На трубку надет деревянный брусок. На брусок наклеены отрезки светодиодной ленты. В верхней части макета размещен фоторезистор:

Рис. 6. Расположение фоторезистора

Фотоприемник инфракрасного сигнала для упрощения конструкции припаян непосредственно к контактам разъема:

Рис. 7. Расположение фотоприемника ИК сигнала

Фоторезистор служит для измерения уровня внешнего освещения, а фотоприемник может принимать кодированный сигнал от инфракрасного излучателей, установленных на  автомобилях спецслужб.

Готовый макет изображен на рис. 8, а назначение выводов разъемов показано на рис. 9. Вы можете изменить расположение выводов макета по своему усмотрению.

Рис. 8. Макет светофора в сборе

Подключение макета к плате Arduino Nano / Arduino Uno

Вход сигнала управления светодиодами по умолчанию подключается к выводу D3 платы Arduino (можно изменить программно).

Фоторезистор подключается к аналоговому входу A0, инфракрасный фотоприемник подключается к аналоговому входу A1. Резистор номиналом 10 кОм последовательно с фоторезистором образуют переменный делитель напряжения. В зависимости от освещенности фоторезистора меняется его сопротивление, это приводит к изменению падения напряжения на делителе, которое поступает на аналоговый вход A0.

Рис. 9. Пример подключения макета светофора к плате Arduino Uno

Проверка фоторезистора

Для проверки фоторезистора используем простейший скетч Arduino (листинг 1). Он считывает уровень напряжения на аналоговом входе A0 с интервалом 0,5 сек и выводит числовое значение уровня в окно терминала. Теоретически значение может варьироваться в диапазоне от 0 до 1023, но фактически предельные значения зависят от экземпляра фоторезистора. В моем случае значения изменялись в диапазоне от 2 (полная темнота) до 900 (яркое солнце).

Проверка фотоприемника

Для проверки фотоприемника нам потребуется библиотека IRremote, которую можно установить непосредственно в Arduino IDE.  Для установки библиотеки запустите Arduino IDE, перейдите в меню Скетч → Подключить библиотеку → Управлять библиотеками → Все. Введите в строку поиска “IRremote”, щелкните на строке с названием найденной библиотеки и нажмите кнопку “Установить”. Скопируйте в окно редактора проверочный скетч (листинг 2). В этом скетче мы подключаем библиотеку IRremote, объявляем объект декодированных данных decode_results , в котором хранится принятое и декодированное значение команды. Затем это значение выводится в окно монитора. Если источником команд является кнопочный пульт, то нажимая на кнопку пульта можно видеть в окне монитора соответствующий код команды. В дальнейшем кнопочный пульт можно использовать для имитации сигнала автомобиля специальной службы, который приближается к перекрестку.

Управление светофором

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

Общий порядок работы с библиотекой FastLED
  1. Объявляем количество светодиодов, с которыми будем работать.
  2. Объявляем управляющий выход Arduino, с которого будем отправлять данные.
  3. Объявляем объект CRGB – массив, в котором будут храниться значения цвета для каждого светодиода.
  4. Инициируем нужный драйвер светодиодов. Чаще всего в любительской практике (и в продаже на Aliexpress) встречаются светодиоды на драйверах Neopixel, WS2811, WS2812. Возможно, вам придется уточнить этот вопрос экспериментально. Начните с драйвера Neopixel.
  5. Записываем в ячейки массива константы, которые определяют цвет каждого светодиода. В любой момент времени мы можем работать с любым светодиодом, обращаясь к нему по индексу элемента массива. Это не повлияет на свечение других светодиодов. Светодиоду, который стоит первым в цепочке, соответствует индекс 0.
  6. Командой FastLED.show()  выгружаем данные из массива в светодиоды. Без этой команды изменение значений массива не отобразится.

Светодиоды могут быть очень яркими и их свет будет утомлять зрение. Поэтому в библиотеке предусмотрена функция снижения яркости свечения fadeToBlackBy(FADE) . Эту функцию можно применить по отдельности к каждому элементу массива. Константа FADE всегда кратна четверти числа 256 и может принимать значения 0, 64, 128, 192, 256. Любые другие значения буду округлены до ближайшего допустимого.

После настройки параметров библиотеки выполняется начальный тест светофора. На две секунды зажигаются нужным цветом все светодиоды макета. Код программы соответствует расположению светодиодов, как на рис. 4 (начало сверху). При другом расположении светодиодов следует изменить порядок следования цветов в коде программы.

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

После выполнения теста светофор переходит в циклический демонстрационный режим. Зажигаются красные лампы для условного направления “север-юг” и зеленые для направления “восток-запад”.

Задания и идеи для самостоятельной разработки

Чтобы не мешать самостоятельному творчеству начинающих разработчиков, здесь приводятся только общие идеи проектов с использованием умного светофора без описания готовых решений. Эти идеи можно использовать при составлении тренировочных и конкурсных заданий. Если у вас после прочтения статьи возникли свои идеи или пожелания, прошу поделиться ими в комментариях.

“Зеленая волна” для автомобилей специальных служб

Проект имитирует работу светофоров в некоторых городах Европы и США (например, Нью-Йорк). Автомобили спецслужб оборудованы мощным инфракрасным излучателем, который излучает кодированный сигнал. Когда фотоприемник светофора принимает такой сигнал по одному из направлений движения, он зажигает красный свет для перпендикулярного направления и удерживает его, пока не проедет спецавтомобиль. Проблема в том, что непорядочные граждане покупают или кустарно изготавливают нелегальные излучатели и устанавливают на свой личный автомобиль. Для борьбы с нарушителями используются автоматические фотокамеры, которые по сигналу светофора делают снимок автомобиля с излучателем. Если это нелегальный излучатель, то нарушитель получает большой штраф. Разработайте проект, который имитирует работу фотокамеры при помощи вспышки яркого белого светодиода, или даже заставляет сработать настоящий цифровой фотоаппарат. В качестве излучателя спецавтомобиля можно использовать обычный пульт ДУ.

Для реализации преимуществ, которые дает использование интернета вещей (подключенных вещей), можно разработать проект из нескольких связанных через облако светофоров. Если один из светофоров перешел в режим “зеленая волна”, то следующие по ожидаемому направлению движения светофоры должны перейти сначала в режим “преимущественно зеленый”, чтобы разгрузить магистраль по направлению движения спецавтомобиля, а затем тоже перейти в режим удержания зеленого.

Можно разработать проект “умного перекрестка”, в котором связанные между собой светофоры распознают направление, с которого приближается автомобиль специальной службы и переключаются соответствующим образом.

Продвинутые команды могут разработать проект с использованием GPS. Навигатор спецавтомобиля постоянно передает на сервер дорожной службы текущие координаты. Когда автомобиль приближается к умному светофору, на светофор поступает команда от сервера перейти в режим зеленой волны. Получив от диспетчера спецслужбы маршрут и пункт назначения автомобиля, компьютер дорожной службы может заблаговременно управлять работой светофоров.

Каждый проект должен предусматривать возможность автономной работы умного светофора в случае потери связи с облачным сервисом или сервером диспетчерской службы.

Контроль освещенности улиц и перекрестков

Качественное освещение в ночное время зон перекрестков и пешеходных переходов имеет большое значение для безопасности дорожного движения. Именно в таких местах обычно размещены светофоры. Поэтому светофор, оснащенный фотодатчиком, можно использовать для контроля освещенности опасной зоны и передачи сигнала о неисправности освещения на диспетчерский пульт дорожной службы. Разработайте проект, который передает данные об освещенности в облачный сервис через подключение Ethernet или WiFi. Разработайте браузерный интерфейс диспетчера дорожной службы.

Сбор данных о солнечной активности и освещенности в дневное время

Анализируя массивы больших данных об интенсивности солнечного света в дневное время, можно получить информацию о солнечной активности и даже о степени загрязненности воздуха. Разработайте проект с использованием часов реального времени, который каждые 10 минут передает данные об освещенности в таблицу Google Sheets или иную облачную базу данных. Данные передаются в течение заранее настроенного интервала от восхода до заката Солнца. Проект можно усложнить и получать актуальные данные о времени восхода и заката для данной местности с одного из открытых серверов метеослужб.

Особенности использования макета с ESP8266 / NodeMCU

  1. Разработчики библиотеки рекомендуют указать в Arduino IDE следующее описание платы: http://arduino.esp8266.com/stable/package_esp8266com_index.json версии v2.2.0 или новее.
  2. Используйте правильную нумерацию выводов платы. Существует два основных вида нумерации – исходная нумерация (raw layout) в которой вывод 0 это GPIO0, вывод 1 это GPIO1 и т.д., и нумерация NodeMCU, в которой вывод 0 это GPIO16, вывод 1 это GPIO5 и т.д. Библиотека будет пытаться угадать систему нумерации выводов на основании описания платы. Вы можете задать раскладку выводов принудительно, используя одну из строк кода

    Строка должна быть расположена перед подключением библиотеки #include <FastLED.h>