Недавно на сайте ОЭФ я публиковал информацию об исследовании раздела жёсткого диска восьмиканального видеорегистратора для аналоговых видеокамер.
Отмечу, что видеорегистратор позволяет не только организовывать многоканальную видеозапись с камер видеонаблюдения, но также и управлять данными видеокамерами определённым образом. Управление можно осуществлять как с кнопок видеорегистратора, так и удалённо, с помощью веб-интерфейса или мобильного приложения. Управление камерой предусматривает, прежде всего, регулировку таких параметров, как зум, фокусировка, диафрагма. Как следствие, камера должна быть оборудована соответствующе. Камеры, предусматривающие управление, стоят по цене значительно дороже обычных. Кроме того, есть возможность управлять вращением камеры в двух плоскостях, если последняя это предусматривает.
Рис.1 Интерфейс управления из приложения TMEye.
Управление осуществляется по протоколу PELCO-D. Физический уровень протокола идентичен RS-232 или RS-485. Последний как раз и применяется в видеорегистраторах и камерах. Все видеокамеры, которые предусматривают управление, совместно с видеорегистратором соединяются параллельно по RS-485, образуя сеть. У каждой камеры есть свой уникальный адрес, который прописывается как в настройках камеры, так и в настройках каналов видеорегистратора.
Большинство камер не обладают функцией управления, а если и обладают, то управление поддерживается ограниченным числом узлов. Во всяком случае, мне ни разу не встречались видеокамеры с функцией управления диафрагмой.
Изучив особенности протокола управления PELCO-D, мне пришла идея реализовать устройство, которое будет подключаться к данной сети RS-485 и будет способно коммутировать нагрузки по определённой команде с видеорегистратора. В частности, задача стала следующая. При поступлении команды «открыть диафрагму» на конкретную камеру (по её адресу) нужно включить свет в той комнате (или в том месте), где эта камера установлена. Аналогично, при команде «закрыть диафрагму» – выключить свет.
Рис.2 Необходимые данные из протокола PELCO-D.
Оказалось, данная задача решается относительно просто. В состав электросхемы устройства входит микроконтроллер (у меня был ATtiny2313), микросхема MAX485 для согласования c UART, транзисторные ключи (у меня набор на ULN2803) и электромагнитные реле. Последние можно установить в распределительной коробке электропроводки параллельно цепи выключателя.
Алгоритм программы микроконтроллера сводится к приёму байт PELCO-D по UART, которые формирует видеорегистратор при нажатии на кнопки управления, а также обработка этих байт, согласно протоколу и поставленной задаче.
Ниже представлены фрагменты исходного кода.
Проект я составлял в среде разработки CVAVR, используя встроенный мастер формирования первоначального кода. В этом мастере, кроме необходимой конфигурации портов, во вкладке UART я задал приём с использованием прерывания и буфера на 32 байта. Функция извлечения из этого буфера получило название getchar() совместно с индексом rx_counter.
Рассматривая руководство на протокол PELCO-D, можно увидеть, что посылка (сообщение) управления состоит из 7 байт. Первый байт всегда равен 255, последний байт – контрольная сумма пяти байтов (со второго по шестой). Второй байт – адрес камеры, третий и четвёртый – байты с командными битами. Мне потребовался Бит1 и Бит2 третьего байта. Именно они отвечают за управление диафрагмой.
Рис.3 Фрагмент кода 1.
В исходном коде после начала бесконечного цикла while(1) стоит условие «Если контроллер принял первый байт» (строка 2). При выполнении этого условия происходит дальнейший анализ, а при невыполнении (строки 17-18) происходит подготовка к будущему приёму байт. Переменная sum отвечает за накопление суммы вышесказанных байтов (строка 12) для того, чтобы в дальнейшем сравнить эту сумму с байтом контрольной суммы (точнее их 8 младших разрядов). Переменная j – индекс массива P[], в который записываются принимаемые байты (строка 10). Незначительная, но достаточная задержка в 50мс в строке 7 служить для того, чтобы контроллер успел принять всю цепочку из 7 байт в буфер. Время задержки я выбирал с запасом, учитывая скорость приёма 9600 бод, как самая распространённая скорость UART. На эту скорость настроены камеры и видеорегистратор. Данная задержка позволяет избежать приём байтов, которые следуют не один за другим, а с паузами, чего не допустимо на практике во избежание путаницы. В строке 5 происходит анализ первого принятого байта на его равенство 255, как условие протокола.
Выше описанный блок программы успешно показал свои результаты без единого сбоя. После данного блока следуют блоки дальнейшего анализа байтов принятой цепочки. Ниже приведены первые два таких.
Рис.4 Фрагмент кода 2.
В строке 21 стоит условие «если байтов было принято 7, и контрольная сумма совпала». При невыполнении этого условия (что свидетельствует о не полном соответствии протокола) всё, что в него включено, игнорируется. А в него включены условия на включение и отключение того или иного реле. Для примера показаны включение и отключение реле, отвечающего за лампу освещения, соответствующий камере 1 (адрес камеры также равен 1). Условие на включение (строка 22) формируется так: «если адрес 1, и бит1 второго байта единица, и бит0 третьего байта ноль». Для анализа битов применены битовые маски. Анализируемые биты и байты – согласно протоколу PELCO-D и условию поставленной задачи. Они обведены красным цветом на рисунке с изображением протокола.
Рис.5 Вид устройства.
На рисунке 5 изображено устройство в готовом виде. На печатной плате, кроме вышеописанных компонентов, расположены четыре оптронных ключа в одной сборке (LTV847) для дополнительных целей. Выходы этих оптронов идут на штыревой разъём. Четыре из восьми выводов транзисторных ключей идут на клеммник (остальные четыре вывода идут на оптроны). Через этот клеммник подключаются выходные реле. Также через клеммник заводится питание на устройство и линия RS-485. Микросхема MAX485 в SMD корпусе и расположена на обратной стороне платы (со стороны дорожек).
Таким образом, простые программно-электронные решения позволяют решать довольно гибко те или иные задачи. С помощью описанного здесь самодельного устройства при соответствующей корректировке схемы и прошивки, принимая во внимание идею, можно также, например, коммутировать видеосигналы с видеокамер, число которых может превосходить число каналов видеорегистратора. При этом можно задействовать расширенные команды (Set Preset, Clear Preset, Go To Preset) протокола PELCO-D.
Рис.6 Расширенные команды PELCO-D.
|