Одним из основных элементов системы домашней автоматизации, структуру которой мы рассмотрели в четвертой части, является контроллер с набором цифровых входов и выходов, подключаемый к Raspberry Pi через интерфейс RS485. Таких контроллеров может быть несколько, в зависимости от количества точек контроля и управления и их территориального распределения. Если вам требуется автоматизировать небольшой объект, то может оказаться достаточно и одного контроллера, что и предполагает самая первая версия системы домашней автоматизации с использованием Raspberry Pi.
Рассмотрим принципиальную схему контроллера. Схема состоит из микроконтроллера 16F876A, драйвера интерфейса RS485 МАХ485, алфавитно-цифрового дисплея WH1602 на 2 строки и 16 символов и стабилизатора напряжения LM7805 (рис.1).
Рис. 1
Контроллер имеет четыре выхода (OUT1-OUT4), к которым через транзисторные ключи с исполнительными реле можно подключать различные нагрузки, четыре входа (INP1-INP4) для подключения датчиков с двумя состояниями (замкнут/разомкнут) и два цифровых входа для датчиков температуры и влажности DHT11 и DHT22. Два оставшихся свободных входа (INP5-INP6) в этой версии контроллера не используются.
Состояние входов и выходов контроллера, показания температуры и влажности, выводятся на дисплей (рис.2)
Рис. 2
В верхней строке дисплея отображаются показания температуры и влажности датчика DHT22 и состояние входов контроллера, в нижней - показания температуры и влажности датчика DHT11 и состояние выходов контроллера. Отображаемые символы состояний входов и выходов интуитивно понятны, например, на приведенном рисунке входы 1 и 3 замкнуты, 2 и 4 – разомкнуты, на выходах 1 и 3 низкий уровень (выключено), 2 и 4 – высокий (включено)
Так как в системе домашней автоматизации может быть несколько контроллеров, подключенных к шине RS485, то каждый контроллер должен иметь свой сетевой адрес. Адрес состоит из двухзначного числа в ASCII коде и хранится в последних двух ячейках EEPROM микроконтроллера (ячейка EF – десятки адреса, ячейка FF – единицы адреса). Так же в EEPROM (ячейка F8) хранится последнее установленное значение выходов контроллера. Если произойдет сброс микроконтроллера по сторожевому таймеру или каким-либо иным причинам, эта функция позволит вернуть выходы в состояние, в котором они находились до момента сброса.
Расположение ячеек EEPROM показано на рис.3. Здесь адрес контроллера установлен 02 (EF = 30, FF=32), на всех выходах контроллера по умолчанию низкий уровень (F8 = 00). Значения в EEPROM записываются на этапе прошивки микроконтроллера 16F876A.
Рис. 3
Для подключения UART Raspberry Pi к шине RS485 используется простой преобразователь, выполненный на двух транзисторах. Применение такого схемного решения позволило отказаться от отдельного выхода для управления приемопередатчиком драйвера МАХ485. Он переключается в режим передачи, только когда UART передает данные, остальное время МАХ485 находится в режиме приема.
Команда управления приемопередатчиком снимается с коллектора транзистора VT1. Транзистор VT2 необходим для «обратного инвертирования» передаваемых сигналов с выхода ТХ UART.
Помимо преобразования интерфейсов, данная схема выполняет функцию согласования уровней 3,3В UART Raspberry Pi с уровнями 5В микросхемы МАХ485. Транзисторы VT1 и VT2 подтягивают уровень на входе DI до 5В, а резистор R5 и стабилитрон VD1 ограничивают уровень с выхода R0 до 3,3В (рис.4).
Рис. 4
Преобразователь интерфейсов выполнен на небольшой монтажной плате, которая через разъем подключается к соответствующим выводам порта GPIO (TX, RX, +5B, GND) и витой парой соединяется с контроллером (рис.5).
Если вы выполнили рекомендации из предыдущих обзоров по настойке и конфигурированию Raspberry Pi, то у вас практически все готово для первого включения. Осталось сделать совсем немного. В директорию диска Raspberry Pi /home/pi/myproject/html с помощью программы WinSCP необходимо распаковать архив, содержащий Web-интерфейс панели управления. После распаковки в папке html должно появиться два файла – index.html и fon.jpg.
Соединив контролер с Raspberry Pi витой парой, и подав питание, можно приступать к тестированию. Для входа в панель управления требуется набрать сетевой адрес Web-сервера с номером порта (например, 192.168.1.8:8000) и ввести логин и пароль (webiopi/raspberry). После этого должна открыться страница с интерфейсом панели (рис.6).
Рис. 6
На панели управления и контроля отображается статус соединения Web сервера с контроллером, текущие дата и время, состояние входов контроллера, кнопки управления и состояние выходов контроллера, кнопки управления 4 выходами GPIO Raspberry Pi, значения температуры и влажности, получаемые от датчиков DHT11 и DHT22. Для более подробного знакомства с интерфейсом панели управления и контроля, смотрите видео в конце этого обзора.
Все надписи и обозначения на панели можно изменить. Для этого даже не требуется знание основ HTML и JavaScript, там все интуитивно понятно. Достаточно открыть файл index.html, например, встроенным редактором (клавиша F4), выполнить необходимые изменения, сохранить файл и перезапустить web-сервер командой:
sudo /etc/init.d/webiopi restart
Я намеренно не описываю используемый протокол обмена между Raspberry Pi и контроллером через RS485. Дело в том, что в последующем планируется немного его изменить в силу определенных причин. Ну а пока можете приступать к тестированию «пилотной» версии системы домашней автоматизации и высказывать на форуме свои вопросы, замечания и пожелания по ее дальнейшей модернизации.
P.S. В настоящее время схема контроллера несколько изменена. Рекомендуется при изготовлении контроллера пользоваться доработанной схемой.
Здравствуйте уважаемый друг . А можно всё же по подробней о протоколе обмена между Raspberry Pi и контроллером через RS485? Или будьте добры , дайте ссылку на информацию по этому вопросу .
Рис 4. VT2 передает только нулевое значение GPIO14, поскольку когда с GPIO14 идет 1, передача в MAX485 запрещается выходом VT1, то есть как минимум можно DI (4 нога MAX485) подать на землю и выкинуть R3 R4 VT2 - будет полный логический аналог исходной схемы. Хотя все-равно схема немного не верна. Нулевое состояние в линию передается драйвером (DE=1 и передача разрешена), а вот единичное состояние передается подпорками линий АВ, а не драйвером (DE=0 и передача запрещена - драйвер от линии отключен) - и эти подпорки к тому же должны где-то быть, и ставят их как правило на Мастере. Либо не ставить подпорок, но на момент передачи как 0 так и 1 выставлять DE=1 как и положено.
В Raspberry Pi на портах GPIO UART жестко привязан к определенным пинам (14 и 15), так что подключение в любом случае будет правильным.
Впрочем, исправить не проблема. Только боюсь, что это наоборот запутает ситуацию - например, одни начнут считать TXвыход адаптера, а другие - выход Raspberry. Уже сколько говорилось о подобной ситуации на форуме в ветке по сигнализации Microalarm, где обсуждалось подключение телефона к UART микроконтроллера, даже на схеме я стрелками направление сигналов указывал, все равно у многих осталось непонимание - одни считали обозначения RX и ТХ относительно телефона, другие - относительно микроконтроллера.
К сожалению печатку под этот контроллер я не делал, т.к. он предназначался в основном для тестирования системы. Поэтому собирал на монтажной плате (на видео это видно). А печатная плата разрабатывалась под это устройство - http://lock.3dn.ru/news....-09-122
P.S. Знания - дело наживное, главное что бы желание было