Контроллер управления освещением и звонками для школы
Дано: новая школа, в которой уже смонтирована система управления звонками и освещением на основе контроллеров серии К2000 и К2010. Информацию об этих контроллерах можно найти в Интернете. Центральным элементом системы является обычный компьютер со специальным ПО, который подключен к контроллеру через LPT-порт.
В процессе эксплуатации системы были обнаружены множественные недочёты: ограничение на максимальное количество уроков в день (что иногда не давало возможность добавить классные часы), невозможность управлять освещением в начальном звене (контроллер имел только один сигнальный вход от компьютера), невозможность задать расписание звонков по дням недели (фактически присутствовало только три разных расписания: обычное, сокращённое, субботнее — чего хватало далеко не всегда), множественные другие недочёты в ПО. К тому же сам контроллер спустя некоторое время стал сбоить и выключаться.
В результате было решено разработать свой собственный контроллер и написать ПО для управления.

Справа контроллер К2000. Слева — контакторы звонка:

В школе для управления освещением на каждом этаже в каждом блоке установлены модули аналогового управления К2010:
Они позволяют включать/выключать освещение в коридорах с помощью низковольтной шины управления 4-20 мА. Подключаются они следующим образом (изображение из официальной инструкции):

Переделка уже существующей системы сводится только к удалению контроллера К2000. Его мы заменим своим.
Для сборки нашего контроллера нам понадобится плата Arduino UNO или Arduino Mega, двойной модуль реле и несколько радиодеталей:

- U1 — Arduino;
- U2 — сборка Дарлингтона ULN2003;
- VR1, VR2, VR3 — стабилизаторы LM317T;
- R1-R5 — резисторы 470 Ом;
- R6-R8 — резисторы 62 Ом или подстроечные резисторы (подбирается по току стабилизации 20 мА);
- VD1-VD5 — светодиоды;
- модуль реле — например такой:

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

Нумерация выводов ардуины может быть любой. Пины для подключения указываются в коде. Не стоит использовать цифровые пины 0 и 1 (они используются для коммуникации с компьютером).
Настройка схемы сводится к подстройке резисторов R6-R8 (если они подстроечные). Делается это следующим образом: в программе управления в ручном режиме включается освещение. В это время на контактах 1-3 ULN2003 должно появиться напряжение 5 вольт, а на контактах 14-16 соответственно появиться земля. Выходы L1-L3 контроллера по-очереди замыкаются амперметром. Необходимо с помощью резисторов установить силу тока в цепях равную 20 мА.
Схема подключения контроллера к системе:

- L1, L2, L3 — шина управления освещением 4-20 мА.
- B1, B2 — выходы для управления контакторами K1, K2.
- B — подключается к цепи питания 220 В.
Пока всё собрано на макетке:

В корпусе от старого Dial-Up модема:

В будущем планирую развести плату и напечатать корпус на 3D-принтере.
Программное обеспечение
Для управления всей системой было написано приложение Bell Manager. Язык программирования — Python. Все исходники открыты, поэтому любой желающий может доработать приложения для себя. Ссылки в конце статьи.
Функции программы:
- Автоматическая подача звонков по расписанию уроков.
- Автоматическое выключение освещения на время уроков (задержку выключения после звонка на урок можно регулировать).
- Раздельное расписание для основной и начальной школы.
- Возможность задания разного расписания на каждый день недели.
- Возможность задания отдельного расписания на любой день в будущем (например, праздники).
- Возможность включения дополнительного звонка в любую выбранную дату и время.
- Автоматическое включение освещения утром и выключение вечером.
- Задание периодов исключений для освещения.
- Возможность подачи звонков и управления освещением вручную из программы.
Приложение кроссплатформенное — возможна работа как в Windows, так и в Linux.

На данный момент программа постоянно дорабатывается, исправляются ошибки.
Протокол обмена данными
Символ или их комбинация | Значение |
Y—$K | Инициализация контроллера. Команда посылается при установке связи с контроллером. До её получения все остальные команды игнорируются. |
Q | Включение звонка в основной школе |
q | Выключение звонка в основной школе |
W | Включение звонка в начальной школе |
w | Выключение звонка в начальной школе |
E | Включение освещения в основной школе |
e | Выключение освещения в основной школе |
R | Включение освещения в начальной школе |
r | Выключение освещения в начальной школе |
Команды для звонка передаются непосредственно в моменты его включения/выключения. Команды на освещение передаются каждую секунду. При отсутствии команд в течении 5 секунд — контроллер считает, что связь потеряна и выключает всё.

Скачать установщик с GitHub: https://github.com/student-proger/BellManager/releases
Репозиторий на GitHub: https://github.com/student-proger/BellManager