![]() |
![]() |
|||||||||||||||
Сказ о том, как построить SCADA дом
Автор: mr_smit, shapkin85@bk.ru Часть первая. Лирическая. Создайте систему, которой сможет Принцип Шоу Всё началось после переезда в новую квартиру. Кабальный договор подписан. Ключи в руках. Но первая же зима показала, что квартира жутко холодная. И это несмотря на уверения бывших хозяев в обратном. К тому же практически полностью отсутствовала вентиляция. Выражалось это в повышенной влажности, благодаря чему на окнах был конденсат и со временем мог появиться грибок. Данное положение дел, конечно же, меня не устраивало и с этим надо было что-то делать. Само словосочетание «умный дом» далеко не новое. В Интернете эта тема затерта до дыр. Поисковик предлагает огромное количество вариантов на любой вкус и кошелек. Однако если копнуть глубже, то всё не так уж и радужно. Как правило, эти системы ориентированы именно на дом, а не на квартиру. В них присутствуют такие компоненты как управление котлом, открытие/закрытие въездных ворот и прочие плюшки, преимущества которых сложно оценить простому обывателю панельной пятиэтажки. К тому же все они подразумевают капитальную переделку всей проводки. А ценники и вовсе достигают заоблачных высот.
Часть вторая. Практическая. Всякое решение плодит новые проблемы. Закон Мёрфи
Если говорить простыми словами, то SCADA (от англ. supervisory control and data acquisition, диспетчерское управление и сбор данных) предоставляет вам возможность через Интернет браузер и WEB интерфейс управлять любыми исполнительными механизмами и наблюдать за их работой. Чтобы было понятно о чем идет речь - привожу пример реальной системы автоматизации котельной: Обобщив свои требования, я составил для себя техническое задание: Разработать систему позволяющую: Осталось всё это реализовать! Решение этой задачи я видел так: Сервер опрашивает отдельновзятые модули по шине RS485 и предоставляет web интерфейс управления по статическому IP адресу. Сервер подключается к домашнему роутеру, который в свою очередь «раздает» этот интерфейс на все устройства домашней сети. Исполнительные устройства Первое что мне понадобилось это исполнительные устройства. Нужен был настенный выключатель с клавишами без фиксации. Это первая сложность. Не у каждого производителя они представлены в каталогах. После долгих скитаний мой выбор пал на такие: Не сочтите за рекламу, но найти подобные выключатели по приемлемой цене действительно проблема. Сайт производителя: https://www.lk60.ru/lk-45-button-b-one.html Они имеют модульную конструкцию, неплохо сделаны и позволяют выбрать как цвет кнопок, так и цвет рамки. Ну и, конечно же, самое вкусное это цена. За всё я отдал около 1300 руб. При детальном осмотре выяснилось, что кнопки имеют очень удачное углубление, куда прекрасно может поместиться небольшое реле: Правда, пришлось их немного доработать, а именно выкусить перегородки: Двухстороннюю печатную плату я разрабатывал с тем расчетом, чтобы реле были полностью утоплены внутрь выключателя: Всё подошло просто идеально. По одному реле на каждый выключатель: На плате присутствует микроконтроллер ATMega8, драйвер шины RS485 MAX485, 2 реле, датчик температуры и влажности DHT22 и обвязка по питанию. Схема: Изначально я планировал применить микроконтроллер STM32F030, но драйвер RS485 с питанием от 3,3В довольно дорогой и его сложно купить. А MAX485 не может работать от 3,3 вольта. Поэтому чтобы сэкономить место на плате и не делать два преобразователя на 3,3В и на 5В выбор пал на связку AVR + Max485. Выбирая между симистором и реле, я отдал предпочтение последнему. Никакого нагрева, всё просто, надежно. Да и мерцать не будет при включении, например, болгарки. Далее. Нам надо как-то общаться с этим модулем, читать данные или передавать ему команды. Для этого нужен протокол. Поскольку я одно время довольно долго занимался протоколами диагностики автомобильных блоков управления двигателями, то чтобы не изобретать велосипед и не применять Modbus я взял за основу один из этих протоколов и разработал свой. Запрос всегда отправляет только сервер. Модули лишь отвечают.
KC – двоичное дополнение до 1 (суммируем все байты, инвертируем полученное число, прибавляем 1, берем младший байт от полученного) Казалось бы просто: читаем данные с датчика DHT22 и отправляем их в USART, но в ходе написания прошивки выяснились детали, над которыми по началу не задумываешься. Во-первых, согласно даташиту, датчик надо опрашивать не чаще 1 раза в 2 секунды. Опрос же самих модулей по RS485 происходит гораздо быстрее. Поэтому если сервер 10 раз запросит параметры за эти 2 секунды, то модуль ответит ему 10 раз одинаковым значением. Во-вторых, процедуру приема запросов от сервера пришлось немного усложнить. Поскольку все устройства сидят на одной шине и слушают эфир, то ответ какого либо модуля на запрос от сервера слышат все. Это копится у всех в приемном буфере. Поэтому пришлось ввести процедуру определения начала запроса (преамбула AB CD). Чтобы в этом огромном потоке информации на шине выделять запросы от сервера к конкретному устройству. Чтение данных с датчика DHT22 производится таймером в режиме захвата. На стене модуль выглядит так: Витая пара к каждому выключателю была заложена ещё на этапе ремонта: Обращаю ваше внимание на то, что штробы в стене необходимо делать только ВЕРТИКАЛЬНЫЕ!!! Если вы делаете горизонтальную штробу, то тем самым вы уменьшаете несущую способность стены! Она может просто сломаться пополам. Маленький горизонтальный кусок я сделал лишь от безысходности. Нарисовал поясняющую картинку того, что происходит когда вы делаете горизонтальную штробу: Поэтому если вы планируете установить боковые светильники у себя над диваном, то только так: Чтобы проверить собранный модуль, не включая его в общую систему, я написал на Delphi вот такую программу: Т.е. используя простой переходник USB-COM или USB-RS485, можно посмотреть текущие параметры модуля и поуправлять состоянием реле. Адрес модуля на шине RS485 задается в прошивке. Это не удобно, но места на плате под переключатель выбора адреса не было. Адрес может быть от 1 до 16. Для подключения модуля потребуется 4 провода (2 витые пары). Первая пара это питание, вторая это шина RS485. Подключаются модули к шине так:
Сервер С исполнительными устройствами разобрались. Теперь дело за сервером. Изначально я хотел применить в качестве сервера перепрошитый Wi-Fi роутер. Для этого был приобретен роутер TP-Link MR 3020. Воодушевившись описаниями того как люди лихо подключают к нему свои ардуины, чтобы пощелкать реле из браузера, я начал активно его ковырять. Но тут же всплыла масса трудностей. Во-первых, чтобы достучаться до USART роутера необходимо задействовать php скрипт. Этот скрипт при каждом запросе открывает USART порт, отправляет данные и закрывает порт. Это всё прекрасно работает когда вам нужно включить одно реле или лампочку. Но когда нужно 10 раз в секунду отправлять запрос, проверять ответ и считать контрольную сумму этот вариант не подходит ну никак! Много вопросов есть на форумах где люди слезно спрашивают, как сделать, чтобы порт не закрывался после каждого запроса. Но в ответ идут сплошные костыли. Нормального решения нет т.к. php исполняется на сервере и если сервер будет держать порт открытым он просто будет висеть. И не будет обрабатывать другие запросы. И придумал: И даже уместил в корпусе: Убогий web интерфейс который приходится часто видеть на просторах Интернета, меня категорически не устраивал, поэтому я сделал свой: Написание прошивки для такого сервера задача далеко не тривиальная, как мне показалось на первый взгляд. Нужно хранить названия всех переменных и динамически подставлять их в ответ, когда запрашивает браузер. При конфигурации сервера возникает необходимость добавлять новые модули, указывать их адрес, название и т.д. и т.п. А потом ещё эту конфигурацию как-то сохранить. При этом нужно ещё и опрашивать модули по заданным адресам. Прошивку писал в CooCox. Работает всё следующим образом: сервер подключается LAN кабелем к домашнему роутеру. Далее на любом устройстве (телефон, планшет, ноутбук) нужно перейти в браузере по адресу 192.168.1.25 и мы попадаем на страницу web интерфейса. Где можем наблюдать текущие параметры и управлять освещением. Страница раз в секунду делает AJAX запрос на сервер, который отвечает на запрос и передает параметры в формате JSON. Обновление параметров происходит без перезагрузки страницы. Видео на этапе отладки: Вэб страница автоматически масштабируется под размер экрана любого мобильного устройства благодаря мета тэгу viewport в HTML коде страницы:
Для проверки сервера после сборки я написал ещё одну программу, эмулирующую настенный выключатель. Т.е можно подключиться к серверу при помощи обычного USB-COM преобразователя до MAX485 и, меняя значения температуры или влажности, наблюдать за их изменением в вэб интерфейсе: Собирать настенный модуль в железе для этого не требуется. Что очень удобно на этапе сборки непосредственно сервера. Мысли вслух По сути получившаяся система это не умный дом. Она же сама ничего не делает. Это централизованное управление освещением и считывание показаний. Преимущество такого модульного подхода в том, что не надо менять штатную проводку в стенах. Достаточно подвести к каждому выключателю витую пару. И в случае переезда или выхода из строя какого либо модуля – достаточно просто заменить его на самый обычный выключатель. В системах, построенных на промышленных ПЛК (программируемый логический контроллер) Siemens, Beckhoff концепция иная. Там ставится огромный шкаф автоматики с кучей реле и уже от них тянутся провода к каждому светильнику и к каждому выключателю. При этом требуется капитальная переделка всей проводки. По поводу витой пары к каждому выключателю: она должна быть. Построить умный дом и вообще ничего не переделывать не получится. Приступать к строительству подобной системы желательно во время ремонта. Беспроводную связь между модулями я не рассматривал в принципе. Всё должно быть надежно. К тому же даже в беспроводном случае надо как-то обеспечивать питание для модуля. А менять батарейки я не хочу. Система запитывается через понижающий трансформатор 220В/9В. Это обеспечивает гальваническую развязку. И в первичной и во вторичной обмотке трансформатора установлены предохранители.
Что я не успел ещё реализовать: Подводя итог, хочу сказать, что поставленной цели я достиг. Система работает. Конструкция доступна для повторения. Любой желающий может её собрать, сделать это очень бюджетно и гордо именовать эту систему «умный дом». В исходниках доступен шаблон сервера на основе которого можно сконфигурировать свои «комнаты».
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |