Камера с управлением реле

Сверхдешёвая камера с управлением — своими руками


В качестве преамбулы скажу, что поскольку, подобная статья уже была, я по-началу и не собирался писать о камере на хабр.
Камера была сделана, просто ради интереса, тренировки навыков и отработки технологии удалённого управления физическими объектами.
Немного позже использовал эту систему как наглядный пример, сопровождающий обзор, на другом ресурсе (а фактически, в качестве чита что-бы подтянуть голоса). Это был настоящий бета-тест, который выявил кучу недоработок. За это огромное спасибо всем неравнодушным, помогавшим кто советом, а кто и куском кода.

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

Вот это всё и сподвигло меня на статью. А чтобы не повторюшничать, я и решил заостриться на стоимости, т.к. у автора предыдущего топика на эту тему, насколько я помню, итоговая стоимость вылилась во что-то в районе 5000р.

О том какова стоимость моей поделки: читаем ниже.

Итак, «как корабль назовешь, так он и поплывет», раз написал заголовок про дешевизну — буду соответствовать прозой, так что, детали — потом, а сперва о стоимости.

Пройдём по ценам*

* все цены даны со скидками. О скидках — отдельно, пожже.

Необходимый набор:

  • Arduino Uno (или nano) — 15.29$
  • Сервопривод (рулевая машинка) SG90 2х2.37$ = 4.74$
  • Вебкамера 3.01$

Итого: 23.04$ (примерно 750р, на данный момент)

Дополнительный набор (ленивости + плюшки):

  • Экран от Nokia 5110 — 250р (в комплекте с самой Нокией и блоком питания, куплено пару лет назад, будем считать, что именно для этой цели, реально можно найти уже вдвое дешевле, или вообще на халяву)
  • MegaShield v4 к Arduino — 5.86$
  • Проводки-коннекторы — 2.86$ (40 штук за эту цену, реально использовано 7)
  • Сверхяркий сверхсиний сверхтодиод для подсветки экрана — 5р/шт (лучше 4шт., у меня сделано неправильно)

Итого: примерно 550р

О реализации

Всё делалось с нуля. Повторять то, что уже было — я не стал, во-первых из соображений тренировки, а во-вторых Ethernet-модуля у меня на тот момент не было, я решил что это всё слишком сложно (там был завязан MySQL) и это решение мне однозначно не подойдёт.

О задачах
Задачи я себе обозначил следующие:

  • Видеть картинку/видео
  • Иметь возможность управлять камерой
  • Иметь возможность управлять размером и качеством видео или картинки, причём не «уже на стороне клиента», а «ещё на стороне сервера, по команде клиента». Такая необходимость возникла из-за того что мне не везде доступен «большой и широкий интырнет»
  • Обеспечивать приемлемую «реалтаймовость»
  • Иметь задел на будущее — управление нагрузкой 220В и т.д. Собственно ради этого всё и затевалось, т.к. готовые решения либо жутко дороги, либо такой возможности не предоставляют.

О проблемах
В ходе реализации возникли вопросы вот такого плана:

  • Видео либо грузит процессор в случает показа на несколько пользователей, либо даёт задержку 5-10, т.е. не обеспечивает «реалтаймовость», из-за чего нельзя сразу определить адекватность и вообще работоспособность управления
  • Использование сервиса трансляций, хотя и сильно разгружает сервер в случае большого онлайна, не обеспечивает необходимую надёжность, и, опять же, даёт задержку
  • Специальный сервер для трансляции видеопотока требует определённых навыков, которых у меня пока что нет
  • Использование отображения путём смены картинок не обеспечивает высокий fps, а также постоянно обращается к жёсткому диску, что, при большом количестве пользователей, может вызывать лаги картинки не из-за загрузки процессора, а именно из-за обращения к диску
Читайте также:  Встречное включение обмоток реле

О решениях

  • Решено использовать в качестве отображения — картинки
  • Для исключения жёсткого диска из процесса выдачи картинок установлен RamDisk, на который дважды в секунду «ложится» изображение с вебкамеры
  • Для выдачи картинки решено использовать php и gdlib
  • Обновление картинки инициируется клиентом посредством javascript и ajax, и происходит без обновления самой странички

Довольно лирики!

Как выглядит

Выглядит всё более чем скромно

Ардуина, если кто не видел

Мегашилд с проводками

«Сэндвич» в профиль

«Сэндвич» анфас

LCDшка

Она же вид сзади (пины и кондёр)

В сборе

В сборе 2

Колхоз — система проводков и верёвочек (крепление камеры)



Куда же без него

Как устроено аппаратно

Вебкамера подлючена по USB к компьютеру.
Arduino тоже подключена к компьютеру по USB.
Все внешние устройства, ввиду исключительно малого потребления тока, подключены напрямую к Arduino, работает круглосуточно уже полтора месяца, с онлайном 10 пользователей в момент наименьшей нагрузки.

Как работает программно

На стороне клиента чистый веб-интерфейс, без всяких плагинов и примочек. Только html, css, и javascript (+ajax).

На стороне сервера

  • Сам сервер — Apache
  • Обработчик скриптов — php
  • Приём картинок с камеры — любая самая простая доступная, бесплатная или самопальная программа для сохранения картинок с вебкамеры
  • Хранение картинки — RamDisk, утилита для создания дискового раздела в оперативной памяти (русскоязычная версия RAMDisk «Enterprise» бесплатна для локализованных систем)
  • Чтобы не прописывать в php прямых локальных путей, папка с картинкой смонтирована в www папку с помощью juction (бесплатная утилита Марка Руссиновича)
  • Передача управления из интернета к Arduino реализована с помощью программы-прокси, следующим образом: php скрипт создаёт UDP сокет и отправляет датаграмму на определённый порт, далее программа-прокси слушает этот этот порт и принимает приходящие на него сообщения и отправляет их на COM-порт Arduino (можно даже без обработки). Выбор UDP вызван исключительно для упрощения системы, UDP не требует никаких подтверждений и проверок о доставке-отправке ни со стороны клиента, ни со стороны сервера.

На стороне Arduino

  • Сама (почему «сама»? потому что «плата») Arduino
  • Скетч внутри неё — стандартные примеры из штатного набора arduino-0022 servo и serial + найденная на просторах интернета библиотека для дисплея, доработанная до приемлемого вида (в плане кириллицы и латиницы одновременно)
  • На данный момент плюсом стоит мегашилд, чисто из-за удобства и культурного вида — в этом варианте я не спаял ни одного проводка (за исключением платы к дисплею)

Система выдержала все нашествия и рейды, а так же онлайн более 120 пользователей.
Были случаи отказа управления, которые случались из-за моих недоработок в программе-прокси, в частности из-за недостаточной обработки ошибок, в то время как програмная часть со стороны Апача и Ардуино держалась достойно.

Будьте внимательны к мелочам

Хочу отметить проблемы с программной частью которые случались из-за собственной невнимательности/неосведомлённости/ненаблюдательности:

  • Первое с чем я серьёзно мучался: Arduino принимает из отправленной на её виртуальный COM-порт строки отдельно первый байт и отдельно всё остальное. Какие изощрения я только не пробовал — и с массивами и с кучей проверок… Хоть ты убейся. Решение проблемы? Пришло неожиданно и внезапно, в моментк огда я об этом и не думал: Sleep 2 после чтения каждого байта. ВСЁ!
  • Вторая проблема — серьёзная нагрузка на сервер, казалось бы, из ничего, возникла потому, что обновление картинки было сделано по таймеру, не дожидаясь собственно факта загрузки картинки (или ошибки загрузки). Таком образом отсылалась куча «лишних» запросов.
  • Третье: FireFox оказался самым правильным и капризным браузером, и заставил меня учиться писать валидный код. Так например, событие OnClick по элементу Option работать не должно. А оно работет, везде кроме огнелиса.
  • Четвёртая, совершенно не явная и редко всплывающая: периодически картинка «ломалась». Как выяснилось, это происходило в момент когда файл был занят при записи. Т.е. проверка file_exists() проходила, а файл оставался залоченным. Не помогла и проверка is_writable(). Пришлось организовывать цикл по наличию ошибки и внутри него отрабатывать чтение файла «до победного конца».
Читайте также:  Реле топливного насоса рено симбол

Оставшиеся недоработки

Есть и такие.

  • Во-первых, это описанные в каментах «левые» символы иногда появляющиеся в конце сообщения на экране. На самом деле это команды управления. Уши этого бага растут из того что если активно спамить или жать кнопки, буфер ком-порта не успевает полностью прочитаться Ардуиной и последующие сообщения валятся в конец буфера. Решение есть, но пока не сделано.
  • Во-вторых, это периодическое падение UDP-сокета в программе прокси при большом онлайне. В чём причина — не знаю. Проявляется не сразу. Умирает и не «откисает». Помогает закрытие сокета и бинд по-новой. Возможно, виноват кривой видовский winsock.ocx. Переписывать это дело на API в бейсике, как-то лень. Пока одним из «топорных» решений вижу сброс и ребинд сокета по таймеру, каждые, скажем, полчаса.

О скидках

Общеизвестно, что в Китае — дешевле. Главное знать места, где именно дешевле, и как добыть дополнительную скидку.
Тут смысла писать нет — слишком большой объём текста с картинками, к тому же известный большинству.
Поэтому дабы не провоцировать ярых противников борьбы со спамом и прочим «реферальством», отмечу необходимый минимум — это скидка 15% на BiC, складывающаяся из одноразового купона на 10% и скидки за первую покупку 5% при вводе рекомендателя + хинт, как использовать эту систему неоднократно.
Все заинтересовавшиеся, могут ознакомиться с полной информацией по ссылке на страничке с, собственно, самой камерой.

Ссылки

Камера, работающий экземпляр, для тех кто ещё не видел и не наигрался
Топик, в котором ссылку на камеру слили на хабр раньше времени
RAMDisk
juction
Исходники (упрощённые, во избежание) клиентской части, серверной (php) и программы web-arduino-прокси (VB 6.0)

Apache, php, либо какие-то комбинированые сборки и т.д. — на свой вкус.

Источник

Принцип работы и схема подключения тревожных входов/выходов на камерах TRASSIR/ActivCam

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

На камерах Trassir/ActiveCam есть два типа управления тревожными выходами:

  • активное напряжение между контактами «OUT» и «GND»
  • сухой контакт

Подключение камер с активным тревожным выходом

Список моделей камер, относящихся к данному типу тревожного выхода:

TR-D2123IR6v4 TR-D9251WDIR3 TR-D9151IR2 TR-D1250WD TR-D2251WDIR4 TR-D2253WDIR7 TR-D4251WDIR2
TR-D8251WDIR3 TR-D2252WDZIR4 TR-D2253WDZIR7 TR-D3253WDZIR3 TR-D2123IR6v6 TR-D2222WDZIR4 TR-D2223WDZIR7
TR-D2224WDZIR7 TR-D3223WDZIR3 TR-D2153IR6 TR-D2221WDC TR-D2221WDCL4 TR-D2221WDIR4 TR-D2223WDIR7
TR-D4221WDIR2 TR-D8221WDC TR-D8221WDCL3 TR-D8221WDIR3 TR-D9161IR2 AC-D9161IR2 TR-D6224IR10
TR-D6254 TR-D6254IR15 TR-D2163IR6 TR-D2183IR6 TR-D2123IR6v3 TR-D1140 AC-D1140
AC-D2143IR3 TR-D2143IR3 TR-D9141IR2 AC-D9141IR2 TR-D1120WD TR-D2123WDIR6 AC-D2123IR3v2
TR-D2123IR3v2 AC-D2163IR
Читайте также:  Реле бензонасоса соната сириус

Принцип работы активного тревожного выхода:
В момент сработки тревожного события (детекция движения, саботаж, распознавание номеров и т.п.) на контактах выхода камеры(OUT) и на земле(GND) возникает напряжение равное 3.3 V и слабый электрический ток равный 3 mА . (см. рис.1)

Рис.1 Контакты тревожного выхода OUT и GND

Сложно подобрать реле, которое будет способно замыкаться при столь слабом электрическом токе, в качестве альтернативы можно использовать релейные модули, которые способны замыкаться при таких вольт-амперных характеристиках камеры.
Рассмотрим в качестве примера релейный модуль SR0039-12-1L-BOX. (см. рис.2)

Рис.2 Релейный модуль SR0039-12-1L-BOX

Схема подключения активного тревожного выхода к релейному модулю:
Подключается тревожный выход камеры к релейному модулю следующим образом (рис.3):
1. Контакт камеры «OUT» подключается к контакту релейного модуля «IN».
2. Контакт камеры «GND» подключается к контакту релейного модуль «GND».

Рис.3 Схема подключения тревожного выхода к релейному модулю

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

Модуль в свою очередь будет замыкать силовую цепь, в которую подключается любой исполнительный элемент (шлагбаум, ворота, сигнализация и т.п.).

Подключение камер с сухим контактом

Список моделей камер, относящихся к данному типу тревожного выхода:

AC-D5124 TR-D5124 AC-D1120SWDv2 AC-D1140Sv2 AC-D2163WDZIR5 AC-D2183WDZIR5 AC-D3163WDZIR5 AC-D3183WDZIR5 AC-D2123WDZIR6 AC-D2143ZIR6
AC-D3123WDZIR3 AC-D3143ZIR3 AC-D6124IR15 AC-D6124v2 AC-D6144 AC-D6144IR10 AC-D5124v2 AC-D5024 AC-D6024 AC-D6124IR10
AC-D1120SWD AC-D1140S AC-D6124 AC-D6124IR10v2 AC-D1020v2 AC-D2023IR5v2 AC-D3023IR2v2 AC-D1020 AC-D2021IR3 AC-D2023IR5
AC-D3023IR2 AC-D3023VIR2 AC-D8021IR3 AC-D2053ZIR3 AC-D1050 AC-D2033IR2 AC-D2053ZIR3 AC-D6034 AC-D6034IR10

Принцип работы сухого контакта:
В случае с сухим контактом камера выступает в роли реле (ключа). То есть, когда камера получает событие, на которое должна произойти реакция, внутри камеры происходит замыкание контактов «OUT» и «GND» между собой.

Схема подключения тревожных выходов на камерах с сухим контактом:


Рис.4 Схема подключения тревожного выхода камеры с сухим контактом, с исполняющим элементом в роли лампочки

В данной схеме (рис.4) в качестве исполнительного элемента используется лампочка. Когда камера детектирует событие, внутри камеры происходит замыкание между контактами «OUT» и «GND», в следствие чего на исполнительный элемент подается напряжение от блока питания.
В качестве исполнительного сегмента могут использоваться любые другие элементы, такие как: сирена; шлагбаум; эл. ворота; лампочка и т.п.

Тревожные входы

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

В пассивных датчиках (например геркон) не требуется дополнительного питания, и соответственно, датчики такого типа подключаются сразу одним контактом к контакту камеры » IN«, а другим контактом к контакту камеры » GND«.

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

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

Источник

Оцените статью
Adblock
detector